EAP-SIM server: Require SIM/Start response to include identity

Since we always request an identity in the request, the response
has to include AT_IDENTITY. This allows the SIM/Start response
processing to be simplified a bit.

Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2012-09-01 18:56:35 +03:00
parent 336a46aeda
commit 15cfe2b40f

View file

@ -405,19 +405,34 @@ static void eap_sim_process_start(struct eap_sm *sm,
const u8 *identity; const u8 *identity;
size_t identity_len; size_t identity_len;
u8 ver_list[2]; u8 ver_list[2];
u8 *new_identity;
wpa_printf(MSG_DEBUG, "EAP-SIM: Receive start response"); wpa_printf(MSG_DEBUG, "EAP-SIM: Receive start response");
if (attr->identity) { /*
os_free(sm->identity); * We always request identity in SIM/Start, so the peer is required to
sm->identity = os_malloc(attr->identity_len); * have replied with one.
if (sm->identity) { */
os_memcpy(sm->identity, attr->identity, if (!attr->identity || attr->identity_len == 0) {
attr->identity_len); wpa_printf(MSG_DEBUG, "EAP-SIM: Peer did not provide any "
sm->identity_len = attr->identity_len; "identity");
} eap_sim_state(data, FAILURE);
return;
} }
new_identity = os_malloc(attr->identity_len);
if (new_identity == NULL) {
eap_sim_state(data, FAILURE);
return;
}
os_free(sm->identity);
sm->identity = new_identity;
os_memcpy(sm->identity, attr->identity, attr->identity_len);
sm->identity_len = attr->identity_len;
wpa_hexdump_ascii(MSG_DEBUG, "EAP-SIM: Identity",
sm->identity, sm->identity_len);
identity = NULL; identity = NULL;
identity_len = 0; identity_len = 0;
@ -453,9 +468,6 @@ static void eap_sim_process_start(struct eap_sm *sm,
return; return;
} }
wpa_hexdump_ascii(MSG_DEBUG, "EAP-SIM: Identity",
identity, identity_len);
if (data->reauth) { if (data->reauth) {
eap_sim_state(data, REAUTH); eap_sim_state(data, REAUTH);
return; return;