From: Scott Cantor Date: Tue, 27 Jul 2010 19:38:54 +0000 (+0000) Subject: https://issues.shibboleth.net/jira/browse/CPPXT-60 X-Git-Tag: 1.4RC1~52 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=commitdiff_plain;h=a56a8fde050d1810623dccda3754422a2f903879 https://issues.shibboleth.net/jira/browse/CPPXT-60 --- diff --git a/xmltooling/security/impl/ChainingTrustEngine.cpp b/xmltooling/security/impl/ChainingTrustEngine.cpp index da00a5b..ac2ab61 100644 --- a/xmltooling/security/impl/ChainingTrustEngine.cpp +++ b/xmltooling/security/impl/ChainingTrustEngine.cpp @@ -54,17 +54,7 @@ ChainingTrustEngine::ChainingTrustEngine(const DOMElement* e) : TrustEngine(e) { string t = XMLHelper::getAttrString(e, nullptr, type); if (!t.empty()) { log.info("building TrustEngine of type %s", t.c_str()); - TrustEngine* engine = XMLToolingConfig::getConfig().TrustEngineManager.newPlugin(t.c_str(), e); - m_engines.push_back(engine); - SignatureTrustEngine* sig = dynamic_cast(engine); - if (sig) - m_sigEngines.push_back(sig); - X509TrustEngine* x509 = dynamic_cast(engine); - if (x509) - m_x509Engines.push_back(x509); - OpenSSLTrustEngine* ossl = dynamic_cast(engine); - if (ossl) - m_osslEngines.push_back(ossl); + addTrustEngine(XMLToolingConfig::getConfig().TrustEngineManager.newPlugin(t.c_str(), e)); } } catch (exception& ex) { @@ -81,15 +71,45 @@ ChainingTrustEngine::~ChainingTrustEngine() { void ChainingTrustEngine::addTrustEngine(TrustEngine* newEngine) { m_engines.push_back(newEngine); + SignatureTrustEngine* sig = dynamic_cast(newEngine); + if (sig) + m_sigEngines.push_back(sig); + X509TrustEngine* x509 = dynamic_cast(newEngine); + if (x509) + m_x509Engines.push_back(x509); + OpenSSLTrustEngine* ossl = dynamic_cast(newEngine); + if (ossl) + m_osslEngines.push_back(ossl); } TrustEngine* ChainingTrustEngine::removeTrustEngine(TrustEngine* oldEngine) { - for (vector::iterator i=m_engines.begin(); i!=m_engines.end(); i++) { - if (oldEngine==(*i)) { - m_engines.erase(i); - return oldEngine; + vector::iterator i = find(m_engines.begin(), m_engines.end(), oldEngine); + if (i != m_engines.end()) { + m_engines.erase(i); + + SignatureTrustEngine* sig = dynamic_cast(oldEngine); + if (sig) { + vector::iterator s = find(m_sigEngines.begin(), m_sigEngines.end(), sig); + if (s != m_sigEngines.end()) + m_sigEngines.erase(s); + } + + X509TrustEngine* x509 = dynamic_cast(oldEngine); + if (x509) { + vector::iterator x = find(m_x509Engines.begin(), m_x509Engines.end(), x509); + if (x != m_x509Engines.end()) + m_x509Engines.erase(x); } + + OpenSSLTrustEngine* ossl = dynamic_cast(oldEngine); + if (ossl) { + vector::iterator o = find(m_osslEngines.begin(), m_osslEngines.end(), ossl); + if (o != m_osslEngines.end()) + m_osslEngines.erase(o); + } + + return oldEngine; } return nullptr; }