#include "binding/SecurityPolicyRule.h"
#include "saml2/core/Assertions.h"
+#include <boost/bind.hpp>
#include <xercesc/util/XMLUniDefs.hpp>
using namespace opensaml::saml2md;
using namespace opensaml::saml2;
using namespace opensaml;
using namespace xmltooling;
+using namespace boost;
using namespace std;
namespace opensaml {
bool validate
) : m_metadataCriteria(nullptr),
m_issueInstant(0),
- m_issuer(nullptr),
m_issuerRole(nullptr),
m_authenticated(false),
- m_matchingPolicy(nullptr),
m_metadata(metadataProvider),
- m_role(nullptr),
+ m_role(role ? new xmltooling::QName(*role) : nullptr),
m_trust(trustEngine),
m_validate(validate),
m_entityOnly(true),
m_ts(0)
{
- if (role)
- m_role = new xmltooling::QName(*role);
}
SecurityPolicy::~SecurityPolicy()
{
delete m_metadataCriteria;
- delete m_issuer;
}
const MetadataProvider* SecurityPolicy::getMetadataProvider() const
const xmltooling::QName* SecurityPolicy::getRole() const
{
- return m_role;
+ return m_role.get();
}
const TrustEngine* SecurityPolicy::getTrustEngine() const
void SecurityPolicy::setRole(const xmltooling::QName* role)
{
- delete m_role;
- m_role = role ? new xmltooling::QName(*role) : nullptr;
+ m_role.reset(role ? new xmltooling::QName(*role) : nullptr);
}
void SecurityPolicy::setTrustEngine(const TrustEngine* trust)
void SecurityPolicy::evaluate(const XMLObject& message, const GenericRequest* request)
{
- for (vector<const SecurityPolicyRule*>::const_iterator i=m_rules.begin(); i!=m_rules.end(); ++i)
- (*i)->evaluate(message,request,*this);
+ for_each(
+ m_rules.begin(), m_rules.end(),
+ boost::bind(&SecurityPolicyRule::evaluate, _1, boost::ref(message), request, boost::ref(*this))
+ );
}
void SecurityPolicy::reset(bool messageOnly)
m_messageID.erase();
m_issueInstant=0;
if (!messageOnly) {
- delete m_issuer;
- m_issuer=nullptr;
+ m_issuer.reset();
m_issuerRole=nullptr;
m_authenticated=false;
}
const Issuer* SecurityPolicy::getIssuer() const
{
- return m_issuer;
+ return m_issuer.get();
}
const RoleDescriptor* SecurityPolicy::getIssuerMetadata() const
void SecurityPolicy::setIssuer(const Issuer* issuer)
{
- if (!getIssuerMatchingPolicy().issuerMatches(m_issuer, issuer))
+ if (!getIssuerMatchingPolicy().issuerMatches(m_issuer.get(), issuer))
throw SecurityPolicyException("An Issuer was supplied that conflicts with previous results.");
- if (!m_issuer) {
+ if (!m_issuer.get()) {
if (m_entityOnly && issuer->getFormat() && !XMLString::equals(issuer->getFormat(), NameIDType::ENTITY))
throw SecurityPolicyException("A non-entity Issuer was supplied, violating policy.");
m_issuerRole = nullptr;
- m_issuer=issuer->cloneIssuer();
+ m_issuer.reset(issuer->cloneIssuer());
}
}
void SecurityPolicy::setIssuer(const XMLCh* issuer)
{
- if (!getIssuerMatchingPolicy().issuerMatches(m_issuer, issuer))
+ if (!getIssuerMatchingPolicy().issuerMatches(m_issuer.get(), issuer))
throw SecurityPolicyException("An Issuer was supplied that conflicts with previous results.");
- if (!m_issuer && issuer && *issuer) {
+ if (!m_issuer.get() && issuer && *issuer) {
m_issuerRole = nullptr;
- m_issuer = IssuerBuilder::buildIssuer();
+ m_issuer.reset(IssuerBuilder::buildIssuer());
m_issuer->setName(issuer);
}
}
{
if (issuerRole && m_issuerRole && issuerRole!=m_issuerRole)
throw SecurityPolicyException("A rule supplied a RoleDescriptor that conflicts with previous results.");
- m_issuerRole=issuerRole;
+ m_issuerRole = issuerRole;
}
void SecurityPolicy::setAuthenticated(bool auth)
const SecurityPolicy::IssuerMatchingPolicy& SecurityPolicy::getIssuerMatchingPolicy() const
{
- return m_matchingPolicy ? *m_matchingPolicy : m_defaultMatching;
+ return m_matchingPolicy.get() ? *m_matchingPolicy.get() : m_defaultMatching;
}
void SecurityPolicy::setIssuerMatchingPolicy(IssuerMatchingPolicy* matchingPolicy)
{
- delete m_matchingPolicy;
- m_matchingPolicy = matchingPolicy;
+ m_matchingPolicy.reset(matchingPolicy);
}