X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fcore%2Fimpl%2FAssertions20Impl.cpp;h=513bab61c1b4f5b83cc9984b1e9db9fef5ddbfa2;hb=0beb48ce00d0b6a3f177f7d9b48af1870ee92190;hp=57310b3f4428da66618aef30cace0739dd687fec;hpb=e0626e20a2bb32174f1a0010cc425b0d11a32cc6;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/core/impl/Assertions20Impl.cpp b/saml/saml2/core/impl/Assertions20Impl.cpp index 57310b3..513bab6 100644 --- a/saml/saml2/core/impl/Assertions20Impl.cpp +++ b/saml/saml2/core/impl/Assertions20Impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006 Internet2 + * Copyright 2001-2007 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,26 +25,25 @@ #include "saml/encryption/EncryptedKeyResolver.h" #include "saml2/core/Assertions.h" -#include #include -#include #include #include #include #include #include #include -#include #include #include using namespace opensaml::saml2; -using namespace opensaml; using namespace xmlencryption; using namespace xmlsignature; using namespace xmltooling; using namespace std; +using xmlconstants::XMLSIG_NS; +using xmlconstants::XMLENC_NS; +using samlconstants::SAML20_NS; #if defined (_MSC_VER) #pragma warning( push ) @@ -63,9 +62,7 @@ namespace opensaml { class SAML_DLLLOCAL NameIDTypeImpl : public virtual NameIDType, public AbstractSimpleElement, - public AbstractChildlessElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -92,8 +89,7 @@ namespace opensaml { } NameIDTypeImpl(const NameIDTypeImpl& src) - : AbstractXMLObject(src), AbstractSimpleElement(src), - AbstractDOMCachingXMLObject(src), AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); setNameQualifier(src.getNameQualifier()); setSPNameQualifier(src.getSPNameQualifier()); @@ -106,7 +102,6 @@ namespace opensaml { IMPL_STRING_ATTRIB(SPNameQualifier); IMPL_STRING_ATTRIB(Format); IMPL_STRING_ATTRIB(SPProvidedID); - IMPL_XMLOBJECT_CONTENT; protected: void marshallAttributes(DOMElement* domElement) const { @@ -157,10 +152,11 @@ namespace opensaml { } }; + //TODO unit test for this + // - need to test encryption/decryption too, or already done in xmltooling ? class SAML_DLLLOCAL EncryptedElementTypeImpl : public virtual EncryptedElementType, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -184,7 +180,7 @@ namespace opensaml { } EncryptedElementTypeImpl(const EncryptedElementTypeImpl& src) - : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src), AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); if (src.getEncryptedData()) setEncryptedData(src.getEncryptedData()->cloneEncryptedData()); @@ -220,12 +216,13 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_FOREIGN_CHILD(EncryptedData,xmlencryption,XMLConstants::XMLENC_NS,false); - PROC_TYPED_FOREIGN_CHILDREN(EncryptedKey,xmlencryption,XMLConstants::XMLENC_NS,false); + PROC_TYPED_FOREIGN_CHILD(EncryptedData,xmlencryption,XMLENC_NS,false); + PROC_TYPED_FOREIGN_CHILDREN(EncryptedKey,xmlencryption,XMLENC_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; + //TODO unit test for this class SAML_DLLLOCAL EncryptedIDImpl : public virtual EncryptedID, public EncryptedElementTypeImpl { public: @@ -245,7 +242,6 @@ namespace opensaml { class SAML_DLLLOCAL AudienceRestrictionImpl : public virtual AudienceRestriction, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -257,7 +253,7 @@ namespace opensaml { } AudienceRestrictionImpl(const AudienceRestrictionImpl& src) - : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src), AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { VectorOf(Audience) v=getAudiences(); for (vector::const_iterator i=src.m_Audiences.begin(); i!=src.m_Audiences.end(); i++) { if (*i) { @@ -274,15 +270,14 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(Audience,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILDREN(Audience,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; class SAML_DLLLOCAL OneTimeUseImpl : public virtual OneTimeUse, - public AbstractChildlessElement, + public AbstractSimpleElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -294,7 +289,7 @@ namespace opensaml { } OneTimeUseImpl(const OneTimeUseImpl& src) - : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src), AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { } IMPL_XMLOBJECT_CLONE(OneTimeUse); @@ -306,20 +301,22 @@ namespace opensaml { class SAML_DLLLOCAL ProxyRestrictionImpl : public virtual ProxyRestriction, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { public: - virtual ~ProxyRestrictionImpl() {} + virtual ~ProxyRestrictionImpl() { + XMLString::release(&m_Count); + } ProxyRestrictionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + m_Count=NULL; } ProxyRestrictionImpl(const ProxyRestrictionImpl& src) - : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src), AbstractValidatingXMLObject(src) { - setCount(src.getCount()); + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + setCount(src.m_Count); VectorOf(Audience) v=getAudiences(); for (vector::const_iterator i=src.m_Audiences.begin(); i!=src.m_Audiences.end(); i++) { if (*i) { @@ -341,7 +338,7 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(Audience,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILDREN(Audience,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -355,7 +352,6 @@ namespace opensaml { class SAML_DLLLOCAL ConditionsImpl : public virtual Conditions, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -374,7 +370,7 @@ namespace opensaml { } ConditionsImpl(const ConditionsImpl& src) - : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src), AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setNotBefore(src.getNotBefore()); setNotOnOrAfter(src.getNotOnOrAfter()); @@ -409,8 +405,8 @@ namespace opensaml { } IMPL_XMLOBJECT_CLONE(Conditions); - IMPL_DATETIME_ATTRIB(NotBefore); - IMPL_DATETIME_ATTRIB(NotOnOrAfter); + IMPL_DATETIME_ATTRIB(NotBefore,0); + IMPL_DATETIME_ATTRIB(NotOnOrAfter,SAMLTIME_MAX); IMPL_TYPED_CHILDREN(AudienceRestriction, m_children.end()); IMPL_TYPED_CHILDREN(OneTimeUse,m_children.end()); IMPL_TYPED_CHILDREN(ProxyRestriction, m_children.end()); @@ -423,10 +419,10 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AudienceRestriction,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(OneTimeUse,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(ProxyRestriction,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(Condition,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILDREN(AudienceRestriction,SAML20_NS,false); + PROC_TYPED_CHILDREN(OneTimeUse,SAML20_NS,false); + PROC_TYPED_CHILDREN(ProxyRestriction,SAML20_NS,false); + PROC_TYPED_CHILDREN(Condition,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -437,8 +433,7 @@ namespace opensaml { } }; - class SAML_DLLLOCAL SubjectConfirmationDataImpl - : public virtual SubjectConfirmationData, public AnyElementImpl, public AbstractValidatingXMLObject + class SAML_DLLLOCAL SubjectConfirmationDataImpl : public virtual SubjectConfirmationData, public AnyElementImpl { void init() { m_NotBefore=m_NotOnOrAfter=NULL; @@ -458,8 +453,7 @@ namespace opensaml { init(); } - SubjectConfirmationDataImpl(const SubjectConfirmationDataImpl& src) - : AnyElementImpl(src), AbstractValidatingXMLObject(src) { + SubjectConfirmationDataImpl(const SubjectConfirmationDataImpl& src) : AnyElementImpl(src) { init(); setNotBefore(src.getNotBefore()); setNotOnOrAfter(src.getNotOnOrAfter()); @@ -469,14 +463,14 @@ namespace opensaml { } IMPL_XMLOBJECT_CLONE(SubjectConfirmationData); - IMPL_DATETIME_ATTRIB(NotBefore); - IMPL_DATETIME_ATTRIB(NotOnOrAfter); + IMPL_DATETIME_ATTRIB(NotBefore,0); + IMPL_DATETIME_ATTRIB(NotOnOrAfter,SAMLTIME_MAX); IMPL_STRING_ATTRIB(Recipient); IMPL_STRING_ATTRIB(InResponseTo); IMPL_STRING_ATTRIB(Address); public: - void setAttribute(QName& qualifiedName, const XMLCh* value) { + void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),NOTBEFORE_ATTRIB_NAME)) { setNotBefore(value); @@ -499,7 +493,7 @@ namespace opensaml { return; } } - AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value); + AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID); } protected: @@ -516,12 +510,11 @@ namespace opensaml { }; class SAML_DLLLOCAL KeyInfoConfirmationDataTypeImpl : public virtual KeyInfoConfirmationDataType, - public AbstractDOMCachingXMLObject, public AbstractComplexElement, public AbstractAttributeExtensibleXMLObject, + public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, - public AbstractXMLObjectUnmarshaller, - public AbstractValidatingXMLObject + public AbstractXMLObjectUnmarshaller { void init() { m_NotBefore=m_NotOnOrAfter=NULL; @@ -542,10 +535,8 @@ namespace opensaml { } KeyInfoConfirmationDataTypeImpl(const KeyInfoConfirmationDataTypeImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractAttributeExtensibleXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { init(); setNotBefore(src.getNotBefore()); setNotOnOrAfter(src.getNotOnOrAfter()); @@ -553,23 +544,20 @@ namespace opensaml { setInResponseTo(src.getInResponseTo()); setAddress(src.getAddress()); VectorOf(KeyInfo) v=getKeyInfos(); - for (vector::const_iterator i=src.m_KeyInfos.begin(); i!=src.m_KeyInfos.end(); i++) { - if (*i) { - v.push_back((*i)->cloneKeyInfo()); - } - } + for (vector::const_iterator i=src.m_KeyInfos.begin(); i!=src.m_KeyInfos.end(); ++i) + v.push_back((*i)->cloneKeyInfo()); } IMPL_XMLOBJECT_CLONE(KeyInfoConfirmationDataType); - IMPL_DATETIME_ATTRIB(NotBefore); - IMPL_DATETIME_ATTRIB(NotOnOrAfter); + IMPL_DATETIME_ATTRIB(NotBefore,0); + IMPL_DATETIME_ATTRIB(NotOnOrAfter,SAMLTIME_MAX); IMPL_STRING_ATTRIB(Recipient); IMPL_STRING_ATTRIB(InResponseTo); IMPL_STRING_ATTRIB(Address); IMPL_TYPED_CHILDREN(KeyInfo,m_children.end()); public: - void setAttribute(QName& qualifiedName, const XMLCh* value) { + void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),NOTBEFORE_ATTRIB_NAME)) { setNotBefore(value); @@ -592,7 +580,7 @@ namespace opensaml { return; } } - AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value); + AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID); } protected: @@ -602,32 +590,22 @@ namespace opensaml { MARSHALL_STRING_ATTRIB(Recipient,RECIPIENT,NULL); MARSHALL_STRING_ATTRIB(InResponseTo,INRESPONSETO,NULL); MARSHALL_STRING_ATTRIB(Address,ADDRESS,NULL); - - // Take care of wildcard. - for (map::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) { - DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart()); - if (i->first.hasPrefix()) - attr->setPrefix(i->first.getPrefix()); - attr->setNodeValue(i->second); - domElement->setAttributeNode(attr); - } + marshallExtensionAttributes(domElement); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(KeyInfo,XMLConstants::XMLSIG_NS,false); + PROC_TYPED_CHILDREN(KeyInfo,XMLSIG_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } void processAttribute(const DOMAttr* attribute) { - QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix()); - setAttribute(q,attribute->getNodeValue()); + unmarshallExtensionAttribute(attribute); } }; class SAML_DLLLOCAL SubjectConfirmationImpl : public virtual SubjectConfirmation, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -661,9 +639,7 @@ namespace opensaml { } SubjectConfirmationImpl(const SubjectConfirmationImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setMethod(src.getMethod()); if (src.getBaseID()) @@ -692,11 +668,11 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(BaseID,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILD(NameID,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILD(EncryptedID,SAMLConstants::SAML20_NS,false); - PROC_XMLOBJECT_CHILD(SubjectConfirmationData,SAMLConstants::SAML20_NS); - PROC_TYPED_CHILD(KeyInfoConfirmationDataType,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILD(BaseID,SAML20_NS,false); + PROC_TYPED_CHILD(NameID,SAML20_NS,false); + PROC_TYPED_CHILD(EncryptedID,SAML20_NS,false); + PROC_TYPED_CHILD(KeyInfoConfirmationDataType,SAML20_NS,false); + PROC_XMLOBJECT_CHILD(SubjectConfirmationData,SAML20_NS); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -709,14 +685,13 @@ namespace opensaml { class SAML_DLLLOCAL SubjectImpl : public virtual Subject, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { void init() { m_BaseID=NULL; m_NameID=NULL; - //m_EncryptedID=NULL; + m_EncryptedID=NULL; m_children.push_back(NULL); m_children.push_back(NULL); m_children.push_back(NULL); @@ -735,9 +710,7 @@ namespace opensaml { } SubjectImpl(const SubjectImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); if (src.getBaseID()) setBaseID(src.getBaseID()->cloneBaseID()); @@ -761,18 +734,17 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(BaseID,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILD(NameID,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILD(EncryptedID,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(SubjectConfirmation,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILD(BaseID,SAML20_NS,false); + PROC_TYPED_CHILD(NameID,SAML20_NS,false); + PROC_TYPED_CHILD(EncryptedID,SAML20_NS,false); + PROC_TYPED_CHILDREN(SubjectConfirmation,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; class SAML_DLLLOCAL SubjectLocalityImpl : public virtual SubjectLocality, - public AbstractChildlessElement, + public AbstractSimpleElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -791,7 +763,7 @@ namespace opensaml { } SubjectLocalityImpl(const SubjectLocalityImpl& src) - : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src), AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); setAddress(src.getAddress()); setDNSName(src.getDNSName()); @@ -814,8 +786,8 @@ namespace opensaml { } }; - class SAML_DLLLOCAL AuthnContextDeclImpl - : public virtual AuthnContextDecl, public AnyElementImpl, public AbstractValidatingXMLObject + //TODO need unit test for this + class SAML_DLLLOCAL AuthnContextDeclImpl : public virtual AuthnContextDecl, public AnyElementImpl { public: virtual ~AuthnContextDeclImpl() {} @@ -824,7 +796,8 @@ namespace opensaml { : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - AuthnContextDeclImpl(const AuthnContextDeclImpl& src) : AnyElementImpl(src), AbstractValidatingXMLObject(src) {} + AuthnContextDeclImpl(const AuthnContextDeclImpl& src) : AnyElementImpl(src) { + } IMPL_XMLOBJECT_CLONE(AuthnContextDecl); }; @@ -832,7 +805,6 @@ namespace opensaml { class SAML_DLLLOCAL AuthnContextImpl : public virtual AuthnContext, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -858,9 +830,7 @@ namespace opensaml { } AuthnContextImpl(const AuthnContextImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); if (src.getAuthnContextClassRef()) setAuthnContextClassRef(src.getAuthnContextClassRef()->cloneAuthnContextClassRef()); @@ -884,10 +854,10 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(AuthnContextClassRef,SAMLConstants::SAML20_NS,false); - PROC_XMLOBJECT_CHILD(AuthnContextDecl,SAMLConstants::SAML20_NS); - PROC_TYPED_CHILD(AuthnContextDeclRef,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(AuthenticatingAuthority,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILD(AuthnContextClassRef,SAML20_NS,false); + PROC_XMLOBJECT_CHILD(AuthnContextDecl,SAML20_NS); + PROC_TYPED_CHILD(AuthnContextDeclRef,SAML20_NS,false); + PROC_TYPED_CHILDREN(AuthenticatingAuthority,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; @@ -895,7 +865,6 @@ namespace opensaml { class SAML_DLLLOCAL AuthnStatementImpl : public virtual AuthnStatement, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -924,9 +893,7 @@ namespace opensaml { } AuthnStatementImpl(const AuthnStatementImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setAuthnInstant(src.getAuthnInstant()); setSessionIndex(src.getSessionIndex()); @@ -941,9 +908,9 @@ namespace opensaml { Statement* cloneStatement() const { return cloneAuthnStatement(); } - IMPL_DATETIME_ATTRIB(AuthnInstant); + IMPL_DATETIME_ATTRIB(AuthnInstant,0); IMPL_STRING_ATTRIB(SessionIndex); - IMPL_DATETIME_ATTRIB(SessionNotOnOrAfter); + IMPL_DATETIME_ATTRIB(SessionNotOnOrAfter,SAMLTIME_MAX); IMPL_TYPED_CHILD(SubjectLocality); IMPL_TYPED_CHILD(AuthnContext); @@ -955,8 +922,8 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(SubjectLocality,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILD(AuthnContext,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILD(SubjectLocality,SAML20_NS,false); + PROC_TYPED_CHILD(AuthnContext,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -970,9 +937,7 @@ namespace opensaml { class SAML_DLLLOCAL ActionImpl : public virtual Action, public AbstractSimpleElement, - public AbstractChildlessElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -985,16 +950,13 @@ namespace opensaml { : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Namespace(NULL) { } - ActionImpl(const ActionImpl& src) : AbstractXMLObject(src), - AbstractSimpleElement(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + ActionImpl(const ActionImpl& src) + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { setNamespace(src.getNamespace()); } IMPL_XMLOBJECT_CLONE(Action); IMPL_STRING_ATTRIB(Namespace); - IMPL_XMLOBJECT_CONTENT; protected: void marshallAttributes(DOMElement* domElement) const { @@ -1010,7 +972,6 @@ namespace opensaml { class SAML_DLLLOCAL EvidenceImpl : public virtual Evidence, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -1022,9 +983,7 @@ namespace opensaml { } EvidenceImpl(const EvidenceImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { if (*i) { AssertionIDRef* ref=dynamic_cast(*i); @@ -1062,10 +1021,10 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AssertionIDRef,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(AssertionURIRef,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(Assertion,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(EncryptedAssertion,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILDREN(AssertionIDRef,SAML20_NS,false); + PROC_TYPED_CHILDREN(AssertionURIRef,SAML20_NS,false); + PROC_TYPED_CHILDREN(Assertion,SAML20_NS,false); + PROC_TYPED_CHILDREN(EncryptedAssertion,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; @@ -1073,7 +1032,6 @@ namespace opensaml { class SAML_DLLLOCAL AuthzDecisionStatementImpl : public virtual AuthzDecisionStatement, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -1096,9 +1054,7 @@ namespace opensaml { } AuthzDecisionStatementImpl(const AuthzDecisionStatementImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setResource(src.getResource()); setDecision(src.getDecision()); @@ -1128,8 +1084,8 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(Evidence,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(Action,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILD(Evidence,SAML20_NS,false); + PROC_TYPED_CHILDREN(Action,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -1140,8 +1096,8 @@ namespace opensaml { } }; - class SAML_DLLLOCAL AttributeValueImpl - : public virtual AttributeValue, public AnyElementImpl, public AbstractValidatingXMLObject + //TODO need unit test for this + class SAML_DLLLOCAL AttributeValueImpl : public virtual AttributeValue, public AnyElementImpl { public: virtual ~AttributeValueImpl() {} @@ -1150,7 +1106,8 @@ namespace opensaml { : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - AttributeValueImpl(const AttributeValueImpl& src) : AnyElementImpl(src), AbstractValidatingXMLObject(src) {} + AttributeValueImpl(const AttributeValueImpl& src) : AnyElementImpl(src) { + } IMPL_XMLOBJECT_CLONE(AttributeValue); }; @@ -1160,7 +1117,6 @@ namespace opensaml { public AbstractComplexElement, public AbstractAttributeExtensibleXMLObject, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -1180,10 +1136,8 @@ namespace opensaml { } AttributeImpl(const AttributeImpl& src) - : AbstractXMLObject(src), - AbstractAttributeExtensibleXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { init(); setName(src.getName()); setNameFormat(src.getNameFormat()); @@ -1202,7 +1156,7 @@ namespace opensaml { IMPL_STRING_ATTRIB(FriendlyName); IMPL_XMLOBJECT_CHILDREN(AttributeValue,m_children.end()); - void setAttribute(QName& qualifiedName, const XMLCh* value) { + void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),NAME_ATTRIB_NAME)) { setName(value); @@ -1217,7 +1171,7 @@ namespace opensaml { return; } } - AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value); + AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID); } protected: @@ -1225,15 +1179,7 @@ namespace opensaml { MARSHALL_STRING_ATTRIB(Name,NAME,NULL); MARSHALL_STRING_ATTRIB(NameFormat,NAMEFORMAT,NULL); MARSHALL_STRING_ATTRIB(FriendlyName,FRIENDLYNAME,NULL); - - // Take care of wildcard. - for (map::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) { - DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart()); - if (i->first.hasPrefix()) - attr->setPrefix(i->first.getPrefix()); - attr->setNodeValue(i->second); - domElement->setAttributeNode(attr); - } + marshallExtensionAttributes(domElement); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -1241,11 +1187,11 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix()); - setAttribute(q,attribute->getNodeValue()); + unmarshallExtensionAttribute(attribute); } }; + //TODO unit test for this class SAML_DLLLOCAL EncryptedAttributeImpl : public virtual EncryptedAttribute, public EncryptedElementTypeImpl { public: @@ -1265,7 +1211,6 @@ namespace opensaml { class SAML_DLLLOCAL AttributeStatementImpl : public virtual AttributeStatement, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -1277,9 +1222,7 @@ namespace opensaml { } AttributeStatementImpl(const AttributeStatementImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { if (*i) { Attribute* attribute=dynamic_cast(*i); @@ -1306,8 +1249,8 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(Attribute,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(EncryptedAttribute,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILDREN(Attribute,SAML20_NS,false); + PROC_TYPED_CHILDREN(EncryptedAttribute,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; @@ -1315,7 +1258,6 @@ namespace opensaml { class SAML_DLLLOCAL AdviceImpl : public virtual Advice, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { @@ -1327,9 +1269,7 @@ namespace opensaml { } AdviceImpl(const AdviceImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { if (*i) { AssertionIDRef* ref=dynamic_cast(*i); @@ -1356,7 +1296,7 @@ namespace opensaml { continue; } - getOthers().push_back((*i)->clone()); + getUnknownXMLObjects().push_back((*i)->clone()); } } } @@ -1366,19 +1306,19 @@ namespace opensaml { IMPL_TYPED_CHILDREN(AssertionURIRef,m_children.end()); IMPL_TYPED_CHILDREN(Assertion,m_children.end()); IMPL_TYPED_CHILDREN(EncryptedAssertion,m_children.end()); - IMPL_XMLOBJECT_CHILDREN(Other,m_children.end()); + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AssertionIDRef,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(AssertionURIRef,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(Assertion,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(EncryptedAssertion,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILDREN(AssertionIDRef,SAML20_NS,false); + PROC_TYPED_CHILDREN(AssertionURIRef,SAML20_NS,false); + PROC_TYPED_CHILDREN(Assertion,SAML20_NS,false); + PROC_TYPED_CHILDREN(EncryptedAssertion,SAML20_NS,false); // Unknown child. const XMLCh* nsURI=root->getNamespaceURI(); - if (!XMLString::equals(nsURI,SAMLConstants::SAML20_NS) && nsURI && *nsURI) { - getOthers().push_back(childXMLObject); + if (!XMLString::equals(nsURI,SAML20_NS) && nsURI && *nsURI) { + getUnknownXMLObjects().push_back(childXMLObject); return; } @@ -1386,6 +1326,7 @@ namespace opensaml { } }; + //TODO unit test for this class SAML_DLLLOCAL EncryptedAssertionImpl : public virtual EncryptedAssertion, public EncryptedElementTypeImpl { public: @@ -1405,12 +1346,12 @@ namespace opensaml { class SAML_DLLLOCAL AssertionImpl : public virtual Assertion, public AbstractComplexElement, public AbstractDOMCachingXMLObject, - public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { void init() { m_ID=NULL; + m_Version=NULL; m_IssueInstant=NULL; m_Issuer=NULL; m_Signature=NULL; @@ -1444,10 +1385,8 @@ namespace opensaml { init(); } - AssertionImpl(const AssertionImpl& src) - : AbstractXMLObject(src), - AbstractDOMCachingXMLObject(src), - AbstractValidatingXMLObject(src) { + AssertionImpl(const AssertionImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setVersion(src.getVersion()); setID(src.getID()); @@ -1491,10 +1430,6 @@ namespace opensaml { } } - const XMLCh* getId() const { - return getID(); - } - //IMPL_TYPED_CHILD(Signature); // Need customized setter. protected: @@ -1515,8 +1450,8 @@ namespace opensaml { IMPL_XMLOBJECT_CLONE(Assertion); IMPL_STRING_ATTRIB(Version); - IMPL_STRING_ATTRIB(ID); - IMPL_DATETIME_ATTRIB(IssueInstant); + IMPL_ID_ATTRIB(ID); + IMPL_DATETIME_ATTRIB(IssueInstant,0); IMPL_TYPED_CHILD(Issuer); IMPL_TYPED_CHILD(Subject); IMPL_TYPED_CHILD(Conditions); @@ -1534,21 +1469,23 @@ namespace opensaml { if (!m_ID) const_cast(this)->m_ID=SAMLConfig::getConfig().generateIdentifier(); MARSHALL_ID_ATTRIB(ID,ID,NULL); - if (!m_IssueInstant) - const_cast(this)->m_IssueInstant=new DateTime(time(NULL)); + if (!m_IssueInstant) { + const_cast(this)->m_IssueInstantEpoch=time(NULL); + const_cast(this)->m_IssueInstant=new DateTime(m_IssueInstantEpoch); + } MARSHALL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,NULL); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(Issuer,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILD(Signature,XMLConstants::XMLSIG_NS,false); - PROC_TYPED_CHILD(Subject,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILD(Conditions,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILD(Advice,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(AuthnStatement,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(AttributeStatement,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(AuthzDecisionStatement,SAMLConstants::SAML20_NS,false); - PROC_TYPED_CHILDREN(Statement,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILD(Issuer,SAML20_NS,false); + PROC_TYPED_CHILD(Signature,XMLSIG_NS,false); + PROC_TYPED_CHILD(Subject,SAML20_NS,false); + PROC_TYPED_CHILD(Conditions,SAML20_NS,false); + PROC_TYPED_CHILD(Advice,SAML20_NS,false); + PROC_TYPED_CHILDREN(AuthnStatement,SAML20_NS,false); + PROC_TYPED_CHILDREN(AttributeStatement,SAML20_NS,false); + PROC_TYPED_CHILDREN(AuthzDecisionStatement,SAML20_NS,false); + PROC_TYPED_CHILDREN(Statement,SAML20_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -1695,3 +1632,162 @@ const XMLCh SubjectLocality::LOCAL_NAME[] = UNICODE_LITERAL_15(S,u,b,j,e const XMLCh SubjectLocality::TYPE_NAME[] = UNICODE_LITERAL_19(S,u,b,j,e,c,t,L,o,c,a,l,i,t,y,T,y,p,e); const XMLCh SubjectLocality::ADDRESS_ATTRIB_NAME[] =UNICODE_LITERAL_7(A,d,d,r,e,s,s); const XMLCh SubjectLocality::DNSNAME_ATTRIB_NAME[] =UNICODE_LITERAL_7(D,N,S,N,a,m,e); + +const XMLCh NameIDType::UNSPECIFIED[] = // urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_1, chPeriod, chDigit_1, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_i, chLatin_d, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_u, chLatin_n, chLatin_s, chLatin_p, chLatin_e, chLatin_c, chLatin_i, chLatin_f, chLatin_i, chLatin_e, chLatin_d, chLatin_d, chNull +}; + +const XMLCh NameIDType::EMAIL[] = // urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_1, chPeriod, chDigit_1, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_i, chLatin_d, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_e, chLatin_m, chLatin_a, chLatin_i, chLatin_l, chLatin_A, chLatin_d, chLatin_d, chLatin_r, chLatin_e, chLatin_s, chLatin_s, chNull +}; + +const XMLCh NameIDType::X509_SUBJECT[] = // urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_1, chPeriod, chDigit_1, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_i, chLatin_d, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_X, chDigit_5, chDigit_0, chDigit_9, chLatin_S, chLatin_u, chLatin_b, chLatin_j, chLatin_e, chLatin_c, chLatin_t, + chLatin_N, chLatin_a, chLatin_m, chLatin_e, chNull +}; + +const XMLCh NameIDType::WIN_DOMAIN_QUALIFIED[] = // urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_1, chPeriod, chDigit_1, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_i, chLatin_d, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_W, chLatin_i, chLatin_n, chLatin_d, chLatin_o, chLatin_w, chLatin_s, + chLatin_D, chLatin_o, chLatin_m, chLatin_a, chLatin_i, chLatin_n, + chLatin_Q, chLatin_u, chLatin_a, chLatin_l, chLatin_i, chLatin_f, chLatin_i, chLatin_e, chLatin_d, + chLatin_N, chLatin_a, chLatin_m, chLatin_e, chNull +}; + +const XMLCh NameIDType::KERBEROS[] = // urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_i, chLatin_d, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_k, chLatin_e, chLatin_r, chLatin_b, chLatin_e, chLatin_r, chLatin_o, chLatin_s, chNull +}; + +const XMLCh NameIDType::ENTITY[] = // urn:oasis:names:tc:SAML:2.0:nameid-format:entity +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_i, chLatin_d, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_e, chLatin_n, chLatin_t, chLatin_i, chLatin_t, chLatin_y, chNull +}; + +const XMLCh NameIDType::PERSISTENT[] = // urn:oasis:names:tc:SAML:2.0:nameid-format:persistent +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_i, chLatin_d, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_p, chLatin_e, chLatin_r, chLatin_s, chLatin_i, chLatin_s, chLatin_t, chLatin_e, chLatin_n, chLatin_t, chNull +}; + +const XMLCh NameIDType::TRANSIENT[] = // urn:oasis:names:tc:SAML:2.0:nameid-format:transient +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_i, chLatin_d, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_t, chLatin_r, chLatin_a, chLatin_n, chLatin_s, chLatin_i, chLatin_e, chLatin_n, chLatin_t, chNull +}; + +const XMLCh SubjectConfirmation::BEARER[] = // urn:oasis:names:tc:SAML:2.0:cm:bearer +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_c, chLatin_m, chColon, chLatin_b, chLatin_e, chLatin_a, chLatin_r, chLatin_e, chLatin_r, chNull +}; + +const XMLCh SubjectConfirmation::HOLDER_KEY[] = // urn:oasis:names:tc:SAML:2.0:cm:holder-of-key +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_c, chLatin_m, chColon, chLatin_h, chLatin_o, chLatin_l, chLatin_d, chLatin_e, chLatin_r, chDash, + chLatin_o, chLatin_f, chDash, chLatin_k, chLatin_e, chLatin_y, chNull +}; + +const XMLCh SubjectConfirmation::SENDER_VOUCHES[] = // urn:oasis:names:tc:SAML:2.0:cm:sender-vouches +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_c, chLatin_m, chColon, chLatin_s, chLatin_e, chLatin_n, chLatin_d, chLatin_e, chLatin_r, chDash, + chLatin_v, chLatin_o, chLatin_u, chLatin_c, chLatin_h, chLatin_e, chLatin_s, chNull +}; + +const XMLCh Action::RWEDC_ACTION_NAMESPACE[] = // urn:oasis:names:tc:SAML:1.0:action:rwedc +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_1, chPeriod, chDigit_0, chColon, + chLatin_a, chLatin_c, chLatin_t, chLatin_i, chLatin_o, chLatin_n, chColon, + chLatin_r, chLatin_w, chLatin_e, chLatin_d, chLatin_c, chNull +}; + +const XMLCh Action::RWEDC_NEG_ACTION_NAMESPACE[] = // urn:oasis:names:tc:SAML:1.0:action:rwedc-negation +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_1, chPeriod, chDigit_0, chColon, + chLatin_a, chLatin_c, chLatin_t, chLatin_i, chLatin_o, chLatin_n, chColon, + chLatin_r, chLatin_w, chLatin_e, chLatin_d, chLatin_c, chDash, + chLatin_n, chLatin_e, chLatin_g, chLatin_a, chLatin_t, chLatin_i, chLatin_o, chLatin_n, chNull +}; + +const XMLCh Action::GHPP_ACTION_NAMESPACE[] = // urn:oasis:names:tc:SAML:1.0:action:ghpp +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_1, chPeriod, chDigit_0, chColon, + chLatin_a, chLatin_c, chLatin_t, chLatin_i, chLatin_o, chLatin_n, chColon, + chLatin_g, chLatin_h, chLatin_p, chLatin_p, chNull +}; + +const XMLCh Action::UNIX_ACTION_NAMESPACE[] = // urn:oasis:names:tc:SAML:1.0:action:unix +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_1, chPeriod, chDigit_0, chColon, + chLatin_a, chLatin_c, chLatin_t, chLatin_i, chLatin_o, chLatin_n, chColon, + chLatin_u, chLatin_n, chLatin_i, chLatin_x, chNull +}; + +const XMLCh Attribute::UNSPECIFIED[] = // urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_a, chLatin_t, chLatin_t, chLatin_r, chLatin_n, chLatin_a, chLatin_m, chLatin_e, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_u, chLatin_n, chLatin_s, chLatin_p, chLatin_e, chLatin_c, chLatin_i, chLatin_f, chLatin_i, chLatin_e, chLatin_d, chLatin_d, chNull +}; + +const XMLCh Attribute::URI_REFERENCE[] = // urn:oasis:names:tc:SAML:2.0:attrname-format:uri +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_a, chLatin_t, chLatin_t, chLatin_r, chLatin_n, chLatin_a, chLatin_m, chLatin_e, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_u, chLatin_r, chLatin_i, chNull +}; + +const XMLCh Attribute::BASIC[] = // urn:oasis:names:tc:SAML:2.0:attrname-format:basic +{ chLatin_u, chLatin_r, chLatin_n, chColon, chLatin_o, chLatin_a, chLatin_s, chLatin_i, chLatin_s, chColon, + chLatin_n, chLatin_a, chLatin_m, chLatin_e, chLatin_s, chColon, chLatin_t, chLatin_c, chColon, + chLatin_S, chLatin_A, chLatin_M, chLatin_L, chColon, chDigit_2, chPeriod, chDigit_0, chColon, + chLatin_a, chLatin_t, chLatin_t, chLatin_r, chLatin_n, chLatin_a, chLatin_m, chLatin_e, chDash, + chLatin_f, chLatin_o, chLatin_r, chLatin_m, chLatin_a, chLatin_t, chColon, + chLatin_b, chLatin_a, chLatin_s, chLatin_i, chLatin_c, chNull +};