https://issues.shibboleth.net/jira/browse/SSPCPP-155
authorScott Cantor <cantor.2@osu.edu>
Mon, 27 Oct 2008 17:28:53 +0000 (17:28 +0000)
committerScott Cantor <cantor.2@osu.edu>
Mon, 27 Oct 2008 17:28:53 +0000 (17:28 +0000)
apache/mod_apache.cpp
fastcgi/shibauthorizer.cpp
fastcgi/shibresponder.cpp
isapi_shib/isapi_shib.cpp
nsapi_shib/nsapi_shib.cpp
schemas/shibboleth-2.0-native-sp-config.xsd
shibsp/AbstractSPRequest.cpp
shibsp/AbstractSPRequest.h

index af2c2ea..2a29de2 100644 (file)
@@ -358,7 +358,8 @@ public:
       return m_gotBody ? m_body.length() : m_req->remaining;
   }
   string getRemoteAddr() const {
-    return m_req->connection->remote_ip;
+    string ret = AbstractSPRequest::getRemoteAddr();
+    return ret.empty() ? m_req->connection->remote_ip : ret;
   }
   void log(SPLogLevel level, const string& msg) const {
     AbstractSPRequest::log(level,msg);
index 282dad9..6a8051a 100644 (file)
@@ -115,6 +115,9 @@ public:
         return s ? atol(s) : 0;\r
     }\r
     string getRemoteAddr() const {\r
+        string ret = AbstractSPRequest::getRemoteAddr();\r
+        if (!ret.empty())\r
+            return ret;\r
         const char* s = FCGX_GetParam("REMOTE_ADDR", m_req->envp);\r
         return s ? s : "";\r
     }\r
index 3582833..1537e33 100644 (file)
@@ -120,6 +120,9 @@ public:
         return s ? s : "";\r
     }\r
     string getRemoteAddr() const {\r
+        string ret = AbstractSPRequest::getRemoteAddr();\r
+        if (!ret.empty())\r
+            return ret;\r
         const char* s = FCGX_GetParam("REMOTE_ADDR", m_req->envp);\r
         return s ? s : "";\r
     }\r
index 38ea0c2..efba0cf 100644 (file)
@@ -423,6 +423,7 @@ public:
       return 0;
   }
   string getRemoteAddr() const {
+    m_remote_addr = AbstractSPRequest::getRemoteAddr();
     if (m_remote_addr.empty()) {
         dynabuf var(16);
         GetServerVariable(m_pfc,"REMOTE_ADDR",var,16,false);
@@ -754,6 +755,7 @@ public:
     return m_remote_user;
   }
   string getRemoteAddr() const {
+    m_remote_addr = AbstractSPRequest::getRemoteAddr();
     if (m_remote_addr.empty()) {
         dynabuf var(16);
         GetServerVariable(m_lpECB, "REMOTE_ADDR", var, 16, false);
index 89579b6..c0eb654 100644 (file)
@@ -251,7 +251,8 @@ public:
     return content_length ? atoi(content_length) : 0;
   }
   string getRemoteAddr() const {
-    return pblock_findval("ip", m_sn->client);
+    string ret = AbstractSPRequest::getRemoteAddr();
+    return ret.empty() ? pblock_findval("ip", m_sn->client) : ret;
   }
   void log(SPLogLevel level, const string& msg) const {
     AbstractSPRequest::log(level,msg);
index 38e0eeb..b3f4cde 100644 (file)
@@ -8,7 +8,7 @@
        elementFormDefault="qualified"\r
        attributeFormDefault="unqualified"\r
        blockDefault="substitution"\r
-       version="2.1">\r
+       version="2.2">\r
 \r
        <import namespace="urn:oasis:names:tc:SAML:2.0:assertion" schemaLocation="saml-schema-assertion-2.0.xsd"/>\r
        <import namespace="urn:oasis:names:tc:SAML:2.0:protocol" schemaLocation="saml-schema-protocol-2.0.xsd"/>\r
                <attribute name="metadataError" type="anyURI"/>\r
                <attribute name="accessError" type="anyURI"/>\r
                <attribute name="sslError" type="anyURI"/>\r
+        <attribute name="REMOTE_ADDR" type="conf:string"/>\r
                <anyAttribute namespace="##other" processContents="lax"/>\r
        </attributeGroup>\r
        <element name="AccessControlProvider" type="conf:PluggableType"/>\r
index 1cfc971..584f232 100644 (file)
@@ -170,6 +170,12 @@ const char* AbstractSPRequest::getRequestURL() const
     return m_url.c_str();
 }
 
+string AbstractSPRequest::getRemoteAddr() const
+{
+    pair<bool,const char*> addr = getRequestSettings().first->getString("REMOTE_ADDR");
+    return addr.first ? getHeader(addr.second) : "";
+}
+
 const char* AbstractSPRequest::getParameter(const char* name) const
 {
     if (!m_parser)
index 6faf9ee..1253256 100644 (file)
@@ -74,6 +74,8 @@ namespace shibsp {
 
         const char* getRequestURL() const;
         
+        std::string getRemoteAddr() const;
+        
         const char* getParameter(const char* name) const;
 
         std::vector<const char*>::size_type getParameters(const char* name, std::vector<const char*>& values) const;