]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 3023: url_rewrite_program silently fails to rewrite on broken URLs
authorAmos Jeffries <squid3@treenet.co.nz>
Tue, 21 Sep 2010 12:11:37 +0000 (00:11 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Tue, 21 Sep 2010 12:11:37 +0000 (00:11 +1200)
Produce loud cache.log entries displayig the URL instead of silently bypassing.

src/client_side_request.cc

index 51130e9da0ef4448936957b394a5c7abaaa18aea..034c271273c0eda167fd86ecbb91cb7eb913962e 100644 (file)
@@ -1019,11 +1019,18 @@ ClientRequestContext::clientRedirectDone(char *result)
             if ((t = strchr(result, ':')) != NULL) {
                 http->redirect.status = status;
                 http->redirect.location = xstrdup(t + 1);
+                // TODO: validate the URL produced here is RFC 2616 compliant absolute URI
             } else {
-                debugs(85, 1, "clientRedirectDone: bad input: " << result);
+                if (old_request->http_ver < HttpVersion(1,1))
+                    debugs(85, DBG_CRITICAL, "ERROR: URL-rewrite produces invalid 302 redirect Location: " << result);
+                else
+                    debugs(85, DBG_CRITICAL, "ERROR: URL-rewrite produces invalid 303 redirect Location: " << result);
             }
-        } else if (strcmp(result, http->uri))
-            new_request = HttpRequest::CreateFromUrlAndMethod(result, old_request->method);
+        } else if (strcmp(result, http->uri)) {
+            if (!(new_request = HttpRequest::CreateFromUrlAndMethod(result, old_request->method)))
+                debugs(85, DBG_CRITICAL, "ERROR: URL-rewrite produces invalid request: " <<
+                       old_request->method << " " << result << " HTTP/1.1");
+       }
     }
 
     if (new_request) {