if (ex.getProperty("RelayState"))
relayState = ex.getProperty("RelayState");
try {
- recoverRelayState(request, relayState);
+ recoverRelayState(request.getApplication(), request, relayState);
}
catch (exception& ex2) {
m_log.error("trapped an error during RelayState recovery while handling an error: %s", ex2.what());
// We invoke RelayState recovery one last time on this side of the boundary.
if (out["RelayState"].isstring())
relayState = out["RelayState"].string();
- recoverRelayState(request, relayState);
+ recoverRelayState(request.getApplication(), request, relayState);
// If it worked, we have a session key.
if (!out["key"].isstring())
auto_ptr<XMLObject> msg(m_decoder->decode(relayState, httpRequest, policy));
if (!msg.get())
throw BindingException("Failed to decode an SSO protocol response.");
- recoverRelayState(httpRequest, relayState);
+ recoverRelayState(application, httpRequest, relayState);
string key = implementProtocol(application, httpRequest, policy, settings, *msg.get());
auto_ptr_char issuer(policy.getIssuer() ? policy.getIssuer()->getName() : NULL);
ResolutionContext* AssertionConsumerService::resolveAttributes(
const Application& application,
- const HTTPRequest& httpRequest,
const saml2md::EntityDescriptor* issuer,
const saml2::NameID* nameid,
- const vector<const Assertion*>* tokens
+ const vector<const Assertion*>* tokens,
+ const multimap<string,Attribute*>* attributes
) const
{
- AttributeResolver* resolver = application.getAttributeResolver();
- if (!resolver) {
- m_log.info("no AttributeResolver available, skipping resolution");
- return NULL;
- }
-
try {
+ AttributeResolver* resolver = application.getAttributeResolver();
+ if (!resolver) {
+ m_log.info("no AttributeResolver available, skipping resolution");
+ return NULL;
+ }
+
m_log.debug("resolving attributes...");
+
+ Locker locker(resolver);
auto_ptr<ResolutionContext> ctx(
- resolver->createResolutionContext(application, httpRequest.getRemoteAddr().c_str(), issuer, nameid, tokens)
+ resolver->createResolutionContext(application, issuer, nameid, tokens, attributes)
);
- resolver->resolveAttributes(*ctx.get(), application.getAttributeIds());
+ resolver->resolveAttributes(*ctx.get());
return ctx.release();
}
catch (exception& ex) {