]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
mod_proxy: Handle UDS URIs with empty hostname as if they had no hostname.
authorYann Ylavic <ylavic@apache.org>
Wed, 22 Sep 2021 18:47:09 +0000 (18:47 +0000)
committerYann Ylavic <ylavic@apache.org>
Wed, 22 Sep 2021 18:47:09 +0000 (18:47 +0000)
It was reported to me (privately) that r1893101 broke existing settings like:
  SetHandler "proxy:unix:///path/to/uds.sock|fcgi://localhost/"

RFC 3986 (section 3.2.2) says that:
   If the URI scheme defines a default for host, then that default
   applies when the host subcomponent is undefined or when the
   registered name is empty (zero length).  For example, the "file" URI
   scheme is defined so that no authority, an empty host, and
   "localhost" all mean the end-user's machine, whereas the "http"
   scheme considers a missing authority or empty host invalid.

Let's consider that the "unix" scheme is closer to the "file" scheme than
the "http" one, and accept "unix:///path/to/uds.sock" as a valid URI.

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

changes-entries/uds_empty_hostname.txt [new file with mode: 0644]
modules/proxy/proxy_util.c

diff --git a/changes-entries/uds_empty_hostname.txt b/changes-entries/uds_empty_hostname.txt
new file mode 100644 (file)
index 0000000..beff302
--- /dev/null
@@ -0,0 +1,2 @@
+  *) mod_proxy: Handle UDS URIs with empty hostname ("unix:///...") as if they
+     had no hostname ("unix:/...").  [Yann Ylavic]
\ No newline at end of file
index 7b67276ed4cca71a7dd79e4dbd83d3d2b7968154..7584f22765c6bc0ff69c6a55aaef3db955847327 100644 (file)
@@ -2284,7 +2284,8 @@ static int fix_uds_filename(request_rec *r, char **url)
         rv = apr_uri_parse(r->pool, uds_url, &urisock);
         *origin_url++ = '|';
 
-        if (rv == APR_SUCCESS && urisock.path && !urisock.hostname) {
+        if (rv == APR_SUCCESS && urisock.path && (!urisock.hostname
+                                                  || !urisock.hostname[0])) {
             uds_path = ap_runtime_dir_relative(r->pool, urisock.path);
         }
         if (!uds_path) {