[cpp-opensaml COMMIT] /branches/REL_2/saml/saml2/binding/impl/SAML2ECPDecoder.cpp

noreply at shibboleth.net noreply at shibboleth.net
Thu Mar 15 15:48:51 GMT 2012


Author: scantor
Date: Thu Mar 15 15:48:51 2012
New Revision: 719

URL: http://svn.shibboleth.net/view/cpp-opensaml?rev=719&view=rev
Log:
Remove HTTP assumption

Modified:
    branches/REL_2/saml/saml2/binding/impl/SAML2ECPDecoder.cpp

Modified: branches/REL_2/saml/saml2/binding/impl/SAML2ECPDecoder.cpp
URL: http://svn.shibboleth.net/view/cpp-opensaml/branches/REL_2/saml/saml2/binding/impl/SAML2ECPDecoder.cpp?rev=719&r1=718&r2=719&view=diff
==============================================================================
--- branches/REL_2/saml/saml2/binding/impl/SAML2ECPDecoder.cpp (original)
+++ branches/REL_2/saml/saml2/binding/impl/SAML2ECPDecoder.cpp Thu Mar 15 15:48:51 2012
@@ -80,13 +80,13 @@
     Category& log = Category::getInstance(SAML_LOGCAT".MessageDecoder.SAML2ECP");
 
     log.debug("validating input");
-    const HTTPRequest* httpRequest=dynamic_cast<const HTTPRequest*>(&genericRequest);
-    if (!httpRequest)
-        throw BindingException("Unable to cast request object to HTTPRequest type.");
-    string s = genericRequest.getContentType();
-    if (s.find("application/vnd.paos+xml") == string::npos) {
-        log.warn("ignoring incorrect content type (%s)", s.c_str() ? s.c_str() : "none");
-        throw BindingException("Invalid content type for PAOS message.");
+    const HTTPRequest* httpRequest = dynamic_cast<const HTTPRequest*>(&genericRequest);
+    if (httpRequest) {
+        string s = httpRequest->getContentType();
+        if (s.find("application/vnd.paos+xml") == string::npos) {
+            log.warn("ignoring incorrect content type (%s)", s.c_str() ? s.c_str() : "none");
+            throw BindingException("Invalid content type for PAOS message.");
+        }
     }
 
     const char* data = genericRequest.getRequestBody();
@@ -119,17 +119,19 @@
             extractMessageDetails(*response, genericRequest, samlconstants::SAML20P_NS, policy);
             policy.evaluate(*response, &genericRequest);
 
-            // Check destination URL.
-            auto_ptr_char dest(response->getDestination());
-            const char* dest2 = httpRequest->getRequestURL();
-            const char* delim = strchr(dest2, '?');
-            if (response->getSignature() && (!dest.get() || !*(dest.get()))) {
-                log.error("signed SAML message missing Destination attribute");
-                throw BindingException("Signed SAML message missing Destination attribute identifying intended destination.");
-            }
-            else if (dest.get() && *dest.get() && ((delim && strncmp(dest.get(), dest2, delim - dest2)) || (!delim && strcmp(dest.get(),dest2)))) {
-                log.error("PAOS response targeted at (%s), but delivered to (%s)", dest.get(), dest2);
-                throw BindingException("SAML message delivered with PAOS to incorrect server URL.");
+            // Check destination URL if this is HTTP.
+            if (httpRequest) {
+                auto_ptr_char dest(response->getDestination());
+                const char* dest2 = httpRequest->getRequestURL();
+                const char* delim = strchr(dest2, '?');
+                if (response->getSignature() && (!dest.get() || !*(dest.get()))) {
+                    log.error("signed SAML message missing Destination attribute");
+                    throw BindingException("Signed SAML message missing Destination attribute identifying intended destination.");
+                }
+                else if (dest.get() && *dest.get() && ((delim && strncmp(dest.get(), dest2, delim - dest2)) || (!delim && strcmp(dest.get(), dest2)))) {
+                    log.error("PAOS response targeted at (%s), but delivered to (%s)", dest.get(), dest2);
+                    throw BindingException("SAML message delivered with PAOS to incorrect server URL.");
+                }
             }
 
             // Check for RelayState header.



More information about the commits mailing list