]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
EAP-AKA': Allow both AKA AKA' to be registed from eap_aka_prime.c
authorJouni Malinen <j@w1.fi>
Wed, 3 Dec 2008 17:59:52 +0000 (19:59 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 3 Dec 2008 17:59:52 +0000 (19:59 +0200)
This allows the same source code file to be shared for both methods. For
now, this is only in eap_aka_prime.c, but eventually, changes in
eap_aka_prime.c are likely to be merged into eap_aka.c at which point
the separate eap_aka_prime.c can be removed.

src/eap_peer/eap_aka_prime.c
src/eap_server/eap_aka_prime.c

index 544b0b8b105aeb6b5f80290fd73853dbf976b1ea..b3ff706b8c985909122a456d84c8c71cecb28df5 100644 (file)
@@ -100,10 +100,7 @@ static void * eap_aka_init(struct eap_sm *sm)
        if (data == NULL)
                return NULL;
 
-       if (1)
-               data->eap_method = EAP_TYPE_AKA_PRIME;
-       else
-               data->eap_method = EAP_TYPE_AKA;
+       data->eap_method = EAP_TYPE_AKA;
 
        eap_aka_state(data, CONTINUE);
        data->prev_id = -1;
@@ -114,6 +111,16 @@ static void * eap_aka_init(struct eap_sm *sm)
 }
 
 
+static void * eap_aka_prime_init(struct eap_sm *sm)
+{
+       struct eap_aka_data *data = eap_aka_init(sm);
+       if (data == NULL)
+               return NULL;
+       data->eap_method = EAP_TYPE_AKA_PRIME;
+       return data;
+}
+
+
 static void eap_aka_deinit(struct eap_sm *sm, void *priv)
 {
        struct eap_aka_data *data = priv;
@@ -1177,6 +1184,31 @@ int eap_peer_aka_prime_register(void)
        if (eap == NULL)
                return -1;
 
+       eap->init = eap_aka_prime_init;
+       eap->deinit = eap_aka_deinit;
+       eap->process = eap_aka_process;
+       eap->isKeyAvailable = eap_aka_isKeyAvailable;
+       eap->getKey = eap_aka_getKey;
+       eap->has_reauth_data = eap_aka_has_reauth_data;
+       eap->deinit_for_reauth = eap_aka_deinit_for_reauth;
+       eap->init_for_reauth = eap_aka_init_for_reauth;
+       eap->get_identity = eap_aka_get_identity;
+       eap->get_emsk = eap_aka_get_emsk;
+
+       ret = eap_peer_method_register(eap);
+       if (ret)
+               eap_peer_method_free(eap);
+
+#ifdef EAP_AKA_PRIME_BOTH
+       if (ret)
+               return ret;
+
+       eap = eap_peer_method_alloc(EAP_PEER_METHOD_INTERFACE_VERSION,
+                                   EAP_VENDOR_IETF, EAP_TYPE_AKA,
+                                   "AKA");
+       if (eap == NULL)
+               return -1;
+
        eap->init = eap_aka_init;
        eap->deinit = eap_aka_deinit;
        eap->process = eap_aka_process;
@@ -1191,5 +1223,7 @@ int eap_peer_aka_prime_register(void)
        ret = eap_peer_method_register(eap);
        if (ret)
                eap_peer_method_free(eap);
+#endif /* EAP_AKA_PRIME_BOTH */
+
        return ret;
 }
index de50d3e56a395f7c2e841bc4d58f97b03052533f..17885764ede694f84a2d23470a8493f487445085 100644 (file)
@@ -91,6 +91,7 @@ static void eap_aka_state(struct eap_aka_data *data, int state)
 }
 
 
+#ifdef EAP_AKA_PRIME_BOTH
 static void * eap_aka_init(struct eap_sm *sm)
 {
        struct eap_aka_data *data;
@@ -104,10 +105,31 @@ static void * eap_aka_init(struct eap_sm *sm)
        if (data == NULL)
                return NULL;
 
-       if (1)
-               data->eap_method = EAP_TYPE_AKA_PRIME;
-       else
-               data->eap_method = EAP_TYPE_AKA;
+       data->eap_method = EAP_TYPE_AKA;
+
+       data->state = IDENTITY;
+       eap_aka_determine_identity(sm, data, 1, 0);
+       data->pending_id = -1;
+
+       return data;
+}
+#endif /* EAP_AKA_PRIME_BOTH */
+
+
+static void * eap_aka_prime_init(struct eap_sm *sm)
+{
+       struct eap_aka_data *data;
+
+       if (sm->eap_sim_db_priv == NULL) {
+               wpa_printf(MSG_WARNING, "EAP-AKA: eap_sim_db not configured");
+               return NULL;
+       }
+
+       data = os_zalloc(sizeof(*data));
+       if (data == NULL)
+               return NULL;
+
+       data->eap_method = EAP_TYPE_AKA_PRIME;
 
        data->state = IDENTITY;
        eap_aka_determine_identity(sm, data, 1, 0);
@@ -1109,6 +1131,30 @@ int eap_server_aka_prime_register(void)
        if (eap == NULL)
                return -1;
 
+       eap->init = eap_aka_prime_init;
+       eap->reset = eap_aka_reset;
+       eap->buildReq = eap_aka_buildReq;
+       eap->check = eap_aka_check;
+       eap->process = eap_aka_process;
+       eap->isDone = eap_aka_isDone;
+       eap->getKey = eap_aka_getKey;
+       eap->isSuccess = eap_aka_isSuccess;
+       eap->get_emsk = eap_aka_get_emsk;
+
+       ret = eap_server_method_register(eap);
+       if (ret)
+               eap_server_method_free(eap);
+
+#ifdef EAP_AKA_PRIME_BOTH
+       if (ret)
+               return ret;
+
+       eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
+                                     EAP_VENDOR_IETF, EAP_TYPE_AKA,
+                                     "AKA");
+       if (eap == NULL)
+               return -1;
+
        eap->init = eap_aka_init;
        eap->reset = eap_aka_reset;
        eap->buildReq = eap_aka_buildReq;
@@ -1122,5 +1168,7 @@ int eap_server_aka_prime_register(void)
        ret = eap_server_method_register(eap);
        if (ret)
                eap_server_method_free(eap);
+#endif /* EAP_AKA_PRIME_BOTH */
+
        return ret;
 }