Better error reporting through com_err
[mech_eap.git] / util_saml.cpp
index 922b64c..820896f 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(VENDOR_ATTR_SAML_AAA_ASSERTION,
-                                       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
 }
 
@@ -505,10 +511,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 +584,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