From 2c082ebf91b73bb4a8df950f692af1485d4e82c9 Mon Sep 17 00:00:00 2001 From: Luke Howard Date: Wed, 2 Mar 2011 10:59:39 +1100 Subject: [PATCH] Use libeap API for constructing EAP identity request packet --- mech_eap/accept_sec_context.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/mech_eap/accept_sec_context.c b/mech_eap/accept_sec_context.c index bfb6a70..e35ce5f 100644 --- a/mech_eap/accept_sec_context.c +++ b/mech_eap/accept_sec_context.c @@ -130,10 +130,7 @@ eapGssSmAcceptIdentity(OM_uint32 *minor, gss_buffer_t outputToken) { OM_uint32 major; - union { - struct eap_hdr pdu; - unsigned char data[5]; - } pkt; + struct wpabuf *reqData; gss_buffer_desc pktBuffer; if (inputToken != GSS_C_NO_BUFFER && inputToken->length != 0) { @@ -149,13 +146,15 @@ eapGssSmAcceptIdentity(OM_uint32 *minor, return major; } - pkt.pdu.code = EAP_CODE_REQUEST; - pkt.pdu.identifier = 0; - pkt.pdu.length = htons(sizeof(pkt.data)); - pkt.data[4] = EAP_TYPE_IDENTITY; + reqData = eap_msg_alloc(EAP_VENDOR_IETF, EAP_TYPE_IDENTITY, 0, + EAP_CODE_REQUEST, 0); + if (reqData == NULL) { + *minor = ENOMEM; + return GSS_S_FAILURE; + } - pktBuffer.length = sizeof(pkt.data); - pktBuffer.value = pkt.data; + pktBuffer.length = wpabuf_len(reqData); + pktBuffer.value = (void *)wpabuf_head(reqData); major = duplicateBuffer(minor, &pktBuffer, outputToken); if (GSS_ERROR(major)) @@ -163,6 +162,8 @@ eapGssSmAcceptIdentity(OM_uint32 *minor, ctx->state = GSSEAP_STATE_AUTHENTICATE; + wpabuf_free(reqData); + *minor = 0; return GSS_S_CONTINUE_NEEDED; } -- 2.1.4