From: Luke Howard Date: Wed, 14 Sep 2011 06:38:55 +0000 (+1000) Subject: add gssEapPseudoRandom for internal consumers X-Git-Url: http://www.project-moonshot.org/gitweb/?p=mech_eap.orig;a=commitdiff_plain;h=69c14d63baee9ce3b1a2ce773c81cf84a131612a add gssEapPseudoRandom for internal consumers --- diff --git a/mech_eap/gssapiP_eap.h b/mech_eap/gssapiP_eap.h index cd5315d..966adde 100644 --- a/mech_eap/gssapiP_eap.h +++ b/mech_eap/gssapiP_eap.h @@ -343,6 +343,14 @@ gssEapExportSecContext(OM_uint32 *minor, gss_ctx_id_t ctx, gss_buffer_t token); +/* pseudo_random.c */ +OM_uint32 +gssEapPseudoRandom(OM_uint32 *minor, + gss_ctx_id_t ctx, + int prf_key, + const gss_buffer_t prf_in, + ssize_t desired_output_len, + gss_buffer_t prf_out); /* eap_mech.c */ void diff --git a/mech_eap/pseudo_random.c b/mech_eap/pseudo_random.c index 476f1c5..b0ca1ea 100644 --- a/mech_eap/pseudo_random.c +++ b/mech_eap/pseudo_random.c @@ -59,13 +59,13 @@ #include "gssapiP_eap.h" -OM_uint32 GSSAPI_CALLCONV -gss_pseudo_random(OM_uint32 *minor, - gss_ctx_id_t ctx, - int prf_key, - const gss_buffer_t prf_in, - ssize_t desired_output_len, - gss_buffer_t prf_out) +OM_uint32 +gssEapPseudoRandom(OM_uint32 *minor, + gss_ctx_id_t ctx, + int prf_key, + const gss_buffer_t prf_in, + ssize_t desired_output_len, + gss_buffer_t prf_out) { krb5_error_code code; int i; @@ -78,21 +78,8 @@ gss_pseudo_random(OM_uint32 *minor, prf_out->length = 0; prf_out->value = NULL; - if (ctx == GSS_C_NO_CONTEXT) { - *minor = EINVAL; - return GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT; - } - *minor = 0; - GSSEAP_MUTEX_LOCK(&ctx->mutex); - - if (!CTX_IS_ESTABLISHED(ctx)) { - GSSEAP_MUTEX_UNLOCK(&ctx->mutex); - *minor = GSSEAP_CONTEXT_INCOMPLETE; - return GSS_S_NO_CONTEXT; - } - GSSEAP_KRB_INIT(&krbContext); t.length = 0; @@ -152,8 +139,6 @@ gss_pseudo_random(OM_uint32 *minor, } cleanup: - GSSEAP_MUTEX_UNLOCK(&ctx->mutex); - if (code != 0) gss_release_buffer(&tmpMinor, prf_out); krb5_free_data_contents(krbContext, &ns); @@ -163,3 +148,38 @@ cleanup: return (code == 0) ? GSS_S_COMPLETE : GSS_S_FAILURE; } + +OM_uint32 GSSAPI_CALLCONV +gss_pseudo_random(OM_uint32 *minor, + gss_ctx_id_t ctx, + int prf_key, + const gss_buffer_t prf_in, + ssize_t desired_output_len, + gss_buffer_t prf_out) +{ + OM_uint32 major; + + if (ctx == GSS_C_NO_CONTEXT) { + *minor = EINVAL; + return GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT; + } + + prf_out->length = 0; + prf_out->value = NULL; + + *minor = 0; + + GSSEAP_MUTEX_LOCK(&ctx->mutex); + + if (CTX_IS_ESTABLISHED(ctx)) { + major = gssEapPseudoRandom(minor, ctx, prf_key, + prf_in, desired_output_len, prf_out); + } else { + major = GSS_S_NO_CONTEXT; + *minor = GSSEAP_CONTEXT_INCOMPLETE; + } + + GSSEAP_MUTEX_UNLOCK(&ctx->mutex); + + return major; +}