X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=blobdiff_plain;f=saml%2Fsaml1%2Fcore%2Fimpl%2FProtocolsSchemaValidators.cpp;h=839be3e189ac328af1f5848b686d0aa12727e74e;hp=ab6e67ebed9b7e3f33452530c69d60124dd12441;hb=e3441d806df3147cbe2554a7febf2a58d821c504;hpb=dcb21980274a17c1372787af204c6314a5e39ff0 diff --git a/saml/saml1/core/impl/ProtocolsSchemaValidators.cpp b/saml/saml1/core/impl/ProtocolsSchemaValidators.cpp index ab6e67e..839be3e 100644 --- a/saml/saml1/core/impl/ProtocolsSchemaValidators.cpp +++ b/saml/saml1/core/impl/ProtocolsSchemaValidators.cpp @@ -1,6 +1,6 @@ /* -* Copyright 2001-2006 Internet2 - * +* Copyright 2001-2009 Internet2 + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -16,7 +16,7 @@ /** * ProtocolsSchemaValidators.cpp - * + * * Schema-based validators for SAML 1.x Protocols classes */ @@ -24,18 +24,22 @@ #include "exceptions.h" #include "saml1/core/Protocols.h" +#include +#include + using namespace opensaml::saml1p; using namespace opensaml::saml1; using namespace opensaml; using namespace xmltooling; using namespace std; +using samlconstants::SAML1P_NS; namespace opensaml { namespace saml1p { - + XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,AssertionArtifact); XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,StatusMessage); - + BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,RespondWith); XMLOBJECTVALIDATOR_REQUIRE(RespondWith,QName); END_XMLOBJECTVALIDATOR; @@ -58,7 +62,10 @@ namespace opensaml { BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Request); XMLOBJECTVALIDATOR_REQUIRE(Request,RequestID); XMLOBJECTVALIDATOR_REQUIRE(Request,IssueInstant); - int count=0; + pair minor=ptr->getMinorVersion(); + if (!minor.first) + throw ValidationException("Request must have MinorVersion"); + int count=0; if (ptr->getQuery()!=NULL) count++; if (!ptr->getAssertionIDReferences().empty()) @@ -75,46 +82,48 @@ namespace opensaml { BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Status); XMLOBJECTVALIDATOR_REQUIRE(Status,StatusCode); - const QName* value=ptr->getStatusCode()->getValue(); + const xmltooling::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."); + 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); + pair minor=ptr->getMinorVersion(); + if (!minor.first) + throw ValidationException("Response must have MinorVersion"); END_XMLOBJECTVALIDATOR; }; }; #define REGISTER_ELEMENT(cname) \ - q=QName(SAMLConstants::SAML1P_NS,cname::LOCAL_NAME); \ + q=xmltooling::QName(SAML1P_NS,cname::LOCAL_NAME); \ XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \ - ProtocolSchemaValidators.registerValidator(q,new cname##SchemaValidator()) - + SchemaValidators.registerValidator(q,new cname##SchemaValidator()) + #define REGISTER_TYPE(cname) \ - q=QName(SAMLConstants::SAML1P_NS,cname::TYPE_NAME); \ + q=xmltooling::QName(SAML1P_NS,cname::TYPE_NAME); \ XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \ - ProtocolSchemaValidators.registerValidator(q,new cname##SchemaValidator()) + SchemaValidators.registerValidator(q,new cname##SchemaValidator()) #define REGISTER_ELEMENT_NOVAL(cname) \ - q=QName(SAMLConstants::SAML1P_NS,cname::LOCAL_NAME); \ + q=xmltooling::QName(SAML1P_NS,cname::LOCAL_NAME); \ XMLObjectBuilder::registerBuilder(q,new cname##Builder()); - + #define REGISTER_TYPE_NOVAL(cname) \ - q=QName(SAMLConstants::SAML1P_NS,cname::TYPE_NAME); \ + q=xmltooling::QName(SAML1P_NS,cname::TYPE_NAME); \ XMLObjectBuilder::registerBuilder(q,new cname##Builder()); -ValidatorSuite opensaml::saml1p::ProtocolSchemaValidators("ProtocolSchemaValidators"); - void opensaml::saml1p::registerProtocolClasses() { - QName q; + xmltooling::QName q; REGISTER_ELEMENT(AssertionArtifact); REGISTER_ELEMENT(AttributeQuery); REGISTER_ELEMENT(AuthenticationQuery); REGISTER_ELEMENT(AuthorizationDecisionQuery); + REGISTER_ELEMENT_NOVAL(Query); REGISTER_ELEMENT(Request); REGISTER_ELEMENT(RespondWith); REGISTER_ELEMENT(Response);