Convert logging to log4shib via compile time switch.
[shibboleth/opensaml2.git] / saml / saml2 / metadata / impl / BlacklistMetadataFilter.cpp
index a0acf60..1a4a834 100644 (file)
@@ -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.
  */
 
 #include "internal.h"
+#include "saml2/metadata/Metadata.h"
 #include "saml2/metadata/MetadataFilter.h"
 
-#include <log4cpp/Category.hh>
+#include <xmltooling/logging.h>
 #include <xmltooling/util/NDC.h>
 
 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<EntitiesDescriptor&>(xmlObject));
+        EntitiesDescriptor& entities = dynamic_cast<EntitiesDescriptor&>(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<EntitiesDescriptor*>& groups=const_cast<const EntitiesDescriptor&>(entities).getEntitiesDescriptors();
-    for (vector<EntitiesDescriptor*>::const_iterator j=groups.begin(); j!=groups.end(); j++)
-        doFilter(*(*j));
+    VectorOf(EntitiesDescriptor) w=entities.getEntitiesDescriptors();
+    for (VectorOf(EntitiesDescriptor)::size_type j=0; j<w.size(); ) {
+        const XMLCh* name=w[j]->getName();
+        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++;
+        }
+    }
 }