[cpp-sp] branch maint-3 updated: SSPCPP-1012 - Add deprecation warnings where required

Codeberg noreply at shibboleth.net
Thu Aug 13 14:26:21 UTC 2026


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

codeberg pushed a commit to branch maint-3
in repository cpp-sp.

View the commit online:
https://codeberg.org/Shibboleth/cpp-sp/commit/40dbd40727eea41894e0088245dcb19e3bb61b74

The following commit(s) were added to refs/heads/maint-3 by this push:
     new 40dbd407 SSPCPP-1012 - Add deprecation warnings where required
40dbd407 is described below

commit 40dbd40727eea41894e0088245dcb19e3bb61b74
Author: Scott Cantor <scott at restingparrotsoftware.com>
AuthorDate: Thu Aug 13 10:25:14 2026 -0400

    SSPCPP-1012 - Add deprecation warnings where required
    
    https://shibboleth.atlassian.net/browse/SSPCPP-1012
    
    Major round of warnings added.
---
 adfs/adfs.cpp                                     |  3 +++
 apache/mod_shib.cpp                               | 11 ++++++++---
 plugins/TimeAccessControl.cpp                     |  5 +++++
 shibsp/ServiceProvider.cpp                        |  2 +-
 shibsp/binding/impl/ArtifactResolver.cpp          |  2 +-
 shibsp/handler/impl/AssertionLookup.cpp           |  6 ++++++
 shibsp/handler/impl/CookieSessionInitiator.cpp    |  4 ++--
 shibsp/handler/impl/DiscoveryFeed.cpp             |  6 ++++++
 shibsp/handler/impl/ExternalAuthHandler.cpp       |  6 +++++-
 shibsp/handler/impl/FormSessionInitiator.cpp      |  4 ++--
 shibsp/handler/impl/SAML1Consumer.cpp             |  4 ++++
 shibsp/handler/impl/SAML2NameIDMgmt.cpp           |  6 +++++-
 shibsp/handler/impl/Shib1SessionInitiator.cpp     |  7 +++++++
 shibsp/handler/impl/TransformSessionInitiator.cpp |  4 +++-
 shibsp/handler/impl/WAYFSessionInitiator.cpp      |  3 +++
 shibsp/impl/XMLAccessControl.cpp                  |  2 ++
 shibsp/impl/XMLApplication.cpp                    | 18 ++++++++++++++++++
 17 files changed, 81 insertions(+), 12 deletions(-)

diff --git a/adfs/adfs.cpp b/adfs/adfs.cpp
index a3f7ee52..9370a970 100644
--- a/adfs/adfs.cpp
+++ b/adfs/adfs.cpp
@@ -332,6 +332,9 @@ namespace {
 extern "C" int ADFS_EXPORTS xmltooling_extension_init(void*)
 {
     SPConfig& conf=SPConfig::getConfig();
+
+    conf.deprecation().warn("WS-Federation (via adfs extension) is removed in the next major version");
+
     conf.SessionInitiatorManager.registerFactory("ADFS", ADFSSessionInitiatorFactory);
     conf.LogoutInitiatorManager.registerFactory("ADFS", ADFSLogoutInitiatorFactory);
     conf.AssertionConsumerServiceManager.registerFactory("ADFS", ADFSLogoutFactory);
diff --git a/apache/mod_shib.cpp b/apache/mod_shib.cpp
index ff7336e7..fdd3cafa 100644
--- a/apache/mod_shib.cpp
+++ b/apache/mod_shib.cpp
@@ -1387,9 +1387,12 @@ AccessControl::aclresult_t htAccessControl::authorized(const SPRequest& request,
         else if (!strcmp(w,"group")  && !remote_user.empty()) {
             status = (doGroup(*sta, t) == shib_acl_true);
         }
-        else if (!strcmp(w,"authnContextClassRef") || !strcmp(w,"authnContextDeclRef")) {
-            const char* ref = !strcmp(w, "authnContextClassRef") ? session->getAuthnContextClassRef() : session->getAuthnContextDeclRef();
-            status = (doAuthnContext(*sta, ref, t) == shib_acl_true);
+        else if (!strcmp(w,"authnContextClassRef")) {
+            status = (doAuthnContext(*sta, session->getAuthnContextClassRef(), t) == shib_acl_true);
+        }
+        else if (!strcmp(w,"authnContextDeclRef")) {
+            request.log(SPRequest::SPWarn, "DEPRECATED: authnContextDeclRef require rule is removed in next major version");
+            status = (doAuthnContext(*sta, session->getAuthnContextDeclRef(), t) == shib_acl_true);
         }
         else if (!session) {
             request.log(SPRequest::SPError, string("htaccess: require ") + w + " not given a valid session, are you using lazy sessions?");
@@ -1756,6 +1759,8 @@ extern "C" authz_status shib_acdecl_check_authz(request_rec* r, const char* requ
     if (!sta.first)
         return sta.second;
 
+    sta.first->log(SPRequest::SPWarn, "DEPRECATED: authnContextDeclRef require rule is removed in next major version");
+
     const htAccessControl& hta = dynamic_cast<const ApacheRequestMapper*>(sta.first->getRequestSettings().first)->getHTAccessControl();
 
     try {
diff --git a/plugins/TimeAccessControl.cpp b/plugins/TimeAccessControl.cpp
index 57250711..1abf661a 100644
--- a/plugins/TimeAccessControl.cpp
+++ b/plugins/TimeAccessControl.cpp
@@ -29,6 +29,7 @@
 #include <shibsp/exceptions.h>
 #include <shibsp/AccessControl.h>
 #include <shibsp/SessionCache.h>
+#include <shibsp/SPConfig.h>
 #include <shibsp/SPRequest.h>
 
 #include <boost/lexical_cast.hpp>
@@ -135,6 +136,10 @@ Rule::Rule(const DOMElement* e)
 
     if (XMLString::equals(e->getLocalName(), Time)) {
         m_type = TM_TIME;
+        if (tokens.back().back() != 'Z') {
+            SPConfig::getConfig().deprecation().warn(
+                "Support for non-UTC timestamps in Time access control rule is removed in the next major version");
+        }
         auto_ptr_XMLCh widen(tokens.back().c_str());
         try {
             XMLDateTime dt(widen.get());
diff --git a/shibsp/ServiceProvider.cpp b/shibsp/ServiceProvider.cpp
index 32bea980..325858a1 100644
--- a/shibsp/ServiceProvider.cpp
+++ b/shibsp/ServiceProvider.cpp
@@ -415,7 +415,7 @@ pair<bool,long> ServiceProvider::doAuthentication(SPRequest& request, bool handl
             // No session, but we require one. Initiate a new session using the indicated method.
             const SessionInitiator* initiator=nullptr;
             if (requireSessionWith.first) {
-                SPConfig::getConfig().deprecation().warn("requireSessionWith");
+                SPConfig::getConfig().deprecation().warn("requireSessionWith is removed from next major version");
                 initiator=app->getSessionInitiatorById(requireSessionWith.second);
                 if (!initiator) {
                     throw ConfigurationException(
diff --git a/shibsp/binding/impl/ArtifactResolver.cpp b/shibsp/binding/impl/ArtifactResolver.cpp
index 878f05ea..13d039a2 100644
--- a/shibsp/binding/impl/ArtifactResolver.cpp
+++ b/shibsp/binding/impl/ArtifactResolver.cpp
@@ -193,7 +193,7 @@ ArtifactResponse* ArtifactResolver::resolve(
                 // The local filesystem is presumed to be "secure" so that unsigned, unencrypted responses are acceptable.
                 // The binding here is not SOAP, but rather REST-like, with the base location used to construct a filename
                 // containing the artifact message handle.
-                SPConfig::getConfig().deprecation().warn("Local artifact resolution");
+                SPConfig::getConfig().deprecation().warn("Local/filesystem-based artifact resolution is removed from next major version");
                 foundEndpoint = true;
                 auto_ptr_char temp((*ep)->getLocation());
                 if (temp.get()) {
diff --git a/shibsp/handler/impl/AssertionLookup.cpp b/shibsp/handler/impl/AssertionLookup.cpp
index 280c6a72..c434ad0b 100644
--- a/shibsp/handler/impl/AssertionLookup.cpp
+++ b/shibsp/handler/impl/AssertionLookup.cpp
@@ -86,6 +86,8 @@ namespace shibsp {
 AssertionLookup::AssertionLookup(const DOMElement* e, const char* appId)
     : SecuredHandler(e, Category::getInstance(SHIBSP_LOGCAT ".Handler.AssertionLookup"), "exportACL", "127.0.0.1 ::1")
 {
+    SPConfig().getConfig().deprecation().warn("AssertionLookup handler is removed in next major version");
+
     pair<bool,const char*> prop = getString("Location");
     if (!prop.first)
         throw ConfigurationException("AssertionLookup handler requires Location property.");
@@ -109,6 +111,8 @@ pair<bool,long> AssertionLookup::run(SPRequest& request, bool isHandler) const
             return processMessage(request.getApplication(), request, request);
         }
         else {
+            SPConfig().getConfig().deprecation().warn("AssertionLookup handler is removed in next major version");
+
             // When not out of process, we remote all the message processing.
             DDF out,in = wrap(request);
             DDFJanitor jin(in), jout(out);
@@ -126,6 +130,8 @@ pair<bool,long> AssertionLookup::run(SPRequest& request, bool isHandler) const
 
 void AssertionLookup::receive(DDF& in, ostream& out)
 {
+    SPConfig().getConfig().deprecation().warn("AssertionLookup handler is removed in next major version");
+
     // Find application.
     const char* aid = in["application_id"].string();
     const Application* app = aid ? SPConfig::getConfig().getServiceProvider()->getApplication(aid) : nullptr;
diff --git a/shibsp/handler/impl/CookieSessionInitiator.cpp b/shibsp/handler/impl/CookieSessionInitiator.cpp
index aa264488..f142c0fc 100644
--- a/shibsp/handler/impl/CookieSessionInitiator.cpp
+++ b/shibsp/handler/impl/CookieSessionInitiator.cpp
@@ -57,9 +57,9 @@ namespace shibsp {
         CookieSessionInitiator(const DOMElement* e, const char* appId)
             : AbstractHandler(e, Category::getInstance(SHIBSP_LOGCAT ".SessionInitiator.Cookie")),
               m_followMultiple(getBool("followMultiple").second) {
-            m_supportedOptions.insert("isPassive");
 
-            SPConfig::getConfig().deprecation().warn(COOKIE_SESSION_INITIATOR" SessionInitiator is slated for removal");
+            SPConfig::getConfig().deprecation().warn(COOKIE_SESSION_INITIATOR" SessionInitiator is removed from next major version");
+            m_supportedOptions.insert("isPassive");
         }
         virtual ~CookieSessionInitiator() {}
         
diff --git a/shibsp/handler/impl/DiscoveryFeed.cpp b/shibsp/handler/impl/DiscoveryFeed.cpp
index efe66eb5..507f0b60 100644
--- a/shibsp/handler/impl/DiscoveryFeed.cpp
+++ b/shibsp/handler/impl/DiscoveryFeed.cpp
@@ -110,6 +110,8 @@ namespace shibsp {
 DiscoveryFeed::DiscoveryFeed(const DOMElement* e, const char* appId)
     : AbstractHandler(e, Category::getInstance(SHIBSP_LOGCAT ".Handler.DiscoveryFeed"), &g_Blocker), m_cacheToClient(false)
 {
+    SPConfig::getConfig().deprecation().warn(DISCOVERY_FEED_HANDLER" handler is removed from next major version");
+
     pair<bool,const char*> prop = getString("Location");
     if (!prop.first)
         throw ConfigurationException("DiscoveryFeed handler requires Location property.");
@@ -180,6 +182,8 @@ pair<bool,long> DiscoveryFeed::run(SPRequest& request, bool isHandler) const
             }
         }
         else {
+            SPConfig::getConfig().deprecation().warn(DISCOVERY_FEED_HANDLER" handler is removed from next major version");
+
             // When not out of process, we remote all the message processing.
             DDF out,in = DDF(m_address.c_str());
             in.addmember("application_id").string(request.getApplication().getId());
@@ -234,6 +238,8 @@ pair<bool,long> DiscoveryFeed::run(SPRequest& request, bool isHandler) const
 
 void DiscoveryFeed::receive(DDF& in, ostream& out)
 {
+    SPConfig::getConfig().deprecation().warn(DISCOVERY_FEED_HANDLER" handler is removed from next major version");
+
     // Find application.
     const char* aid = in["application_id"].string();
     const Application* app=aid ? SPConfig::getConfig().getServiceProvider()->getApplication(aid) : nullptr;
diff --git a/shibsp/handler/impl/ExternalAuthHandler.cpp b/shibsp/handler/impl/ExternalAuthHandler.cpp
index 5404e391..96f8e518 100644
--- a/shibsp/handler/impl/ExternalAuthHandler.cpp
+++ b/shibsp/handler/impl/ExternalAuthHandler.cpp
@@ -165,7 +165,7 @@ namespace {
 ExternalAuth::ExternalAuth(const DOMElement* e, const char* appId)
     : SecuredHandler(e, Category::getInstance(SHIBSP_LOGCAT ".Handler.ExternalAuth"), "acl", "127.0.0.1 ::1")
 {
-    SPConfig::getConfig().deprecation().warn(EXTERNAL_AUTH_HANDLER" handler");
+    SPConfig::getConfig().deprecation().warn(EXTERNAL_AUTH_HANDLER" handler is removed from next major version");
 
     pair<bool,const char*> prop = getString("Location");
     if (!prop.first)
@@ -198,6 +198,8 @@ pair<bool,long> ExternalAuth::run(SPRequest& request, bool isHandler) const
             return processMessage(request.getApplication(), *fakedreq, request, in);
         }
         else {
+            SPConfig::getConfig().deprecation().warn(EXTERNAL_AUTH_HANDLER" handler is removed from next major version");
+
             // When not out of process, we remote all the message processing.
             vector<string> headers(1, "User-Agent");
             headers.push_back("Accept");
@@ -218,6 +220,8 @@ pair<bool,long> ExternalAuth::run(SPRequest& request, bool isHandler) const
 
 void ExternalAuth::receive(DDF& in, ostream& out)
 {
+    SPConfig::getConfig().deprecation().warn(EXTERNAL_AUTH_HANDLER" handler is removed from next major version");
+
     // Find application.
     const char* aid = in["application_id"].string();
     const Application* app = aid ? SPConfig::getConfig().getServiceProvider()->getApplication(aid) : nullptr;
diff --git a/shibsp/handler/impl/FormSessionInitiator.cpp b/shibsp/handler/impl/FormSessionInitiator.cpp
index 79ba87c2..6f379bc3 100644
--- a/shibsp/handler/impl/FormSessionInitiator.cpp
+++ b/shibsp/handler/impl/FormSessionInitiator.cpp
@@ -53,10 +53,10 @@ namespace shibsp {
     public:
         FormSessionInitiator(const DOMElement* e, const char* appId)
             : AbstractHandler(e, Category::getInstance(SHIBSP_LOGCAT ".SessionInitiator.Form")), m_template(getString("template").second) {
+
+            SPConfig::getConfig().deprecation().warn(FORM_SESSION_INITIATOR" SessionInitiator is removed from next major version");
             if (!m_template)
                 throw ConfigurationException("Form SessionInitiator requires a template property.");
-
-            SPConfig::getConfig().deprecation().warn(FORM_SESSION_INITIATOR" SessionInitiator is slated for removal");
         }
         virtual ~FormSessionInitiator() {}
         
diff --git a/shibsp/handler/impl/SAML1Consumer.cpp b/shibsp/handler/impl/SAML1Consumer.cpp
index 15e27e43..82bb1522 100644
--- a/shibsp/handler/impl/SAML1Consumer.cpp
+++ b/shibsp/handler/impl/SAML1Consumer.cpp
@@ -73,6 +73,8 @@ namespace shibsp {
         SAML1Consumer(const DOMElement* e, const char* appId, bool deprecationSupport=true)
             : AssertionConsumerService(e, appId, Category::getInstance(SHIBSP_LOGCAT ".SSO.SAML1"), nullptr, nullptr, deprecationSupport) {
 #ifndef SHIBSP_LITE
+            SPConfig::getConfig().deprecation().warn("SAML 1.1 support is removed from next major version");
+
             m_post = XMLString::equals(getString("Binding").second, samlconstants::SAML1_PROFILE_BROWSER_POST);
             if (SPConfig::getConfig().isEnabled(SPConfig::OutOfProcess))
                 m_ssoRule.reset(SAMLConfig::getConfig().SecurityPolicyRuleManager.newPlugin(SAML1BROWSERSSO_POLICY_RULE, e, deprecationSupport));
@@ -144,6 +146,8 @@ void SAML1Consumer::implementProtocol(
     const XMLObject& xmlObject
     ) const
 {
+    SPConfig::getConfig().deprecation().warn("SAML 1.1 support is removed from next major version");
+
     // Implementation of SAML 1.x SSO profile(s).
     m_log.debug("processing message against SAML 1.x SSO profile");
 
diff --git a/shibsp/handler/impl/SAML2NameIDMgmt.cpp b/shibsp/handler/impl/SAML2NameIDMgmt.cpp
index 9b9970a9..9b3c780c 100644
--- a/shibsp/handler/impl/SAML2NameIDMgmt.cpp
+++ b/shibsp/handler/impl/SAML2NameIDMgmt.cpp
@@ -143,7 +143,7 @@ namespace shibsp {
 SAML2NameIDMgmt::SAML2NameIDMgmt(const DOMElement* e, const char* appId, bool deprecationSupport)
     : AbstractHandler(e, Category::getInstance(SHIBSP_LOGCAT ".NameIDMgmt.SAML2"))
 {
-    SPConfig::getConfig().deprecation().warn("SAML 2.0 NameID Management support");
+    SPConfig::getConfig().deprecation().warn("Support for SAML 2 NameID management is removed from next major version");
 #ifndef SHIBSP_LITE
     if (SPConfig::getConfig().isEnabled(SPConfig::OutOfProcess)) {
         SAMLConfig& conf = SAMLConfig::getConfig();
@@ -204,6 +204,8 @@ pair<bool,long> SAML2NameIDMgmt::run(SPRequest& request, bool isHandler) const
         return doRequest(request.getApplication(), request, request);
     }
     else {
+        SPConfig::getConfig().deprecation().warn("Support for SAML 2 NameID management is removed from next major version");
+
         // When not out of process, we remote all the message processing.
         vector<string> headers(1,"Cookie");
         headers.push_back("User-Agent");
@@ -216,6 +218,8 @@ pair<bool,long> SAML2NameIDMgmt::run(SPRequest& request, bool isHandler) const
 
 void SAML2NameIDMgmt::receive(DDF& in, ostream& out)
 {
+    SPConfig::getConfig().deprecation().warn("Support for SAML 2 NameID management is removed from next major version");
+
     // Find application.
     const char* aid = in["application_id"].string();
     const Application* app = aid ? SPConfig::getConfig().getServiceProvider()->getApplication(aid) : nullptr;
diff --git a/shibsp/handler/impl/Shib1SessionInitiator.cpp b/shibsp/handler/impl/Shib1SessionInitiator.cpp
index ba4f47e2..e789a685 100644
--- a/shibsp/handler/impl/Shib1SessionInitiator.cpp
+++ b/shibsp/handler/impl/Shib1SessionInitiator.cpp
@@ -65,6 +65,9 @@ namespace shibsp {
     public:
         Shib1SessionInitiator(const DOMElement* e, const char* appId)
                 : AbstractHandler(e, Category::getInstance(SHIBSP_LOGCAT ".SessionInitiator.Shib1"), nullptr, this), m_appId(appId) {
+
+        SPConfig::getConfig().deprecation().warn(SHIB1_SESSION_INITIATOR" SessionInitiator is removed from next major version");
+                    
             // If Location isn't set, defer address registration until the setParent call.
             pair<bool,const char*> loc = getString("Location");
             if (loc.first) {
@@ -128,6 +131,8 @@ void Shib1SessionInitiator::setParent(const PropertySet* parent)
 
 pair<bool,long> Shib1SessionInitiator::run(SPRequest& request, string& entityID, bool isHandler) const
 {
+    SPConfig::getConfig().deprecation().warn("SAML 1.1 support is removed from next major version");
+
     // We have to know the IdP to function.
     if (entityID.empty() || !checkCompatibility(request, isHandler))
         return make_pair(false, 0L);
@@ -238,6 +243,8 @@ pair<bool,long> Shib1SessionInitiator::unwrap(SPRequest& request, DDF& out) cons
 
 void Shib1SessionInitiator::receive(DDF& in, ostream& out)
 {
+    SPConfig::getConfig().deprecation().warn("SAML 1.1 support is removed from next major version");
+
     // Find application.
     const char* aid = in["application_id"].string();
     const Application* app = aid ? SPConfig::getConfig().getServiceProvider()->getApplication(aid) : nullptr;
diff --git a/shibsp/handler/impl/TransformSessionInitiator.cpp b/shibsp/handler/impl/TransformSessionInitiator.cpp
index 0be3b53c..ad901b21 100644
--- a/shibsp/handler/impl/TransformSessionInitiator.cpp
+++ b/shibsp/handler/impl/TransformSessionInitiator.cpp
@@ -80,6 +80,9 @@ namespace shibsp {
     public:
         TransformSessionInitiator(const DOMElement* e, const char* appId)
                 : AbstractHandler(e, Category::getInstance(SHIBSP_LOGCAT ".SessionInitiator.Transform"), &g_TSINFilter), m_appId(appId) {
+
+            SPConfig::getConfig().deprecation().warn(TRANSFORM_SESSION_INITIATOR" SessionInitiator is removed from next major version");
+
             // If Location isn't set, defer address registration until the setParent call.
             pair<bool,const char*> loc = getString("Location");
             if (loc.first) {
@@ -114,7 +117,6 @@ namespace shibsp {
                 }
             }
 #endif
-            SPConfig::getConfig().deprecation().warn(TRANSFORM_SESSION_INITIATOR" SessionInitiator is slated for removal");
         }
 
         virtual ~TransformSessionInitiator() {}
diff --git a/shibsp/handler/impl/WAYFSessionInitiator.cpp b/shibsp/handler/impl/WAYFSessionInitiator.cpp
index 0247ee92..024beeca 100644
--- a/shibsp/handler/impl/WAYFSessionInitiator.cpp
+++ b/shibsp/handler/impl/WAYFSessionInitiator.cpp
@@ -60,6 +60,9 @@ namespace shibsp {
     public:
         WAYFSessionInitiator(const DOMElement* e, const char* appId)
                 : AbstractHandler(e, Category::getInstance(SHIBSP_LOGCAT ".SessionInitiator.WAYF"), nullptr, this), m_url(nullptr) {
+
+            SPConfig::getConfig().deprecation().warn(WAYF_SESSION_INITIATOR" SessionInitiator is removed from next major version");
+
             pair<bool,const char*> url = getString("URL");
             if (!url.first)
                 throw ConfigurationException("WAYF SessionInitiator requires a URL property.");
diff --git a/shibsp/impl/XMLAccessControl.cpp b/shibsp/impl/XMLAccessControl.cpp
index 687487d3..6c5fea7e 100644
--- a/shibsp/impl/XMLAccessControl.cpp
+++ b/shibsp/impl/XMLAccessControl.cpp
@@ -208,6 +208,7 @@ AccessControl::aclresult_t Rule::authorized(const SPRequest& request, const Sess
         return shib_acl_false;
     }
     else if (m_alias == "authnContextDeclRef") {
+        SPConfig::getConfig().deprecation().warn("authnContextDeclRef access control rule is removed in the next major version");
         const char* ref = session->getAuthnContextDeclRef();
         if (ref && m_vals.find(ref) != m_vals.end()) {
             request.log(SPRequest::SPDebug, string("AccessControl plugin expecting authnContextDeclRef (") + ref + "), authz granted");
@@ -295,6 +296,7 @@ AccessControl::aclresult_t RuleRegex::authorized(const SPRequest& request, const
             return shib_acl_false;
         }
         else if (m_alias == "authnContextDeclRef") {
+            SPConfig::getConfig().deprecation().warn("authnContextDeclRef access control rule is removed in the next major version");
             if (session->getAuthnContextDeclRef() && m_re->matches(session->getAuthnContextDeclRef())) {
                 request.log(SPRequest::SPDebug, string("AccessControl plugin expecting authnContextDeclRef (") + m_exp.get() + "), authz granted");
                 return shib_acl_true;
diff --git a/shibsp/impl/XMLApplication.cpp b/shibsp/impl/XMLApplication.cpp
index 6e3f3dc4..b43c9566 100644
--- a/shibsp/impl/XMLApplication.cpp
+++ b/shibsp/impl/XMLApplication.cpp
@@ -494,6 +494,8 @@ void XMLApplication::doHandlers(const ProtocolProvider* pp, const DOMElement* e,
     pair<bool,const char*> location = sessions ? sessions->getString("exportLocation") : pair<bool,const char*>(false,nullptr);
     if (location.first) {
         try {
+            SPConfig::getConfig().deprecation().warn("exportLocation and associated features are removed in next major version");
+
             DOMElement* exportElement = e->getOwnerDocument()->createElementNS(e->getNamespaceURI(), _Handler);
             exportElement->setAttributeNS(nullptr,Location,sessions->getXMLString("exportLocation").second);
             pair<bool,const XMLCh*> exportACL = sessions->getXMLString("exportACL");
@@ -738,6 +740,11 @@ void XMLApplication::doSSO(const ProtocolProvider& pp, set<string>& protocols, D
     while (prottokens.hasMoreTokens()) {
         auto_ptr_char prot(prottokens.nextToken());
 
+        if (strcmp(prot.get(), "SAML2")) {
+            SPConfig::getConfig().deprecation().warn(
+                string("Support for '") + prot.get() + "' protocol is removed from next major version");
+        }
+
         // Look for initiator.
         const PropertySet* initiator = pp.getInitiator(prot.get(), "SSO");
         if (initiator) {
@@ -845,10 +852,15 @@ void XMLApplication::doSSO(const ProtocolProvider& pp, set<string>& protocols, D
     static const XMLCh discoveryProtocol[] = UNICODE_LITERAL_17(d,i,s,c,o,v,e,r,y,P,r,o,t,o,c,o,l);
     static const XMLCh discoveryURL[] = UNICODE_LITERAL_12(d,i,s,c,o,v,e,r,y,U,R,L);
     static const XMLCh _URL[] = UNICODE_LITERAL_3(U,R,L);
+    static const XMLCh WAYF[] = UNICODE_LITERAL_4(W,A,Y,F);
 
     if (!hasChildElements) {
         const XMLCh* discop = e->getAttributeNS(nullptr, discoveryProtocol);
         if (discop && *discop) {
+            if (XMLString::equals(discop, WAYF)) {
+                SPConfig::getConfig().deprecation().warn("Support for 'WAYF' discoveryProtocol is removed in next major version");
+            }
+
             const XMLCh* discou = e->getAttributeNS(nullptr, discoveryURL);
             if (discou && *discou) {
                 // Append a session initiator element of the designated type to the root element.
@@ -916,6 +928,11 @@ void XMLApplication::doLogout(const ProtocolProvider& pp, set<string>& protocols
     while (prottokens.hasMoreTokens()) {
         auto_ptr_char prot(prottokens.nextToken());
 
+        if (strcmp(prot.get(), "SAML2") && strcmp(prot.get(), "Local")) {
+            SPConfig::getConfig().deprecation().warn(
+                string("Support for '") + prot.get() + "' protocol is removed from next major version");
+        }
+
         // Look for initiator.
         const PropertySet* initiator = pp.getInitiator(prot.get(), "Logout");
         if (initiator) {
@@ -1029,6 +1046,7 @@ void XMLApplication::doNameIDMgmt(const ProtocolProvider& pp, set<string>& proto
 {
     if (!e->hasChildNodes())
         return;
+
     const DOMNamedNodeMap* nimprops = e->getAttributes();
     XMLSize_t nimpropslen = nimprops ? nimprops->getLength() : 0;
 

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


More information about the commits mailing list