Signed-off-by: Nelson Benitez Leon <nbenitezl@xxxxxxxxx> --- http.c | 36 +++++++++++++++++++++++++++++++++++- 1 files changed, 35 insertions(+), 1 deletions(-) diff --git a/http.c b/http.c index 79cbe50..68e3f7d 100644 --- a/http.c +++ b/http.c @@ -306,7 +306,41 @@ static CURL *get_curl_handle(void) } } if (curl_http_proxy) { - curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy); + char *at, *colon, *proxyuser; + const char *cp; + cp = strstr(curl_http_proxy, "://"); + if (cp == NULL) { + cp = curl_http_proxy; + } else { + cp += 3; + } + at = strchr(cp, '@'); + colon = strchr(cp, ':'); + if (at && (!colon || at < colon)) { + /* proxy string has username but no password, ask for password */ + char *ask_str, *proxyuser, *proxypass; + int len; + struct strbuf pbuf = STRBUF_INIT; + len = at - cp; + proxyuser = xmalloc(len + 1); + memcpy(proxyuser, cp, len); + proxyuser[len] = '\0'; + + strbuf_addf(&pbuf, "Enter password for proxy %s...", at+1); + ask_str = strbuf_detach(&pbuf, NULL); + proxypass = xstrdup(git_getpass(ask_str)); + + strbuf_insert(&pbuf, 0, curl_http_proxy, cp - curl_http_proxy); + strbuf_addf(&pbuf, "%s:%s", proxyuser, proxypass); + strbuf_add(&pbuf, at, strlen(at)); + curl_easy_setopt(result, CURLOPT_PROXY, strbuf_detach(&pbuf, NULL)); + + free(ask_str); + free(proxyuser); + free(proxypass); + } else { + curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy); + } curl_easy_setopt(result, CURLOPT_PROXYAUTH, CURLAUTH_ANY); } -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html