Look for an XAuth authentication config both in the first and the second round
authorMartin Willi <martin@revosec.ch>
Wed, 14 Dec 2011 08:44:59 +0000 (09:44 +0100)
committerMartin Willi <martin@revosec.ch>
Tue, 20 Mar 2012 16:31:21 +0000 (17:31 +0100)
src/libcharon/sa/tasks/xauth.c

index 4fd896e..58e127a 100644 (file)
@@ -93,11 +93,15 @@ static xauth_method_t *load_method(ike_sa_t *ike_sa, bool initiator)
        peer_cfg = ike_sa->get_peer_cfg(ike_sa);
        enumerator = peer_cfg->create_auth_cfg_enumerator(peer_cfg, !initiator);
        if (!enumerator->enumerate(enumerator, &auth) ||
-               !enumerator->enumerate(enumerator, &auth))
+               (uintptr_t)auth->get(auth, AUTH_RULE_AUTH_CLASS) != AUTH_CLASS_XAUTH)
        {
-               DBG1(DBG_CFG, "no second authentication round found for XAuth");
-               enumerator->destroy(enumerator);
-               return NULL;
+               if (!enumerator->enumerate(enumerator, &auth) ||
+                       (uintptr_t)auth->get(auth, AUTH_RULE_AUTH_CLASS) != AUTH_CLASS_XAUTH)
+               {
+                       DBG1(DBG_CFG, "no XAuth authentication round found");
+                       enumerator->destroy(enumerator);
+                       return NULL;
+               }
        }
        name = auth->get(auth, AUTH_RULE_XAUTH_BACKEND);
        enumerator->destroy(enumerator);