X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=inquire_sec_context_by_oid.c;h=6413b288a01071a97f24b97ffda2fa075992afce;hb=15c93f06ee6ddefa7e7b095351f6e66698c7cc9e;hp=93ea808446c455d0c069e28ebe2bf51061b03828;hpb=646a981cdd5c439b4b4fa5dde8f742a1a2a05b43;p=mech_eap.git diff --git a/inquire_sec_context_by_oid.c b/inquire_sec_context_by_oid.c index 93ea808..6413b28 100644 --- a/inquire_sec_context_by_oid.c +++ b/inquire_sec_context_by_oid.c @@ -92,26 +92,44 @@ static struct { { 11, "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x05\x05" }, inquireSessionKey }, + { + /* GSS_KRB5_EXPORT_LUCID_SEC_CONTEXT + v1 */ + { 12, "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x05\x06\x01" }, + gssEapExportLucidSecContext + }, }; OM_uint32 gss_inquire_sec_context_by_oid(OM_uint32 *minor, - const gss_ctx_id_t context_handle, + const gss_ctx_id_t ctx, const gss_OID desired_object, gss_buffer_set_t *data_set) { - OM_uint32 major = GSS_S_UNAVAILABLE; + OM_uint32 major; int i; *data_set = GSS_C_NO_BUFFER_SET; + GSSEAP_MUTEX_LOCK(&ctx->mutex); + + if (!CTX_IS_ESTABLISHED(ctx)) { + *minor = GSSEAP_CONTEXT_INCOMPLETE; + major = GSS_S_NO_CONTEXT; + goto cleanup; + } + + major = GSS_S_UNAVAILABLE; + for (i = 0; i < sizeof(inquireCtxOps) / sizeof(inquireCtxOps[0]); i++) { if (oidEqual(&inquireCtxOps[i].oid, desired_object)) { - major = (*inquireCtxOps[i].inquire)(minor, context_handle, + major = (*inquireCtxOps[i].inquire)(minor, ctx, desired_object, data_set); break; } } +cleanup: + GSSEAP_MUTEX_UNLOCK(&ctx->mutex); + return major; }