aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2015-04-30 12:57:19 +0200
committerTobias Brunner <tobias@strongswan.org>2016-03-04 16:03:00 +0100
commit9282bc39a7bbd0e6a00e24539b1d21565646bb97 (patch)
tree4391a29e15d7e444ebce50149586e730367469a3 /src
parentc6ebd0332ec01ab50b4046874d111c942fc59b55 (diff)
downloadstrongswan-9282bc39a7bbd0e6a00e24539b1d21565646bb97.tar.bz2
strongswan-9282bc39a7bbd0e6a00e24539b1d21565646bb97.tar.xz
ike-init: Ignore notifies related to redirects during rekeying
Also don't query redirect providers in this case.
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/sa/ikev2/tasks/ike_init.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/libcharon/sa/ikev2/tasks/ike_init.c b/src/libcharon/sa/ikev2/tasks/ike_init.c
index b5a58dfd7..572c997cb 100644
--- a/src/libcharon/sa/ikev2/tasks/ike_init.c
+++ b/src/libcharon/sa/ikev2/tasks/ike_init.c
@@ -437,8 +437,11 @@ static void process_payloads(private_ike_init_t *this, message_t *message)
/* fall-through */
}
case REDIRECT_SUPPORTED:
- this->ike_sa->enable_extension(this->ike_sa,
- EXT_IKE_REDIRECTION);
+ if (!this->old_sa)
+ {
+ this->ike_sa->enable_extension(this->ike_sa,
+ EXT_IKE_REDIRECTION);
+ }
break;
default:
/* other notifies are handled elsewhere */
@@ -612,7 +615,8 @@ METHOD(task_t, build_r, status_t,
this->ike_sa->set_proposal(this->ike_sa, this->proposal);
/* check if we'd have to redirect the client */
- if (this->ike_sa->supports_extension(this->ike_sa, EXT_IKE_REDIRECTION) &&
+ if (!this->old_sa &&
+ this->ike_sa->supports_extension(this->ike_sa, EXT_IKE_REDIRECTION) &&
charon->redirect->redirect_on_init(charon->redirect, this->ike_sa,
&gateway))
{
@@ -750,6 +754,12 @@ METHOD(task_t, process_i, status_t,
chunk_t data, nonce = chunk_empty;
status_t status = FAILED;
+ if (this->old_sa)
+ {
+ DBG1(DBG_IKE, "received REDIRECT notify during rekeying"
+ ", ignored");
+ break;
+ }
data = notify->get_notification_data(notify);
gateway = redirect_data_parse(data, &nonce);
enumerator->destroy(enumerator);