httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bill Zajac <bi...@consultla.com>
Subject [PATCH <PR-24329>] - Fix for: mod_rewrite fully qualifies (corrupts) the substitution string for CONNECT requests
Date Fri, 02 Oct 2009 23:08:46 GMT
I hope someone from the official dev team can merge this into the next
release of apache httpd.

Please find attached an svn diff made against revision 820823 of:
http://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x/modules/mappers/mod_rewrite.c

This diff fixes the Bug 29744 on the Bugzilla:
  Bug: https://issues.apache.org/bugzilla/show_bug.cgi?id=47928
  Patch: https://issues.apache.org/bugzilla/attachment.cgi?id=24329

This fix allows mod_rewrite to handle CONNECT requests (by not trying to
fully qualify the substitution string).
The current behavior is that mod_rewrite tries to connect to
http[s]://ourhost[:ourport]/host:port.

I verified with the RFC (http://www.ietf.org/rfc/rfc2817.txt):

   A CONNECT method requests that a proxy establish a tunnel connection
   on its behalf. The Request-URI portion of the Request-Line is always
   an 'authority' as defined by URI Generic Syntax [2], which is to say
   the host name and port number destination of the requested connection
   separated by a colon:

      CONNECT server.example.com:80 HTTP/1.1
      Host: server.example.com:80

This patch will allow a CONNECT request to simply connect to the host:port
specified in the substitution string of the rewrite rule.

The bug page listed above gives more details.

The patch is so small that I'm also pasting it into the body of this email
for your quick review.

--- mod_rewrite.c       (revision 820823)
+++ mod_rewrite.c       (working copy)
@@ -845,7 +845,10 @@
  */
 static void fully_qualify_uri(request_rec *r)
 {
-    if (!is_absolute_uri(r->filename)) {
+    if (r->method_number == M_CONNECT) {
+        return;
+    }
+    else if (!is_absolute_uri(r->filename)) {
         const char *thisserver;
         char *thisport;
         int port;


Hopefully this is enough detail to help.

Thank you,
BillZ

Mime
View raw message