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

Attachment: mod_rewrite.c.unified.diff.patch
Description: Binary data

Reply via email to