Skip to content

Commit

Permalink
Merge branch 'bc/http-empty-auth'
Browse files Browse the repository at this point in the history
Some authentication methods do not need username or password, but
libcurl needs some hint that it needs to perform authentication.
Supplying an empty username and password string is a valid way to
do so, but you can set the http.[<url>.]emptyAuth configuration
variable to achieve the same, if you find it cleaner.

* bc/http-empty-auth:
  http: add option to try authentication without username
  • Loading branch information
Junio C Hamano committed Feb 24, 2016
2 parents 97c49af + 121061f commit 65ba75b
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
6 changes: 6 additions & 0 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1648,6 +1648,12 @@ http.proxyAuthMethod::
* `ntlm` - NTLM authentication (compare the --ntlm option of `curl(1)`)
--

http.emptyAuth::
Attempt authentication without seeking a username or password. This
can be used to attempt GSS-Negotiate authentication without specifying
a username in the URL, as libcurl normally requires a username for
authentication.

http.cookieFile::
File containing previously stored cookie lines which should be used
in the Git http session, if they match the server. The file format
Expand Down
13 changes: 11 additions & 2 deletions http.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ static int curl_save_cookies;
struct credential http_auth = CREDENTIAL_INIT;
static int http_proactive_auth;
static const char *user_agent;
static int curl_empty_auth;

#if LIBCURL_VERSION_NUM >= 0x071700
/* Use CURLOPT_KEYPASSWD as is */
Expand Down Expand Up @@ -304,14 +305,22 @@ static int http_options(const char *var, const char *value, void *cb)
if (!strcmp("http.useragent", var))
return git_config_string(&user_agent, var, value);

if (!strcmp("http.emptyauth", var)) {
curl_empty_auth = git_config_bool(var, value);
return 0;
}

/* Fall back on the default ones */
return git_default_config(var, value, cb);
}

static void init_curl_http_auth(CURL *result)
{
if (!http_auth.username)
if (!http_auth.username) {
if (curl_empty_auth)
curl_easy_setopt(result, CURLOPT_USERPWD, ":");
return;
}

credential_fill(&http_auth);

Expand Down Expand Up @@ -836,7 +845,7 @@ struct active_request_slot *get_active_slot(void)
#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
curl_easy_setopt(slot->curl, CURLOPT_HTTPAUTH, http_auth_methods);
#endif
if (http_auth.password)
if (http_auth.password || curl_empty_auth)
init_curl_http_auth(slot->curl);

return slot;
Expand Down

0 comments on commit 65ba75b

Please sign in to comment.