X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fcore%2Fimpl%2FAssertions20Impl.cpp;h=e472d6dd793ff7b2b6b1c0c6079c1c77a29b7745;hb=c94a8ec50180f280a81259fa13a23eb3a45e087f;hp=d5a9b5e78075d0d40408a713575b5de682d6e590;hpb=48857ad9a82c4695800123ecef931e7f8d9de199;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/core/impl/Assertions20Impl.cpp b/saml/saml2/core/impl/Assertions20Impl.cpp index d5a9b5e..e472d6d 100644 --- a/saml/saml2/core/impl/Assertions20Impl.cpp +++ b/saml/saml2/core/impl/Assertions20Impl.cpp @@ -1,35 +1,43 @@ -/* - * Copyright 2001-2009 Internet2 +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. * - * 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 + * UCAID licenses this file to you 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 * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. */ /** * Assertions20Impl.cpp * - * Implementation classes for SAML 2.0 Assertions schema + * Implementation classes for SAML 2.0 Assertions schema. */ #include "internal.h" #include "exceptions.h" #include "saml/encryption/EncryptedKeyResolver.h" #include "saml2/core/Assertions.h" +#include "signature/ContentReference.h" #include #include #include #include #include +#include +#include +#include #include #include @@ -70,7 +78,7 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Format=m_SPProvidedID=m_NameQualifier=m_SPNameQualifier=NULL; + m_Format=m_SPProvidedID=m_NameQualifier=m_SPNameQualifier=nullptr; } protected: @@ -94,13 +102,16 @@ namespace opensaml { NameIDTypeImpl(const NameIDTypeImpl& src) : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); + } + + void _clone(const NameIDTypeImpl& src) { setNameQualifier(src.getNameQualifier()); setSPNameQualifier(src.getSPNameQualifier()); setFormat(src.getFormat()); setSPProvidedID(src.getSPProvidedID()); } - IMPL_XMLOBJECT_CLONE(NameIDType); + IMPL_XMLOBJECT_CLONE_EX(NameIDType); IMPL_STRING_ATTRIB(NameQualifier); IMPL_STRING_ATTRIB(SPNameQualifier); IMPL_STRING_ATTRIB(Format); @@ -108,17 +119,17 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER,NULL); - MARSHALL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER,NULL); - MARSHALL_STRING_ATTRIB(Format,FORMAT,NULL); - MARSHALL_STRING_ATTRIB(SPProvidedID,SPPROVIDEDID,NULL); + MARSHALL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER,nullptr); + MARSHALL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER,nullptr); + MARSHALL_STRING_ATTRIB(Format,FORMAT,nullptr); + MARSHALL_STRING_ATTRIB(SPProvidedID,SPPROVIDEDID,nullptr); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER,NULL); - PROC_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER,NULL); - PROC_STRING_ATTRIB(Format,FORMAT,NULL); - PROC_STRING_ATTRIB(SPProvidedID,SPPROVIDEDID,NULL); + PROC_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER,nullptr); + PROC_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER,nullptr); + PROC_STRING_ATTRIB(Format,FORMAT,nullptr); + PROC_STRING_ATTRIB(SPProvidedID,SPPROVIDEDID,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -131,12 +142,10 @@ namespace opensaml { NameIDImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - NameIDImpl(const NameIDImpl& src) : AbstractXMLObject(src), NameIDTypeImpl(src) {} - - IMPL_XMLOBJECT_CLONE(NameID); - NameIDType* cloneNameIDType() const { - return new NameIDImpl(*this); + NameIDImpl(const NameIDImpl& src) : AbstractXMLObject(src), NameIDTypeImpl(src) { } + + IMPL_XMLOBJECT_CLONE_EX(NameID); }; class SAML_DLLLOCAL IssuerImpl : public virtual Issuer, public NameIDTypeImpl @@ -147,12 +156,10 @@ namespace opensaml { IssuerImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - IssuerImpl(const IssuerImpl& src) : AbstractXMLObject(src), NameIDTypeImpl(src) {} - - IMPL_XMLOBJECT_CLONE(Issuer); - NameIDType* cloneNameIDType() const { - return new IssuerImpl(*this); + IssuerImpl(const IssuerImpl& src) : AbstractXMLObject(src), NameIDTypeImpl(src) { } + + IMPL_XMLOBJECT_CLONE_EX(Issuer); }; //TODO unit test for this @@ -164,8 +171,8 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_EncryptedData=NULL; - m_children.push_back(NULL); + m_EncryptedData=nullptr; + m_children.push_back(nullptr); m_pos_EncryptedData=m_children.begin(); } @@ -185,17 +192,19 @@ namespace opensaml { EncryptedElementTypeImpl(const EncryptedElementTypeImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); + } + + void _clone(const EncryptedElementTypeImpl& src) { if (src.getEncryptedData()) setEncryptedData(src.getEncryptedData()->cloneEncryptedData()); - VectorOf(EncryptedKey) v=getEncryptedKeys(); for (vector::const_iterator i=src.m_EncryptedKeys.begin(); i!=src.m_EncryptedKeys.end(); i++) { if (*i) { - v.push_back((*i)->cloneEncryptedKey()); + getEncryptedKeys().push_back((*i)->cloneEncryptedKey()); } } } - IMPL_XMLOBJECT_CLONE(EncryptedElementType); + IMPL_XMLOBJECT_CLONE_EX(EncryptedElementType); IMPL_TYPED_FOREIGN_CHILD(EncryptedData,xmlencryption); IMPL_TYPED_FOREIGN_CHILDREN(EncryptedKey,xmlencryption,m_children.end()); @@ -215,12 +224,10 @@ namespace opensaml { EncryptedIDImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - EncryptedIDImpl(const EncryptedIDImpl& src) : AbstractXMLObject(src), EncryptedElementTypeImpl(src) {} - - IMPL_XMLOBJECT_CLONE(EncryptedID); - EncryptedElementType* cloneEncryptedElementType() const { - return new EncryptedIDImpl(*this); + EncryptedIDImpl(const EncryptedIDImpl& src) : AbstractXMLObject(src), EncryptedElementTypeImpl(src) { } + + IMPL_XMLOBJECT_CLONE_EX(EncryptedID); }; class SAML_DLLLOCAL ConditionImpl : public virtual Condition, public AnyElementImpl @@ -232,7 +239,7 @@ namespace opensaml { : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - ConditionImpl(const ConditionImpl& src) : AnyElementImpl(src) {} + ConditionImpl(const ConditionImpl& src) : AbstractXMLObject(src), AnyElementImpl(src) {} IMPL_XMLOBJECT_CLONE(Condition); }; @@ -252,18 +259,14 @@ namespace opensaml { AudienceRestrictionImpl(const AudienceRestrictionImpl& 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) { - v.push_back((*i)->cloneAudience()); + getAudiences().push_back((*i)->cloneAudience()); } } } - IMPL_XMLOBJECT_CLONE(AudienceRestriction); - Condition* cloneCondition() const { - return cloneAudienceRestriction(); - } + IMPL_XMLOBJECT_CLONE2(AudienceRestriction,Condition); IMPL_TYPED_CHILDREN(Audience,m_children.end()); protected: @@ -290,10 +293,7 @@ namespace opensaml { : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { } - IMPL_XMLOBJECT_CLONE(OneTimeUse); - Condition* cloneCondition() const { - return cloneOneTimeUse(); - } + IMPL_XMLOBJECT_CLONE2(OneTimeUse,Condition); }; class SAML_DLLLOCAL ProxyRestrictionImpl : public virtual ProxyRestriction, @@ -308,31 +308,26 @@ namespace opensaml { } ProxyRestrictionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { - m_Count=NULL; + : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Count(nullptr) { } ProxyRestrictionImpl(const ProxyRestrictionImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src), m_Count(nullptr) { 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) { - v.push_back((*i)->cloneAudience()); + getAudiences().push_back((*i)->cloneAudience()); } } } - IMPL_XMLOBJECT_CLONE(ProxyRestriction); - Condition* cloneCondition() const { - return cloneProxyRestriction(); - } + IMPL_XMLOBJECT_CLONE2(ProxyRestriction,Condition); IMPL_TYPED_CHILDREN(Audience,m_children.end()); IMPL_INTEGER_ATTRIB(Count); protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_INTEGER_ATTRIB(Count,COUNT,NULL); + MARSHALL_INTEGER_ATTRIB(Count,COUNT,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -341,7 +336,7 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_INTEGER_ATTRIB(Count,COUNT,NULL); + PROC_INTEGER_ATTRIB(Count,COUNT,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -353,20 +348,21 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_ConfirmationMethod=NULL; - m_DelegationInstant=NULL; - m_BaseID=NULL; - m_NameID=NULL; - m_EncryptedID=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_ConfirmationMethod=nullptr; + m_DelegationInstant=nullptr; + m_BaseID=nullptr; + m_NameID=nullptr; + m_EncryptedID=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_BaseID=m_children.begin(); m_pos_NameID=m_pos_BaseID; ++m_pos_NameID; m_pos_EncryptedID=m_pos_NameID; ++m_pos_EncryptedID; } + public: virtual ~DelegateImpl() { XMLString::release(&m_ConfirmationMethod); @@ -400,8 +396,8 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(ConfirmationMethod,CONFIRMATIONMETHOD,NULL); - MARSHALL_DATETIME_ATTRIB(DelegationInstant,DELEGATIONINSTANT,NULL); + MARSHALL_STRING_ATTRIB(ConfirmationMethod,CONFIRMATIONMETHOD,nullptr); + MARSHALL_DATETIME_ATTRIB(DelegationInstant,DELEGATIONINSTANT,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -412,8 +408,8 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(ConfirmationMethod,CONFIRMATIONMETHOD,NULL); - PROC_DATETIME_ATTRIB(DelegationInstant,DELEGATIONINSTANT,NULL); + PROC_STRING_ATTRIB(ConfirmationMethod,CONFIRMATIONMETHOD,nullptr); + PROC_DATETIME_ATTRIB(DelegationInstant,DELEGATIONINSTANT,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -433,18 +429,14 @@ namespace opensaml { DelegationRestrictionTypeImpl(const DelegationRestrictionTypeImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOf(Delegate) v=getDelegates(); for (vector::const_iterator i=src.m_Delegates.begin(); i!=src.m_Delegates.end(); i++) { if (*i) { - v.push_back((*i)->cloneDelegate()); + getDelegates().push_back((*i)->cloneDelegate()); } } } - IMPL_XMLOBJECT_CLONE(DelegationRestrictionType); - Condition* cloneCondition() const { - return cloneDelegationRestrictionType(); - } + IMPL_XMLOBJECT_CLONE2(DelegationRestrictionType,Condition); IMPL_TYPED_CHILDREN(Delegate,m_children.end()); protected: @@ -461,8 +453,9 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_NotBefore=m_NotOnOrAfter=NULL; + m_NotBefore=m_NotOnOrAfter=nullptr; } + public: virtual ~ConditionsImpl() { delete m_NotBefore; @@ -519,8 +512,8 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_DATETIME_ATTRIB(NotBefore,NOTBEFORE,NULL); - MARSHALL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); + MARSHALL_DATETIME_ATTRIB(NotBefore,NOTBEFORE,nullptr); + MARSHALL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -532,8 +525,8 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_DATETIME_ATTRIB(NotBefore,NOTBEFORE,NULL); - PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); + PROC_DATETIME_ATTRIB(NotBefore,NOTBEFORE,nullptr); + PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -541,8 +534,8 @@ namespace opensaml { class SAML_DLLLOCAL SubjectConfirmationDataTypeImpl : public virtual SubjectConfirmationDataType, public virtual AbstractXMLObject { void init() { - m_NotBefore=m_NotOnOrAfter=NULL; - m_Recipient=m_InResponseTo=m_Address=NULL; + m_NotBefore=m_NotOnOrAfter=nullptr; + m_Recipient=m_InResponseTo=m_Address=nullptr; } protected: @@ -566,6 +559,9 @@ namespace opensaml { SubjectConfirmationDataTypeImpl(const SubjectConfirmationDataTypeImpl& src) : AbstractXMLObject(src) { init(); + } + + void _clone(const SubjectConfirmationDataTypeImpl& src) { setNotBefore(src.getNotBefore()); setNotOnOrAfter(src.getNotOnOrAfter()); setRecipient(src.getRecipient()); @@ -573,6 +569,10 @@ namespace opensaml { setAddress(src.getAddress()); } + SubjectConfirmationDataType* cloneSubjectConfirmationDataType() const { + return dynamic_cast(clone()); + } + IMPL_DATETIME_ATTRIB(NotBefore,0); IMPL_DATETIME_ATTRIB(NotOnOrAfter,SAMLTIME_MAX); IMPL_STRING_ATTRIB(Recipient); @@ -581,19 +581,19 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_DATETIME_ATTRIB(NotBefore,NOTBEFORE,NULL); - MARSHALL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); - MARSHALL_STRING_ATTRIB(Recipient,RECIPIENT,NULL); - MARSHALL_STRING_ATTRIB(InResponseTo,INRESPONSETO,NULL); - MARSHALL_STRING_ATTRIB(Address,ADDRESS,NULL); + MARSHALL_DATETIME_ATTRIB(NotBefore,NOTBEFORE,nullptr); + MARSHALL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,nullptr); + MARSHALL_STRING_ATTRIB(Recipient,RECIPIENT,nullptr); + MARSHALL_STRING_ATTRIB(InResponseTo,INRESPONSETO,nullptr); + MARSHALL_STRING_ATTRIB(Address,ADDRESS,nullptr); } void processAttribute(const DOMAttr* attribute) { - PROC_DATETIME_ATTRIB(NotBefore,NOTBEFORE,NULL); - PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); - PROC_STRING_ATTRIB(Recipient,RECIPIENT,NULL); - PROC_STRING_ATTRIB(InResponseTo,INRESPONSETO,NULL); - PROC_STRING_ATTRIB(Address,ADDRESS,NULL); + PROC_DATETIME_ATTRIB(NotBefore,NOTBEFORE,nullptr); + PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,nullptr); + PROC_STRING_ATTRIB(Recipient,RECIPIENT,nullptr); + PROC_STRING_ATTRIB(InResponseTo,INRESPONSETO,nullptr); + PROC_STRING_ATTRIB(Address,ADDRESS,nullptr); } }; @@ -604,18 +604,20 @@ namespace opensaml { virtual ~SubjectConfirmationDataImpl() {} SubjectConfirmationDataImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } SubjectConfirmationDataImpl(const SubjectConfirmationDataImpl& src) - : SubjectConfirmationDataTypeImpl(src), AnyElementImpl(src) { + : AbstractXMLObject(src), SubjectConfirmationDataTypeImpl(src), AnyElementImpl(src) { } - IMPL_XMLOBJECT_CLONE(SubjectConfirmationData); - SubjectConfirmationDataType* cloneSubjectConfirmationDataType() const { - return new SubjectConfirmationDataImpl(*this); + void _clone(const SubjectConfirmationDataImpl& src) { + SubjectConfirmationDataTypeImpl::_clone(src); + AnyElementImpl::_clone(src); } + IMPL_XMLOBJECT_CLONE_EX(SubjectConfirmationData); + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),NOTBEFORE_ATTRIB_NAME)) { @@ -649,11 +651,11 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_DATETIME_ATTRIB(NotBefore,NOTBEFORE,NULL); - PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); - PROC_STRING_ATTRIB(Recipient,RECIPIENT,NULL); - PROC_STRING_ATTRIB(InResponseTo,INRESPONSETO,NULL); - PROC_STRING_ATTRIB(Address,ADDRESS,NULL); + PROC_DATETIME_ATTRIB(NotBefore,NOTBEFORE,nullptr); + PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,nullptr); + PROC_STRING_ATTRIB(Recipient,RECIPIENT,nullptr); + PROC_STRING_ATTRIB(InResponseTo,INRESPONSETO,nullptr); + PROC_STRING_ATTRIB(Address,ADDRESS,nullptr); AnyElementImpl::processAttribute(attribute); } }; @@ -670,22 +672,24 @@ namespace opensaml { virtual ~KeyInfoConfirmationDataTypeImpl() {} KeyInfoConfirmationDataTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } KeyInfoConfirmationDataTypeImpl(const KeyInfoConfirmationDataTypeImpl& src) - : AbstractXMLObject(src), SubjectConfirmationDataTypeImpl(src), AbstractComplexElement(src), - AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { - VectorOf(KeyInfo) v=getKeyInfos(); - for (vector::const_iterator i=src.m_KeyInfos.begin(); i!=src.m_KeyInfos.end(); ++i) - v.push_back((*i)->cloneKeyInfo()); + : AbstractXMLObject(src), SubjectConfirmationDataTypeImpl(src), AbstractComplexElement(src), + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { } - IMPL_XMLOBJECT_CLONE(KeyInfoConfirmationDataType); - SubjectConfirmationDataType* cloneSubjectConfirmationDataType() const { - return new KeyInfoConfirmationDataTypeImpl(*this); + void _clone(const KeyInfoConfirmationDataTypeImpl& src) { + SubjectConfirmationDataTypeImpl::_clone(src); + for (vector::const_iterator i=src.m_KeyInfos.begin(); i!=src.m_KeyInfos.end(); ++i) { + if (*i) { + getKeyInfos().push_back((*i)->cloneKeyInfo()); + } + } } + IMPL_XMLOBJECT_CLONE_EX(KeyInfoConfirmationDataType); IMPL_TYPED_CHILDREN(KeyInfo,m_children.end()); public: @@ -738,15 +742,15 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Method=NULL; - m_BaseID=NULL; - m_NameID=NULL; - m_EncryptedID=NULL; - m_SubjectConfirmationData=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_Method=nullptr; + m_BaseID=nullptr; + m_NameID=nullptr; + m_EncryptedID=nullptr; + m_SubjectConfirmationData=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_BaseID=m_children.begin(); m_pos_NameID=m_pos_BaseID; ++m_pos_NameID; @@ -755,8 +759,11 @@ namespace opensaml { m_pos_SubjectConfirmationData=m_pos_EncryptedID; ++m_pos_SubjectConfirmationData; } + public: - virtual ~SubjectConfirmationImpl() {} + virtual ~SubjectConfirmationImpl() { + XMLString::release(&m_Method); + } SubjectConfirmationImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { @@ -786,7 +793,7 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Method,METHOD,NULL); + MARSHALL_STRING_ATTRIB(Method,METHOD,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -798,7 +805,7 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Method,METHOD,NULL); + PROC_STRING_ATTRIB(Method,METHOD,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -810,18 +817,19 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_BaseID=NULL; - m_NameID=NULL; - m_EncryptedID=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_BaseID=nullptr; + m_NameID=nullptr; + m_EncryptedID=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_BaseID=m_children.begin(); m_pos_NameID=m_pos_BaseID; ++m_pos_NameID; m_pos_EncryptedID=m_pos_NameID; ++m_pos_EncryptedID; } + public: virtual ~SubjectImpl() {} @@ -839,10 +847,9 @@ namespace opensaml { setNameID(src.getNameID()->cloneNameID()); if (src.getEncryptedID()) setEncryptedID(src.getEncryptedID()->cloneEncryptedID()); - VectorOf(SubjectConfirmation) v=getSubjectConfirmations(); for (vector::const_iterator i=src.m_SubjectConfirmations.begin(); i!=src.m_SubjectConfirmations.end(); i++) { if (*i) { - v.push_back((*i)->cloneSubjectConfirmation()); + getSubjectConfirmations().push_back((*i)->cloneSubjectConfirmation()); } } } @@ -870,8 +877,9 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Address=m_DNSName=NULL; + m_Address=m_DNSName=nullptr; } + public: virtual ~SubjectLocalityImpl() { XMLString::release(&m_Address); @@ -896,13 +904,13 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Address,ADDRESS,NULL); - MARSHALL_STRING_ATTRIB(DNSName,DNSNAME,NULL); + MARSHALL_STRING_ATTRIB(Address,ADDRESS,nullptr); + MARSHALL_STRING_ATTRIB(DNSName,DNSNAME,nullptr); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Address,ADDRESS,NULL); - PROC_STRING_ATTRIB(DNSName,DNSNAME,NULL); + PROC_STRING_ATTRIB(Address,ADDRESS,nullptr); + PROC_STRING_ATTRIB(DNSName,DNSNAME,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -916,9 +924,9 @@ namespace opensaml { : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - StatementImpl(const StatementImpl& src) : AnyElementImpl(src) {} + StatementImpl(const StatementImpl& src) : AbstractXMLObject(src), AnyElementImpl(src) {} - IMPL_XMLOBJECT_CLONE(Statement); + IMPL_XMLOBJECT_CLONE_EX(Statement); }; //TODO need unit test for this @@ -931,10 +939,10 @@ namespace opensaml { : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - AuthnContextDeclImpl(const AuthnContextDeclImpl& src) : AnyElementImpl(src) { + AuthnContextDeclImpl(const AuthnContextDeclImpl& src) : AbstractXMLObject(src), AnyElementImpl(src) { } - IMPL_XMLOBJECT_CLONE(AuthnContextDecl); + IMPL_XMLOBJECT_CLONE_EX(AuthnContextDecl); }; class SAML_DLLLOCAL AuthnContextImpl : public virtual AuthnContext, @@ -944,18 +952,19 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_AuthnContextClassRef=NULL; - m_AuthnContextDecl=NULL; - m_AuthnContextDeclRef=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_AuthnContextClassRef=nullptr; + m_AuthnContextDecl=nullptr; + m_AuthnContextDeclRef=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_AuthnContextClassRef=m_children.begin(); m_pos_AuthnContextDecl=m_pos_AuthnContextClassRef; ++m_pos_AuthnContextDecl; m_pos_AuthnContextDeclRef=m_pos_AuthnContextDecl; ++m_pos_AuthnContextDeclRef; } + public: virtual ~AuthnContextImpl() {} @@ -973,10 +982,9 @@ namespace opensaml { setAuthnContextDecl(src.getAuthnContextDecl()->clone()); if (src.getAuthnContextDeclRef()) setAuthnContextDeclRef(src.getAuthnContextDeclRef()->cloneAuthnContextDeclRef()); - VectorOf(AuthenticatingAuthority) v=getAuthenticatingAuthoritys(); for (vector::const_iterator i=src.m_AuthenticatingAuthoritys.begin(); i!=src.m_AuthenticatingAuthoritys.end(); i++) { if (*i) { - v.push_back((*i)->cloneAuthenticatingAuthority()); + getAuthenticatingAuthoritys().push_back((*i)->cloneAuthenticatingAuthority()); } } } @@ -1004,17 +1012,18 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_AuthnInstant=NULL; - m_SessionIndex=NULL; - m_SessionNotOnOrAfter=NULL; - m_SubjectLocality=NULL; - m_AuthnContext=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); + m_AuthnInstant=nullptr; + m_SessionIndex=nullptr; + m_SessionNotOnOrAfter=nullptr; + m_SubjectLocality=nullptr; + m_AuthnContext=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_SubjectLocality=m_children.begin(); m_pos_AuthnContext=m_pos_SubjectLocality; ++m_pos_AuthnContext; } + public: virtual ~AuthnStatementImpl() { delete m_AuthnInstant; @@ -1039,10 +1048,7 @@ namespace opensaml { setAuthnContext(src.getAuthnContext()->cloneAuthnContext()); } - IMPL_XMLOBJECT_CLONE(AuthnStatement); - Statement* cloneStatement() const { - return cloneAuthnStatement(); - } + IMPL_XMLOBJECT_CLONE2(AuthnStatement,Statement); IMPL_DATETIME_ATTRIB(AuthnInstant,0); IMPL_STRING_ATTRIB(SessionIndex); IMPL_DATETIME_ATTRIB(SessionNotOnOrAfter,SAMLTIME_MAX); @@ -1051,9 +1057,9 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_DATETIME_ATTRIB(AuthnInstant,AUTHNINSTANT,NULL); - MARSHALL_STRING_ATTRIB(SessionIndex,SESSIONINDEX,NULL); - MARSHALL_DATETIME_ATTRIB(SessionNotOnOrAfter,SESSIONNOTONORAFTER,NULL); + MARSHALL_DATETIME_ATTRIB(AuthnInstant,AUTHNINSTANT,nullptr); + MARSHALL_STRING_ATTRIB(SessionIndex,SESSIONINDEX,nullptr); + MARSHALL_DATETIME_ATTRIB(SessionNotOnOrAfter,SESSIONNOTONORAFTER,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -1063,9 +1069,9 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_DATETIME_ATTRIB(AuthnInstant,AUTHNINSTANT,NULL); - PROC_STRING_ATTRIB(SessionIndex,SESSIONINDEX,NULL); - PROC_DATETIME_ATTRIB(SessionNotOnOrAfter,SESSIONNOTONORAFTER,NULL); + PROC_DATETIME_ATTRIB(AuthnInstant,AUTHNINSTANT,nullptr); + PROC_STRING_ATTRIB(SessionIndex,SESSIONINDEX,nullptr); + PROC_DATETIME_ATTRIB(SessionNotOnOrAfter,SESSIONNOTONORAFTER,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -1082,11 +1088,11 @@ namespace opensaml { } ActionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Namespace(NULL) { + : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Namespace(nullptr) { } ActionImpl(const ActionImpl& src) - : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src), m_Namespace(nullptr) { setNamespace(src.getNamespace()); } @@ -1095,11 +1101,11 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Namespace,NAMESPACE,NULL); + MARSHALL_STRING_ATTRIB(Namespace,NAMESPACE,nullptr); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Namespace,NAMESPACE,NULL); + PROC_STRING_ATTRIB(Namespace,NAMESPACE,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -1171,12 +1177,13 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Resource=NULL; - m_Decision=NULL; - m_Evidence=NULL; - m_children.push_back(NULL); + m_Resource=nullptr; + m_Decision=nullptr; + m_Evidence=nullptr; + m_children.push_back(nullptr); m_pos_Evidence=m_children.begin(); } + public: virtual ~AuthzDecisionStatementImpl() { XMLString::release(&m_Resource); @@ -1195,18 +1202,14 @@ namespace opensaml { setDecision(src.getDecision()); if (src.getEvidence()) setEvidence(src.getEvidence()->cloneEvidence()); - VectorOf(Action) v=getActions(); for (vector::const_iterator i=src.m_Actions.begin(); i!=src.m_Actions.end(); i++) { if (*i) { - v.push_back((*i)->cloneAction()); + getActions().push_back((*i)->cloneAction()); } } } - IMPL_XMLOBJECT_CLONE(AuthzDecisionStatement); - Statement* cloneStatement() const { - return cloneAuthzDecisionStatement(); - } + IMPL_XMLOBJECT_CLONE2(AuthzDecisionStatement,Statement); IMPL_STRING_ATTRIB(Resource); IMPL_STRING_ATTRIB(Decision); IMPL_TYPED_CHILD(Evidence); @@ -1214,8 +1217,8 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Resource,RESOURCE,NULL); - MARSHALL_STRING_ATTRIB(Decision,DECISION,NULL); + MARSHALL_STRING_ATTRIB(Resource,RESOURCE,nullptr); + MARSHALL_STRING_ATTRIB(Decision,DECISION,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -1225,8 +1228,8 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Resource,RESOURCE,NULL); - PROC_STRING_ATTRIB(Decision,DECISION,NULL); + PROC_STRING_ATTRIB(Resource,RESOURCE,nullptr); + PROC_STRING_ATTRIB(Decision,DECISION,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -1240,10 +1243,10 @@ namespace opensaml { : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - AttributeValueImpl(const AttributeValueImpl& src) : AnyElementImpl(src) { + AttributeValueImpl(const AttributeValueImpl& src) : AbstractXMLObject(src), AnyElementImpl(src) { } - IMPL_XMLOBJECT_CLONE(AttributeValue); + IMPL_XMLOBJECT_CLONE_EX(AttributeValue); }; @@ -1255,8 +1258,9 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Name=m_NameFormat=m_FriendlyName=NULL; + m_Name=m_NameFormat=m_FriendlyName=nullptr; } + public: virtual ~AttributeImpl() { XMLString::release(&m_Name); @@ -1276,10 +1280,9 @@ namespace opensaml { setName(src.getName()); setNameFormat(src.getNameFormat()); setFriendlyName(src.getFriendlyName()); - VectorOf(XMLObject) v=getAttributeValues(); for (vector::const_iterator i=src.m_AttributeValues.begin(); i!=src.m_AttributeValues.end(); i++) { if (*i) { - v.push_back((*i)->clone()); + getAttributeValues().push_back((*i)->clone()); } } } @@ -1310,9 +1313,9 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Name,NAME,NULL); - MARSHALL_STRING_ATTRIB(NameFormat,NAMEFORMAT,NULL); - MARSHALL_STRING_ATTRIB(FriendlyName,FRIENDLYNAME,NULL); + MARSHALL_STRING_ATTRIB(Name,NAME,nullptr); + MARSHALL_STRING_ATTRIB(NameFormat,NAMEFORMAT,nullptr); + MARSHALL_STRING_ATTRIB(FriendlyName,FRIENDLYNAME,nullptr); marshallExtensionAttributes(domElement); } @@ -1336,10 +1339,7 @@ namespace opensaml { EncryptedAttributeImpl(const EncryptedAttributeImpl& src) : AbstractXMLObject(src), EncryptedElementTypeImpl(src) {} - IMPL_XMLOBJECT_CLONE(EncryptedAttribute); - EncryptedElementType* cloneEncryptedElementType() const { - return new EncryptedAttributeImpl(*this); - } + IMPL_XMLOBJECT_CLONE_EX(EncryptedAttribute); }; class SAML_DLLLOCAL AttributeStatementImpl : public virtual AttributeStatement, @@ -1374,10 +1374,7 @@ namespace opensaml { } } - IMPL_XMLOBJECT_CLONE(AttributeStatement); - Statement* cloneStatement() const { - return cloneAttributeStatement(); - } + IMPL_XMLOBJECT_CLONE2(AttributeStatement,Statement); IMPL_TYPED_CHILDREN(Attribute, m_children.end()); IMPL_TYPED_CHILDREN(EncryptedAttribute, m_children.end()); @@ -1430,7 +1427,9 @@ namespace opensaml { continue; } - getUnknownXMLObjects().push_back((*i)->clone()); + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } } } } @@ -1471,10 +1470,7 @@ namespace opensaml { EncryptedAssertionImpl(const EncryptedAssertionImpl& src) : AbstractXMLObject(src), EncryptedElementTypeImpl(src) {} - IMPL_XMLOBJECT_CLONE(EncryptedAssertion); - EncryptedElementType* cloneEncryptedElementType() const { - return new EncryptedAssertionImpl(*this); - } + IMPL_XMLOBJECT_CLONE_EX(EncryptedAssertion); }; class SAML_DLLLOCAL AssertionImpl : public virtual Assertion, @@ -1484,19 +1480,19 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_ID=NULL; - m_Version=NULL; - m_IssueInstant=NULL; - m_Issuer=NULL; - m_Signature=NULL; - m_Subject=NULL; - m_Conditions=NULL; - m_Advice=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_ID=nullptr; + m_Version=nullptr; + m_IssueInstant=nullptr; + m_Issuer=nullptr; + m_Signature=nullptr; + m_Subject=nullptr; + m_Conditions=nullptr; + m_Advice=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_Issuer=m_children.begin(); m_pos_Signature=m_pos_Issuer; ++m_pos_Signature; @@ -1507,6 +1503,7 @@ namespace opensaml { m_pos_Advice=m_pos_Conditions; ++m_pos_Advice; } + public: virtual ~AssertionImpl() { XMLString::release(&m_ID); @@ -1584,7 +1581,7 @@ namespace opensaml { IMPL_XMLOBJECT_CLONE(Assertion); IMPL_STRING_ATTRIB(Version); - IMPL_ID_ATTRIB(ID); + IMPL_ID_ATTRIB_EX(ID,ID,nullptr); IMPL_DATETIME_ATTRIB(IssueInstant,0); IMPL_TYPED_CHILD(Issuer); IMPL_TYPED_CHILD(Subject); @@ -1596,18 +1593,23 @@ namespace opensaml { IMPL_TYPED_CHILDREN(AuthzDecisionStatement, m_children.end()); protected: + void prepareForMarshalling() const { + if (m_Signature) + declareNonVisibleNamespaces(); + } + void marshallAttributes(DOMElement* domElement) const { if (!m_Version) const_cast(this)->m_Version=XMLString::transcode("2.0"); - MARSHALL_STRING_ATTRIB(Version,VER,NULL); + MARSHALL_STRING_ATTRIB(Version,VER,nullptr); if (!m_ID) const_cast(this)->m_ID=SAMLConfig::getConfig().generateIdentifier(); - MARSHALL_ID_ATTRIB(ID,ID,NULL); + MARSHALL_ID_ATTRIB(ID,ID,nullptr); if (!m_IssueInstant) { - const_cast(this)->m_IssueInstantEpoch=time(NULL); + const_cast(this)->m_IssueInstantEpoch=time(nullptr); const_cast(this)->m_IssueInstant=new DateTime(m_IssueInstantEpoch); } - MARSHALL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,NULL); + MARSHALL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -1624,9 +1626,9 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Version,VER,NULL); - PROC_ID_ATTRIB(ID,ID,NULL); - PROC_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,NULL); + PROC_STRING_ATTRIB(Version,VER,nullptr); + PROC_ID_ATTRIB(ID,ID,nullptr); + PROC_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -1732,7 +1734,7 @@ const XMLCh Delegate::TYPE_NAME[] = UNICODE_LITERAL_12(D,e,l,e,g const XMLCh Delegate::CONFIRMATIONMETHOD_ATTRIB_NAME[] = UNICODE_LITERAL_18(C,o,n,f,i,r,m,a,t,i,o,n,M,e,t,h,o,d); const XMLCh Delegate::DELEGATIONINSTANT_ATTRIB_NAME[] = UNICODE_LITERAL_17(D,e,l,e,g,a,t,i,o,n,I,n,s,t,a,n,t); const XMLCh DelegationRestrictionType::LOCAL_NAME[] = UNICODE_LITERAL_9(C,o,n,d,i,t,i,o,n); -const XMLCh DelegationRestrictionType::TYPE_NAME[] =UNICODE_LITERAL_21(D,e,l,e,g,a,t,i,o,n,R,e,s,t,r,i,c,t,i,o,n); +const XMLCh DelegationRestrictionType::TYPE_NAME[] =UNICODE_LITERAL_25(D,e,l,e,g,a,t,i,o,n,R,e,s,t,r,i,c,t,i,o,n,T,y,p,e); const XMLCh EncryptedAssertion::LOCAL_NAME[] = UNICODE_LITERAL_18(E,n,c,r,y,p,t,e,d,A,s,s,e,r,t,i,o,n); const XMLCh EncryptedAttribute::LOCAL_NAME[] = UNICODE_LITERAL_18(E,n,c,r,y,p,t,e,d,A,t,t,r,i,b,u,t,e); const XMLCh EncryptedElementType::LOCAL_NAME[] = {chNull};