X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=blobdiff_plain;f=saml%2Fsaml1%2Fbinding%2Fimpl%2FSAML1SOAPDecoder.cpp;h=4d88e7d25001847af826c017bee74485fae30638;hp=47f2c6071b0edf916d070f761e20e763afb10ea6;hb=9d61992f725e8b73421e9262a711f4cbdd782b18;hpb=53f30080aa11d6874d6e2c5c533b2fbd4be1fd17 diff --git a/saml/saml1/binding/impl/SAML1SOAPDecoder.cpp b/saml/saml1/binding/impl/SAML1SOAPDecoder.cpp index 47f2c60..4d88e7d 100644 --- a/saml/saml1/binding/impl/SAML1SOAPDecoder.cpp +++ b/saml/saml1/binding/impl/SAML1SOAPDecoder.cpp @@ -105,8 +105,18 @@ XMLObject* SAML1SOAPDecoder::decode( Request* request = dynamic_cast(body->getUnknownXMLObjects().front()); if (request) { // Run through the policy at two layers. - policy.evaluate(*env, &genericRequest); - policy.evaluate(*request, &genericRequest); + pair minor = request->getMinorVersion(); + policy.evaluate( + *env, + &genericRequest, + (minor.first && minor.second==0) ? samlconstants::SAML10_PROTOCOL_ENUM : samlconstants::SAML11_PROTOCOL_ENUM + ); + policy.reset(true); + policy.evaluate( + *request, + &genericRequest, + (minor.first && minor.second==0) ? samlconstants::SAML10_PROTOCOL_ENUM : samlconstants::SAML11_PROTOCOL_ENUM + ); xmlObject.release(); body->detach(); // frees Envelope request->detach(); // frees Body @@ -114,5 +124,5 @@ XMLObject* SAML1SOAPDecoder::decode( } } - throw BindingException("SOAP Envelope did not contain a SAML Request."); + throw BindingException("SOAP Envelope did not contain a SAML 1.x Request."); }