diff options
author | Martin Willi <martin@revosec.ch> | 2011-12-21 10:53:05 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-03-20 17:31:30 +0100 |
commit | daee47ba466c96eca5accbb0cac737465915b4f8 (patch) | |
tree | 1f6cca8b425371fefb5e817a5966400842a31f19 /src | |
parent | 6379c679aedd4e61c01fed2689e60de484616bc4 (diff) | |
download | strongswan-daee47ba466c96eca5accbb0cac737465915b4f8.tar.bz2 strongswan-daee47ba466c96eca5accbb0cac737465915b4f8.tar.xz |
Send a delete for every CHILD_SA before deleting IKE_SA
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/ikev1/task_manager_v1.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/libcharon/sa/ikev1/task_manager_v1.c b/src/libcharon/sa/ikev1/task_manager_v1.c index f31f49783..da889be76 100644 --- a/src/libcharon/sa/ikev1/task_manager_v1.c +++ b/src/libcharon/sa/ikev1/task_manager_v1.c @@ -349,13 +349,13 @@ METHOD(task_manager_t, initiate, status_t, new_mid = TRUE; break; } - if (activate_task(this, TASK_ISAKMP_DELETE)) + if (activate_task(this, TASK_QUICK_DELETE)) { exchange = INFORMATIONAL_V1; new_mid = TRUE; break; } - if (activate_task(this, TASK_QUICK_DELETE)) + if (activate_task(this, TASK_ISAKMP_DELETE)) { exchange = INFORMATIONAL_V1; new_mid = TRUE; @@ -499,7 +499,7 @@ METHOD(task_manager_t, initiate, status_t, break; } } - return SUCCESS; + return initiate(this); } /** @@ -1075,6 +1075,18 @@ METHOD(task_manager_t, queue_ike_reauth, void, METHOD(task_manager_t, queue_ike_delete, void, private_task_manager_t *this) { + enumerator_t *enumerator; + child_sa_t *child_sa; + + enumerator = this->ike_sa->create_child_sa_enumerator(this->ike_sa); + while (enumerator->enumerate(enumerator, &child_sa)) + { + queue_task(this, (task_t*) + quick_delete_create(this->ike_sa, child_sa->get_protocol(child_sa), + child_sa->get_spi(child_sa, TRUE), FALSE)); + } + enumerator->destroy(enumerator); + queue_task(this, (task_t*)isakmp_delete_create(this->ike_sa, TRUE)); } |