Fixes for Heimdal (macOS) builds from Stefan.
[mech_eap.git] / mech_eap / eap_mech.c
index 995a8ee..403e2f8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, JANET(UK)
+ * Copyright (c) 2011, 2015, JANET(UK)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,6 +36,8 @@
 
 #include "gssapiP_eap.h"
 
+extern int wpa_debug_level;
+
 static OM_uint32
 eapPeerRegisterMethods(OM_uint32 *minor)
 {
@@ -151,6 +153,13 @@ eapPeerRegisterMethods(OM_uint32 *minor)
 static OM_uint32
 gssEapInitLibEap(OM_uint32 *minor)
 {
+    char *debug_file = NULL;
+    wpa_debug_level = MSG_ERROR;
+    if ((debug_file = getenv("GSSEAP_TRACE")) != NULL) {
+           wpa_debug_open_file(debug_file);
+           wpa_debug_level = 0;
+       }
+
     return eapPeerRegisterMethods(minor);
 }
 
@@ -165,34 +174,51 @@ gssEapInitLibRadsec(OM_uint32 *minor)
     return GSS_S_COMPLETE;
 }
 
-static void gssEapInitiatorInit(void) GSSEAP_CONSTRUCTOR;
-static void gssEapFinalize(void) GSSEAP_DESTRUCTOR;
+void gssEapFinalize(void) GSSEAP_DESTRUCTOR;
 
-static 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;
 }
 
-static void
+void
 gssEapFinalize(void)
 {
-    OM_uint32 minor;
-
-    gssEapAttrProvidersFinalize(&minor);
+    wpa_printf(MSG_INFO, "### gssEapFinalize()");
     eap_peer_unregister_methods();
 }
+
+#ifdef GSSEAP_CONSTRUCTOR
+static void gssEapInitiatorInitAssert(void) GSSEAP_CONSTRUCTOR;
+
+static void
+gssEapInitiatorInitAssert(void)
+{
+    OM_uint32 major, minor;
+
+    major = gssEapInitiatorInit(&minor);
+
+    GSSEAP_ASSERT(!GSS_ERROR(major));
+}
+#endif