aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2013-02-26 13:07:11 +0100
committerMartin Willi <martin@revosec.ch>2013-02-26 13:15:27 +0100
commitd8a94c18c61a8a13b0e400a6f1daa977a43f716b (patch)
tree0d95fcc1d6606c09b43887b08c736128d3309081
parentcc787697b8f9cb2bc1480c8e43631e585bb28be7 (diff)
downloadstrongswan-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.c10
-rw-r--r--src/libcharon/sa/ikev2/tasks/ike_auth.c9
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);