X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2Fimpl%2FAbstractMetadataProvider.cpp;h=fd7948c93cf2dbb133a02517ef1c5ba3662f26a2;hb=0d5e6d568cd0945e18a8b54b7d75e9f5a352c41b;hp=6508e58a7410b9f98b8be6e3c01c880e86081d04;hpb=a0f7ddfb1954304a01b6a49580ce8d2603a60446;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/metadata/impl/AbstractMetadataProvider.cpp b/saml/saml2/metadata/impl/AbstractMetadataProvider.cpp index 6508e58..fd7948c 100644 --- a/saml/saml2/metadata/impl/AbstractMetadataProvider.cpp +++ b/saml/saml2/metadata/impl/AbstractMetadataProvider.cpp @@ -163,7 +163,7 @@ void AbstractMetadataProvider::clearDescriptorIndex(bool freeSites) const EntitiesDescriptor* AbstractMetadataProvider::getEntitiesDescriptor(const char* name, bool strict) const { - pair range=m_groups.equal_range(name); + pair range=const_cast(m_groups).equal_range(name); time_t now=time(NULL); for (groupmap_t::const_iterator i=range.first; i!=range.second; i++) @@ -176,31 +176,42 @@ const EntitiesDescriptor* AbstractMetadataProvider::getEntitiesDescriptor(const return NULL; } -const EntityDescriptor* AbstractMetadataProvider::getEntityDescriptor(const char* name, bool strict) const +pair AbstractMetadataProvider::getEntityDescriptor(const Criteria& criteria) const { - pair range=m_sites.equal_range(name); - + pair range; + if (criteria.entityID_ascii) + range = const_cast(m_sites).equal_range(criteria.entityID_ascii); + else if (criteria.entityID_unicode) { + auto_ptr_char id(criteria.entityID_unicode); + range = const_cast(m_sites).equal_range(id.get()); + } + else if (criteria.artifact) + range = const_cast(m_sources).equal_range(criteria.artifact->getSource()); + else + return pair(NULL,NULL); + + pair result; + result.first = NULL; + result.second = NULL; + time_t now=time(NULL); - for (sitemap_t::const_iterator i=range.first; i!=range.second; i++) - if (now < i->second->getValidUntilEpoch()) - return i->second; + for (sitemap_t::const_iterator i=range.first; i!=range.second; i++) { + if (now < i->second->getValidUntilEpoch()) { + result.first = i->second; + break; + } + } - if (!strict && range.first!=range.second) - return range.first->second; + if (!result.first && !criteria.validOnly && range.first!=range.second) + result.first = range.first->second; - return NULL; -} - -const EntityDescriptor* AbstractMetadataProvider::getEntityDescriptor(const SAMLArtifact* artifact) const -{ - pair range=m_sources.equal_range(artifact->getSource()); - - time_t now=time(NULL); - for (sitemap_t::const_iterator i=range.first; i!=range.second; i++) - if (now < i->second->getValidUntilEpoch()) - return i->second; - - return NULL; + if (result.first && criteria.role) { + result.second = result.first->getRoleDescriptor(*criteria.role, criteria.protocol); + if (!result.second && criteria.protocol2) + result.second = result.first->getRoleDescriptor(*criteria.role, criteria.protocol2); + } + + return result; } const Credential* AbstractMetadataProvider::resolve(const CredentialCriteria* criteria) const