[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