[PATCH] http: do not ignore proxy path
- From
Ryan Hendrickson via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jul 26, 2024, 15:52 UTC
- Message-ID
- <pull.1767.git.1722009170590.gitgitgadget@gmail.com>
From: Ryan Hendrickson <ryan.hendrickson@alum.mit.edu>
The documentation for `http.proxy` describes that option, and the environment variables it overrides, as supporting "the syntax understood by curl". curl allows SOCKS proxies to use a path to a Unix domain socket, like `socks5h://localhost/path/to/socket.sock`. Git should therefore include, if present, the path part of the proxy URL in what it passes to libcurl.
Signed-off-by: Ryan Hendrickson <ryan.hendrickson@alum.mit.edu>
---
http: do not ignore proxy path
* Documentation: do I need to add anything?
* Tests: I could use a pointer on how best to add a test for this.
Adding a case to t5564-http-proxy.sh seems straightforward but I
don't think httpd can be configured to listen to domain sockets; can
I use netcat?Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1767%2Frhendric%2Frhendric%2Fhttp-proxy-path-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1767/rhendric/rhendric/http-proxy-path-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/1767
http.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/http.c b/http.c index 623ed234891..0cd75986a6b 100644 --- a/http.c +++ b/http.c @@ -1265,7 +1265,13 @@ static CURL *get_curl_handle(void) if (!proxy_auth.host) die("Invalid proxy URL '%s'", curl_http_proxy); - curl_easy_setopt(result, CURLOPT_PROXY, proxy_auth.host); + if (proxy_auth.path) { + struct strbuf proxy = STRBUF_INIT; + strbuf_addf(&proxy, "%s/%s", proxy_auth.host, proxy_auth.path); + curl_easy_setopt(result, CURLOPT_PROXY, proxy.buf); + strbuf_release(&proxy); + } else + curl_easy_setopt(result, CURLOPT_PROXY, proxy_auth.host); var_override(&curl_no_proxy, getenv("NO_PROXY")); var_override(&curl_no_proxy, getenv("no_proxy")); curl_easy_setopt(result, CURLOPT_NOPROXY, curl_no_proxy); base-commit: ad57f148c6b5f8735b62238dda8f571c582e0e54
-- gitgitgadget