Merge branch 'sc/http-late-auth'
* sc/http-late-auth: Prompt for a username when an HTTP request 401s
This commit is contained in:
commit
f350e1faaa
22
http.c
22
http.c
@ -815,7 +815,21 @@ static int http_request(const char *url, void *result, int target, int options)
|
|||||||
ret = HTTP_OK;
|
ret = HTTP_OK;
|
||||||
else if (missing_target(&results))
|
else if (missing_target(&results))
|
||||||
ret = HTTP_MISSING_TARGET;
|
ret = HTTP_MISSING_TARGET;
|
||||||
else
|
else if (results.http_code == 401) {
|
||||||
|
if (user_name) {
|
||||||
|
ret = HTTP_NOAUTH;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* git_getpass is needed here because its very likely stdin/stdout are
|
||||||
|
* pipes to our parent process. So we instead need to use /dev/tty,
|
||||||
|
* but that is non-portable. Using git_getpass() can at least be stubbed
|
||||||
|
* on other platforms with a different implementation if/when necessary.
|
||||||
|
*/
|
||||||
|
user_name = xstrdup(git_getpass("Username: "));
|
||||||
|
init_curl_http_auth(slot->curl);
|
||||||
|
ret = HTTP_REAUTH;
|
||||||
|
}
|
||||||
|
} else
|
||||||
ret = HTTP_ERROR;
|
ret = HTTP_ERROR;
|
||||||
} else {
|
} else {
|
||||||
error("Unable to start HTTP request for %s", url);
|
error("Unable to start HTTP request for %s", url);
|
||||||
@ -831,7 +845,11 @@ static int http_request(const char *url, void *result, int target, int options)
|
|||||||
|
|
||||||
int http_get_strbuf(const char *url, struct strbuf *result, int options)
|
int http_get_strbuf(const char *url, struct strbuf *result, int options)
|
||||||
{
|
{
|
||||||
return http_request(url, result, HTTP_REQUEST_STRBUF, options);
|
int http_ret = http_request(url, result, HTTP_REQUEST_STRBUF, options);
|
||||||
|
if (http_ret == HTTP_REAUTH) {
|
||||||
|
http_ret = http_request(url, result, HTTP_REQUEST_STRBUF, options);
|
||||||
|
}
|
||||||
|
return http_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
2
http.h
2
http.h
@ -126,6 +126,8 @@ extern char *get_remote_object_url(const char *url, const char *hex,
|
|||||||
#define HTTP_MISSING_TARGET 1
|
#define HTTP_MISSING_TARGET 1
|
||||||
#define HTTP_ERROR 2
|
#define HTTP_ERROR 2
|
||||||
#define HTTP_START_FAILED 3
|
#define HTTP_START_FAILED 3
|
||||||
|
#define HTTP_REAUTH 4
|
||||||
|
#define HTTP_NOAUTH 5
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Requests an url and stores the result in a strbuf.
|
* Requests an url and stores the result in a strbuf.
|
||||||
|
@ -132,6 +132,8 @@ static struct discovery* discover_refs(const char *service)
|
|||||||
case HTTP_MISSING_TARGET:
|
case HTTP_MISSING_TARGET:
|
||||||
die("%s not found: did you run git update-server-info on the"
|
die("%s not found: did you run git update-server-info on the"
|
||||||
" server?", refs_url);
|
" server?", refs_url);
|
||||||
|
case HTTP_NOAUTH:
|
||||||
|
die("Authentication failed");
|
||||||
default:
|
default:
|
||||||
http_error(refs_url, http_ret);
|
http_error(refs_url, http_ret);
|
||||||
die("HTTP request failed");
|
die("HTTP request failed");
|
||||||
|
Loading…
Reference in New Issue
Block a user