Attribute filtering code.
[shibboleth/sp.git] / shibsp / impl / XMLServiceProvider.cpp
index 2d3fa74..d24a5d7 100644 (file)
@@ -30,6 +30,7 @@
 #include "SPConfig.h"\r
 #include "SPRequest.h"\r
 #include "TransactionLog.h"\r
+#include "attribute/filtering/AttributeFilter.h"\r
 #include "attribute/resolver/AttributeExtractor.h"\r
 #include "attribute/resolver/AttributeResolver.h"\r
 #include "handler/SessionInitiator.h"\r
@@ -90,6 +91,9 @@ namespace {
         AttributeExtractor* getAttributeExtractor() const {\r
             return (!m_attrExtractor && m_base) ? m_base->getAttributeExtractor() : m_attrExtractor;\r
         }\r
+        AttributeFilter* getAttributeFilter() const {\r
+            return (!m_attrFilter && m_base) ? m_base->getAttributeFilter() : m_attrFilter;\r
+        }\r
         AttributeResolver* getAttributeResolver() const {\r
             return (!m_attrResolver && m_base) ? m_base->getAttributeResolver() : m_attrResolver;\r
         }\r
@@ -120,6 +124,7 @@ namespace {
         MetadataProvider* m_metadata;\r
         TrustEngine* m_trust;\r
         AttributeExtractor* m_attrExtractor;\r
+        AttributeFilter* m_attrFilter;\r
         AttributeResolver* m_attrResolver;\r
         CredentialResolver* m_credResolver;\r
         vector<const XMLCh*> m_audiences;\r
@@ -341,7 +346,7 @@ XMLApplication::XMLApplication(
     const ServiceProvider* sp,\r
     const DOMElement* e,\r
     const XMLApplication* base\r
-    ) : m_sp(sp), m_base(base), m_metadata(NULL), m_trust(NULL), m_attrExtractor(NULL), m_attrResolver(NULL),\r
+    ) : m_sp(sp), m_base(base), m_metadata(NULL), m_trust(NULL), m_attrExtractor(NULL), m_attrFilter(NULL), m_attrResolver(NULL),\r
         m_credResolver(NULL), m_partyDefault(NULL), m_sessionInitDefault(NULL), m_acsDefault(NULL)\r
 {\r
 #ifdef _DEBUG\r
@@ -522,6 +527,18 @@ XMLApplication::XMLApplication(
                 }\r
             }\r
 \r
+            child = XMLHelper::getFirstChildElement(e,_AttributeFilter);\r
+            if (child) {\r
+                auto_ptr_char type(child->getAttributeNS(NULL,_type));\r
+                log.info("building AttributeFilter of type %s...",type.get());\r
+                try {\r
+                    m_attrFilter = conf.AttributeFilterManager.newPlugin(type.get(),child);\r
+                }\r
+                catch (exception& ex) {\r
+                    log.crit("error building AttributeFilter: %s", ex.what());\r
+                }\r
+            }\r
+\r
             child = XMLHelper::getFirstChildElement(e,_AttributeResolver);\r
             if (child) {\r
                 auto_ptr_char type(child->getAttributeNS(NULL,_type));\r
@@ -592,6 +609,7 @@ void XMLApplication::cleanup()
     for_each(m_handlers.begin(),m_handlers.end(),xmltooling::cleanup<Handler>());\r
     delete m_credResolver;\r
     delete m_attrResolver;\r
+    delete m_attrFilter;\r
     delete m_attrExtractor;\r
     delete m_trust;\r
     delete m_metadata;\r