[cpp-sp] 02/02: SSPCPP-640 - extend the SessionInitiator URL syntax

Scott Cantor cantor.2 at osu.edu
Fri Apr 20 17:33:41 EDT 2018


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

scantor 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=eeac7969da3198fc3294c19444f892010aeeb20a

commit eeac7969da3198fc3294c19444f892010aeeb20a
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Fri Apr 20 17:33:04 2018 -0400

    SSPCPP-640 - extend the SessionInitiator URL syntax
    
    https://issues.shibboleth.net/jira/browse/SSPCPP-640
---
 shibsp/handler/impl/SAML2SessionInitiator.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/shibsp/handler/impl/SAML2SessionInitiator.cpp b/shibsp/handler/impl/SAML2SessionInitiator.cpp
index d9460cf..aea92d3 100644
--- a/shibsp/handler/impl/SAML2SessionInitiator.cpp
+++ b/shibsp/handler/impl/SAML2SessionInitiator.cpp
@@ -111,6 +111,7 @@ namespace shibsp {
             const char* NameIDFormat,
             const char* SPNameQualifier,
             const char* requestTemplate,
+            const char* outgoingBinding,
             string& relayState
             ) const;
 
@@ -256,6 +257,7 @@ pair<bool,long> SAML2SessionInitiator::run(SPRequest& request, string& entityID,
     const Handler* ACS = nullptr;
     pair<bool,const char*> acClass, acComp, nidFormat, spQual;
     const char* requestTemplate = nullptr;
+    const char* outgoingBinding = nullptr;
     bool isPassive=false,forceAuthn=false;
     const Application& app = request.getApplication();
 
@@ -290,6 +292,8 @@ pair<bool,long> SAML2SessionInitiator::run(SPRequest& request, string& entityID,
             requestTemplate = request.getParameter("template");
         }
 
+        outgoingBinding = request.getParameter("outgoingBinding");
+
         pair<bool,bool> flag = getBool("isPassive", request, settingMask);
         isPassive = (flag.first && flag.second);
 
@@ -396,6 +400,7 @@ pair<bool,long> SAML2SessionInitiator::run(SPRequest& request, string& entityID,
                 nidFormat.first ? nidFormat.second : nullptr,
                 spQual.first ? spQual.second : nullptr,
                 requestTemplate,
+                outgoingBinding,
                 target
                 );
         }
@@ -426,6 +431,7 @@ pair<bool,long> SAML2SessionInitiator::run(SPRequest& request, string& entityID,
             nidFormat.first ? nidFormat.second : nullptr,
             spQual.first ? spQual.second : nullptr,
             requestTemplate,
+            outgoingBinding,
             target
             );
     }
@@ -450,6 +456,8 @@ pair<bool,long> SAML2SessionInitiator::run(SPRequest& request, string& entityID,
         in.addmember("SPNameQualifier").string(spQual.second);
     if (requestTemplate)
         in.addmember("template").string(requestTemplate);
+    if (outgoingBinding)
+        in.addmember("outgoingBinding").string(outgoingBinding);
     if (acsByIndex.first && acsByIndex.second) {
         // Determine index to use.
         pair<bool,const char*> ix = pair<bool,const char*>(false,nullptr);
@@ -542,6 +550,7 @@ void SAML2SessionInitiator::receive(DDF& in, ostream& out)
         in["NameIDFormat"].string(),
         in["SPNameQualifier"].string(),
         in["template"].string(),
+        in["outgoingBinding"].string(),
         relayState
         );
     if (!ret.isstruct())
@@ -566,6 +575,7 @@ pair<bool,long> SAML2SessionInitiator::doRequest(
     const char* NameIDFormat,
     const char* SPNameQualifier,
     const char* requestTemplate,
+    const char* outgoingBinding,
     string& relayState
     ) const
 {
@@ -612,6 +622,8 @@ pair<bool,long> SAML2SessionInitiator::doRequest(
         // Loop over the supportable outgoing bindings.
         role = dynamic_cast<const IDPSSODescriptor*>(entity.second);
         for (vector<string>::const_iterator b = m_bindings.begin(); b != m_bindings.end(); ++b) {
+            if (outgoingBinding && *b != outgoingBinding)
+                continue;
             auto_ptr_XMLCh wideb(b->c_str());
             ep = EndpointManager<SingleSignOnService>(role->getSingleSignOnServices()).getByBinding(wideb.get());
             if (ep) {

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


More information about the commits mailing list