Don't assert fail on Windows if mech does not init
authorLuke Howard <lukeh@padl.com>
Fri, 16 Sep 2011 05:02:31 +0000 (15:02 +1000)
committerLuke Howard <lukeh@padl.com>
Fri, 16 Sep 2011 05:02:31 +0000 (15:02 +1000)
mech_eap/eap_mech.c
mech_eap/gssapiP_eap.h
mech_eap/util_tld.c

index 0b64df9..bec319b 100644 (file)
@@ -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
index b2271d8..43208a9 100644 (file)
@@ -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);
index f6feeba..e3710f9 100644 (file)
@@ -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;