X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fbinding%2Fimpl%2FSimpleSigningRule.cpp;h=c8cbf5f5b310d90bb626ae348c58ec5a7e1043e9;hb=71c32047b99f8c4d59e214918b0d4904cd8492bc;hp=32ef4665ab3f0306392538efbcff0b50f33d44d0;hpb=0f6286d0ffd9371c187ecb1775cbd199ed051af5;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/binding/impl/SimpleSigningRule.cpp b/saml/binding/impl/SimpleSigningRule.cpp index 32ef466..c8cbf5f 100644 --- a/saml/binding/impl/SimpleSigningRule.cpp +++ b/saml/binding/impl/SimpleSigningRule.cpp @@ -49,7 +49,10 @@ namespace opensaml { SimpleSigningRule(const DOMElement* e); virtual ~SimpleSigningRule() {} - void evaluate(const xmltooling::XMLObject& message, const GenericRequest* request, SecurityPolicy& policy) const; + const char* getType() const { + return SIMPLESIGNING_POLICY_RULE; + } + void evaluate(const XMLObject& message, const GenericRequest* request, SecurityPolicy& policy) const; private: // Appends a raw parameter=value pair to the string. @@ -175,17 +178,24 @@ void SimpleSigningRule::evaluate(const XMLObject& message, const GenericRequest* KeyInfo* keyInfo=NULL; pch = request->getParameter("KeyInfo"); if (pch) { - try { - istringstream kstrm(pch); - DOMDocument* doc = XMLToolingConfig::getConfig().getParser().parse(kstrm); - XercesJanitor janitor(doc); - XMLObject* kxml = XMLObjectBuilder::buildOneFromElement(doc->getDocumentElement(), true); - janitor.release(); - if (!(keyInfo=dynamic_cast(kxml))) - delete kxml; + unsigned int x; + XMLByte* decoded=Base64::decode(reinterpret_cast(pch),&x); + if (decoded) { + try { + istringstream kstrm(pch); + DOMDocument* doc = XMLToolingConfig::getConfig().getParser().parse(kstrm); + XercesJanitor janitor(doc); + XMLObject* kxml = XMLObjectBuilder::buildOneFromElement(doc->getDocumentElement(), true); + janitor.release(); + if (!(keyInfo=dynamic_cast(kxml))) + delete kxml; + } + catch (XMLToolingException& ex) { + log.warn("Failed to load KeyInfo from message: %s", ex.what()); + } } - catch (XMLToolingException& ex) { - log.warn("Failed to load KeyInfo from message: %s", ex.what()); + else { + log.warn("Failed to load KeyInfo from message: Unable to decode base64-encoded KeyInfo."); } } @@ -204,5 +214,5 @@ void SimpleSigningRule::evaluate(const XMLObject& message, const GenericRequest* } log.debug("signature verified against message issuer"); - policy.setSecure(true); + policy.setAuthenticated(true); }