X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=moonshot%2Fmech_eap%2Futil_krb.c;h=73cf1085d575acac845a001ebfc160f978f3c00b;hb=81781310c5125e8784c1113e8306aef8f4e3c6d4;hp=88ad6dd202a0556270158eb8c6e584e3d5d5e09c;hpb=db09fc23e4dc013ecd797c51f2a8179cb0dfe670;p=moonshot.git diff --git a/moonshot/mech_eap/util_krb.c b/moonshot/mech_eap/util_krb.c index 88ad6dd..73cf108 100644 --- a/moonshot/mech_eap/util_krb.c +++ b/moonshot/mech_eap/util_krb.c @@ -36,24 +36,13 @@ #include "gssapiP_eap.h" -static GSSEAP_THREAD_ONCE krbContextKeyOnce = GSSEAP_ONCE_INITIALIZER; -static GSSEAP_THREAD_KEY krbContextKey; - -static void -destroyKrbContext(void *arg) +void +gssEapDestroyKrbContext(krb5_context context) { - krb5_context context = (krb5_context)arg; - if (context != NULL) krb5_free_context(context); } -static void -createKrbContextKey(void) -{ - GSSEAP_KEY_CREATE(&krbContextKey, destroyKrbContext); -} - static krb5_error_code initKrbContext(krb5_context *pKrbContext) { @@ -91,22 +80,20 @@ cleanup: OM_uint32 gssEapKerberosInit(OM_uint32 *minor, krb5_context *context) { + struct gss_eap_thread_local_data* tld; *minor = 0; - GSSEAP_ONCE(&krbContextKeyOnce, createKrbContextKey); - - *context = GSSEAP_GETSPECIFIC(krbContextKey); - if (*context == NULL) { - *minor = initKrbContext(context); - if (*minor == 0) { - if (GSSEAP_SETSPECIFIC(krbContextKey, *context) != 0) { - *minor = errno; - krb5_free_context(*context); - *context = NULL; + tld = gssEapGetThreadLocalData(); + if (tld) + { + *context = tld->context; + if (*context == NULL) { + *minor = initKrbContext(context); + if (*minor == 0) { + tld->context = *context; } } } - return *minor == 0 ? GSS_S_COMPLETE : GSS_S_FAILURE; }