Merge branch 'bc/http-empty-auth'
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 usernamemaint
commit
65ba75ba7d
|
@ -1648,6 +1648,12 @@ http.proxyAuthMethod::
|
||||||
* `ntlm` - NTLM authentication (compare the --ntlm option of `curl(1)`)
|
* `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::
|
http.cookieFile::
|
||||||
File containing previously stored cookie lines which should be used
|
File containing previously stored cookie lines which should be used
|
||||||
in the Git http session, if they match the server. The file format
|
in the Git http session, if they match the server. The file format
|
||||||
|
|
13
http.c
13
http.c
|
@ -92,6 +92,7 @@ static int curl_save_cookies;
|
||||||
struct credential http_auth = CREDENTIAL_INIT;
|
struct credential http_auth = CREDENTIAL_INIT;
|
||||||
static int http_proactive_auth;
|
static int http_proactive_auth;
|
||||||
static const char *user_agent;
|
static const char *user_agent;
|
||||||
|
static int curl_empty_auth;
|
||||||
|
|
||||||
#if LIBCURL_VERSION_NUM >= 0x071700
|
#if LIBCURL_VERSION_NUM >= 0x071700
|
||||||
/* Use CURLOPT_KEYPASSWD as is */
|
/* Use CURLOPT_KEYPASSWD as is */
|
||||||
|
@ -304,14 +305,22 @@ static int http_options(const char *var, const char *value, void *cb)
|
||||||
if (!strcmp("http.useragent", var))
|
if (!strcmp("http.useragent", var))
|
||||||
return git_config_string(&user_agent, var, value);
|
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 */
|
/* Fall back on the default ones */
|
||||||
return git_default_config(var, value, cb);
|
return git_default_config(var, value, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_curl_http_auth(CURL *result)
|
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;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
credential_fill(&http_auth);
|
credential_fill(&http_auth);
|
||||||
|
|
||||||
|
@ -836,7 +845,7 @@ struct active_request_slot *get_active_slot(void)
|
||||||
#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
|
#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
|
||||||
curl_easy_setopt(slot->curl, CURLOPT_HTTPAUTH, http_auth_methods);
|
curl_easy_setopt(slot->curl, CURLOPT_HTTPAUTH, http_auth_methods);
|
||||||
#endif
|
#endif
|
||||||
if (http_auth.password)
|
if (http_auth.password || curl_empty_auth)
|
||||||
init_curl_http_auth(slot->curl);
|
init_curl_http_auth(slot->curl);
|
||||||
|
|
||||||
return slot;
|
return slot;
|
||||||
|
|
Loading…
Reference in New Issue