]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Merge r761329 from trunk:
authorJim Jagielski <jim@apache.org>
Fri, 17 Apr 2009 13:40:08 +0000 (13:40 +0000)
committerJim Jagielski <jim@apache.org>
Fri, 17 Apr 2009 13:40:08 +0000 (13:40 +0000)
The remote port information 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 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

Submitted by: rjung
Reviewed/backported by: jim

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@765998 13f79535-47bb-0310-9956-ffa450edef68

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

diff --git a/CHANGES b/CHANGES
index 5838153e17d74c00f8fc8242f4174d6208457f35..1554a898f38150d523165f14aee924c7ad5a1b2d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.2.12
 
+  *) mod_proxy_ajp: Forward remote port information by default.
+     [Rainer Jung]
+
   *) mod_disk_cache/mod_mem_cache: Fix handling of CacheIgnoreHeaders
      directive to correctly remove headers before storing them.
      [Lars Eilebrecht]
diff --git a/STATUS b/STATUS
index 6a95b0091cb4dab1a771e5fb2b8b5b289a8871ea..906244eb7ff21ec30786018bc182c9e1a41d0d61 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -95,20 +95,6 @@ RELEASE SHOWSTOPPERS:
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
- * mod_proxy_ajp: The remote port information 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 an additional request attribute.
-   Modern/future Tomcat versions know how to retrieve
-   the remote port from the attribute AJP_REMOTE_PORT.
-   For the AJP/Tomcat part 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
-   Patch in trunk:
-   http://svn.apache.org/viewvc?rev=761329&view=rev
-   +1: rjung, rpluem, wrowe, jim
-
  * mod_mime_magic: For compressed content the module sets the
    content encoding header and also tries to determine the
    uncompressed content type by using an external gzip.
index 9130de9a78a152a90375797f6048d42aed63c72f..90a5a074d945ab0785914a938f34aac500ae7c6b 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,