X-Git-Url: http://www.project-moonshot.org/gitweb/?p=mech_eap.git;a=blobdiff_plain;f=mech_eap%2Fget_mic.c;h=9a7bfc7e4ecf8b53f6b79a2d36f559994e589dbf;hp=7161e9c40953d63a0492f56806a1246c3c69b627;hb=HEAD;hpb=4609bebeb14712d07fd7d4a08726bb3f49781192 diff --git a/mech_eap/get_mic.c b/mech_eap/get_mic.c index 7161e9c..9a7bfc7 100644 --- a/mech_eap/get_mic.c +++ b/mech_eap/get_mic.c @@ -36,15 +36,14 @@ #include "gssapiP_eap.h" -OM_uint32 GSSAPI_CALLCONV -gss_get_mic(OM_uint32 *minor, - gss_ctx_id_t ctx, - gss_qop_t qop_req, - gss_buffer_t message_buffer, - gss_buffer_t message_token) +static OM_uint32 +gssEapGetMIC(OM_uint32 *minor, + gss_ctx_id_t ctx, + gss_qop_t qop_req, + gss_iov_buffer_desc *iov, + int iov_count) { OM_uint32 major; - gss_iov_buffer_desc iov[2]; if (ctx == GSS_C_NO_CONTEXT) { *minor = EINVAL; @@ -58,9 +57,6 @@ gss_get_mic(OM_uint32 *minor, *minor = 0; - message_token->value = NULL; - message_token->length = 0; - GSSEAP_MUTEX_LOCK(&ctx->mutex); if (!CTX_IS_ESTABLISHED(ctx)) { @@ -69,21 +65,55 @@ gss_get_mic(OM_uint32 *minor, goto cleanup; } + major = gssEapWrapOrGetMIC(minor, ctx, FALSE, NULL, + iov, iov_count, TOK_TYPE_MIC); + if (GSS_ERROR(major)) + goto cleanup; + +cleanup: + GSSEAP_MUTEX_UNLOCK(&ctx->mutex); + + return major; +} + +OM_uint32 GSSAPI_CALLCONV +gss_get_mic(OM_uint32 *minor, +#ifdef HAVE_HEIMDAL_VERSION + gss_const_ctx_id_t ctx, +#else + gss_ctx_id_t ctx, +#endif + gss_qop_t qop_req, +#ifdef HAVE_HEIMDAL_VERSION + const gss_buffer_t message_buffer, +#else + gss_buffer_t message_buffer, +#endif + gss_buffer_t message_token) +{ + OM_uint32 major; + gss_iov_buffer_desc iov[2]; + iov[0].type = GSS_IOV_BUFFER_TYPE_DATA; iov[0].buffer = *message_buffer; - iov[1].type = GSS_IOV_BUFFER_TYPE_HEADER | GSS_IOV_BUFFER_FLAG_ALLOCATE; + iov[1].type = GSS_IOV_BUFFER_TYPE_MIC_TOKEN | GSS_IOV_BUFFER_FLAG_ALLOCATE; iov[1].buffer.value = NULL; iov[1].buffer.length = 0; - major = gssEapWrapOrGetMIC(minor, ctx, FALSE, NULL, iov, 2, TOK_TYPE_MIC); - if (GSS_ERROR(major)) - goto cleanup; - - *message_token = iov[1].buffer; - -cleanup: - GSSEAP_MUTEX_UNLOCK(&ctx->mutex); + major = gssEapGetMIC(minor, (gss_ctx_id_t)ctx, qop_req, iov, 2); + if (major == GSS_S_COMPLETE) + *message_token = iov[1].buffer; return major; } + +OM_uint32 GSSAPI_CALLCONV +gss_get_mic_iov(OM_uint32 *minor, + gss_ctx_id_t ctx, + gss_qop_t qop_req, + gss_iov_buffer_desc *iov, + int iov_count) +{ + return gssEapGetMIC(minor, ctx, qop_req, iov, iov_count); +}