From: Yann Ylavic Date: Wed, 22 Sep 2021 18:47:09 +0000 (+0000) Subject: mod_proxy: Handle UDS URIs with empty hostname as if they had no hostname. X-Git-Tag: 2.5.0-alpha2-ci-test-only~792 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d476a66956a6a81ac8e1f7f419ef0697b9a0b76;p=thirdparty%2Fapache%2Fhttpd.git mod_proxy: Handle UDS URIs with empty hostname as if they had no hostname. 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 --- diff --git a/changes-entries/uds_empty_hostname.txt b/changes-entries/uds_empty_hostname.txt new file mode 100644 index 00000000000..beff3023e90 --- /dev/null +++ b/changes-entries/uds_empty_hostname.txt @@ -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 diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 7b67276ed4c..7584f22765c 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -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) {