Imported Upstream version 2.4+dfsg
[shibboleth/sp.git] / shibsp / handler / impl / ChainingSessionInitiator.cpp
index 1cbc45b..1b4bfce 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright 2001-2007 Internet2
+ *  Copyright 2001-2010 Internet2
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -52,6 +52,7 @@ namespace shibsp {
 
 #ifndef SHIBSP_LITE
         void generateMetadata(opensaml::saml2md::SPSSODescriptor& role, const char* handlerURL) const {
+            SessionInitiator::generateMetadata(role, handlerURL);
             for (vector<SessionInitiator*>::const_iterator i = m_handlers.begin(); i!=m_handlers.end(); ++i)
                 (*i)->generateMetadata(role, handlerURL);
         }
@@ -97,9 +98,9 @@ ChainingSessionInitiator::ChainingSessionInitiator(const DOMElement* e, const ch
     SPConfig& conf = SPConfig::getConfig();
 
     // Load up the chain of handlers.
-    e = e ? XMLHelper::getFirstChildElement(e, _SessionInitiator) : NULL;
+    e = e ? XMLHelper::getFirstChildElement(e, _SessionInitiator) : nullptr;
     while (e) {
-        auto_ptr_char type(e->getAttributeNS(NULL,_type));
+        auto_ptr_char type(e->getAttributeNS(nullptr,_type));
         if (type.get() && *(type.get())) {
             try {
                 m_handlers.push_back(conf.SessionInitiatorManager.newPlugin(type.get(),make_pair(e, appId)));
@@ -111,10 +112,15 @@ ChainingSessionInitiator::ChainingSessionInitiator(const DOMElement* e, const ch
         }
         e = XMLHelper::getNextSiblingElement(e, _SessionInitiator);
     }
+
+    m_supportedOptions.insert("isPassive");
 }
 
 pair<bool,long> ChainingSessionInitiator::run(SPRequest& request, string& entityID, bool isHandler) const
 {
+    if (!checkCompatibility(request, isHandler))
+        return make_pair(false,0L);
+
     pair<bool,long> ret;
     for (vector<SessionInitiator*>::const_iterator i = m_handlers.begin(); i!=m_handlers.end(); ++i) {
         ret = (*i)->run(request, entityID, isHandler);