X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2Fimpl%2FMetadataProvider.cpp;h=62665a02724e156157d82f158801b9fd405006b1;hb=c089f03a9b08dc947a815be624654ca401c6b369;hp=7d8de17fcc2838476c6b6697155a3d51f09bd4a0;hpb=7d8a35660d92c361cb6e9a3cb0a48a6c204398e2;p=shibboleth%2Fopensaml2.git diff --git a/saml/saml2/metadata/impl/MetadataProvider.cpp b/saml/saml2/metadata/impl/MetadataProvider.cpp index 7d8de17..62665a0 100644 --- a/saml/saml2/metadata/impl/MetadataProvider.cpp +++ b/saml/saml2/metadata/impl/MetadataProvider.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006 Internet2 + * 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. @@ -21,26 +21,28 @@ */ #include "internal.h" +#include "saml2/metadata/MetadataFilter.h" #include "saml2/metadata/MetadataProvider.h" -#include #include +#include #include #include using namespace opensaml::saml2md; using namespace opensaml; +using namespace xmltooling::logging; using namespace xmltooling; -using namespace log4cpp; using namespace std; namespace opensaml { namespace saml2md { - SAML_DLLLOCAL PluginManager::Factory XMLMetadataProviderFactory; - SAML_DLLLOCAL PluginManager::Factory ChainingMetadataProviderFactory; - SAML_DLLLOCAL PluginManager::Factory BlacklistMetadataFilterFactory; - SAML_DLLLOCAL PluginManager::Factory WhitelistMetadataFilterFactory; - SAML_DLLLOCAL PluginManager::Factory SignatureMetadataFilterFactory; + SAML_DLLLOCAL PluginManager::Factory XMLMetadataProviderFactory; + SAML_DLLLOCAL PluginManager::Factory DynamicMetadataProviderFactory; + SAML_DLLLOCAL PluginManager::Factory ChainingMetadataProviderFactory; + SAML_DLLLOCAL PluginManager::Factory BlacklistMetadataFilterFactory; + SAML_DLLLOCAL PluginManager::Factory WhitelistMetadataFilterFactory; + SAML_DLLLOCAL PluginManager::Factory SignatureMetadataFilterFactory; }; }; @@ -48,9 +50,8 @@ void SAML_API opensaml::saml2md::registerMetadataProviders() { SAMLConfig& conf=SAMLConfig::getConfig(); conf.MetadataProviderManager.registerFactory(XML_METADATA_PROVIDER, XMLMetadataProviderFactory); + conf.MetadataProviderManager.registerFactory(DYNAMIC_METADATA_PROVIDER, DynamicMetadataProviderFactory); conf.MetadataProviderManager.registerFactory(CHAINING_METADATA_PROVIDER, ChainingMetadataProviderFactory); - conf.MetadataProviderManager.registerFactory("edu.internet2.middleware.shibboleth.metadata.provider.XMLMetadata", XMLMetadataProviderFactory); - conf.MetadataProviderManager.registerFactory("edu.internet2.middleware.shibboleth.common.provider.XMLMetadata", XMLMetadataProviderFactory); } void SAML_API opensaml::saml2md::registerMetadataFilters() @@ -60,52 +61,58 @@ void SAML_API opensaml::saml2md::registerMetadataFilters() SAMLConfig::getConfig().MetadataFilterManager.registerFactory(SIGNATURE_METADATA_FILTER, SignatureMetadataFilterFactory); } -static const XMLCh Blacklist[] = UNICODE_LITERAL_23(B,l,a,c,k,l,i,s,t,M,e,t,a,d,a,t,a,F,i,l,t,e,r); -static const XMLCh Whitelist[] = UNICODE_LITERAL_23(W,h,i,t,e,l,i,s,t,M,e,t,a,d,a,t,a,F,i,l,t,e,r); -static const XMLCh SigFilter[] = UNICODE_LITERAL_23(S,i,g,n,a,t,u,r,e,M,e,t,a,d,a,t,a,F,i,l,t,e,r); -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 GenericMetadataFilter[] = UNICODE_LITERAL_14(M,e,t,a,d,a,t,a,F,i,l,t,e,r); -static const XMLCh type[] = UNICODE_LITERAL_4(t,y,p,e); +static const XMLCh _MetadataFilter[] = UNICODE_LITERAL_14(M,e,t,a,d,a,t,a,F,i,l,t,e,r); +static const XMLCh Blacklist[] = UNICODE_LITERAL_23(B,l,a,c,k,l,i,s,t,M,e,t,a,d,a,t,a,F,i,l,t,e,r); +static const XMLCh Whitelist[] = UNICODE_LITERAL_23(W,h,i,t,e,l,i,s,t,M,e,t,a,d,a,t,a,F,i,l,t,e,r); +static const XMLCh SigFilter[] = UNICODE_LITERAL_23(S,i,g,n,a,t,u,r,e,M,e,t,a,d,a,t,a,F,i,l,t,e,r); +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) { #ifdef _DEBUG NDC ndc("MetadataProvider"); #endif + Category& log = Category::getInstance(SAML_LOGCAT".Metadata"); SAMLConfig& conf=SAMLConfig::getConfig(); // Locate any default recognized filters and plugins. try { DOMElement* child = e ? XMLHelper::getFirstChildElement(e) : NULL; while (child) { - if (XMLString::equals(child->getLocalName(),GenericMetadataFilter)) { + if (XMLString::equals(child->getLocalName(),_MetadataFilter)) { auto_ptr_char t(child->getAttributeNS(NULL,type)); - if (t.get()) + if (t.get() && *t.get()) { + log.info("building MetadataFilter of type %s", t.get()); m_filters.push_back(conf.MetadataFilterManager.newPlugin(t.get(),child)); - else - throw UnknownExtensionException(" element found with no type attribute"); + } } else if (XMLString::equals(child->getLocalName(),SigFilter)) { + log.info("building MetadataFilter of type %s", SIGNATURE_METADATA_FILTER); m_filters.push_back(conf.MetadataFilterManager.newPlugin(SIGNATURE_METADATA_FILTER,child)); } else if (XMLString::equals(child->getLocalName(),Whitelist)) { + log.info("building MetadataFilter of type %s", WHITELIST_METADATA_FILTER); m_filters.push_back(conf.MetadataFilterManager.newPlugin(WHITELIST_METADATA_FILTER,child)); } else if (XMLString::equals(child->getLocalName(),Blacklist)) { + log.info("building MetadataFilter of type %s", BLACKLIST_METADATA_FILTER); m_filters.push_back(conf.MetadataFilterManager.newPlugin(BLACKLIST_METADATA_FILTER,child)); } else if (XMLString::equals(child->getLocalName(),Include)) { + log.info("building MetadataFilter of type %s", WHITELIST_METADATA_FILTER); m_filters.push_back(conf.MetadataFilterManager.newPlugin(WHITELIST_METADATA_FILTER,e)); } else if (XMLString::equals(child->getLocalName(),Exclude)) { + log.info("building MetadataFilter of type %s", BLACKLIST_METADATA_FILTER); m_filters.push_back(conf.MetadataFilterManager.newPlugin(BLACKLIST_METADATA_FILTER,e)); } child = XMLHelper::getNextSiblingElement(child); } } catch (XMLToolingException& ex) { - Category::getInstance(SAML_LOGCAT".Metadata").error("caught exception while installing filters: %s", ex.what()); + log.error("caught exception while installing filters: %s", ex.what()); for_each(m_filters.begin(),m_filters.end(),xmltooling::cleanup()); throw; }