All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Ryan Hendrickson via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org,  Ryan Hendrickson <ryan.hendrickson@alum.mit.edu>
Subject: Re: [PATCH] http: do not ignore proxy path
Date: Fri, 26 Jul 2024 09:29:54 -0700	[thread overview]
Message-ID: <xmqqr0bgw1z1.fsf@gitster.g> (raw)
In-Reply-To: <pull.1767.git.1722009170590.gitgitgadget@gmail.com> (Ryan Hendrickson via GitGitGadget's message of "Fri, 26 Jul 2024 15:52:50 +0000")

"Ryan Hendrickson via GitGitGadget" <gitgitgadget@gmail.com> writes:

> 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?

http.proxy documentation says

  The syntax thus is [protocol://][user[:password]@]proxyhost[:port].

but the updated code pays attention to what can come after the
"host[:post]" part, does it not?

> diff --git a/http.c b/http.c
> index 623ed234891..0cd75986a6b 100644
> --- a/http.c
> +++ b/http.c

I am unfamiliar with this code path, so let me follow along aloud.

> @@ -1265,7 +1265,13 @@ static CURL *get_curl_handle(void)
>  		if (!proxy_auth.host)
>  			die("Invalid proxy URL '%s'", curl_http_proxy);

We grabbed the value from the configuration variable (or various
environment variables like $http_proxy) in the curl_http_proxy
variable, and then passed it to credential_from_url() to parse parts
out of [protocol://][user[:password]@]proxyhost[:port][/p/a/t/h].
The parsed result is in proxy_auth struct and there is no hope it
can be usable if the .host member is missing.

> -		curl_easy_setopt(result, CURLOPT_PROXY, proxy_auth.host);

We used to only use the .host member but the curl_http_proxy could
have had a path after it, held in the .path member.

> +		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);

Style.  If "if" side needs {braces} because it consists of multiple
statements, the corresponding "else" side should also have {braces}
around its body, even if it only has a single statement.

If you have the proxy strbuf in a bit wider scope, then the above becomes

	if (proxy_auth.path)
		strbuf_addf(&proxy, "%s/%s", proxy_auth.host, proxy_auth.path);
	else
		strbuf_addstr(&proxy, proxy_auth.host);
	curl_easy_setopt(result, CURLOPT_PROXY, proxy.buf);
	strbuf_release(&proxy);

which might (I am not decided) be easier to follow.

Could existing users have been taking advantage of the fact that the
extra /path at the end of http.proxy (and $http_proxy and friends)
are ignored?  For them, this change will appear as a regression.

Other than that (and the lack of any documentation and test
updates), looking good.

Thanks.

  reply	other threads:[~2024-07-26 16:29 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-26 15:52 [PATCH] http: do not ignore proxy path Ryan Hendrickson via GitGitGadget
2024-07-26 16:29 ` Junio C Hamano [this message]
2024-07-26 17:12   ` Ryan Hendrickson
2024-07-26 17:45     ` Junio C Hamano
2024-07-26 21:11 ` Jeff King
2024-07-26 22:43   ` Ryan Hendrickson
2024-07-29 19:31     ` Jeff King
2024-07-27  6:44 ` [PATCH v2] " Ryan Hendrickson via GitGitGadget
2024-07-29 20:09   ` Jeff King
2024-07-31 15:33     ` Ryan Hendrickson
2024-07-31 16:01   ` [PATCH v3] " Ryan Hendrickson via GitGitGadget
2024-07-31 22:24     ` Junio C Hamano
2024-08-01  3:44       ` Ryan Hendrickson
2024-08-01  5:21         ` Junio C Hamano
2024-08-01  5:45       ` Jeff King
2024-08-01 14:40         ` Junio C Hamano
2024-08-01  5:22     ` [PATCH v4] " Ryan Hendrickson via GitGitGadget
2024-08-01  6:04       ` Jeff King
2024-08-01 17:04         ` Junio C Hamano
2024-08-02  5:20       ` [PATCH v5] " Ryan Hendrickson via GitGitGadget
2024-08-02 15:52         ` Junio C Hamano
2024-08-02 16:43           ` Ryan Hendrickson
2024-08-02 17:10             ` Junio C Hamano
2024-08-02 18:03               ` Ryan Hendrickson
2024-08-02 19:28                 ` Junio C Hamano
2024-08-02 19:39                   ` Ryan Hendrickson
2024-08-02 21:13                     ` Junio C Hamano
2024-08-02 21:26                       ` Ryan Hendrickson
2024-08-02 21:43                         ` Junio C Hamano
2024-08-02 21:47                         ` Junio C Hamano
2024-08-02 22:14                           ` Ryan Hendrickson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqr0bgw1z1.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=ryan.hendrickson@alum.mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.