Fix backslashes in SHIBSP_PREFIX variable by manually creating it during the script...
[shibboleth/sp.git] / shibsp / AbstractSPRequest.cpp
index dffe00c..e7de1cd 100644 (file)
@@ -31,9 +31,9 @@ using namespace opensaml;
 using namespace xmltooling;
 using namespace std;
 
-AbstractSPRequest::AbstractSPRequest()
+AbstractSPRequest::AbstractSPRequest(const char* category)
     : m_sp(NULL), m_mapper(NULL), m_app(NULL), m_sessionTried(false), m_session(NULL),
-        m_log(&Category::getInstance(SHIBSP_LOGCAT".SPRequest")), m_parser(NULL)
+        m_log(&Category::getInstance(category)), m_parser(NULL)
 {
     m_sp=SPConfig::getConfig().getServiceProvider();
     m_sp->lock();
@@ -81,17 +81,10 @@ Session* AbstractSPRequest::getSession(bool checkTimeout, bool ignoreAddress, bo
     else if (cache)
         m_sessionTried = true;
 
-    // Get session ID from cookie.
-    const Application& app = getApplication();
-    pair<string,const char*> shib_cookie = app.getCookieNameProps("_shibsession_");
-    const char* session_id = getCookie(shib_cookie.first.c_str());
-    if (!session_id || !*session_id)
-        return NULL;
-
     // Need address checking and timeout settings.
     time_t timeout=0;
     if (checkTimeout || !ignoreAddress) {
-        const PropertySet* props=app.getPropertySet("Sessions");
+        const PropertySet* props=getApplication().getPropertySet("Sessions");
         if (props) {
             if (checkTimeout) {
                 pair<bool,unsigned int> p=props->getUnsignedInt("timeout");
@@ -106,58 +99,58 @@ Session* AbstractSPRequest::getSession(bool checkTimeout, bool ignoreAddress, bo
 
     // The cache will either silently pass a session or NULL back, or throw an exception out.
     Session* session = getServiceProvider().getSessionCache()->find(
-        session_id, app, ignoreAddress ? NULL : getRemoteAddr().c_str(), checkTimeout ? &timeout : NULL
+        getApplication(), *this, ignoreAddress ? NULL : getRemoteAddr().c_str(), checkTimeout ? &timeout : NULL
         );
     if (cache)
         m_session = session;
     return session;
 }
 
-static char _x2c(const char *what)\r
-{\r
-    register char digit;\r
-\r
-    digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0'));\r
-    digit *= 16;\r
-    digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0'));\r
-    return(digit);\r
-}\r
+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);
+}
 
 void AbstractSPRequest::setRequestURI(const char* uri)
 {
-    // Fix for bug 574, secadv 20061002\r
-    // Unescape URI up to query string delimiter by looking for %XX escapes.\r
-    // Adapted from Apache's util.c, ap_unescape_url function.\r
-    if (uri) {\r
-        while (*uri) {\r
-            if (*uri == '?') {\r
-                m_uri += uri;\r
-                break;\r
-            }\r
-            else if (*uri == ';') {\r
-                // If this is Java being stupid, skip everything up to the query string, if any.\r
-                if (!strncmp(uri, ";jsessionid=", 12)) {\r
-                    if (uri = strchr(uri, '?'))\r
-                        m_uri += uri;\r
-                    break;\r
-                }\r
-                else {\r
-                    m_uri += *uri;\r
-                }\r
-            }\r
-            else if (*uri != '%') {\r
-                m_uri += *uri;\r
-            }\r
-            else {\r
-                ++uri;\r
-                if (!isxdigit(*uri) || !isxdigit(*(uri+1)))\r
-                    throw ConfigurationException("Bad request, contained unsupported encoded characters.");\r
-                m_uri += _x2c(uri);\r
-                ++uri;\r
-            }\r
-            ++uri;\r
-        }\r
-    }\r
+    // Fix for bug 574, secadv 20061002
+    // Unescape URI up to query string delimiter by looking for %XX escapes.
+    // Adapted from Apache's util.c, ap_unescape_url function.
+    if (uri) {
+        while (*uri) {
+            if (*uri == '?') {
+                m_uri += uri;
+                break;
+            }
+            else if (*uri == ';') {
+                // If this is Java being stupid, skip everything up to the query string, if any.
+                if (!strncmp(uri, ";jsessionid=", 12)) {
+                    if (uri = strchr(uri, '?'))
+                        m_uri += uri;
+                    break;
+                }
+                else {
+                    m_uri += *uri;
+                }
+            }
+            else if (*uri != '%') {
+                m_uri += *uri;
+            }
+            else {
+                ++uri;
+                if (!isxdigit(*uri) || !isxdigit(*(uri+1)))
+                    throw ConfigurationException("Bad request, contained unsupported encoded characters.");
+                m_uri += _x2c(uri);
+                ++uri;
+            }
+            ++uri;
+        }
+    }
 }
 
 const char* AbstractSPRequest::getRequestURL() const
@@ -199,37 +192,6 @@ vector<const char*>::size_type AbstractSPRequest::getParameters(const char* name
     return values.size();
 }
 
-const char* AbstractSPRequest::getCookie(const char* name) const
-{
-    if (m_cookieMap.empty()) {
-        string cookies=getHeader("Cookie");
-
-        string::size_type pos=0,cname,namelen,val,vallen;
-        while (pos !=string::npos && pos < cookies.length()) {
-            while (isspace(cookies[pos])) pos++;
-            cname=pos;
-            pos=cookies.find_first_of("=",pos);
-            if (pos == string::npos)
-                break;
-            namelen=pos-cname;
-            pos++;
-            if (pos==cookies.length())
-                break;
-            val=pos;
-            pos=cookies.find_first_of(";",pos);
-            if (pos != string::npos) {
-                vallen=pos-val;
-                pos++;
-                m_cookieMap.insert(make_pair(cookies.substr(cname,namelen),cookies.substr(val,vallen)));
-            }
-            else
-                m_cookieMap.insert(make_pair(cookies.substr(cname,namelen),cookies.substr(val)));
-        }
-    }
-    map<string,string>::const_iterator lookup=m_cookieMap.find(name);
-    return (lookup==m_cookieMap.end()) ? NULL : lookup->second.c_str();
-}
-
 const char* AbstractSPRequest::getHandlerURL(const char* resource) const
 {
     if (!resource)