From 5a9681f46aa9e152f32e76d7ade9d4c11313f99a Mon Sep 17 00:00:00 2001 From: Clemens Buchacher Date: Tue, 10 Apr 2012 11:53:39 +0200 Subject: http auth fails with multiple curl handles Create a repo with multiple loose objects in order to demonstrate http authentication breakage. Signed-off-by: Clemens Buchacher Signed-off-by: Junio C Hamano --- t/t5550-http-fetch.sh | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 't') diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh index e5e6b8f643..1d9ff1e0aa 100755 --- a/t/t5550-http-fetch.sh +++ b/t/t5550-http-fetch.sh @@ -13,17 +13,22 @@ LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5550'} start_httpd test_expect_success 'setup repository' ' - echo content >file && + echo content1 >file && git add file && git commit -m one + echo content2 >file && + git add file && + git commit -m two ' -test_expect_success 'create http-accessible bare repository' ' - mkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && +test_expect_success 'create http-accessible bare repository with loose objects' ' + cp -a .git "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - git --bare init && + git config core.bare true && + mkdir -p hooks && echo "exec git update-server-info" >hooks/post-update && - chmod +x hooks/post-update + chmod +x hooks/post-update && + hooks/post-update ) && git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && git push public master:master @@ -87,21 +92,21 @@ test_expect_success 'http auth can use user/pass in URL' ' expect_askpass none ' -test_expect_success 'http auth can use just user in URL' ' +test_expect_failure '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_success 'http auth can request both user and pass' ' +test_expect_failure '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_success 'http auth respects credential helper config' ' +test_expect_failure 'http auth respects credential helper config' ' test_config_global credential.helper "!f() { cat >/dev/null echo username=user@host @@ -113,7 +118,7 @@ test_expect_success 'http auth respects credential helper config' ' expect_askpass none ' -test_expect_success 'http auth can get username from config' ' +test_expect_failure 'http auth can get username from config' ' test_config_global "credential.$HTTPD_URL.username" user@host && >askpass-query && echo user@host >askpass-response && @@ -121,7 +126,7 @@ test_expect_success 'http auth can get username from config' ' expect_askpass pass user@host ' -test_expect_success 'configured username does not override URL' ' +test_expect_failure 'configured username does not override URL' ' test_config_global "credential.$HTTPD_URL.username" wrong && >askpass-query && echo user@host >askpass-response && -- cgit v1.2.3 From dfa1725a3ec57098637b698ffc2b2e2459acc518 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Tue, 10 Apr 2012 11:53:40 +0200 Subject: fix http auth with multiple curl handles 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 Signed-off-by: Junio C Hamano --- t/t5550-http-fetch.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 't') diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh index 1d9ff1e0aa..b06f817af3 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 && -- cgit v1.2.3