diff options
author | Gabriel Corona <gabriel.corona@enst-bretagne.fr> | 2010-11-14 02:51:15 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-11-17 13:07:43 -0800 |
commit | f39f72d8cf03b61407f64460eba3357ec532280e (patch) | |
tree | 5b529f01b42a0ba2755dc37c09eec1d2ab187375 | |
parent | t5550: test HTTP authentication and userinfo decoding (diff) | |
download | tgif-f39f72d8cf03b61407f64460eba3357ec532280e.tar.xz |
Fix username and password extraction from HTTP URLs
Change the authentification initialisation to percent-decode username
and password for HTTP URLs.
Signed-off-by: Gabriel Corona <gabriel.corona@enst-bretagne.fr>
Acked-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | http.c | 12 | ||||
-rwxr-xr-x | t/t5550-http-fetch.sh | 2 |
2 files changed, 12 insertions, 2 deletions
@@ -2,6 +2,7 @@ #include "pack.h" #include "sideband.h" #include "run-command.h" +#include "url.h" int data_received; int active_requests; @@ -297,7 +298,7 @@ static CURL *get_curl_handle(void) static void http_auth_init(const char *url) { - char *at, *colon, *cp, *slash; + char *at, *colon, *cp, *slash, *decoded; int len; cp = strstr(url, "://"); @@ -322,16 +323,25 @@ static void http_auth_init(const char *url) user_name = xmalloc(len + 1); memcpy(user_name, cp, len); user_name[len] = '\0'; + decoded = url_decode(user_name); + free(user_name); + user_name = decoded; user_pass = NULL; } else { len = colon - cp; user_name = xmalloc(len + 1); memcpy(user_name, cp, len); user_name[len] = '\0'; + decoded = url_decode(user_name); + free(user_name); + user_name = decoded; len = at - (colon + 1); user_pass = xmalloc(len + 1); memcpy(user_pass, colon + 1, len); user_pass[len] = '\0'; + decoded = url_decode(user_pass); + free(user_pass); + user_pass = decoded; } } diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh index a0564deaae..8c2ac353b7 100755 --- a/t/t5550-http-fetch.sh +++ b/t/t5550-http-fetch.sh @@ -34,7 +34,7 @@ test_expect_success 'clone http repository' ' test_cmp file clone/file ' -test_expect_failure 'clone http repository with authentication' ' +test_expect_success 'clone http repository with authentication' ' mkdir "$HTTPD_DOCUMENT_ROOT_PATH/auth/" && cp -Rf "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" "$HTTPD_DOCUMENT_ROOT_PATH/auth/repo.git" && git clone $AUTH_HTTPD_URL/auth/repo.git clone-auth && |