From 3d601510d00f3d81e0b591659b41de4a88aa618f Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Fri, 27 Jan 2012 02:38:17 +0000 Subject: [PATCH] Support option to keep DOM --- saml/saml2/metadata/impl/DynamicMetadataProvider.cpp | 5 +++-- saml/saml2/metadata/impl/XMLMetadataProvider.cpp | 10 +++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/saml/saml2/metadata/impl/DynamicMetadataProvider.cpp b/saml/saml2/metadata/impl/DynamicMetadataProvider.cpp index 238aab0..6b39787 100644 --- a/saml/saml2/metadata/impl/DynamicMetadataProvider.cpp +++ b/saml/saml2/metadata/impl/DynamicMetadataProvider.cpp @@ -203,7 +203,7 @@ pair DynamicMetadataProvider::get } // Filter it, which may throw. - doFilters(*entity2.get()); + doFilters(*entity2); time_t now = time(nullptr); if (entity2->getValidUntil() && entity2->getValidUntilEpoch() < now + 60) @@ -239,7 +239,8 @@ pair DynamicMetadataProvider::get // Make sure we clear out any existing copies, including stale metadata or if somebody snuck in. cacheExp = SAMLTIME_MAX; - indexEntity(entity2.release(), cacheExp, true); + indexEntity(entity2.get(), cacheExp, true); + entity2.release(); m_lastUpdate = now; diff --git a/saml/saml2/metadata/impl/XMLMetadataProvider.cpp b/saml/saml2/metadata/impl/XMLMetadataProvider.cpp index 19730ba..c97ab3d 100644 --- a/saml/saml2/metadata/impl/XMLMetadataProvider.cpp +++ b/saml/saml2/metadata/impl/XMLMetadataProvider.cpp @@ -137,7 +137,7 @@ namespace opensaml { time_t computeNextRefresh(); scoped_ptr m_object; - bool m_discoveryFeed; + bool m_discoveryFeed,m_dropDOM; double m_refreshDelayFactor; unsigned int m_backoffFactor; time_t m_minRefreshDelay,m_maxRefreshDelay,m_lastValidUntil; @@ -149,6 +149,7 @@ namespace opensaml { } static const XMLCh discoveryFeed[] = UNICODE_LITERAL_13(d,i,s,c,o,v,e,r,y,F,e,e,d); + static const XMLCh dropDOM[] = UNICODE_LITERAL_7(d,r,o,p,D,O,M); static const XMLCh minRefreshDelay[] = UNICODE_LITERAL_15(m,i,n,R,e,f,r,e,s,h,D,e,l,a,y); static const XMLCh refreshDelayFactor[] = UNICODE_LITERAL_18(r,e,f,r,e,s,h,D,e,l,a,y,F,a,c,t,o,r); }; @@ -162,6 +163,7 @@ XMLMetadataProvider::XMLMetadataProvider(const DOMElement* e) : MetadataProvider(e), AbstractMetadataProvider(e), DiscoverableMetadataProvider(e), ReloadableXMLFile(e, Category::getInstance(SAML_LOGCAT".MetadataProvider.XML"), false), m_discoveryFeed(XMLHelper::getAttrBool(e, true, discoveryFeed)), + m_dropDOM(XMLHelper::getAttrBool(e, true, dropDOM)), m_refreshDelayFactor(0.75), m_backoffFactor(1), m_minRefreshDelay(XMLHelper::getAttrInt(e, 600, minRefreshDelay)), m_maxRefreshDelay(m_reloadInterval), m_lastValidUntil(SAMLTIME_MAX) @@ -250,8 +252,10 @@ pair XMLMetadataProvider::load(bool backup) preserveCacheTag(); } - xmlObject->releaseThisAndChildrenDOM(); - xmlObject->setDocument(nullptr); + if (m_dropDOM) { + xmlObject->releaseThisAndChildrenDOM(); + xmlObject->setDocument(nullptr); + } // Swap it in after acquiring write lock if necessary. if (m_lock) -- 2.1.4