[cpp-opensaml] branch master updated: CPPOST-106 Warn on bad inout to a Chaining provider
Rod Widdowson
rdw at steadingsoftware.com
Mon Jan 29 10:28:02 EST 2018
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch master
in repository cpp-opensaml.
View the commit online:
http://git.shibboleth.net/view/?p=cpp-opensaml.git;a=commit;h=c95a1fd2470c99e50d2c47c11ac6d33062e7b062
The following commit(s) were added to refs/heads/master by this push:
new c95a1fd CPPOST-106 Warn on bad inout to a Chaining provider
c95a1fd is described below
commit c95a1fd2470c99e50d2c47c11ac6d33062e7b062
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Mon Jan 29 15:26:38 2018 +0000
CPPOST-106 Warn on bad inout to a Chaining provider
https://issues.shibboleth.net/jira/browse/CPPOST-106
Log the name of every child element if it isn't <MetadataProvider>
Add test for same
---
.../metadata/impl/ChainingMetadataProvider.cpp | 39 ++++++++++++----------
samltest/data/saml2/metadata/BadChain.xml | 5 +++
samltest/saml2/metadata/XMLMetadataProviderTest.h | 18 ++++++++++
3 files changed, 45 insertions(+), 17 deletions(-)
diff --git a/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp b/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp
index 3a77bbc..106ce28 100644
--- a/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp
+++ b/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp
@@ -191,27 +191,32 @@ ChainingMetadataProvider::ChainingMetadataProvider(const DOMElement* e)
if (XMLString::equals(e ? e->getAttributeNS(nullptr, precedence) : nullptr, last))
m_firstMatch = false;
- e = XMLHelper::getFirstChildElement(e, _MetadataProvider);
+ e = XMLHelper::getFirstChildElement(e);
while (e) {
- string t = XMLHelper::getAttrString(e, nullptr, _type);
- if (!t.empty()) {
- try {
- m_log.info("building MetadataProvider of type %s", t.c_str());
- auto_ptr<MetadataProvider> provider(SAMLConfig::getConfig().MetadataProviderManager.newPlugin(t.c_str(), e));
- ObservableMetadataProvider* obs = dynamic_cast<ObservableMetadataProvider*>(provider.get());
- if (obs)
- obs->addObserver(this);
- m_providers.push_back(provider.get());
- provider.release();
- }
- catch (std::exception& ex) {
- m_log.error("error building MetadataProvider: %s", ex.what());
- }
+ if (!XMLString::equals(_MetadataProvider, e->getLocalName())) {
+ auto_ptr_char name(e->getLocalName());
+ m_log.error("MetadataProvider child element of type %s ignored", name.get());
}
else {
- m_log.error("MetadataProvider element missing type attribute");
+ string t = XMLHelper::getAttrString(e, nullptr, _type);
+ if (!t.empty()) {
+ try {
+ m_log.info("building MetadataProvider of type %s", t.c_str());
+ auto_ptr<MetadataProvider> provider(SAMLConfig::getConfig().MetadataProviderManager.newPlugin(t.c_str(), e));
+ ObservableMetadataProvider* obs = dynamic_cast<ObservableMetadataProvider*>(provider.get());
+ if (obs)
+ obs->addObserver(this);
+ m_providers.push_back(provider.get());
+ provider.release();
+ } catch (std::exception& ex) {
+ m_log.error("error building MetadataProvider: %s", ex.what());
+ }
+ }
+ else {
+ m_log.error("MetadataProvider element missing type attribute");
+ }
}
- e = XMLHelper::getNextSiblingElement(e, _MetadataProvider);
+ e = XMLHelper::getNextSiblingElement(e);
}
}
diff --git a/samltest/data/saml2/metadata/BadChain.xml b/samltest/data/saml2/metadata/BadChain.xml
new file mode 100644
index 0000000..7686f61
--- /dev/null
+++ b/samltest/data/saml2/metadata/BadChain.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<MetadataProvider type="Chaining">
+ <MetadataFilter type="Signature" certificate="../../../samltest/data/incommon.pem" />
+ <MetadataFilter type="Signature" certificate="../../../samltest/data/incommon.pem" />
+</MetadataProvider>
diff --git a/samltest/saml2/metadata/XMLMetadataProviderTest.h b/samltest/saml2/metadata/XMLMetadataProviderTest.h
index a14e5fe..02503e4 100644
--- a/samltest/saml2/metadata/XMLMetadataProviderTest.h
+++ b/samltest/saml2/metadata/XMLMetadataProviderTest.h
@@ -75,6 +75,24 @@ public:
}
}
+ void testBadChain()
+ {
+ string config = data_path + "saml2/metadata/BadChain.xml";
+ ifstream in(config.c_str());
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(in);
+ XercesJanitor<DOMDocument> janitor(doc);
+
+ auto_ptr<MetadataProvider> metadataProvider(
+ SAMLConfig::getConfig().MetadataProviderManager.newPlugin(CHAINING_METADATA_PROVIDER, doc->getDocumentElement())
+ );
+ try {
+ metadataProvider->init();
+ } catch (XMLToolingException& ex) {
+ TS_TRACE(ex.what());
+ throw;
+ }
+ }
+
void testXMLProvider() {
string config = data_path + "saml2/metadata/XMLMetadataProvider.xml";
ifstream in(config.c_str());
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list