From a263a7b6fdb7061956823bf8d9cd0ae53c5916c4 Mon Sep 17 00:00:00 2001 From: Luke Howard Date: Fri, 16 Sep 2011 15:02:31 +1000 Subject: [PATCH] Don't assert fail on Windows if mech does not init --- mech_eap/eap_mech.c | 41 ++++++++++++++++++++++++++++++----------- mech_eap/gssapiP_eap.h | 4 ++-- mech_eap/util_tld.c | 8 ++++++-- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/mech_eap/eap_mech.c b/mech_eap/eap_mech.c index 0b64df9..bec319b 100644 --- a/mech_eap/eap_mech.c +++ b/mech_eap/eap_mech.c @@ -165,36 +165,55 @@ gssEapInitLibRadsec(OM_uint32 *minor) return GSS_S_COMPLETE; } -void gssEapInitiatorInit(void) GSSEAP_CONSTRUCTOR; void gssEapFinalize(void) GSSEAP_DESTRUCTOR; -void -gssEapInitiatorInit(void) +OM_uint32 +gssEapInitiatorInit(OM_uint32 *minor) { - OM_uint32 major, minor; + OM_uint32 major; initialize_eapg_error_table(); initialize_rse_error_table(); - major = gssEapInitLibEap(&minor); - assert(major == GSS_S_COMPLETE); + major = gssEapInitLibEap(minor); + if (GSS_ERROR(major)) + return major; - major = gssEapInitLibRadsec(&minor); - assert(major == GSS_S_COMPLETE); + major = gssEapInitLibRadsec(minor); + if (GSS_ERROR(major)) + return major; #ifdef GSSEAP_ENABLE_REAUTH - major = gssEapReauthInitialize(&minor); - assert(major == GSS_S_COMPLETE); + major = gssEapReauthInitialize(minor); + if (GSS_ERROR(major)) + return major; #endif + + *minor = 0; + return GSS_S_COMPLETE; } void gssEapFinalize(void) { -#ifdef GSSEAP_ENABLE_ACCEPTOR OM_uint32 minor; +#ifdef GSSEAP_ENABLE_ACCEPTOR gssEapAttrProvidersFinalize(&minor); #endif eap_peer_unregister_methods(); } + +#ifdef GSSEAP_CONSTRUCTOR +static void gssEapInitiatorInitAssert(void) GSSEAP_CONSTRUCTOR; + +static void +gssEapInitiatorInitAssert(void) +{ + OM_uint32 major, minor; + + major = gssEapInitiatorInit(&minor); + + assert(!GSS_ERROR(major)); +} +#endif diff --git a/mech_eap/gssapiP_eap.h b/mech_eap/gssapiP_eap.h index b2271d8..43208a9 100644 --- a/mech_eap/gssapiP_eap.h +++ b/mech_eap/gssapiP_eap.h @@ -363,8 +363,8 @@ gssEapPseudoRandom(OM_uint32 *minor, gss_buffer_t prf_out); /* eap_mech.c */ -void -gssEapInitiatorInit(void); +OM_uint32 +gssEapInitiatorInit(OM_uint32 *minor); void gssEapFinalize(void); diff --git a/mech_eap/util_tld.c b/mech_eap/util_tld.c index f6feeba..e3710f9 100644 --- a/mech_eap/util_tld.c +++ b/mech_eap/util_tld.c @@ -51,7 +51,7 @@ destroyThreadLocalData(struct gss_eap_thread_local_data *tld) #ifdef WIN32 /* - * This is the tls index returned by TlsAlloc() on process init. + * This is the TLS index returned by TlsAlloc() on process init. * Each thread, on thread attach in DllMain(), allocates its thread-local * data and uses this index with TlsSetValue() to store it. * It can then subsequently be retrieved with TlsGetValue(). @@ -71,11 +71,15 @@ DllMain(HINSTANCE hDLL, /* DLL module handle */ LPVOID reserved) /* reserved */ { struct gss_eap_thread_local_data *tlsData; + OM_uint32 major, minor; switch (reason) { case DLL_PROCESS_ATTACH: /* Allocate a TLS index. */ - gssEapInitiatorInit(); + major = gssEapInitiatorInit(&minor); + if (GSS_ERROR(major)) + return FALSE; + tlsIndex = TlsAlloc(); if (tlsIndex == TLS_OUT_OF_INDEXES) return FALSE; -- 2.1.4