X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=wrap_iov_length.c;h=25bc3bed7d8012381f57d35eca251db86e194f1e;hb=15c93f06ee6ddefa7e7b095351f6e66698c7cc9e;hp=9456906b0c6ce054d62683c6e233b2bcbb57398c;hpb=8ca4321dde99b7e3cb9574a3246db87f6f3f7e39;p=mech_eap.git diff --git a/wrap_iov_length.c b/wrap_iov_length.c index 9456906..25bc3be 100644 --- a/wrap_iov_length.c +++ b/wrap_iov_length.c @@ -60,7 +60,7 @@ while (0) OM_uint32 -gss_wrap_iov_length(OM_uint32 *minor, +gssEapWrapIovLength(OM_uint32 *minor, gss_ctx_id_t ctx, int conf_req_flag, gss_qop_t qop_req, @@ -80,14 +80,14 @@ gss_wrap_iov_length(OM_uint32 *minor, if (qop_req != GSS_C_QOP_DEFAULT) return GSS_S_FAILURE; - if (!CTX_IS_ESTABLISHED(ctx)) - return GSS_S_NO_CONTEXT; + if (ctx->encryptionType == ENCTYPE_NULL) + return GSS_S_UNAVAILABLE; GSSEAP_KRB_INIT(&krbContext); header = gssEapLocateIov(iov, iov_count, GSS_IOV_BUFFER_TYPE_HEADER); if (header == NULL) { - *minor = EINVAL; + *minor = GSSEAP_MISSING_IOV; return GSS_S_FAILURE; } INIT_IOV_DATA(header); @@ -178,3 +178,40 @@ gss_wrap_iov_length(OM_uint32 *minor, *minor = 0; return GSS_S_COMPLETE; } + +OM_uint32 +gss_wrap_iov_length(OM_uint32 *minor, + gss_ctx_id_t ctx, + int conf_req_flag, + gss_qop_t qop_req, + int *conf_state, + gss_iov_buffer_desc *iov, + int iov_count) +{ + OM_uint32 major; + + if (ctx == GSS_C_NO_CONTEXT) { + *minor = EINVAL; + return GSS_S_NO_CONTEXT; + } + + *minor = 0; + + GSSEAP_MUTEX_LOCK(&ctx->mutex); + + if (!CTX_IS_ESTABLISHED(ctx)) { + *minor = GSSEAP_CONTEXT_INCOMPLETE; + major = GSS_S_NO_CONTEXT; + goto cleanup; + } + + major = gssEapWrapIovLength(minor, ctx, conf_req_flag, qop_req, + conf_state, iov, iov_count); + if (GSS_ERROR(major)) + goto cleanup; + +cleanup: + GSSEAP_MUTEX_UNLOCK(&ctx->mutex); + + return major; +}