vector<string> g_NoCerts;
#endif
+ static char _x2c(const char *what)
+ {
+ register char digit;
+
+ digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0'));
+ digit *= 16;
+ digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0'));
+ return(digit);
+ }
+
class DummyRequest : public HTTPRequest
{
public:
else {
m_hostname.assign(url, slash - url);
}
- m_uri = slash;
+
+ while (*slash) {
+ if (*slash == '?') {
+ m_uri += slash;
+ break;
+ }
+ else if (*slash == ';') {
+ // If this is Java being stupid, skip everything up to the query string, if any.
+ if (!strncmp(slash, ";jsessionid=", 12)) {
+ if (slash = strchr(slash, '?'))
+ m_uri += slash;
+ break;
+ }
+ else {
+ m_uri += *slash;
+ }
+ }
+ else if (*slash != '%') {
+ m_uri += *slash;
+ }
+ else {
+ ++slash;
+ if (!isxdigit(*slash) || !isxdigit(*(slash+1)))
+ throw invalid_argument("Bad request, contained unsupported encoded characters.");
+ m_uri += _x2c(slash);
+ ++slash;
+ }
+ ++slash;
+ }
}
~DummyRequest() {
if (!m_acl.empty() && m_acl.count(request.getRemoteAddr()) == 0) {
m_log.error("status handler request blocked from invalid address (%s)", request.getRemoteAddr().c_str());
istringstream msg("Status Handler Blocked");
- return make_pair(true,request.sendResponse(msg, HTTPResponse::XMLTOOLING_HTTP_STATUS_FORBIDDEN));
+ return make_pair(true,request.sendResponse(msg, HTTPResponse::XMLTOOLING_HTTP_STATUS_UNAUTHORIZED));
}
}
status = "<Partial/>";
}
- s << "<Application id='" << application.getId() << "' entityID='" << application.getString("entityID").second << "'/>";
+ const PropertySet* relyingParty=NULL;
+ param=httpRequest.getParameter("entityID");
+ if (param) {
+ MetadataProvider* m = application.getMetadataProvider();
+ Locker mlock(m);
+ relyingParty = application.getRelyingParty(m->getEntityDescriptor(MetadataProvider::Criteria(param)).first);
+ }
+ else {
+ relyingParty = application.getRelyingParty(NULL);
+ }
+
+ s << "<Application id='" << application.getId() << "' entityID='" << relyingParty->getString("entityID").second << "'/>";
s << "<Handlers>";
vector<const Handler*> handlers;
}
s << "</Handlers>";
- const PropertySet* relyingParty=NULL;
- param=httpRequest.getParameter("entityID");
- if (param) {
- Locker mlock(application.getMetadataProvider());
- relyingParty = application.getRelyingParty(application.getMetadataProvider()->getEntityDescriptor(param));
- }
- if (!relyingParty)
- relyingParty = application.getRelyingParty(NULL);
CredentialResolver* credResolver=application.getCredentialResolver();
if (credResolver) {
Locker credLocker(credResolver);
httpResponse.setContentType("text/xml");
return make_pair(true, httpResponse.sendResponse(s));
#else
- return make_pair(false,0);
+ return make_pair(false,0L);
#endif
}