Re: [PATCH 2/2] http: use credential API to handle proxy authentication
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Nov 4, 2015, 19:53 UTC
- Message-ID
- <xmqqd1vpa6d1.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <1446628405-8070-3-git-send-email-k.franke@science-computing.de>
Knut Franke <k.franke@science-computing.de> writes:
Show 6 quoted lines
> @@ -337,6 +342,24 @@ static void var_override(const char **var, char *value)
>
> static void init_curl_proxy_auth(CURL *result)
> {
> + if (proxy_auth.username) {
> + struct strbuf s = STRBUF_INIT;Having this variable triggers compilation error with newer libcurl version as it is only used in the #else clause X-<.
Show 15 quoted lines
> + if (!proxy_auth.password) > + credential_fill(&proxy_auth); > +#if LIBCURL_VERSION_NUM >= 0x071301 > + curl_easy_setopt(result, CURLOPT_PROXYUSERNAME, > + proxy_auth.username); > + curl_easy_setopt(result, CURLOPT_PROXYPASSWORD, > + proxy_auth.password); > +#else > + strbuf_addstr_urlencode(&s, proxy_auth.username, 1); > + strbuf_addch(&s, ':'); > + strbuf_addstr_urlencode(&s, proxy_auth.password, 1); > + curl_proxyuserpwd = strbuf_detach(&s, NULL); > + curl_easy_setopt(result, CURLOPT_PROXYUSERPWD, curl_proxyuserpwd); > +#endif > + }
It is probably easier to follow the flow of the logic of the primary interface (i.e. init_curl_proxy_auth()) if you split this part into its own helper function that deals with implementation detail, e.g.
http.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/http.c b/http.c index 1f269b0..fad2ba5 100644 --- a/http.c +++ b/http.c @@ -340,24 +340,30 @@ static void var_override(const char **var, char *value) } } -static void init_curl_proxy_auth(CURL *result) +static void set_proxyauth_name_password(CURL *result) { - if (proxy_auth.username) { - struct strbuf s = STRBUF_INIT; - if (!proxy_auth.password) - credential_fill(&proxy_auth); #if LIBCURL_VERSION_NUM >= 0x071301 curl_easy_setopt(result, CURLOPT_PROXYUSERNAME, proxy_auth.username); curl_easy_setopt(result, CURLOPT_PROXYPASSWORD, proxy_auth.password); #else + struct strbuf s = STRBUF_INIT; + strbuf_addstr_urlencode(&s, proxy_auth.username, 1); strbuf_addch(&s, ':'); strbuf_addstr_urlencode(&s, proxy_auth.password, 1); curl_proxyuserpwd = strbuf_detach(&s, NULL); curl_easy_setopt(result, CURLOPT_PROXYUSERPWD, curl_proxyuserpwd); #endif +} + +static void init_curl_proxy_auth(CURL *result) +{ + if (proxy_auth.username) { + if (!proxy_auth.password) + credential_fill(&proxy_auth); + set_proxyauth_name_password(result); } var_override(&http_proxy_authmethod, getenv("GIT_HTTP_PROXY_AUTHMETHOD"));