зеркало из https://github.com/microsoft/git.git
Merge branch 'gc/http-with-non-ascii-username-url' into maint
* gc/http-with-non-ascii-username-url: Fix username and password extraction from HTTP URLs t5550: test HTTP authentication and userinfo decoding Conflicts: t/lib-httpd/apache.conf
This commit is contained in:
Коммит
187b259dce
12
http.c
12
http.c
|
@ -2,6 +2,7 @@
|
|||
#include "pack.h"
|
||||
#include "sideband.h"
|
||||
#include "run-command.h"
|
||||
#include "url.h"
|
||||
|
||||
int data_received;
|
||||
int active_requests;
|
||||
|
@ -302,7 +303,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, "://");
|
||||
|
@ -327,16 +328,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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -75,12 +75,14 @@ fi
|
|||
|
||||
prepare_httpd() {
|
||||
mkdir -p "$HTTPD_DOCUMENT_ROOT_PATH"
|
||||
cp "$TEST_PATH"/passwd "$HTTPD_ROOT_PATH"
|
||||
|
||||
ln -s "$LIB_HTTPD_MODULE_PATH" "$HTTPD_ROOT_PATH/modules"
|
||||
|
||||
if test -n "$LIB_HTTPD_SSL"
|
||||
then
|
||||
HTTPD_URL=https://127.0.0.1:$LIB_HTTPD_PORT
|
||||
AUTH_HTTPD_URL=https://user%40host:user%40host@127.0.0.1:$LIB_HTTPD_PORT
|
||||
|
||||
RANDFILE_PATH="$HTTPD_ROOT_PATH"/.rnd openssl req \
|
||||
-config "$TEST_PATH/ssl.cnf" \
|
||||
|
@ -92,6 +94,7 @@ prepare_httpd() {
|
|||
HTTPD_PARA="$HTTPD_PARA -DSSL"
|
||||
else
|
||||
HTTPD_URL=http://127.0.0.1:$LIB_HTTPD_PORT
|
||||
AUTH_HTTPD_URL=http://user%40host:user%40host@127.0.0.1:$LIB_HTTPD_PORT
|
||||
fi
|
||||
|
||||
if test -n "$LIB_HTTPD_DAV" -o -n "$LIB_HTTPD_SVN"
|
||||
|
|
|
@ -20,8 +20,30 @@ ErrorLog error.log
|
|||
<IfModule !mod_rewrite.c>
|
||||
LoadModule rewrite_module modules/mod_rewrite.so
|
||||
</IFModule>
|
||||
<IfModule !mod_version.c>
|
||||
LoadModule version_module modules/mod_version.so
|
||||
</IfModule>
|
||||
|
||||
<IfVersion < 2.1>
|
||||
<IfModule !mod_auth.c>
|
||||
LoadModule auth_module modules/mod_auth.so
|
||||
</IfModule>
|
||||
</IfVersion>
|
||||
|
||||
<IfVersion >= 2.1>
|
||||
<IfModule !mod_auth_basic.c>
|
||||
LoadModule auth_basic_module modules/mod_auth_basic.so
|
||||
</IfModule>
|
||||
<IfModule !mod_authn_file.c>
|
||||
LoadModule authn_file_module modules/mod_authn_file.so
|
||||
</IfModule>
|
||||
<IfModule !mod_authz_user.c>
|
||||
LoadModule authz_user_module modules/mod_authz_user.so
|
||||
</IfModule>
|
||||
</IfVersion>
|
||||
|
||||
Alias /dumb/ www/
|
||||
Alias /auth/ www/auth/
|
||||
|
||||
<Location /smart/>
|
||||
SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
|
||||
|
@ -55,6 +77,13 @@ SSLMutex file:ssl_mutex
|
|||
SSLEngine On
|
||||
</IfDefine>
|
||||
|
||||
<Location /auth/>
|
||||
AuthType Basic
|
||||
AuthName "git-auth"
|
||||
AuthUserFile passwd
|
||||
Require valid-user
|
||||
</Location>
|
||||
|
||||
<IfDefine DAV>
|
||||
LoadModule dav_module modules/mod_dav.so
|
||||
LoadModule dav_fs_module modules/mod_dav_fs.so
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
user@host:nKpa8pZUHx/ic
|
|
@ -34,6 +34,13 @@ test_expect_success 'clone http repository' '
|
|||
test_cmp file clone/file
|
||||
'
|
||||
|
||||
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 &&
|
||||
test_cmp file clone-auth/file
|
||||
'
|
||||
|
||||
test_expect_success 'fetch changes via http' '
|
||||
echo content >>file &&
|
||||
git commit -a -m two &&
|
||||
|
|
Загрузка…
Ссылка в новой задаче