EAP-AKA': Allow both AKA AKA' to be registed from eap_aka_prime.c

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.
This commit is contained in:
Jouni Malinen 2008-12-03 19:59:52 +02:00
parent a17322c345
commit 73d48dc4b4
2 changed files with 90 additions and 8 deletions

View 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;
}

View 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;
}