make state transition explicit rather than side-effect of GSS status code
[mech_eap.orig] / util_saml.cpp
index 41ef77e..dba698c 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
@@ -161,17 +161,21 @@ gss_eap_saml_assertion_provider::parseAssertion(const gss_buffer_t buffer)
     DOMDocument *doc;
     const XMLObjectBuilder *b;
 
-    doc = XMLToolingConfig::getConfig().getParser().parse(istream);
-    if (doc == NULL)
-        return NULL;
+    try {
+        doc = XMLToolingConfig::getConfig().getParser().parse(istream);
+        if (doc == NULL)
+            return NULL;
 
-    b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());
+        b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());
 
 #ifdef __APPLE__
-    return (saml2::Assertion *)((void *)b->buildFromDocument(doc));
+        return (saml2::Assertion *)((void *)b->buildFromDocument(doc));
 #else
-    return dynamic_cast<saml2::Assertion *>(b->buildFromDocument(doc));
+        return dynamic_cast<saml2::Assertion *>(b->buildFromDocument(doc));
 #endif
+    } catch (exception &e) {
+        return NULL;
+    }
 }
 
 bool
@@ -341,7 +345,7 @@ gss_eap_saml_assertion_provider::init(void)
 {
     gss_eap_attr_ctx::registerProvider(ATTR_TYPE_SAML_ASSERTION,
                                        "urn:ietf:params:gss-eap:saml-aaa-assertion",
-                                       gss_eap_saml_assertion_provider::createAttrContext);
+                                       createAttrContext);
     return true;
 }
 
@@ -710,7 +714,7 @@ gss_eap_saml_attr_provider::init(void)
 {
     gss_eap_attr_ctx::registerProvider(ATTR_TYPE_SAML,
                                        "urn:ietf:params:gss-eap:saml-attr",
-                                       gss_eap_saml_attr_provider::createAttrContext);
+                                       createAttrContext);
     return true;
 }