X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml1%2Fcore%2Fimpl%2FProtocolsSchemaValidators.cpp;h=ab6e67ebed9b7e3f33452530c69d60124dd12441;hb=dcb21980274a17c1372787af204c6314a5e39ff0;hp=d4b1bc203a35672e023623a8113ba8269af042ba;hpb=23a155260850eef12ba34223fad83d4969df95d0;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml1/core/impl/ProtocolsSchemaValidators.cpp b/saml/saml1/core/impl/ProtocolsSchemaValidators.cpp index d4b1bc2..ab6e67e 100644 --- a/saml/saml1/core/impl/ProtocolsSchemaValidators.cpp +++ b/saml/saml1/core/impl/ProtocolsSchemaValidators.cpp @@ -24,13 +24,14 @@ #include "exceptions.h" #include "saml1/core/Protocols.h" +using namespace opensaml::saml1p; using namespace opensaml::saml1; using namespace opensaml; using namespace xmltooling; using namespace std; namespace opensaml { - namespace saml1 { + namespace saml1p { XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,AssertionArtifact); XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,StatusMessage); @@ -71,18 +72,32 @@ namespace opensaml { BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,StatusCode); XMLOBJECTVALIDATOR_REQUIRE(StatusCode,Value); END_XMLOBJECTVALIDATOR; + + BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Status); + XMLOBJECTVALIDATOR_REQUIRE(Status,StatusCode); + const QName* value=ptr->getStatusCode()->getValue(); + if (!value || (*value!=StatusCode::SUCCESS && *value!=StatusCode::REQUESTER && + *value!=StatusCode::RESPONDER && *value!=StatusCode::VERSIONMISMATCH)) + throw ValidationException("Top-level status code not one of the allowable values."); + END_XMLOBJECTVALIDATOR; + + BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Response); + XMLOBJECTVALIDATOR_REQUIRE(Response,ResponseID); + XMLOBJECTVALIDATOR_REQUIRE(Response,IssueInstant); + XMLOBJECTVALIDATOR_REQUIRE(Response,Status); + END_XMLOBJECTVALIDATOR; }; }; #define REGISTER_ELEMENT(cname) \ q=QName(SAMLConstants::SAML1P_NS,cname::LOCAL_NAME); \ XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \ - Validator::registerValidator(q,new cname##SchemaValidator()) + ProtocolSchemaValidators.registerValidator(q,new cname##SchemaValidator()) #define REGISTER_TYPE(cname) \ q=QName(SAMLConstants::SAML1P_NS,cname::TYPE_NAME); \ XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \ - Validator::registerValidator(q,new cname##SchemaValidator()) + ProtocolSchemaValidators.registerValidator(q,new cname##SchemaValidator()) #define REGISTER_ELEMENT_NOVAL(cname) \ q=QName(SAMLConstants::SAML1P_NS,cname::LOCAL_NAME); \ @@ -92,7 +107,9 @@ namespace opensaml { q=QName(SAMLConstants::SAML1P_NS,cname::TYPE_NAME); \ XMLObjectBuilder::registerBuilder(q,new cname##Builder()); -void opensaml::saml1::registerProtocolClasses() { +ValidatorSuite opensaml::saml1p::ProtocolSchemaValidators("ProtocolSchemaValidators"); + +void opensaml::saml1p::registerProtocolClasses() { QName q; REGISTER_ELEMENT(AssertionArtifact); REGISTER_ELEMENT(AttributeQuery); @@ -100,6 +117,8 @@ void opensaml::saml1::registerProtocolClasses() { REGISTER_ELEMENT(AuthorizationDecisionQuery); REGISTER_ELEMENT(Request); REGISTER_ELEMENT(RespondWith); + REGISTER_ELEMENT(Response); + REGISTER_ELEMENT(Status); REGISTER_ELEMENT(StatusCode); REGISTER_ELEMENT_NOVAL(StatusDetail); REGISTER_ELEMENT(StatusMessage); @@ -107,6 +126,8 @@ void opensaml::saml1::registerProtocolClasses() { REGISTER_TYPE(AuthenticationQuery); REGISTER_TYPE(AuthorizationDecisionQuery); REGISTER_TYPE(Request); + REGISTER_TYPE(Response); + REGISTER_TYPE(Status); REGISTER_TYPE(StatusCode); REGISTER_TYPE_NOVAL(StatusDetail); }