From: Clemens Buchacher <drizzd@aon.at>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>
Subject: [PATCH 2/2] fix http auth with multiple curl handles
Date: Tue, 10 Apr 2012 11:53:40 +0200 [thread overview]
Message-ID: <1334051620-18044-3-git-send-email-drizzd@aon.at> (raw)
In-Reply-To: <1334051620-18044-1-git-send-email-drizzd@aon.at>
From: Jeff King <peff@peff.net>
HTTP authentication is currently handled by get_refs and fetch_ref, but
not by fetch_object, fetch_pack or fetch_alternates. In the
single-threaded case, this is not an issue, since get_refs is always
called first. It recognigzes the 401 and prompts the user for
credentials, which will then be used subsequently.
If the curl multi interface is used, however, only the multi handle used
by get_refs will have credentials configured. Requests made by other
handles fail with an authentication error.
Fix this by setting CURLOPT_USERPWD whenever a slot is requested.
Signed-off-by: Clemens Buchacher <drizzd@aon.at>
---
http.c | 2 ++
t/t5550-http-fetch.sh | 10 +++++-----
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/http.c b/http.c
index f3f83d7..c6dc9b7 100644
--- a/http.c
+++ b/http.c
@@ -494,6 +494,8 @@ struct active_request_slot *get_active_slot(void)
curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDS, NULL);
curl_easy_setopt(slot->curl, CURLOPT_UPLOAD, 0);
curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
+ if (http_auth.password)
+ init_curl_http_auth(slot->curl);
return slot;
}
diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh
index 1d9ff1e..b06f817 100755
--- a/t/t5550-http-fetch.sh
+++ b/t/t5550-http-fetch.sh
@@ -92,21 +92,21 @@ test_expect_success 'http auth can use user/pass in URL' '
expect_askpass none
'
-test_expect_failure 'http auth can use just user in URL' '
+test_expect_success 'http auth can use just user in URL' '
>askpass-query &&
echo user@host >askpass-response &&
git clone "$HTTPD_URL_USER/auth/repo.git" clone-auth-pass &&
expect_askpass pass user@host
'
-test_expect_failure 'http auth can request both user and pass' '
+test_expect_success 'http auth can request both user and pass' '
>askpass-query &&
echo user@host >askpass-response &&
git clone "$HTTPD_URL/auth/repo.git" clone-auth-both &&
expect_askpass both user@host
'
-test_expect_failure 'http auth respects credential helper config' '
+test_expect_success 'http auth respects credential helper config' '
test_config_global credential.helper "!f() {
cat >/dev/null
echo username=user@host
@@ -118,7 +118,7 @@ test_expect_failure 'http auth respects credential helper config' '
expect_askpass none
'
-test_expect_failure 'http auth can get username from config' '
+test_expect_success 'http auth can get username from config' '
test_config_global "credential.$HTTPD_URL.username" user@host &&
>askpass-query &&
echo user@host >askpass-response &&
@@ -126,7 +126,7 @@ test_expect_failure 'http auth can get username from config' '
expect_askpass pass user@host
'
-test_expect_failure 'configured username does not override URL' '
+test_expect_success 'configured username does not override URL' '
test_config_global "credential.$HTTPD_URL.username" wrong &&
>askpass-query &&
echo user@host >askpass-response &&
--
1.7.9.6
next prev parent reply other threads:[~2012-04-10 10:02 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-01 18:48 Cannot clone the git repository shared over http with authorization Artur R. Czechowski
2012-04-01 19:45 ` Clemens Buchacher
2012-04-01 20:53 ` Clemens Buchacher
2012-04-02 8:31 ` Jeff King
2012-04-10 9:53 ` Clemens Buchacher
2012-04-10 9:53 ` [PATCH 1/2] http auth fails with multiple curl handles Clemens Buchacher
2012-04-10 9:53 ` Clemens Buchacher [this message]
2012-04-12 7:09 ` [PATCH 2/2] fix http auth " Jeff King
2012-04-12 22:50 ` Junio C Hamano
2012-04-13 6:16 ` Jeff King
2012-04-13 6:18 ` [PATCH 1/2] http: clean up leak in init_curl_http_auth Jeff King
2012-04-13 6:19 ` [PATCH 2/2] http: use newer curl options for setting credentials Jeff King
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=1334051620-18044-3-git-send-email-drizzd@aon.at \
--to=drizzd@aon.at \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).