X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2Fimpl%2FDynamicMetadataProvider.cpp;h=4ccd536dd140165025302cb24efdcc5864a64fdd;hp=835a2eda42de6f2f608aa09017a7e78cebaba575;hb=807f7429a14b87055f56c6e7171ec7aae5def13f;hpb=41ff516608948648e801ec90f18be65e485cf335 diff --git a/saml/saml2/metadata/impl/DynamicMetadataProvider.cpp b/saml/saml2/metadata/impl/DynamicMetadataProvider.cpp index 835a2ed..4ccd536 100644 --- a/saml/saml2/metadata/impl/DynamicMetadataProvider.cpp +++ b/saml/saml2/metadata/impl/DynamicMetadataProvider.cpp @@ -1,6 +1,6 @@ /* * 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. * You may obtain a copy of the License at @@ -16,7 +16,7 @@ /** * DynamicMetadataProvider.cpp - * + * * Simple implementation of a dynamic caching MetadataProvider. */ @@ -36,7 +36,12 @@ using namespace xmltooling::logging; using namespace xmltooling; using namespace std; -static const XMLCh validate[] = UNICODE_LITERAL_8(v,a,l,i,d,a,t,e); +# ifndef min +# define min(a,b) (((a) < (b)) ? (a) : (b)) +# endif + +static const XMLCh maxCacheDuration[] = UNICODE_LITERAL_16(m,a,x,C,a,c,h,e,D,u,r,a,t,i,o,n); +static const XMLCh validate[] = UNICODE_LITERAL_8(v,a,l,i,d,a,t,e); namespace opensaml { namespace saml2md { @@ -48,10 +53,13 @@ namespace opensaml { }; DynamicMetadataProvider::DynamicMetadataProvider(const DOMElement* e) - : AbstractMetadataProvider(e), m_lock(RWLock::create()) + : AbstractMetadataProvider(e), m_maxCacheDuration(0), m_lock(RWLock::create()) { const XMLCh* flag=e ? e->getAttributeNS(NULL,validate) : NULL; m_validate=(XMLString::equals(flag,xmlconstants::XML_TRUE) || XMLString::equals(flag,xmlconstants::XML_ONE)); + flag = e ? e->getAttributeNS(NULL,maxCacheDuration) : NULL; + if (flag && *flag) + m_maxCacheDuration = XMLString::parseInt(flag); } DynamicMetadataProvider::~DynamicMetadataProvider() @@ -93,7 +101,7 @@ pair DynamicMetadataProvider::get // Translate cacheDuration into validUntil. if (entity2->getCacheDuration()) - entity2->setValidUntil(time(NULL) + entity2->getCacheDurationEpoch()); + entity2->setValidUntil(time(NULL) + min(m_maxCacheDuration, entity2->getCacheDurationEpoch())); // Upgrade our lock so we can cache the new metadata. m_lock->unlock(); @@ -127,7 +135,7 @@ EntityDescriptor* DynamicMetadataProvider::resolve(const char* entityID) const // Wrap the document for now. XercesJanitor docjanitor(doc); - + // Unmarshall objects, binding the document. auto_ptr xmlObject(XMLObjectBuilder::buildOneFromElement(doc->getDocumentElement(), true)); docjanitor.release();