add JSON utility class
[mech_eap.orig] / eap_mech.c
index da3de43..fb827dd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, JANET(UK)
+ * Copyright (c) 2011, JANET(UK)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * SUCH DAMAGE.
  */
 
+/*
+ * Initialisation and finalise functions.
+ */
+
 #include "gssapiP_eap.h"
 
-static int
-eapPeerRegisterMethods(void)
+static OM_uint32
+eapPeerRegisterMethods(OM_uint32 *minor)
 {
-    int ret = 0;
+    OM_uint32 ret = 0;
 
 #ifdef EAP_MD5
     if (ret == 0)
@@ -137,37 +141,58 @@ eapPeerRegisterMethods(void)
         ret = eap_peer_tnc_register();
 #endif /* EAP_TNC */
 
-    return ret;
+    if (ret == 0)
+        return GSS_S_COMPLETE;
+
+    *minor = GSSEAP_LIBEAP_INIT_FAILURE;
+    return GSS_S_FAILURE;
 }
 
-static int
-gssEapInitLibEap(void)
+static OM_uint32
+gssEapInitLibEap(OM_uint32 *minor)
 {
-    return eapPeerRegisterMethods();
+    return eapPeerRegisterMethods(minor);
 }
 
-static int
-gssEapInitLibRadSec(void)
+static OM_uint32
+gssEapInitLibRadsec(OM_uint32 *minor)
 {
-    return 0;
+    if (0) {
+        *minor = GSSEAP_RADSEC_INIT_FAILURE;
+        return GSS_S_FAILURE;
+    }
+
+    return GSS_S_COMPLETE;
 }
 
-static void gssEapInit(void) __attribute__((constructor));
+static void gssEapInitiatorInit(void) __attribute__((constructor));
 static void gssEapFinalize(void) __attribute__((destructor));
 
 static void
-gssEapInit(void)
+gssEapInitiatorInit(void)
 {
-    int ret;
+    OM_uint32 major, minor;
 
-    ret = gssEapInitLibEap();
-    if (ret == 0)
-        gssEapInitLibRadSec();
+    initialize_eapg_error_table();
+    initialize_rse_error_table();
+
+    major = gssEapInitLibEap(&minor);
+    assert(major == GSS_S_COMPLETE);
+
+    major = gssEapInitLibRadsec(&minor);
+    assert(major == GSS_S_COMPLETE);
+
+#ifdef GSSEAP_ENABLE_REAUTH
+    major = gssEapReauthInitialize(&minor);
+    assert(major == GSS_S_COMPLETE);
+#endif
 }
 
 static void
 gssEapFinalize(void)
 {
+    OM_uint32 minor;
+
+    gssEapAttrProvidersFinalize(&minor);
     eap_peer_unregister_methods();
 }
-