Skip to content

Commit

Permalink
Merge branch 'cb/http-multi-curl-auth' into maint
Browse files Browse the repository at this point in the history
HTTP transport that requires authentication did not work correctly when
multiple connections are used simultaneously.

By Jeff King (3) and Clemens Buchacher (1)
* cb/http-multi-curl-auth:
  http: use newer curl options for setting credentials
  http: clean up leak in init_curl_http_auth
  fix http auth with multiple curl handles
  http auth fails with multiple curl handles
  • Loading branch information
Junio C Hamano committed May 3, 2012
2 parents 66bca3f + 6f4c347 commit c968338
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 10 deletions.
21 changes: 16 additions & 5 deletions http.c
Original file line number Diff line number Diff line change
Expand Up @@ -210,14 +210,23 @@ static int http_options(const char *var, const char *value, void *cb)

static void init_curl_http_auth(CURL *result)
{
if (http_auth.username) {
struct strbuf up = STRBUF_INIT;
credential_fill(&http_auth);
if (!http_auth.username)
return;

credential_fill(&http_auth);

#if LIBCURL_VERSION_NUM >= 0x071301
curl_easy_setopt(result, CURLOPT_USERNAME, http_auth.username);
curl_easy_setopt(result, CURLOPT_PASSWORD, http_auth.password);
#else
{
static struct strbuf up = STRBUF_INIT;
strbuf_reset(&up);
strbuf_addf(&up, "%s:%s",
http_auth.username, http_auth.password);
curl_easy_setopt(result, CURLOPT_USERPWD,
strbuf_detach(&up, NULL));
curl_easy_setopt(result, CURLOPT_USERPWD, up.buf);
}
#endif
}

static int has_cert_password(void)
Expand Down Expand Up @@ -494,6 +503,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;
}
Expand Down
15 changes: 10 additions & 5 deletions t/t5550-http-fetch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit c968338

Please sign in to comment.