aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2013-04-03 15:56:26 +0200
committerMartin Willi <martin@revosec.ch>2013-04-03 15:56:26 +0200
commitac48d9e458699aa68f774aaa3168533cf42f95b0 (patch)
treee152edd37605c1256baa146189d97f6b9ea18ebb /src
parent7f4f1e8249969640d4d8389800d7ff798015ecdc (diff)
downloadstrongswan-ac48d9e458699aa68f774aaa3168533cf42f95b0.tar.bz2
strongswan-ac48d9e458699aa68f774aaa3168533cf42f95b0.tar.xz
Reuse reqid of an existing Quick Mode, even if it has been rekeyed
If two peers rekey Quick Modes at the same time, the original Quick Mode is in REKEYING state and hence the requid is not reused. This is required though, as two identical policies won't work if they have different requids.
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/sa/ikev1/tasks/quick_mode.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libcharon/sa/ikev1/tasks/quick_mode.c b/src/libcharon/sa/ikev1/tasks/quick_mode.c
index afdff8cf9..bb50ca9ca 100644
--- a/src/libcharon/sa/ikev1/tasks/quick_mode.c
+++ b/src/libcharon/sa/ikev1/tasks/quick_mode.c
@@ -925,7 +925,8 @@ static void check_for_rekeyed_child(private_quick_mode_t *this)
enumerator = this->ike_sa->create_child_sa_enumerator(this->ike_sa);
while (this->reqid == 0 && enumerator->enumerate(enumerator, &child_sa))
{
- if (child_sa->get_state(child_sa) == CHILD_INSTALLED &&
+ if ((child_sa->get_state(child_sa) == CHILD_INSTALLED ||
+ child_sa->get_state(child_sa) == CHILD_REKEYING) &&
streq(child_sa->get_name(child_sa),
this->config->get_name(this->config)))
{