plug leak
[mech_eap.orig] / util_saml.cpp
index ce704de..7e088eb 100644 (file)
 #include <sstream>
 
 #include <xercesc/util/XMLUniDefs.hpp>
+#include <xmltooling/unicode.h>
 #include <xmltooling/XMLToolingConfig.h>
 #include <xmltooling/util/XMLHelper.h>
+#include <xmltooling/util/ParserPool.h>
+#include <xmltooling/util/DateTime.h>
 
 #include <saml/saml1/core/Assertions.h>
 #include <saml/saml2/core/Assertions.h>
@@ -96,11 +99,14 @@ gss_eap_saml_assertion_provider::initFromGssContext(const gss_eap_attr_ctx *mana
     if (!gss_eap_attr_provider::initFromGssContext(manager, gssCred, gssCtx))
         return false;
 
+    /*
+     * XXX TODO we need to support draft-howlett-radius-saml-attr-00
+     */
     radius = static_cast<const gss_eap_radius_attr_provider *>
         (m_manager->getProvider(ATTR_TYPE_RADIUS));
     if (radius != NULL &&
-        radius->getFragmentedAttribute(RADIUS_VENDOR_ATTR_GSS_EAP_SAML_AAA_ASSERTION,
-                                       RADIUS_VENDOR_ID_GSS_EAP,
+        radius->getFragmentedAttribute(PW_SAML_AAA_ASSERTION,
+                                       VENDORPEC_UKERNA,
                                        &authenticated, &complete, &value)) {
         setAssertion(&value, authenticated);
         gss_release_buffer(&minor, &value);
@@ -119,10 +125,10 @@ gss_eap_saml_assertion_provider::setAssertion(const saml2::Assertion *assertion,
     delete m_assertion;
 
     if (assertion != NULL) {
-#if 0
-        m_assertion = dynamic_cast<saml2::Assertion *>(assertion->clone());
-#else
+#ifdef __APPLE__
         m_assertion = (saml2::Assertion *)((void *)assertion->clone());
+#else
+        m_assertion = dynamic_cast<saml2::Assertion *>(assertion->clone());
 #endif
         m_authenticated = authenticated;
     } else {
@@ -155,10 +161,10 @@ gss_eap_saml_assertion_provider::parseAssertion(const gss_buffer_t buffer)
 
     b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());
 
-#if 0
-    return dynamic_cast<saml2::Assertion *>(b->buildFromDocument(doc));
-#else
+#ifdef __APPLE__
     return (saml2::Assertion *)((void *)b->buildFromDocument(doc));
+#else
+    return dynamic_cast<saml2::Assertion *>(b->buildFromDocument(doc));
 #endif
 }
 
@@ -177,22 +183,27 @@ gss_eap_saml_assertion_provider::getAttributeTypes(gss_eap_attr_enumeration_cb a
     return ret;
 }
 
-void
+bool
 gss_eap_saml_assertion_provider::setAttribute(int complete,
                                               const gss_buffer_t attr,
                                               const gss_buffer_t value)
 {
     if (attr == GSS_C_NO_BUFFER || attr->length == 0) {
         setAssertion(value);
+        return true;
     }
+
+    return false;
 }
 
-void
+bool
 gss_eap_saml_assertion_provider::deleteAttribute(const gss_buffer_t value)
 {
     delete m_assertion;
     m_assertion = NULL;
     m_authenticated = false;
+
+    return true;
 }
 
 time_t
@@ -402,16 +413,18 @@ gss_eap_saml_attr_provider::getAttributeTypes(gss_eap_attr_enumeration_cb addAtt
     return ret;
 }
 
-void
+bool
 gss_eap_saml_attr_provider::setAttribute(int complete,
                                          const gss_buffer_t attr,
                                          const gss_buffer_t value)
 {
+    return false;
 }
 
-void
+bool
 gss_eap_saml_attr_provider::deleteAttribute(const gss_buffer_t value)
 {
+    return false;
 }
 
 static BaseRefVectorOf<XMLCh> *
@@ -505,10 +518,10 @@ gss_eap_saml_attr_provider::getAttribute(const gss_buffer_t attr,
         i = 0;
     else if (i >= nvalues)
         return false;
-#if 0
-    av = dynamic_cast<const saml2::AttributeValue *>(a->getAttributeValues().at(i));
-#else
+#ifdef __APPLE__
     av = (const saml2::AttributeValue *)((void *)(a->getAttributeValues().at(i)));
+#else
+    av = dynamic_cast<const saml2::AttributeValue *>(a->getAttributeValues().at(i));
 #endif
     if (av != NULL) {
         if (value != NULL) {
@@ -578,11 +591,13 @@ gss_eap_saml_attr_provider::createAttrContext(void)
 OM_uint32
 gssEapSamlAttrProvidersInit(OM_uint32 *minor)
 {
-    if (gss_eap_saml_assertion_provider::init() &&
-        gss_eap_saml_attr_provider::init())
-        return GSS_S_COMPLETE;
+    if (!gss_eap_saml_assertion_provider::init() ||
+        !gss_eap_saml_attr_provider::init()) {
+        *minor = GSSEAP_SAML_INIT_FAILURE;
+        return GSS_S_FAILURE;
+    }
 
-    return GSS_S_FAILURE;
+    return GSS_S_COMPLETE;
 }
 
 OM_uint32