[cpp-sp] branch main updated: Add some constants, extend unit test.

Scott Cantor cantor.2 at osu.edu
Tue Jun 3 23:41:06 UTC 2025


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

scantor pushed a commit to branch main
in repository cpp-sp.

View the commit online:
http://git.shibboleth.net/view/?p=cpp-sp.git;a=commit;h=7a1f7da1e75e873dce7cbdc6996419defa43c4f4

The following commit(s) were added to refs/heads/main by this push:
     new 7a1f7da1 Add some constants, extend unit test.
7a1f7da1 is described below

commit 7a1f7da1e75e873dce7cbdc6996419defa43c4f4
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Jun 3 19:40:59 2025 -0400

    Add some constants, extend unit test.
---
 shibsp/RequestMapper.h                         |  2 ++
 shibsp/impl/XMLRequestMapper.cpp               |  2 ++
 shibsp/io/impl/CookieManager.cpp               |  5 +++--
 shibsp/session/impl/AbstractSessionCache.cpp   |  2 +-
 shibsp/session/impl/MemorySessionCache.cpp     |  6 +++---
 tests/data/session/impl/memory-shibboleth.ini  |  1 +
 tests/session/impl/MemorySessionCacheTests.cpp | 28 +++++++++++++++++++++++---
 7 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/shibsp/RequestMapper.h b/shibsp/RequestMapper.h
index 3d510ac2..13e863f3 100644
--- a/shibsp/RequestMapper.h
+++ b/shibsp/RequestMapper.h
@@ -58,6 +58,8 @@ namespace shibsp {
         static const char LIFETIME_PROP_NAME[];
         static const char TIMEOUT_PROP_NAME[];
         static const char CONSISTENT_ADDRESS_PROP_NAME[];
+        static const char COOKIE_MAXAGE_PROP_NAME[];
+        static const char SESSION_COOKIE_NAME_PROP_NAME[];
 
         static const char APPLICATION_ID_PROP_DEFAULT[];
         static unsigned int LIFETIME_PROP_DEFAULT;
diff --git a/shibsp/impl/XMLRequestMapper.cpp b/shibsp/impl/XMLRequestMapper.cpp
index c93a7fab..54afad76 100644
--- a/shibsp/impl/XMLRequestMapper.cpp
+++ b/shibsp/impl/XMLRequestMapper.cpp
@@ -159,6 +159,8 @@ const char RequestMapper::APPLICATION_ID_PROP_NAME[] = "applicationId";
 const char RequestMapper::LIFETIME_PROP_NAME[] = "lifetime";
 const char RequestMapper::TIMEOUT_PROP_NAME[] = "timeout";
 const char RequestMapper::CONSISTENT_ADDRESS_PROP_NAME[] = "consistentAddress";
+const char RequestMapper::COOKIE_MAXAGE_PROP_NAME[] = "cookieMaxAge";
+const char RequestMapper::SESSION_COOKIE_NAME_PROP_NAME[] = "sessionCookieName";
 
 const char RequestMapper::APPLICATION_ID_PROP_DEFAULT[] = "default";
 unsigned int RequestMapper::LIFETIME_PROP_DEFAULT = 3600 * 8;
diff --git a/shibsp/io/impl/CookieManager.cpp b/shibsp/io/impl/CookieManager.cpp
index f82eef90..4b4b1cbc 100644
--- a/shibsp/io/impl/CookieManager.cpp
+++ b/shibsp/io/impl/CookieManager.cpp
@@ -126,7 +126,8 @@ string CookieManager::computeCookieName(const SPRequest& request) const
     // This is just a hex-encode to avoid a dependency on a hashing API.
     static char DIGITS[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
     string encode(request.getAgent().getID());
-    encode += request.getRequestSettings().first->getString("applicationId", "default");
+    encode += request.getRequestSettings().first->getString(
+        RequestMapper::APPLICATION_ID_PROP_NAME, RequestMapper::APPLICATION_ID_PROP_DEFAULT);
     cookieName += '_';
     for (const char* ch = encode.c_str(); *ch; ++ch) {
         cookieName += (DIGITS[((unsigned char)(0xF0 & *ch)) >> 4 ]);
@@ -192,7 +193,7 @@ const char* CookieManager::getCookieValue(const SPRequest& request) const
 
 void CookieManager::setCookie(SPRequest& request, const char* value) const
 {
-    outputHeader(request, value, request.getRequestSettings().first->getInt("cookieMaxAge", m_maxAge));
+    outputHeader(request, value, request.getRequestSettings().first->getInt(RequestMapper::COOKIE_MAXAGE_PROP_NAME, m_maxAge));
 }
 
 void CookieManager::unsetCookie(SPRequest& request) const
diff --git a/shibsp/session/impl/AbstractSessionCache.cpp b/shibsp/session/impl/AbstractSessionCache.cpp
index 1f215946..6bef624d 100644
--- a/shibsp/session/impl/AbstractSessionCache.cpp
+++ b/shibsp/session/impl/AbstractSessionCache.cpp
@@ -111,7 +111,7 @@ AbstractSessionCache::AbstractSessionCache(const ptree& pt)
 
     // Set up cookie manager.
     m_cookieManager.reset(new CookieManager(getString(COOKIE_NAME_PROP_NAME, COOKIE_NAME_PROP_DEFAULT)));
-    m_cookieManager->setCookieNamePolicy("sessionCookieName", true);
+    m_cookieManager->setCookieNamePolicy(RequestMapper::SESSION_COOKIE_NAME_PROP_NAME, true);
     m_cookieManager->setSecure(getBool(COOKIE_SECURE_PROP_NAME, COOKIE_SECURE_PROP_DEFAULT));
     m_cookieManager->setHttpOnly(getBool(COOKIE_HTTPONLY_PROP_NAME, COOKIE_HTTPONLY_PROP_DEFAULT));
     m_cookieManager->setPath(getString(COOKIE_PATH_PROP_NAME, COOKIE_PATH_PROP_DEFAULT));
diff --git a/shibsp/session/impl/MemorySessionCache.cpp b/shibsp/session/impl/MemorySessionCache.cpp
index 33d3b212..bdf79dec 100644
--- a/shibsp/session/impl/MemorySessionCache.cpp
+++ b/shibsp/session/impl/MemorySessionCache.cpp
@@ -61,9 +61,9 @@ namespace {
 
         string ret;
 
-        for (const char* ch = s.c_str(); *ch; ++ch) {
-            ret += (DIGITS[((unsigned char)(0xF0 & *ch)) >> 4 ]);
-            ret += (DIGITS[0x0F & *ch]);
+        for (string::value_type ch : s) {
+            ret += (DIGITS[((unsigned char)(0xF0 & ch)) >> 4 ]);
+            ret += (DIGITS[0x0F & ch]);
         }
 
         return ret;
diff --git a/tests/data/session/impl/memory-shibboleth.ini b/tests/data/session/impl/memory-shibboleth.ini
index ab381f79..c0a81e95 100644
--- a/tests/data/session/impl/memory-shibboleth.ini
+++ b/tests/data/session/impl/memory-shibboleth.ini
@@ -15,6 +15,7 @@ Shibboleth.SessionCache = DEBUG
 [session-cache]
 type = memory
 cleanupInterval = 180
+cookieSameSite = None
 
 [request-mapper]
 path = ./data/session/impl/request-map.xml
diff --git a/tests/session/impl/MemorySessionCacheTests.cpp b/tests/session/impl/MemorySessionCacheTests.cpp
index 44c418a3..4217b5e2 100644
--- a/tests/session/impl/MemorySessionCacheTests.cpp
+++ b/tests/session/impl/MemorySessionCacheTests.cpp
@@ -25,6 +25,7 @@
 #include "remoting/ddf.h"
 #include "session/SessionCache.h"
 
+#include <map>
 #include <memory>
 #include <string>
 #include <boost/test/unit_test.hpp>
@@ -40,7 +41,7 @@ namespace {
 
 class DummyRequest : public AbstractSPRequest {
 public:
-    DummyRequest(const char* uri=nullptr) : AbstractSPRequest(SHIBSP_LOGCAT ".DummyRequest") {
+    DummyRequest(const char* uri=nullptr) : AbstractSPRequest(SHIBSP_LOGCAT ".DummyRequest"), m_addr("192.168.0.1") {
         setRequestURI(uri);
     }
     const char* getMethod() const { return nullptr; }
@@ -51,12 +52,19 @@ public:
     long getContentLength() const { return -1; }
     const char* getQueryString() const { return m_query.c_str(); }
     const char* getRequestBody() const { return nullptr; }
-    string getHeader(const char*) const { return nullptr; }
+    string getHeader(const char* name) const {
+        return m_requestHeaders.find(name) == m_requestHeaders.end() ? "" : m_requestHeaders.find(name)->second;
+    }
     string getRemoteUser() const { return m_user.c_str(); }
+    string getRemoteAddr() const { return m_addr.c_str(); }
     string getAuthType() const { return nullptr; }
     long sendResponse(istream&, long status) { return status; }
     void clearHeader(const char* name) {}
     void setHeader(const char* name, const char* value) {}
+    void setResponseHeader(const char* name, const char* value, bool replace=false) {
+        HTTPResponse::setResponseHeader(name, value, replace);
+        m_responseHeaders[name] = value ? value : "";
+    }
     void setRemoteUser(const char*) {}
     long returnDecline() { return 200; }
     long returnOK() { return 200; }
@@ -69,7 +77,9 @@ public:
     int m_port;
     string m_query;
     string m_user;
-    map<string,string> m_headers;
+    string m_addr;
+    map<string,string> m_requestHeaders;
+    map<string,string> m_responseHeaders;
 };
 
 struct MemoryFixture
@@ -117,6 +127,18 @@ BOOST_FIXTURE_TEST_CASE(MemorySessionCache_tests, MemoryFixture)
 
     BOOST_CHECK(obj["session"].isnull());
     BOOST_CHECK_EQUAL(key.c_str(), child.name());
+    string cookieName("__Host-shibsession_73702e6578616d706c652e6f7267637573746f6d");
+    string header(cookieName);
+    header += '=' + key;
+    header += "; max-age=-1; path=/; secure=1; HttpOnly=1; SameSite=None";
+    BOOST_CHECK_EQUAL(request.m_responseHeaders["Set-Cookie"], header);
+
+    string cookie(cookieName);
+    cookie += '=' + key;
+    request.m_requestHeaders["Cookie"] = cookie;
+
+    unique_lock<Session> session = cache->find(request, true, false);
+    BOOST_CHECK(session);
 }
 
 }

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


More information about the commits mailing list