diff options
author | Martin Willi <martin@revosec.ch> | 2013-02-26 13:07:11 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-02-26 13:15:27 +0100 |
commit | d8a94c18c61a8a13b0e400a6f1daa977a43f716b (patch) | |
tree | 0d95fcc1d6606c09b43887b08c736128d3309081 | |
parent | cc787697b8f9cb2bc1480c8e43631e585bb28be7 (diff) | |
download | strongswan-d8a94c18c61a8a13b0e400a6f1daa977a43f716b.tar.bz2 strongswan-d8a94c18c61a8a13b0e400a6f1daa977a43f716b.tar.xz |
Apply a mutual EAP auth_cfg not before the EAP method completes
-rw-r--r-- | src/libcharon/sa/ikev2/authenticators/eap_authenticator.c | 10 | ||||
-rw-r--r-- | src/libcharon/sa/ikev2/tasks/ike_auth.c | 9 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/libcharon/sa/ikev2/authenticators/eap_authenticator.c b/src/libcharon/sa/ikev2/authenticators/eap_authenticator.c index aa0644033..b8359cc88 100644 --- a/src/libcharon/sa/ikev2/authenticators/eap_authenticator.c +++ b/src/libcharon/sa/ikev2/authenticators/eap_authenticator.c @@ -667,6 +667,16 @@ METHOD(authenticator_t, build_client, status_t, METHOD(authenticator_t, is_mutual, bool, private_eap_authenticator_t *this) { + if (this->method) + { + u_int32_t vendor; + + if (this->method->get_type(this->method, &vendor) != EAP_IDENTITY || + vendor != 0) + { + return this->method->is_mutual(this->method); + } + } /* we don't know yet, but insist on it after EAP is complete */ this->require_mutual = TRUE; return TRUE; diff --git a/src/libcharon/sa/ikev2/tasks/ike_auth.c b/src/libcharon/sa/ikev2/tasks/ike_auth.c index 970e38cf5..942f97cf5 100644 --- a/src/libcharon/sa/ikev2/tasks/ike_auth.c +++ b/src/libcharon/sa/ikev2/tasks/ike_auth.c @@ -980,7 +980,10 @@ METHOD(task_t, process_i, status_t, goto peer_auth_failed; } - apply_auth_cfg(this, FALSE); + if (!mutual_eap) + { + apply_auth_cfg(this, FALSE); + } } if (this->my_auth) @@ -989,6 +992,10 @@ METHOD(task_t, process_i, status_t, { case SUCCESS: apply_auth_cfg(this, TRUE); + if (this->my_auth->is_mutual(this->my_auth)) + { + apply_auth_cfg(this, FALSE); + } this->my_auth->destroy(this->my_auth); this->my_auth = NULL; this->do_another_auth = do_another_auth(this); |