/*
- * Copyright 2001-2010 Internet2
+ * Copyright 2001-2011 Internet2
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
MetadataProvider* getMetadataProvider(bool required=true) const {
if (required && !m_base && !m_metadata)
throw ConfigurationException("No MetadataProvider available.");
- return (!m_metadata && m_base) ? m_base->getMetadataProvider() : m_metadata;
+ return (!m_metadata && m_base) ? m_base->getMetadataProvider(required) : m_metadata;
}
TrustEngine* getTrustEngine(bool required=true) const {
if (required && !m_base && !m_trust)
throw ConfigurationException("No TrustEngine available.");
- return (!m_trust && m_base) ? m_base->getTrustEngine() : m_trust;
+ return (!m_trust && m_base) ? m_base->getTrustEngine(required) : m_trust;
}
AttributeExtractor* getAttributeExtractor() const {
return (!m_attrExtractor && m_base) ? m_base->getAttributeExtractor() : m_attrExtractor;
const char* chainingType,
const XMLCh* localName,
DOMElement* e,
- Category& log
+ Category& log,
+ const char* dummyType=nullptr
);
void doAttributeInfo();
void doHandlers(const ProtocolProvider*, const DOMElement*, Category&);
const char* chainingType,
const XMLCh* localName,
DOMElement* e,
- Category& log
+ Category& log,
+ const char* dummyType
)
{
string t;
}
catch (exception& ex) {
log.crit("error building %s: %s", pluginType, ex.what());
+ if (dummyType) {
+ // Install a dummy version as a safety valve.
+ log.crit("installing safe %s in place of failed version", pluginType);
+ return pluginMgr.newPlugin(dummyType, nullptr);
+ }
}
}
child = XMLHelper::getNextSiblingElement(child);
continue;
}
- handler = conf.AssertionConsumerServiceManager.newPlugin(bindprop.c_str(), make_pair(child, getId()));
+ handler = conf.AssertionConsumerServiceManager.newPlugin(bindprop.c_str(), pair<const DOMElement*,const char*>(child, getId()));
// Map by binding and protocol (may be > 1 per protocol and binding)
m_acsBindingMap[handler->getXMLString("Binding").second].push_back(handler);
const XMLCh* protfamily = handler->getProtocolFamily();
child = XMLHelper::getNextSiblingElement(child);
continue;
}
- SessionInitiator* sihandler = conf.SessionInitiatorManager.newPlugin(t.c_str(), make_pair(child, getId()));
+ SessionInitiator* sihandler = conf.SessionInitiatorManager.newPlugin(t.c_str(), pair<const DOMElement*,const char*>(child, getId()));
handler = sihandler;
pair<bool,const char*> si_id = handler->getString("id");
if (si_id.first && si_id.second)
child = XMLHelper::getNextSiblingElement(child);
continue;
}
- handler = conf.LogoutInitiatorManager.newPlugin(t.c_str(), make_pair(child, getId()));
+ handler = conf.LogoutInitiatorManager.newPlugin(t.c_str(), pair<const DOMElement*,const char*>(child, getId()));
}
else if (XMLString::equals(child->getLocalName(), _ArtifactResolutionService)) {
string bindprop(XMLHelper::getAttrString(child, nullptr, Binding));
child = XMLHelper::getNextSiblingElement(child);
continue;
}
- handler = conf.ArtifactResolutionServiceManager.newPlugin(bindprop.c_str(), make_pair(child, getId()));
+ handler = conf.ArtifactResolutionServiceManager.newPlugin(bindprop.c_str(), pair<const DOMElement*,const char*>(child, getId()));
if (!hardArt) {
pair<bool,bool> defprop = handler->getBool("isDefault");
child = XMLHelper::getNextSiblingElement(child);
continue;
}
- handler = conf.SingleLogoutServiceManager.newPlugin(bindprop.c_str(), make_pair(child, getId()));
+ handler = conf.SingleLogoutServiceManager.newPlugin(bindprop.c_str(), pair<const DOMElement*,const char*>(child, getId()));
}
else if (XMLString::equals(child->getLocalName(), _ManageNameIDService)) {
string bindprop(XMLHelper::getAttrString(child, nullptr, Binding));
child = XMLHelper::getNextSiblingElement(child);
continue;
}
- handler = conf.ManageNameIDServiceManager.newPlugin(bindprop.c_str(), make_pair(child, getId()));
+ handler = conf.ManageNameIDServiceManager.newPlugin(bindprop.c_str(), pair<const DOMElement*,const char*>(child, getId()));
}
else {
string t(XMLHelper::getAttrString(child, nullptr, _type));
child = XMLHelper::getNextSiblingElement(child);
continue;
}
- handler = conf.HandlerManager.newPlugin(t.c_str(), make_pair(child, getId()));
+ handler = conf.HandlerManager.newPlugin(t.c_str(), pair<const DOMElement*,const char*>(child, getId()));
}
m_handlers.push_back(handler);
SPConfig& conf = SPConfig::getConfig();
// Tokenize the protocol list inside the element.
- const XMLCh* protlist = e->getFirstChild()->getNodeValue();
- XMLStringTokenizer prottokens(protlist);
+ XMLStringTokenizer prottokens(e->getTextContent());
while (prottokens.hasMoreTokens()) {
auto_ptr_char prot(prottokens.nextToken());
acsdom->setAttributeNS(nullptr, _index, indexbuf.c_str());
log.info("adding AssertionConsumerService for Binding (%s) at (%s)", (*b)->getString("id").second, (*b)->getString("path").second);
- Handler* handler = conf.AssertionConsumerServiceManager.newPlugin((*b)->getString("id").second, make_pair(acsdom, getId()));
+ Handler* handler = conf.AssertionConsumerServiceManager.newPlugin(
+ (*b)->getString("id").second, pair<const DOMElement*,const char*>(acsdom, getId())
+ );
m_handlers.push_back(handler);
// Setup maps and defaults.
e->setAttributeNS(nullptr, Location, _loc);
// Instantiate Chaining initiator around the SSO element.
- SessionInitiator* chain = conf.SessionInitiatorManager.newPlugin(CHAINING_SESSION_INITIATOR, make_pair(e, getId()));
+ SessionInitiator* chain = conf.SessionInitiatorManager.newPlugin(
+ CHAINING_SESSION_INITIATOR, pair<const DOMElement*,const char*>(e, getId())
+ );
m_handlers.push_back(chain);
m_sessionInitDefault = chain;
m_handlerMap["/Login"] = chain;
SPConfig& conf = SPConfig::getConfig();
// Tokenize the protocol list inside the element.
- const XMLCh* protlist = e->getFirstChild()->getNodeValue();
- XMLStringTokenizer prottokens(protlist);
+ XMLStringTokenizer prottokens(e->getTextContent());
while (prottokens.hasMoreTokens()) {
auto_ptr_char prot(prottokens.nextToken());
slodom->setAttributeNS(nullptr, Location, pathprop.second);
log.info("adding SingleLogoutService for Binding (%s) at (%s)", (*b)->getString("id").second, (*b)->getString("path").second);
- Handler* handler = conf.SingleLogoutServiceManager.newPlugin((*b)->getString("id").second, make_pair(slodom, getId()));
+ Handler* handler = conf.SingleLogoutServiceManager.newPlugin(
+ (*b)->getString("id").second, pair<const DOMElement*,const char*>(slodom, getId())
+ );
m_handlers.push_back(handler);
// Insert into location map.
e->setAttributeNS(nullptr, Location, _loc);
// Instantiate Chaining initiator around the SSO element.
- Handler* chain = conf.LogoutInitiatorManager.newPlugin(CHAINING_LOGOUT_INITIATOR, make_pair(e, getId()));
+ Handler* chain = conf.LogoutInitiatorManager.newPlugin(
+ CHAINING_LOGOUT_INITIATOR, pair<const DOMElement*,const char*>(e, getId())
+ );
m_handlers.push_back(chain);
m_handlerMap["/Logout"] = chain;
}
SPConfig& conf = SPConfig::getConfig();
// Tokenize the protocol list inside the element.
- const XMLCh* protlist = e->getFirstChild()->getNodeValue();
- XMLStringTokenizer prottokens(protlist);
+ XMLStringTokenizer prottokens(e->getTextContent());
while (prottokens.hasMoreTokens()) {
auto_ptr_char prot(prottokens.nextToken());
nimdom->setAttributeNS(nullptr, Location, pathprop.second);
log.info("adding ManageNameIDService for Binding (%s) at (%s)", (*b)->getString("id").second, (*b)->getString("path").second);
- Handler* handler = conf.ManageNameIDServiceManager.newPlugin((*b)->getString("id").second, make_pair(nimdom, getId()));
+ Handler* handler = conf.ManageNameIDServiceManager.newPlugin(
+ (*b)->getString("id").second, pair<const DOMElement*,const char*>(nimdom, getId())
+ );
m_handlers.push_back(handler);
// Insert into location map.
artdom->setAttributeNS(nullptr, _index, indexbuf.c_str());
log.info("adding ArtifactResolutionService for Binding (%s) at (%s)", (*b)->getString("id").second, (*b)->getString("path").second);
- Handler* handler = conf.ArtifactResolutionServiceManager.newPlugin((*b)->getString("id").second, make_pair(artdom, getId()));
+ Handler* handler = conf.ArtifactResolutionServiceManager.newPlugin(
+ (*b)->getString("id").second, pair<const DOMElement*,const char*>(artdom, getId())
+ );
m_handlers.push_back(handler);
if (!m_artifactResolutionDefault)
doChainedPlugins(conf.AttributeExtractorManager, "AttributeExtractor", CHAINING_ATTRIBUTE_EXTRACTOR, _AttributeExtractor, e, log);
m_attrFilter =
- doChainedPlugins(conf.AttributeFilterManager, "AttributeFilter", CHAINING_ATTRIBUTE_FILTER, _AttributeFilter, e, log);
+ doChainedPlugins(conf.AttributeFilterManager, "AttributeFilter", CHAINING_ATTRIBUTE_FILTER, _AttributeFilter, e, log, DUMMY_ATTRIBUTE_FILTER);
m_attrResolver =
doChainedPlugins(conf.AttributeResolverManager, "AttributeResolver", CHAINING_ATTRIBUTE_RESOLVER, _AttributeResolver, e, log);