Skip to content

Commit

Permalink
mod_proxy: Handle UDS URIs with empty hostname as if they had no host…
Browse files Browse the repository at this point in the history
…name.

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
  • Loading branch information
ylavic committed Sep 22, 2021
1 parent 6d76cbb commit 6d476a6
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 1 deletion.
2 changes: 2 additions & 0 deletions 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]
3 changes: 2 additions & 1 deletion modules/proxy/proxy_util.c
Expand Up @@ -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) {
Expand Down

0 comments on commit 6d476a6

Please sign in to comment.