From c3b231ea3cf87e1d5e958305af7554c160edaa8c Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Tue, 22 May 2012 03:47:22 +0000 Subject: [PATCH] Convert context API to use const objects and support chaining provider --- saml/saml2/metadata/MetadataFilter.h | 2 +- saml/saml2/metadata/MetadataProvider.h | 9 ++++---- .../metadata/impl/ChainingMetadataProvider.cpp | 19 +++++++++++----- saml/saml2/metadata/impl/MetadataProvider.cpp | 26 +++++++++++----------- 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/saml/saml2/metadata/MetadataFilter.h b/saml/saml2/metadata/MetadataFilter.h index 641decb..6572c52 100644 --- a/saml/saml2/metadata/MetadataFilter.h +++ b/saml/saml2/metadata/MetadataFilter.h @@ -82,7 +82,7 @@ namespace opensaml { * @param ctx context interface, or nullptr * @param xmlObject the metadata to be filtered */ - virtual void doFilter(MetadataFilterContext* ctx, xmltooling::XMLObject& xmlObject) const; + virtual void doFilter(const MetadataFilterContext* ctx, xmltooling::XMLObject& xmlObject) const; }; /** diff --git a/saml/saml2/metadata/MetadataProvider.h b/saml/saml2/metadata/MetadataProvider.h index d19a805..e8c852f 100644 --- a/saml/saml2/metadata/MetadataProvider.h +++ b/saml/saml2/metadata/MetadataProvider.h @@ -31,7 +31,6 @@ #include #include -#include #include #include #include @@ -124,12 +123,12 @@ namespace opensaml { /** * Sets a filtering context object for use by the filtering process. - *

The MetadataProvider takes ownership of the object. Any existing - * object is cleared. + *

The object's lifetime must last for the duration of the lifetime + * of the MetadataProvider. * * @param ctx a context object */ - void setContext(MetadataFilterContext* ctx); + void setContext(const MetadataFilterContext* ctx); /** * Should be called after instantiating provider and adding filters, but before @@ -262,7 +261,7 @@ namespace opensaml { void doFilters(xmltooling::XMLObject& xmlObject) const; private: - boost::scoped_ptr m_filterContext; + const MetadataFilterContext* m_filterContext; boost::ptr_vector m_filters; }; diff --git a/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp b/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp index e8dcf15..968927e 100644 --- a/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp +++ b/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp @@ -67,14 +67,15 @@ namespace opensaml { Lockable* lock(); void unlock(); + void setContext(const MetadataFilterContext*); void init(); - void outputStatus(ostream& os) const; + void outputStatus(ostream&) const; const XMLObject* getMetadata() const; - const EntitiesDescriptor* getEntitiesDescriptor(const char* name, bool requireValidMetadata=true) const; - pair getEntityDescriptor(const Criteria& criteria) const; + const EntitiesDescriptor* getEntitiesDescriptor(const char*, bool requireValidMetadata=true) const; + pair getEntityDescriptor(const Criteria&) const; const Credential* resolve(const CredentialCriteria* criteria=nullptr) const; - vector::size_type resolve(vector& results, const CredentialCriteria* criteria=nullptr) const; + vector::size_type resolve(vector&, const CredentialCriteria* criteria=nullptr) const; string getCacheTag() const { Lock lock(m_trackerLock); @@ -199,6 +200,9 @@ ChainingMetadataProvider::ChainingMetadataProvider(const DOMElement* e) m_log.error("error building MetadataProvider: %s", ex.what()); } } + else { + m_log.error("MetadataProvider element missing type attribute"); + } e = XMLHelper::getNextSiblingElement(e, _MetadataProvider); } } @@ -208,6 +212,11 @@ ChainingMetadataProvider::~ChainingMetadataProvider() for_each(m_trackers.begin(), m_trackers.end(), xmltooling::cleanup()); } +void ChainingMetadataProvider::setContext(const MetadataFilterContext* ctx) +{ + for_each(m_providers.begin(), m_providers.end(), boost::bind(&MetadataProvider::setContext, _1, ctx)); +} + void ChainingMetadataProvider::init() { for (ptr_vector::iterator i = m_providers.begin(); i != m_providers.end(); ++i) { @@ -269,7 +278,7 @@ const EntitiesDescriptor* ChainingMetadataProvider::getEntitiesDescriptor(const const EntitiesDescriptor* cur = nullptr; for (ptr_vector::iterator i = m_providers.begin(); i != m_providers.end(); ++i) { tracker->lock_if(&(*i)); - if (cur=i->getEntitiesDescriptor(name,requireValidMetadata)) { + if ((cur = i->getEntitiesDescriptor(name,requireValidMetadata))) { // Are we using a first match policy? if (m_firstMatch) { // Save locked provider. diff --git a/saml/saml2/metadata/impl/MetadataProvider.cpp b/saml/saml2/metadata/impl/MetadataProvider.cpp index 98acde7..33c852c 100644 --- a/saml/saml2/metadata/impl/MetadataProvider.cpp +++ b/saml/saml2/metadata/impl/MetadataProvider.cpp @@ -91,7 +91,7 @@ static const XMLCh Exclude[] = UNICODE_LITERAL_7(E,x,c,l,u,d,e); static const XMLCh Include[] = UNICODE_LITERAL_7(I,n,c,l,u,d,e); static const XMLCh _type[] = UNICODE_LITERAL_4(t,y,p,e); -MetadataProvider::MetadataProvider(const DOMElement* e) +MetadataProvider::MetadataProvider(const DOMElement* e) : m_filterContext(nullptr) { #ifdef _DEBUG NDC ndc("MetadataProvider"); @@ -112,7 +112,7 @@ MetadataProvider::MetadataProvider(const DOMElement* e) np.release(); } else { - log.error("MetadataFilter element missing type attribute."); + log.error("MetadataFilter element missing type attribute"); } } else if (XMLString::equals(child->getLocalName(), SigFilter)) { @@ -167,9 +167,9 @@ MetadataFilter* MetadataProvider::removeMetadataFilter(MetadataFilter* oldFilter return nullptr; } -void MetadataProvider::setContext(MetadataFilterContext* ctx) +void MetadataProvider::setContext(const MetadataFilterContext* ctx) { - m_filterContext.reset(ctx); + m_filterContext = ctx; } void MetadataProvider::doFilters(XMLObject& xmlObject) const @@ -177,7 +177,7 @@ void MetadataProvider::doFilters(XMLObject& xmlObject) const Category& log = Category::getInstance(SAML_LOGCAT".Metadata"); for (ptr_vector::const_iterator i = m_filters.begin(); i != m_filters.end(); i++) { log.info("applying metadata filter (%s)", i->getId()); - i->doFilter(m_filterContext.get(), xmlObject); + i->doFilter(m_filterContext, xmlObject); } } @@ -217,13 +217,13 @@ MetadataProvider::Criteria::~Criteria() void MetadataProvider::Criteria::reset() { - entityID_unicode=nullptr; - entityID_ascii=nullptr; - artifact=nullptr; - role=nullptr; - protocol=nullptr; - protocol2=nullptr; - validOnly=true; + entityID_unicode = nullptr; + entityID_ascii = nullptr; + artifact = nullptr; + role = nullptr; + protocol = nullptr; + protocol2 = nullptr; + validOnly = true; } MetadataFilter::MetadataFilter() @@ -234,7 +234,7 @@ MetadataFilter::~MetadataFilter() { } -void MetadataFilter::doFilter(MetadataFilterContext* ctx, xmltooling::XMLObject& xmlObject) const +void MetadataFilter::doFilter(const MetadataFilterContext* ctx, xmltooling::XMLObject& xmlObject) const { // Default call into deprecated method. doFilter(xmlObject); -- 2.1.4