diff options
author | Tobias Brunner <tobias@strongswan.org> | 2016-09-19 11:16:06 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2017-02-08 15:03:25 +0100 |
commit | fb57904cbffefcfdacedac59676115062d77c37a (patch) | |
tree | b6c3c96f76be87e696b5c4c86588e5934481b329 /src | |
parent | 3abc104f7e8cbe6b7d98359d05d3c6249c30a58c (diff) | |
download | strongswan-fb57904cbffefcfdacedac59676115062d77c37a.tar.bz2 strongswan-fb57904cbffefcfdacedac59676115062d77c37a.tar.xz |
ikev2: Don't cache response to MID sync request
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/ikev2/task_manager_v2.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/libcharon/sa/ikev2/task_manager_v2.c b/src/libcharon/sa/ikev2/task_manager_v2.c index ede908c72..debfe23fa 100644 --- a/src/libcharon/sa/ikev2/task_manager_v2.c +++ b/src/libcharon/sa/ikev2/task_manager_v2.c @@ -818,7 +818,7 @@ static status_t build_response(private_task_manager_t *this, message_t *request) task_t *task; message_t *message; host_t *me, *other; - bool delete = FALSE, hook = FALSE; + bool delete = FALSE, hook = FALSE, mid_sync = FALSE; ike_sa_id_t *id = NULL; uint64_t responder_spi = 0; bool result; @@ -837,6 +837,10 @@ static status_t build_response(private_task_manager_t *this, message_t *request) enumerator = array_create_enumerator(this->passive_tasks); while (enumerator->enumerate(enumerator, (void*)&task)) { + if (task->get_type(task) == TASK_IKE_MID_SYNC) + { + mid_sync = TRUE; + } switch (task->build(task, message)) { case SUCCESS: @@ -909,6 +913,12 @@ static status_t build_response(private_task_manager_t *this, message_t *request) } return DESTROY_ME; } + else if (mid_sync) + { + /* we don't want to resend messages to sync MIDs if requests with the + * previous MID arrive */ + clear_packets(this->responding.packets); + } array_compress(this->passive_tasks); |