-/*
- * Copyright 2001-2011 Internet2
+/**
+ * Licensed to the University Corporation for Advanced Internet
+ * Development, Inc. (UCAID) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for
+ * additional information regarding copyright ownership.
*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * UCAID licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the
+ * License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
*/
/**
#include "SessionCache.h"
#include "util/CGIParser.h"
+#include <boost/lexical_cast.hpp>
+
using namespace shibsp;
using namespace opensaml;
using namespace xmltooling;
GSSRequest::~GSSRequest()
{
}
+
+gss_name_t GSSRequest::getGSSName() const
+{
+ return GSS_C_NO_NAME;
+}
#endif
AbstractSPRequest::AbstractSPRequest(const char* category)
- : m_sp(nullptr), m_mapper(nullptr), m_app(nullptr), m_sessionTried(false), m_session(nullptr),
- m_log(&Category::getInstance(category)), m_parser(nullptr)
+ : m_sp(SPConfig::getConfig().getServiceProvider()),
+ m_mapper(nullptr), m_app(nullptr), m_sessionTried(false), m_session(nullptr),
+ m_log(&Category::getInstance(category))
{
- m_sp=SPConfig::getConfig().getServiceProvider();
m_sp->lock();
}
m_mapper->unlock();
if (m_sp)
m_sp->unlock();
- delete m_parser;
}
const ServiceProvider& AbstractSPRequest::getServiceProvider() const
{
if (!m_mapper) {
// Map request to application and content settings.
- m_mapper=m_sp->getRequestMapper();
+ m_mapper = m_sp->getRequestMapper();
m_mapper->lock();
m_settings = m_mapper->getSettings(*this);
{
if (!m_app) {
// Now find the application from the URL settings
- m_app=m_sp->getApplication(getRequestSettings().first->getString("applicationId").second);
+ m_app = m_sp->getApplication(getRequestSettings().first->getString("applicationId").second);
if (!m_app)
throw ConfigurationException("Unable to map non-default applicationId to an ApplicationOverride, check configuration.");
}
m_sessionTried = true;
// Need address checking and timeout settings.
- time_t timeout=3600;
+ time_t timeout = 3600;
if (checkTimeout || !ignoreAddress) {
- const PropertySet* props=getApplication().getPropertySet("Sessions");
+ const PropertySet* props = getApplication().getPropertySet("Sessions");
if (props) {
if (checkTimeout) {
- pair<bool,unsigned int> p=props->getUnsignedInt("timeout");
+ pair<bool,unsigned int> p = props->getUnsignedInt("timeout");
if (p.first)
timeout = p.second;
}
- pair<bool,bool> pcheck=props->getBool("consistentAddress");
+ pair<bool,bool> pcheck = props->getBool("consistentAddress");
if (pcheck.first)
ignoreAddress = !pcheck.second;
}
// The cache will either silently pass a session or nullptr back, or throw an exception out.
Session* session = getServiceProvider().getSessionCache()->find(
- getApplication(), *this, ignoreAddress ? nullptr : getRemoteAddr().c_str(), checkTimeout ? &timeout : nullptr
+ getApplication(), *this, (ignoreAddress ? nullptr : getRemoteAddr().c_str()), (checkTimeout ? &timeout : nullptr)
);
if (cache)
m_session = session;
int port = getPort();
const char* scheme = getScheme();
m_url = string(scheme) + "://" + getHostname();
- if ((!strcmp(scheme,"http") && port!=80) || (!strcmp(scheme,"https") && port!=443)) {
- ostringstream portstr;
- portstr << port;
- m_url += ":" + portstr.str();
- }
+ if (!isDefaultPort())
+ m_url += ":" + boost::lexical_cast<string>(port);
m_url += m_uri;
}
return m_url.c_str();
const char* AbstractSPRequest::getParameter(const char* name) const
{
- if (!m_parser)
- m_parser=new CGIParser(*this);
+ if (!m_parser.get())
+ m_parser.reset(new CGIParser(*this));
- pair<CGIParser::walker,CGIParser::walker> bounds=m_parser->getParameters(name);
+ pair<CGIParser::walker,CGIParser::walker> bounds = m_parser->getParameters(name);
return (bounds.first==bounds.second) ? nullptr : bounds.first->second;
}
vector<const char*>::size_type AbstractSPRequest::getParameters(const char* name, vector<const char*>& values) const
{
- if (!m_parser)
- m_parser=new CGIParser(*this);
+ if (!m_parser.get())
+ m_parser.reset(new CGIParser(*this));
- pair<CGIParser::walker,CGIParser::walker> bounds=m_parser->getParameters(name);
- while (bounds.first!=bounds.second) {
+ pair<CGIParser::walker,CGIParser::walker> bounds = m_parser->getParameters(name);
+ while (bounds.first != bounds.second) {
values.push_back(bounds.first->second);
++bounds.first;
}
if (!resource)
resource = getRequestURL();
- if (!m_handlerURL.empty() && resource && !strcmp(getRequestURL(),resource))
+ if (!m_handlerURL.empty() && resource && !strcmp(getRequestURL(), resource))
return m_handlerURL.c_str();
+ // Check for relative URL.
string stackresource;
if (resource && *resource == '/') {
// Compute a URL to the root of the site and point resource at constructed string.
int port = getPort();
const char* scheme = getScheme();
stackresource = string(scheme) + "://" + getHostname();
- if ((!strcmp(scheme,"http") && port!=80) || (!strcmp(scheme,"https") && port!=443)) {
- ostringstream portstr;
- portstr << port;
- stackresource += ":" + portstr.str();
- }
+ if (!isDefaultPort())
+ stackresource += ":" + boost::lexical_cast<string>(port);
stackresource += resource;
resource = stackresource.c_str();
}
#endif
throw ConfigurationException("Target resource was not an absolute URL.");
- bool ssl_only=true;
- const char* handler=nullptr;
- const PropertySet* props=getApplication().getPropertySet("Sessions");
+ bool ssl_only = true;
+ const char* handler = nullptr;
+ const PropertySet* props = getApplication().getPropertySet("Sessions");
if (props) {
- pair<bool,bool> p=props->getBool("handlerSSL");
+ pair<bool,bool> p = props->getBool("handlerSSL");
if (p.first)
- ssl_only=p.second;
- pair<bool,const char*> p2=props->getString("handlerURL");
+ ssl_only = p.second;
+ pair<bool,const char*> p2 = props->getString("handlerURL");
if (p2.first)
- handler=p2.second;
+ handler = p2.second;
}
if (!handler) {
}
// break apart the "protocol" string into protocol, host, and "the rest"
- const char* colon=strchr(prot,':');
+ const char* colon = strchr(prot, ':');
colon += 3;
- const char* slash=strchr(colon,'/');
+ const char* slash = strchr(colon, '/');
if (!path)
path = slash;