Factory out attribute init code
authorLuke Howard <lukeh@padl.com>
Mon, 20 Sep 2010 08:24:11 +0000 (10:24 +0200)
committerLuke Howard <lukeh@padl.com>
Mon, 20 Sep 2010 08:24:11 +0000 (10:24 +0200)
This will allow us not to build certain providers as they are
now-self registering and the registration code is factored out
of the attribute manager class

mech_eap/eap_mech.c
mech_eap/util_attr.cpp
mech_eap/util_attr.h
mech_eap/util_radius.cpp
mech_eap/util_radius.h
mech_eap/util_saml.cpp
mech_eap/util_saml.h
mech_eap/util_shib.cpp
mech_eap/util_shib.h

index 921c4c2..5cd5f6a 100644 (file)
@@ -276,7 +276,13 @@ gssEapInit(void)
     major = eapServerRegisterMethods(&minor);
     assert(major == GSS_S_COMPLETE);
 
-    major = gssEapAttrProvidersInit(&minor);
+    major = gssEapRadiusAttrProviderInit(&minor);
+    assert(major == GSS_S_COMPLETE);
+
+    major = gssEapSamlAttrProvidersInit(&minor);
+    assert(major == GSS_S_COMPLETE);
+
+    major = gssEapLocalAttrProviderInit(&minor);
     assert(major == GSS_S_COMPLETE);
 }
 
@@ -285,7 +291,10 @@ gssEapFinalize(void)
 {
     OM_uint32 minor;
 
+    gssEapLocalAttrProviderFinalize(&minor);
+    gssEapSamlAttrProvidersFinalize(&minor);
+    gssEapRadiusAttrProviderFinalize(&minor);
+
     eap_peer_unregister_methods();
     eap_server_unregister_methods();
-    gssEapAttrProvidersFinalize(&minor);
 }
index 57c5570..79f406a 100644 (file)
@@ -815,37 +815,6 @@ gssEapReleaseAttrContext(OM_uint32 *minor,
     return GSS_S_COMPLETE;
 }
 
-OM_uint32
-gssEapAttrProvidersInit(OM_uint32 *minor)
-{
-    try {
-        if (gss_eap_radius_attr_provider::init()    &&
-            gss_eap_saml_assertion_provider::init() &&
-            gss_eap_saml_attr_provider::init()      &&
-            gss_eap_shib_attr_provider::init())
-            return GSS_S_COMPLETE;
-    } catch (std::exception &e) {
-        return mapException(minor, e);
-    }
-
-    return GSS_S_FAILURE;
-}
-
-OM_uint32
-gssEapAttrProvidersFinalize(OM_uint32 *minor)
-{
-    try {
-        gss_eap_shib_attr_provider::finalize();
-        gss_eap_saml_attr_provider::finalize();
-        gss_eap_saml_assertion_provider::finalize();
-        gss_eap_radius_attr_provider::finalize();
-    } catch (std::exception &e) {
-        return mapException(minor, e);
-    }
-
-    return GSS_S_COMPLETE;
-}
-
 /*
  * Public accessor for initialisng a context from a GSS context. Also
  * sets expiry time on GSS context as a side-effect.
index c846864..2ae1b3c 100644 (file)
@@ -213,10 +213,14 @@ private:
     gss_eap_attr_provider *m_providers[ATTR_TYPE_MAX + 1];
 };
 
+#endif /* __cplusplus */
+
 #include "util_radius.h"
 #include "util_saml.h"
 #include "util_shib.h"
 
+#ifdef __cplusplus
+
 #include <string>
 #include <new>
 
index c3d07ab..97dee6e 100644 (file)
@@ -152,3 +152,17 @@ gss_eap_radius_attr_provider::createAttrContext(void)
 {
     return new gss_eap_radius_attr_provider;
 }
+
+OM_uint32
+gssEapRadiusAttrProviderInit(OM_uint32 *minor)
+{
+    return gss_eap_radius_attr_provider::init()
+        ? GSS_S_COMPLETE : GSS_S_FAILURE;
+}
+
+OM_uint32
+gssEapRadiusAttrProviderFinalize(OM_uint32 *minor)
+{
+    gss_eap_radius_attr_provider::finalize();
+    return GSS_S_COMPLETE;
+}
index 5ce34fd..75984c6 100644 (file)
@@ -33,6 +33,8 @@
 #ifndef _UTIL_RADIUS_H_
 #define _UTIL_RADIUS_H_ 1
 
+#ifdef __cplusplus
+
 struct gss_eap_radius_attr_provider : gss_eap_attr_provider {
 public:
     gss_eap_radius_attr_provider(void);
@@ -85,4 +87,14 @@ private:
 /* For now */
 #define PW_SAML_ASSERTION           1936
 
+extern "C" {
+#endif
+
+OM_uint32 gssEapRadiusAttrProviderInit(OM_uint32 *minor);
+OM_uint32 gssEapRadiusAttrProviderFinalize(OM_uint32 *minor);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _UTIL_RADIUS_H_ */
index 3f62e1d..115824f 100644 (file)
@@ -556,3 +556,21 @@ gss_eap_saml_attr_provider::createAttrContext(void)
 {
     return new gss_eap_saml_attr_provider;
 }
+
+OM_uint32
+gssEapSamlAttrProvidersInit(OM_uint32 *minor)
+{
+    if (gss_eap_saml_assertion_provider::init() &&
+        gss_eap_saml_attr_provider::init())
+        return GSS_S_COMPLETE;
+
+    return GSS_S_FAILURE;
+}
+
+OM_uint32
+gssEapSamlAttrProvidersFinalize(OM_uint32 *minor)
+{
+    gss_eap_saml_attr_provider::finalize();
+    gss_eap_saml_assertion_provider::finalize();
+    return GSS_S_COMPLETE;
+}
index fa8e9e8..984af6a 100644 (file)
@@ -33,6 +33,8 @@
 #ifndef _UTIL_SAML_H_
 #define _UTIL_SAML_H_ 1
 
+#ifdef __cplusplus
+
 namespace opensaml {
     namespace saml2 {
         class Attribute;
@@ -139,4 +141,14 @@ public:
 private:
 };
 
+extern "C" {
+#endif
+
+OM_uint32 gssEapSamlAttrProvidersInit(OM_uint32 *minor);
+OM_uint32 gssEapSamlAttrProvidersFinalize(OM_uint32 *minor);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _UTIL_SAML_H_ */
index 9a5a753..6b5bd74 100644 (file)
@@ -474,8 +474,8 @@ gss_eap_shib_attr_provider::init(void)
 void
 gss_eap_shib_attr_provider::finalize(void)
 {
-    ShibbolethResolver::term();
     gss_eap_attr_ctx::unregisterProvider(ATTR_TYPE_LOCAL);
+    ShibbolethResolver::term();
 }
 
 gss_eap_attr_provider *
@@ -506,3 +506,17 @@ gss_eap_shib_attr_provider::duplicateAttributes(const vector <Attribute *>src)
 
     return dst;
 }
+
+OM_uint32
+gssEapLocalAttrProviderInit(OM_uint32 *minor)
+{
+    return gss_eap_shib_attr_provider::init()
+        ? GSS_S_COMPLETE : GSS_S_FAILURE;
+}
+
+OM_uint32
+gssEapLocalAttrProviderFinalize(OM_uint32 *minor)
+{
+    gss_eap_shib_attr_provider::finalize();
+    return GSS_S_COMPLETE;
+}
index 2f30228..91950de 100644 (file)
@@ -33,6 +33,8 @@
 #ifndef _UTIL_SHIB_H_
 #define _UTIL_SHIB_H_ 1
 
+#ifdef __cplusplus
+
 #include <vector>
 
 namespace shibsp {
@@ -104,4 +106,15 @@ private:
     int m_authenticated;
 };
 
+
+extern "C" {
+#endif
+
+OM_uint32 gssEapLocalAttrProviderInit(OM_uint32 *minor);
+OM_uint32 gssEapLocalAttrProviderFinalize(OM_uint32 *minor);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _UTIL_SHIB_H_ */