[cpp-sp] 01/02: SSPCPP-756 Derive DynamicMetadataProvider from Abstract parent.

Rod Widdowson rdw at steadingsoftware.com
Fri Nov 17 09:12:41 EST 2017


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch master
in repository cpp-sp.

View the commit online:
http://git.shibboleth.net/view/?p=cpp-sp.git;a=commit;h=36bb7fdeb64b0736253b212aa4292a0191e3e6a7

commit 36bb7fdeb64b0736253b212aa4292a0191e3e6a7
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sun Nov 5 14:19:17 2017 +0000

    SSPCPP-756 Derive DynamicMetadataProvider from Abstract parent.
    
    https://issues.shibboleth.net/jira/browse/SSPCPP-756
    
    This means refusing file://.  We do as much as possible statically,
    but defend against it dynamically as well (well known lookup with an
    entityID of "file::/foo/bar")
---
 shibsp/metadata/DynamicMetadataProvider.cpp | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/shibsp/metadata/DynamicMetadataProvider.cpp b/shibsp/metadata/DynamicMetadataProvider.cpp
index 8853acb..7b51db2 100644
--- a/shibsp/metadata/DynamicMetadataProvider.cpp
+++ b/shibsp/metadata/DynamicMetadataProvider.cpp
@@ -39,7 +39,7 @@
 #include <saml/version.h>
 #include <saml/binding/SAMLArtifact.h>
 #include <saml/saml2/metadata/Metadata.h>
-#include <saml/saml2/metadata/DynamicMetadataProvider.h>
+#include <saml/saml2/metadata/AbstractDynamicMetadataProvider.h>
 
 #include <xmltooling/logging.h>
 #include <xmltooling/XMLToolingConfig.h>
@@ -61,7 +61,7 @@ using namespace xmltooling;
 using namespace std;
 
 namespace shibsp {
-    class SHIBSP_DLLLOCAL DynamicMetadataProvider : public saml2md::DynamicMetadataProvider
+    class SHIBSP_DLLLOCAL DynamicMetadataProvider : public saml2md::AbstractDynamicMetadataProvider
     {
     public:
         DynamicMetadataProvider(const xercesc::DOMElement* e=nullptr);
@@ -95,7 +95,7 @@ namespace shibsp {
 };
 
 DynamicMetadataProvider::DynamicMetadataProvider(const DOMElement* e)
-    : saml2md::DynamicMetadataProvider(e),
+    : saml2md::AbstractDynamicMetadataProvider(true, e),
         m_verifyHost(XMLHelper::getAttrBool(e, true, verifyHost)),
         m_ignoreTransport(XMLHelper::getAttrBool(e, false, ignoreTransport)),
         m_encoded(true), m_trust(nullptr)
@@ -107,6 +107,10 @@ DynamicMetadataProvider::DynamicMetadataProvider(const DOMElement* e)
             m_subst = s.get();
             m_encoded = XMLHelper::getAttrBool(child, true, encoded);
             m_hashed = XMLHelper::getAttrString(child, nullptr, hashed);
+            if (!m_subst.empty() &&
+                XMLString::startsWithI(m_subst.c_str(), "file://")) {
+                throw ConfigurationException("DynamicMetadataProvider: <Subst> cannot be a file:// URL");
+            }
         }
     }
 
@@ -115,8 +119,13 @@ DynamicMetadataProvider::DynamicMetadataProvider(const DOMElement* e)
         if (child && child->hasChildNodes() && child->hasAttributeNS(nullptr, match)) {
             m_match = XMLHelper::getAttrString(child, nullptr, match);
             auto_ptr_char repl(child->getFirstChild()->getNodeValue());
-            if (repl.get() && *repl.get())
+            if (repl.get() && *repl.get()) {
                 m_regex = repl.get();
+                if (!m_regex.empty() &&
+                    XMLString::startsWithI(m_regex.c_str(), "file://")) {
+                    throw ConfigurationException("DynamicMetadataProvider: <Regex> cannot be a file:// URL");
+                }
+            }
         }
     }
 
@@ -192,8 +201,7 @@ saml2md::EntityDescriptor* DynamicMetadataProvider::resolve(const saml2md::Metad
     }
 
     if (XMLString::startsWithI(name.c_str(), "file://")) {
-        MetadataProvider::Criteria baseCriteria(name.c_str());
-        return saml2md::DynamicMetadataProvider::resolve(baseCriteria);
+        throw saml2md::MetadataException("Dynamic MetadataProvider: Resolved name cannot start with a file:// ");
     }
 
     // Establish networking properties based on calling application.

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list