X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2Fimpl%2FBlacklistMetadataFilter.cpp;h=1a4a834c929c1d7e30d583244bdb4038057aef07;hb=9fddf9054c76de6239295b98a559fcc75453effc;hp=a0acf6052a403556192ff4e3396b7e8a17c2f07a;hpb=2e7ffaf168c7471afba1d0076bc00f4796387a63;p=shibboleth%2Fopensaml2.git diff --git a/saml/saml2/metadata/impl/BlacklistMetadataFilter.cpp b/saml/saml2/metadata/impl/BlacklistMetadataFilter.cpp index a0acf60..1a4a834 100644 --- a/saml/saml2/metadata/impl/BlacklistMetadataFilter.cpp +++ b/saml/saml2/metadata/impl/BlacklistMetadataFilter.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,14 +21,15 @@ */ #include "internal.h" +#include "saml2/metadata/Metadata.h" #include "saml2/metadata/MetadataFilter.h" -#include +#include #include using namespace opensaml::saml2md; +using namespace xmltooling::logging; using namespace xmltooling; -using namespace log4cpp; using namespace std; namespace opensaml { @@ -97,7 +98,10 @@ void BlacklistMetadataFilter::doFilter(XMLObject& xmlObject) const #endif try { - doFilter(dynamic_cast(xmlObject)); + EntitiesDescriptor& entities = dynamic_cast(xmlObject); + if (found(entities.getName())) + throw MetadataFilterException("BlacklistMetadataFilter instructed to filter the root/only group in the metadata."); + doFilter(entities); return; } catch (bad_cast) { @@ -132,7 +136,17 @@ void BlacklistMetadataFilter::doFilter(EntitiesDescriptor& entities) const } } - const vector& groups=const_cast(entities).getEntitiesDescriptors(); - for (vector::const_iterator j=groups.begin(); j!=groups.end(); j++) - doFilter(*(*j)); + VectorOf(EntitiesDescriptor) w=entities.getEntitiesDescriptors(); + for (VectorOf(EntitiesDescriptor)::size_type j=0; jgetName(); + if (found(name)) { + auto_ptr_char name2(name); + log.info("filtering out blacklisted group (%s)", name2.get()); + w.erase(w.begin() + j); + } + else { + doFilter(*(w[j])); + j++; + } + } }