]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
The remote port information was forgotten from the builtin
authorRainer Jung <rjung@apache.org>
Thu, 2 Apr 2009 15:49:29 +0000 (15:49 +0000)
committerRainer Jung <rjung@apache.org>
Thu, 2 Apr 2009 15:49:29 +0000 (15:49 +0000)
data of the AJP 13 protocol.  Since the servlet spec allows
to retrieve it via getRemotePort(), we provide the port to
the Tomcat connector as an additional request attribute.
Modern/future Tomcat versions know how to retrieve
the remote port from the attribute AJP_REMOTE_PORT.

See:
https://issues.apache.org/bugzilla/show_bug.cgi?id=41263
http://svn.eu.apache.org/viewvc?view=rev&revision=756926
http://svn.eu.apache.org/viewvc?view=rev&revision=757223

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@761329 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/proxy/ajp_header.c
modules/proxy/ajp_header.h

diff --git a/CHANGES b/CHANGES
index 34f9d3d47eb57bfe3c21c2338fea4b9d3294b97d..0743869bec6bdbe866bda85e86ae83080eaa492d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
 
 Changes with Apache 2.3.3
 
+  *) mod_proxy_ajp: Forward remote port information by default.
+     [Rainer Jung]
+
   *) Allow MPMs to be loaded dynamically, as with most other modules.  This
      required changes to the MPM interfaces.  Removed: mpm.h, mpm_default.h
      (as an installed header), APACHE_MPM_DIR, MPM_NAME, ap_threads_per_child, 
index c8617d1bd298d6ff75bb89e73f2e119f832319b1..eda76d183ad61db6288d45a038f0b6e04e1b1a5b 100644 (file)
@@ -403,6 +403,26 @@ static apr_status_t ajp_marshal_into_msgb(ajp_msg_t *msg,
             }
         }
     }
+    /* Forward the remote port information, which was forgotten
+     * from the builtin data of the AJP 13 protocol.
+     * Since the servlet spec allows to retrieve it via getRemotePort(),
+     * we provide the port to the Tomcat connector as a request
+     * attribute. Modern Tomcat versions know how to retrieve
+     * the remote port from this attribute.
+     */
+    {
+        const char *key = SC_A_REQ_REMOTE_PORT;
+        char *val = apr_itoa(r->pool, r->connection->remote_addr->port);
+        if (ajp_msg_append_uint8(msg, SC_A_REQ_ATTRIBUTE) ||
+            ajp_msg_append_string(msg, key)   ||
+            ajp_msg_append_string(msg, val)) {
+            ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
+                    "ajp_marshal_into_msgb: "
+                    "Error appending attribute %s=%s",
+                    key, val);
+            return AJP_EOVERFLOW;
+        }
+    }
     /* Use the environment vars prefixed with AJP_
      * and pass it to the header striping that prefix.
      */
index bb6adae3277ac350ae592447fe5931e04ba7c96b..35379feef9e62f5c371c9b98ada315e630b772cd 100644 (file)
 #define SC_A_SECRET             (unsigned char)12
 #define SC_A_ARE_DONE           (unsigned char)0xFF
 
+/*
+ * AJP private request attributes
+ *
+ * The following request attribute is recognized by Tomcat
+ * to contain the forwarded remote port.
+ */
+#define SC_A_REQ_REMOTE_PORT    ("AJP_REMOTE_PORT")
+
 /*
  * Request methods, coded as numbers instead of strings.
  * The list of methods was taken from Section 5.1.1 of RFC 2616,