Remove non-xstring code.
[shibboleth/cpp-opensaml.git] / saml / saml2 / metadata / impl / BlacklistMetadataFilter.cpp
index a0acf60..8606f14 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright 2001-2006 Internet2
+ *  Copyright 2001-2009 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 {
@@ -49,19 +50,10 @@ namespace opensaml {
             bool found(const XMLCh* id) const {
                 if (!id)
                     return false;
-#ifdef HAVE_GOOD_STL
                 return m_set.count(id)==1;
-#else
-                auto_ptr_char id2(id);
-                return m_set.count(id2.get())==1;
-#endif
             }
 
-#ifdef HAVE_GOOD_STL
             set<xstring> m_set;
-#else
-            set<string> m_set;
-#endif
         }; 
 
         MetadataFilter* SAML_DLLLOCAL BlacklistMetadataFilterFactory(const DOMElement* const & e)
@@ -79,12 +71,7 @@ BlacklistMetadataFilter::BlacklistMetadataFilter(const DOMElement* e)
     e = XMLHelper::getFirstChildElement(e);
     while (e) {
         if (XMLString::equals(e->getLocalName(), Exclude) && e->hasChildNodes()) {
-#ifdef HAVE_GOOD_STL
             m_set.insert(e->getFirstChild()->getNodeValue());
-#else
-            auto_ptr_char id(e->getFirstChild()->getNodeValue());
-            m_set.insert(id.get());
-#endif
         }
         e = XMLHelper::getNextSiblingElement(e);
     }
@@ -97,7 +84,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) {
@@ -117,7 +107,7 @@ void BlacklistMetadataFilter::doFilter(XMLObject& xmlObject) const
 
 void BlacklistMetadataFilter::doFilter(EntitiesDescriptor& entities) const
 {
-    Category& log=Category::getInstance(SAML_LOGCAT".Metadata");
+    Category& log=Category::getInstance(SAML_LOGCAT".MetadataFilter.Blacklist");
     
     VectorOf(EntityDescriptor) v=entities.getEntityDescriptors();
     for (VectorOf(EntityDescriptor)::size_type i=0; i<v.size(); ) {
@@ -132,7 +122,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++;
+        }
+    }
 }