[cpp-sp] branch main updated: Some cleanup, getting tests working again.
Scott Cantor
cantor.2 at osu.edu
Wed Apr 23 17:55:56 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=dca70265b25353b739677760a3cad56befc58b26
The following commit(s) were added to refs/heads/main by this push:
new dca70265 Some cleanup, getting tests working again.
dca70265 is described below
commit dca70265b25353b739677760a3cad56befc58b26
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Apr 23 13:55:49 2025 -0400
Some cleanup, getting tests working again.
---
.../impl/DefaultAttributeConfiguration.cpp | 23 +++--
shibsp/impl/DefaultAgent.cpp | 10 +-
shibsp/util/Misc.cpp | 18 ++++
shibsp/util/Misc.h | 2 +
tests/data/impl/console-shibboleth.ini | 1 -
tests/impl/XMLAccessControlTests.cpp | 102 +++++++++------------
tests/impl/XMLRequestMapperTests.cpp | 49 ++--------
7 files changed, 95 insertions(+), 110 deletions(-)
diff --git a/shibsp/attribute/impl/DefaultAttributeConfiguration.cpp b/shibsp/attribute/impl/DefaultAttributeConfiguration.cpp
index 79f380e8..3f5bda15 100644
--- a/shibsp/attribute/impl/DefaultAttributeConfiguration.cpp
+++ b/shibsp/attribute/impl/DefaultAttributeConfiguration.cpp
@@ -93,8 +93,20 @@ AttributeConfiguration::AttributeConfiguration() {}
AttributeConfiguration::~AttributeConfiguration() {}
DefaultAttributeConfiguration::DefaultAttributeConfiguration(const char* pathname)
- : m_log(Category::getInstance(SHIBSP_LOGCAT ".AttributeConfiguration")), m_urlEncoding(false)
+ : m_log(Category::getInstance(SHIBSP_LOGCAT ".AttributeConfiguration")), m_urlEncoding(false), m_exportDuplicates(true)
{
+
+ m_mappings["Shib-Application-ID"] = pair<string,string>("Shib-Application-ID", "HTTP_SHIB_APPLICATION_ID");
+ m_mappings["Shib-Session-ID"] = pair<string,string>("Shib-Session-ID", "HTTP_SHIB_SESSION_ID");
+ m_mappings["Shib-Session-Expires"] = pair<string,string>("Shib-Session-Expires", "HTTP_SHIB_SESSION_EXPIRES");
+ m_mappings["Shib-Session-Inactivity"] = pair<string,string>("Shib-Session-Inactivity", "HTTP_SHIB_SESSION_INACTIVITY");
+ m_mappings["Shib-Cookie-Name"] = pair<string,string>("Shib-Cookie-Name", "HTTP_SHIB_COOKIE_NAME");
+ m_mappings["REMOTE_USER"] = pair<string,string>("REMOTE_USER", "HTTP_REMOTE_USER");
+
+ if (!pathname) {
+ return;
+ }
+
ini_parser::read_ini(pathname, m_pt);
load(m_pt);
@@ -102,7 +114,7 @@ DefaultAttributeConfiguration::DefaultAttributeConfiguration(const char* pathnam
m_urlEncoding = !strcmp(getString("encoding", ""), "URL");
m_exportDuplicates = getBool("exportDuplicateValues", true);
-
+
boost::optional<ptree&> mappings = m_pt.get_child_optional("mappings");
if (!mappings) {
return;
@@ -125,13 +137,6 @@ DefaultAttributeConfiguration::DefaultAttributeConfiguration(const char* pathnam
m_mappings[child.first] = make_pair(alias, transformed);
}
}
-
- m_mappings["Shib-Application-ID"] = pair<string,string>("Shib-Application-ID", "HTTP_SHIB_APPLICATION_ID");
- m_mappings["Shib-Session-ID"] = pair<string,string>("Shib-Session-ID", "HTTP_SHIB_SESSION_ID");
- m_mappings["Shib-Session-Expires"] = pair<string,string>("Shib-Session-Expires", "HTTP_SHIB_SESSION_EXPIRES");
- m_mappings["Shib-Session-Inactivity"] = pair<string,string>("Shib-Session-Inactivity", "HTTP_SHIB_SESSION_INACTIVITY");
- m_mappings["Shib-Cookie-Name"] = pair<string,string>("Shib-Cookie-Name", "HTTP_SHIB_COOKIE_NAME");
- m_mappings["REMOTE_USER"] = pair<string,string>("REMOTE_USER", "HTTP_REMOTE_USER");
}
unique_ptr<AttributeConfiguration> AttributeConfiguration::newAttributeConfiguration(const char* pathname)
diff --git a/shibsp/impl/DefaultAgent.cpp b/shibsp/impl/DefaultAgent.cpp
index c717a029..cc5413f3 100644
--- a/shibsp/impl/DefaultAgent.cpp
+++ b/shibsp/impl/DefaultAgent.cpp
@@ -161,6 +161,7 @@ void DefaultAgent::init()
doRemotingService();
doSessionCache();
doRequestMapper();
+ doAttributeConfigurations();
doHandlerConfigurations();
}
@@ -255,7 +256,12 @@ void DefaultAgent::doAttributeConfigurations()
} else {
string path("attributes.ini");
AgentConfig::getConfig().getPathResolver().resolve(path, PathResolver::SHIBSP_CFG_FILE);
- m_attributeConfigurations["default"] = AttributeConfiguration::newAttributeConfiguration(path.c_str());
- m_log.info("installed 'default' AttributeConfiguration from %s", path.c_str());
+ if (file_exists(path.c_str())) {
+ m_attributeConfigurations["default"] = AttributeConfiguration::newAttributeConfiguration(path.c_str());
+ m_log.info("installed 'default' AttributeConfiguration from %s", path.c_str());
+ } else {
+ m_attributeConfigurations["default"] = AttributeConfiguration::newAttributeConfiguration(nullptr);
+ m_log.info("installed empty 'default' AttributeConfiguration");
+ }
}
}
diff --git a/shibsp/util/Misc.cpp b/shibsp/util/Misc.cpp
index c8e5988d..f96632b4 100644
--- a/shibsp/util/Misc.cpp
+++ b/shibsp/util/Misc.cpp
@@ -25,6 +25,8 @@
#include <vector>
#include <boost/algorithm/string.hpp>
+#include <sys/stat.h>
+
using namespace shibsp;
using namespace std;
@@ -47,3 +49,19 @@ set<string>::size_type shibsp::split_to_container(set<string>& container, const
}
return container.size();
}
+
+bool shibsp::file_exists(const char* path)
+{
+#ifdef WIN32
+ struct _stat stat_buf;
+ if (_stat(path, &stat_buf) == 0) {
+ return true;
+ }
+#else
+ struct stat stat_buf;
+ if (stat(path, &stat_buf) == 0) {
+ return true;
+ }
+#endif
+ return false;
+}
diff --git a/shibsp/util/Misc.h b/shibsp/util/Misc.h
index 96e2f09c..16a69c25 100644
--- a/shibsp/util/Misc.h
+++ b/shibsp/util/Misc.h
@@ -58,6 +58,8 @@ namespace shibsp {
}
};
+ bool file_exists(const char* path);
+
/**
* Splitter functions that trim the input and split on whitespace into a container.
*/
diff --git a/tests/data/impl/console-shibboleth.ini b/tests/data/impl/console-shibboleth.ini
index 8e205364..b841324a 100644
--- a/tests/data/impl/console-shibboleth.ini
+++ b/tests/data/impl/console-shibboleth.ini
@@ -1,6 +1,5 @@
[global]
skipHandlers = true
-skipAttributes = true
[logging]
type = console
diff --git a/tests/impl/XMLAccessControlTests.cpp b/tests/impl/XMLAccessControlTests.cpp
index 6e39ba1e..ba021018 100644
--- a/tests/impl/XMLAccessControlTests.cpp
+++ b/tests/impl/XMLAccessControlTests.cpp
@@ -22,10 +22,10 @@
#include "AbstractSPRequest.h"
#include "AccessControl.h"
#include "AgentConfig.h"
-#include "attribute/Attribute.h"
-#include "attribute/SimpleAttribute.h"
#include "logging/Category.h"
+#include "remoting/ddf.h"
#include "session/SessionCache.h"
+#include "util/BoostPropertySet.h"
#ifdef HAVE_CXX14
# include <shared_mutex>
@@ -42,68 +42,42 @@ using namespace std;
namespace {
+struct DummyRequestMap : public BoostPropertySet {
+};
+
/** Open structure for testing manipulation. */
-struct DummySession : public Session, public NoOpBasicLockable
-{
+struct DummySession : public Session, public NoOpBasicLockable {
public:
DummySession() {}
- ~DummySession() {}
+ ~DummySession() {
+ for (auto& a : m_attributes) {
+ a.second.destroy();
+ }
+ }
const char* getID() const {
return nullptr;
}
- const char* getBucketID() const {
+ const char* getApplicationID() const {
return nullptr;
}
- time_t getExpiration() const {
+ time_t getCreation() const {
return 0;
}
time_t getLastAccess() const {
return 0;
}
- const char* getClientAddress() const {
- return nullptr;
- }
- const char* getEntityID() const {
- return nullptr;
- }
- const char* getProtocol() const {
- return nullptr;
- }
- time_t getAuthnInstant() const {
- return m_authInstant;
- }
- const char* getSessionIndex() const {
- return nullptr;
- }
- const char* getAuthnContextClassRef() const {
- return m_ac.c_str();
- }
- const vector<unique_ptr<Attribute>>& getAttributes() const {
+ const map<string,DDF>& getAttributes() const {
return m_attributes;
}
- const multimap<string,const Attribute*>& getIndexedAttributes() const {
- if (m_attributeIndex.empty()) {
- for (const unique_ptr<Attribute>& a : m_attributes) {
- const vector<string>& aliases = a->getAliases();
- for (const string& alias : a->getAliases()) {
- m_attributeIndex.insert(multimap<string, const Attribute*>::value_type(alias, a.get()));
- }
- }
- }
- return m_attributeIndex;
- }
-
- time_t m_authInstant;
- string m_ac;
- vector<unique_ptr<Attribute>> m_attributes;
- mutable multimap<string,const Attribute*> m_attributeIndex;
+ map<string,DDF> m_attributes;
};
class DummyRequest : public AbstractSPRequest {
public:
DummyRequest() : AbstractSPRequest(SHIBSP_LOGCAT ".DummyRequest") {}
+ RequestMapper::Settings getRequestSettings() const { return make_pair(&m_map, nullptr); }
const char* getMethod() const { return nullptr; }
const char* getScheme() const { return nullptr; }
const char* getHostname() const { return nullptr; }
@@ -123,6 +97,7 @@ public:
long returnOK() { return 200; }
string m_user;
+ DummyRequestMap m_map;
};
class exceptionCheck {
@@ -306,10 +281,14 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_inline_ACRule, XMLAccessControlFixture)
DummyRequest request;
DummySession session;
- session.m_ac = "Foo";
+ DDF ac("Shib-AuthnContext-Class");
+ ac.list();
+ ac.add(DDF(nullptr).string("Foo"));
+ session.m_attributes[ac.name()] = ac;
+
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_false);
- session.m_ac = "urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken";
+ ac.add(DDF(nullptr).string("urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken"));
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_true);
}
@@ -332,15 +311,16 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_inline_AttrRule, XMLAccessControlFixtur
DummyRequest request;
DummySession session;
- session.m_attributes.push_back(unique_ptr<Attribute>(new SimpleAttribute({"affiliation"})));
- SimpleAttribute& attr = dynamic_cast<SimpleAttribute&>(*(session.m_attributes.back()));
+ DDF affiliation("affiliation");
+ affiliation.list();
+ session.m_attributes[affiliation.name()] = affiliation;
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_false);
- attr.getValues().push_back("staff");
+ affiliation.add(DDF(nullptr).string("staff"));
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_false);
- attr.getValues().push_back("student");
+ affiliation.add(DDF(nullptr).string("student"));
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_true);
}
@@ -363,16 +343,17 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_external_OR, XMLAccessControlFixture)
DummyRequest request;
DummySession session;
- session.m_attributes.push_back(unique_ptr<Attribute>(new SimpleAttribute({"affiliation"})));
- SimpleAttribute& attr = dynamic_cast<SimpleAttribute&>(*(session.m_attributes.back()));
-
request.m_user = "jdoe";
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_true);
request.m_user = "smith";
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_false);
- attr.getValues().push_back("student");
+ DDF affiliation("affiliation");
+ affiliation.list();
+ affiliation.add(DDF(nullptr).string("student"));
+ session.m_attributes[affiliation.name()] = affiliation;
+
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_true);
}
@@ -395,13 +376,14 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_external_AND, XMLAccessControlFixture)
DummyRequest request;
DummySession session;
- session.m_attributes.push_back(unique_ptr<Attribute>(new SimpleAttribute({"affiliation"})));
- SimpleAttribute& attr = dynamic_cast<SimpleAttribute&>(*(session.m_attributes.back()));
-
request.m_user = "jdoe";
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_false);
- attr.getValues().push_back("student");
+ DDF affiliation("affiliation");
+ affiliation.list();
+ affiliation.add(DDF(nullptr).string("student"));
+ session.m_attributes[affiliation.name()] = affiliation;
+
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_true);
}
@@ -424,12 +406,14 @@ BOOST_FIXTURE_TEST_CASE(XMLAccessControl_external_NOT, XMLAccessControlFixture)
DummyRequest request;
DummySession session;
- session.m_attributes.push_back(unique_ptr<Attribute>(new SimpleAttribute({"affiliation"})));
- SimpleAttribute& attr = dynamic_cast<SimpleAttribute&>(*(session.m_attributes.back()));
+ DDF affiliation("affiliation");
+ affiliation.list();
+ session.m_attributes[affiliation.name()] = affiliation;
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_true);
- attr.getValues().push_back("student");
+ affiliation.add(DDF(nullptr).string("student"));
+
BOOST_CHECK_EQUAL(acl->authorized(request, &session), AccessControl::shib_acl_false);
}
diff --git a/tests/impl/XMLRequestMapperTests.cpp b/tests/impl/XMLRequestMapperTests.cpp
index 226277d1..07c3a379 100644
--- a/tests/impl/XMLRequestMapperTests.cpp
+++ b/tests/impl/XMLRequestMapperTests.cpp
@@ -23,8 +23,8 @@
#include "AccessControl.h"
#include "AgentConfig.h"
#include "RequestMapper.h"
-#include "attribute/Attribute.h"
#include "logging/Category.h"
+#include "remoting/ddf.h"
#include "session/SessionCache.h"
#include "util/PropertySet.h"
@@ -48,58 +48,29 @@ struct DummySession : public Session, public NoOpBasicLockable
{
public:
DummySession() {}
- ~DummySession() {}
+ ~DummySession() {
+ for (auto& a : m_attributes) {
+ a.second.destroy();
+ }
+ }
const char* getID() const {
return nullptr;
}
- const char* getBucketID() const {
+ const char* getApplicationID() const {
return nullptr;
}
- time_t getExpiration() const {
+ time_t getCreation() const {
return 0;
}
time_t getLastAccess() const {
return 0;
}
- const char* getClientAddress() const {
- return nullptr;
- }
- const char* getEntityID() const {
- return nullptr;
- }
- const char* getProtocol() const {
- return nullptr;
- }
- time_t getAuthnInstant() const {
- return m_authInstant;
- }
- const char* getSessionIndex() const {
- return nullptr;
- }
- const char* getAuthnContextClassRef() const {
- return m_ac.c_str();
- }
- const vector<unique_ptr<Attribute>>& getAttributes() const {
+ const map<string,DDF>& getAttributes() const {
return m_attributes;
}
- const multimap<string,const Attribute*>& getIndexedAttributes() const {
- if (m_attributeIndex.empty()) {
- for (const unique_ptr<Attribute>& a : m_attributes) {
- const vector<string>& aliases = a->getAliases();
- for (const string& alias : a->getAliases()) {
- m_attributeIndex.insert(multimap<string, const Attribute*>::value_type(alias, a.get()));
- }
- }
- }
- return m_attributeIndex;
- }
-
- time_t m_authInstant;
- string m_ac;
- vector<unique_ptr<Attribute>> m_attributes;
- mutable multimap<string,const Attribute*> m_attributeIndex;
+ map<string,DDF> m_attributes;
};
class DummyRequest : public AbstractSPRequest {
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list