Adopt children after syncing a rekeyed IKEv1 SA
authorMartin Willi <martin@revosec.ch>
Fri, 20 Jan 2012 12:42:37 +0000 (13:42 +0100)
committerMartin Willi <martin@revosec.ch>
Tue, 20 Mar 2012 16:31:38 +0000 (17:31 +0100)
src/libcharon/plugins/ha/ha_dispatcher.c
src/libcharon/processing/jobs/adopt_children_job.c
src/libcharon/sa/ike_sa_manager.c

index 7ce23b3..328b923 100644 (file)
@@ -19,6 +19,7 @@
 #include <sa/ikev2/keymat_v2.h>
 #include <sa/ikev1/keymat_v1.h>
 #include <processing/jobs/callback_job.h>
+#include <processing/jobs/adopt_children_job.h>
 
 typedef struct private_ha_dispatcher_t private_ha_dispatcher_t;
 typedef struct ha_diffie_hellman_t ha_diffie_hellman_t;
@@ -427,6 +428,11 @@ static void process_ike_update(private_ha_dispatcher_t *this,
                                }
                        }
                }
+               if (ike_sa->get_version(ike_sa) == IKEV1)
+               {
+                       lib->processor->queue_job(lib->processor, (job_t*)
+                                                       adopt_children_job_create(ike_sa->get_id(ike_sa)));
+               }
                this->cache->cache(this->cache, ike_sa, message);
                charon->ike_sa_manager->checkin(charon->ike_sa_manager, ike_sa);
        }
index 744b7f9..93da960 100644 (file)
@@ -88,7 +88,8 @@ METHOD(job_t, execute, void,
                        ike_sa = charon->ike_sa_manager->checkout(charon->ike_sa_manager, id);
                        if (ike_sa)
                        {
-                               if (ike_sa->get_state(ike_sa) == IKE_ESTABLISHED &&
+                               if ((ike_sa->get_state(ike_sa) == IKE_ESTABLISHED ||
+                                        ike_sa->get_state(ike_sa) == IKE_PASSIVE) &&
                                        me->equals(me, ike_sa->get_my_host(ike_sa)) &&
                                        other->equals(other, ike_sa->get_other_host(ike_sa)) &&
                                        xauth->equals(xauth, ike_sa->get_other_eap_id(ike_sa)) &&
index b617a13..455d538 100644 (file)
@@ -1375,7 +1375,8 @@ METHOD(ike_sa_manager_t, checkin, void,
        }
 
        /* apply identities for duplicate test */
-       if (ike_sa->get_state(ike_sa) == IKE_ESTABLISHED &&
+       if ((ike_sa->get_state(ike_sa) == IKE_ESTABLISHED ||
+                ike_sa->get_state(ike_sa) == IKE_PASSIVE) &&
                entry->my_id == NULL && entry->other_id == NULL)
        {
                if (ike_sa->get_version(ike_sa) == IKEV1)