From 8b2bd7cdacf71260dbc954316af2bed8e076c182 Mon Sep 17 00:00:00 2001 From: Tarmigan Casebolt Date: Mon, 28 Dec 2009 16:49:00 -0500 Subject: Smart-http: check if repository is OK to export before serving it Similar to how git-daemon checks whether a repository is OK to be exported, smart-http should also check. This check can be satisfied in two different ways: the environmental variable GIT_HTTP_EXPORT_ALL may be set to export all repositories, or the individual repository may have the file git-daemon-export-ok. Acked-by: Shawn O. Pearce Signed-off-by: Tarmigan Casebolt Signed-off-by: Junio C Hamano --- Documentation/git-http-backend.txt | 10 ++++++++++ http-backend.c | 3 +++ t/lib-httpd/apache.conf | 5 +++++ t/t5560-http-backend.sh | 39 ++++++++++++++++++++++++++++++++++++-- 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/Documentation/git-http-backend.txt b/Documentation/git-http-backend.txt index 67aec067c8..c8fe08a0c4 100644 --- a/Documentation/git-http-backend.txt +++ b/Documentation/git-http-backend.txt @@ -18,6 +18,11 @@ The program supports clients fetching using both the smart HTTP protcol and the backwards-compatible dumb HTTP protocol, as well as clients pushing using the smart HTTP protocol. +It verifies that the directory has the magic file +"git-daemon-export-ok", and it will refuse to export any git directory +that hasn't explicitly been marked for export this way (unless the +GIT_HTTP_EXPORT_ALL environmental variable is set). + By default, only the `upload-pack` service is enabled, which serves 'git-fetch-pack' and 'git-ls-remote' clients, which are invoked from 'git-fetch', 'git-pull', and 'git-clone'. If the client is authenticated, @@ -70,6 +75,7 @@ Apache 2.x:: + ---------------------------------------------------------------- SetEnv GIT_PROJECT_ROOT /var/www/git +SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/ ---------------------------------------------------------------- + @@ -157,6 +163,10 @@ by the invoking web server, including: * QUERY_STRING * REQUEST_METHOD +The GIT_HTTP_EXPORT_ALL environmental variable may be passed to +'git-http-backend' to bypass the check for the "git-daemon-export-ok" +file in each repository before allowing export of that repository. + The backend process sets GIT_COMMITTER_NAME to '$REMOTE_USER' and GIT_COMMITTER_EMAIL to '$\{REMOTE_USER}@http.$\{REMOTE_ADDR\}', ensuring that any reflogs created by 'git-receive-pack' contain some diff --git a/http-backend.c b/http-backend.c index f729488fc5..345c12b790 100644 --- a/http-backend.c +++ b/http-backend.c @@ -648,6 +648,9 @@ int main(int argc, char **argv) setup_path(); if (!enter_repo(dir, 0)) not_found("Not a git repository: '%s'", dir); + if (!getenv("GIT_HTTP_EXPORT_ALL") && + access("git-daemon-export-ok", F_OK) ) + not_found("Repository not exported: '%s'", dir); git_config(http_config, NULL); cmd->imp(cmd_arg); diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf index 0fe3fd0d01..4961505d1d 100644 --- a/t/lib-httpd/apache.conf +++ b/t/lib-httpd/apache.conf @@ -22,8 +22,13 @@ Alias /dumb/ www/ SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} + SetEnv GIT_HTTP_EXPORT_ALL + + + SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} ScriptAlias /smart/ ${GIT_EXEC_PATH}/git-http-backend/ +ScriptAlias /smart_noexport/ ${GIT_EXEC_PATH}/git-http-backend/ Options None diff --git a/t/t5560-http-backend.sh b/t/t5560-http-backend.sh index ed034bc980..604ff4fe9d 100755 --- a/t/t5560-http-backend.sh +++ b/t/t5560-http-backend.sh @@ -23,7 +23,7 @@ config() { } GET() { - curl --include "$HTTPD_URL/smart/repo.git/$1" >out 2>/dev/null && + curl --include "$HTTPD_URL/$SMART/repo.git/$1" >out 2>/dev/null && tr '\015' Q Date: Sat, 2 Jan 2010 13:38:05 -0800 Subject: Smart-http tests: Improve coverage in test t5560 Commit 34b6cb8bb ("http-backend: Protect GIT_PROJECT_ROOT from /../ requests") added the path_info helper function to test t5560 but did not use it. We should use it as it provides another level of error checking. The /etc/.../passwd case is one that is not special (and the test fails for reasons other than being aliased), so we remove that test case. Also rename the function from 'path_info' to 'expect_aliased'. Acked-by: Shawn O. Pearce Signed-off-by: Tarmigan Casebolt Signed-off-by: Junio C Hamano --- t/t5560-http-backend.sh | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/t/t5560-http-backend.sh b/t/t5560-http-backend.sh index 604ff4fe9d..415a3683d4 100755 --- a/t/t5560-http-backend.sh +++ b/t/t5560-http-backend.sh @@ -162,15 +162,15 @@ test_expect_success 'http.receivepack false' ' run_backend() { REQUEST_METHOD=GET \ GIT_PROJECT_ROOT="$HTTPD_DOCUMENT_ROOT_PATH" \ - PATH_INFO="$2" \ + PATH_INFO="$1" \ git http-backend >act.out 2>act.err } -path_info() { +expect_aliased() { if test $1 = 0; then run_backend "$2" else - test_must_fail run_backend "$2" && + run_backend "$2" && echo "fatal: '$2': aliased" >exp.err && test_cmp exp.err act.err fi @@ -179,15 +179,14 @@ path_info() { test_expect_success 'http-backend blocks bad PATH_INFO' ' config http.getanyfile true && - run_backend 0 /repo.git/HEAD && + expect_aliased 0 /repo.git/HEAD && - run_backend 1 /repo.git/../HEAD && - run_backend 1 /../etc/passwd && - run_backend 1 ../etc/passwd && - run_backend 1 /etc//passwd && - run_backend 1 /etc/./passwd && - run_backend 1 /etc/.../passwd && - run_backend 1 //domain/data.txt + expect_aliased 1 /repo.git/../HEAD && + expect_aliased 1 /../etc/passwd && + expect_aliased 1 ../etc/passwd && + expect_aliased 1 /etc//passwd && + expect_aliased 1 /etc/./passwd && + expect_aliased 1 //domain/data.txt ' cat >exp < Date: Sat, 2 Jan 2010 13:38:06 -0800 Subject: Smart-http tests: Break test t5560-http-backend into pieces This should introduce no functional change in the tests or the amount of test coverage. Acked-by: Shawn O. Pearce Signed-off-by: Tarmigan Casebolt Signed-off-by: Junio C Hamano --- t/t5560-http-backend-noserver.sh | 52 +++++++ t/t5560-http-backend.sh | 294 --------------------------------------- t/t5561-http-backend.sh | 149 ++++++++++++++++++++ t/t556x_common | 119 ++++++++++++++++ 4 files changed, 320 insertions(+), 294 deletions(-) create mode 100755 t/t5560-http-backend-noserver.sh delete mode 100755 t/t5560-http-backend.sh create mode 100755 t/t5561-http-backend.sh create mode 100755 t/t556x_common diff --git a/t/t5560-http-backend-noserver.sh b/t/t5560-http-backend-noserver.sh new file mode 100755 index 0000000000..a9ba2d9aae --- /dev/null +++ b/t/t5560-http-backend-noserver.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +test_description='test git-http-backend-noserver' +. ./test-lib.sh + +HTTPD_DOCUMENT_ROOT_PATH="$TRASH_DIRECTORY" + +run_backend() { + REQUEST_METHOD=GET \ + GIT_PROJECT_ROOT="$HTTPD_DOCUMENT_ROOT_PATH" \ + PATH_INFO="$1" \ + git http-backend >act.out 2>act.err +} + +GET() { + return 0 +} + +POST() { + return 0 +} + +log_div() { + return 0 +} + +. "$TEST_DIRECTORY"/t556x_common + +expect_aliased() { + if test $1 = 0; then + run_backend "$2" + else + run_backend "$2" && + echo "fatal: '$2': aliased" >exp.err && + test_cmp exp.err act.err + fi +} + +test_expect_success 'http-backend blocks bad PATH_INFO' ' + config http.getanyfile true && + + expect_aliased 0 /repo.git/HEAD && + + expect_aliased 1 /repo.git/../HEAD && + expect_aliased 1 /../etc/passwd && + expect_aliased 1 ../etc/passwd && + expect_aliased 1 /etc//passwd && + expect_aliased 1 /etc/./passwd && + expect_aliased 1 //domain/data.txt +' + +test_done diff --git a/t/t5560-http-backend.sh b/t/t5560-http-backend.sh deleted file mode 100755 index 415a3683d4..0000000000 --- a/t/t5560-http-backend.sh +++ /dev/null @@ -1,294 +0,0 @@ -#!/bin/sh - -test_description='test git-http-backend' -. ./test-lib.sh - -if test -n "$NO_CURL"; then - say 'skipping test, git built without http support' - test_done -fi - -LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5560'} -. "$TEST_DIRECTORY"/lib-httpd.sh -start_httpd - -find_file() { - cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - find $1 -type f | - sed -e 1q -} - -config() { - git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" config $1 $2 -} - -GET() { - curl --include "$HTTPD_URL/$SMART/repo.git/$1" >out 2>/dev/null && - tr '\015' Q act && - echo "HTTP/1.1 $2" >exp && - test_cmp exp act -} - -POST() { - curl --include --data "$2" \ - --header "Content-Type: application/x-$1-request" \ - "$HTTPD_URL/smart/repo.git/$1" >out 2>/dev/null && - tr '\015' Q act && - echo "HTTP/1.1 $3" >exp && - test_cmp exp act -} - -log_div() { - echo >>"$HTTPD_ROOT_PATH"/access.log - echo "### $1" >>"$HTTPD_ROOT_PATH"/access.log - echo "###" >>"$HTTPD_ROOT_PATH"/access.log -} - -test_expect_success 'setup repository' ' - echo content >file && - git add file && - git commit -m one && - - mkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - git --bare init && - : >objects/info/alternates && - : >objects/info/http-alternates - ) && - git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - git push public master:master && - - (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - git repack -a -d - ) && - - echo other >file && - git add file && - git commit -m two && - git push public master:master && - - LOOSE_URL=$(find_file objects/??) && - PACK_URL=$(find_file objects/pack/*.pack) && - IDX_URL=$(find_file objects/pack/*.idx) -' - -get_static_files() { - GET HEAD "$1" && - GET info/refs "$1" && - GET objects/info/packs "$1" && - GET objects/info/alternates "$1" && - GET objects/info/http-alternates "$1" && - GET $LOOSE_URL "$1" && - GET $PACK_URL "$1" && - GET $IDX_URL "$1" -} - -SMART=smart -test_expect_success 'direct refs/heads/master not found' ' - log_div "refs/heads/master" - GET refs/heads/master "404 Not Found" -' -test_expect_success 'static file is ok' ' - log_div "getanyfile default" - get_static_files "200 OK" -' -SMART=smart_noexport -test_expect_success 'no export by default' ' - log_div "no git-daemon-export-ok" - get_static_files "404 Not Found" -' -test_expect_success 'export if git-daemon-export-ok' ' - log_div "git-daemon-export-ok" - (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - touch git-daemon-export-ok - ) && - get_static_files "200 OK" -' -SMART=smart -test_expect_success 'static file if http.getanyfile true is ok' ' - log_div "getanyfile true" - config http.getanyfile true && - get_static_files "200 OK" -' -test_expect_success 'static file if http.getanyfile false fails' ' - log_div "getanyfile false" - config http.getanyfile false && - get_static_files "403 Forbidden" -' - -test_expect_success 'http.uploadpack default enabled' ' - log_div "uploadpack default" - GET info/refs?service=git-upload-pack "200 OK" && - POST git-upload-pack 0000 "200 OK" -' -test_expect_success 'http.uploadpack true' ' - log_div "uploadpack true" - config http.uploadpack true && - GET info/refs?service=git-upload-pack "200 OK" && - POST git-upload-pack 0000 "200 OK" -' -test_expect_success 'http.uploadpack false' ' - log_div "uploadpack false" - config http.uploadpack false && - GET info/refs?service=git-upload-pack "403 Forbidden" && - POST git-upload-pack 0000 "403 Forbidden" -' - -test_expect_success 'http.receivepack default disabled' ' - log_div "receivepack default" - GET info/refs?service=git-receive-pack "403 Forbidden" && - POST git-receive-pack 0000 "403 Forbidden" -' -test_expect_success 'http.receivepack true' ' - log_div "receivepack true" - config http.receivepack true && - GET info/refs?service=git-receive-pack "200 OK" && - POST git-receive-pack 0000 "200 OK" -' -test_expect_success 'http.receivepack false' ' - log_div "receivepack false" - config http.receivepack false && - GET info/refs?service=git-receive-pack "403 Forbidden" && - POST git-receive-pack 0000 "403 Forbidden" -' -run_backend() { - REQUEST_METHOD=GET \ - GIT_PROJECT_ROOT="$HTTPD_DOCUMENT_ROOT_PATH" \ - PATH_INFO="$1" \ - git http-backend >act.out 2>act.err -} - -expect_aliased() { - if test $1 = 0; then - run_backend "$2" - else - run_backend "$2" && - echo "fatal: '$2': aliased" >exp.err && - test_cmp exp.err act.err - fi -} - -test_expect_success 'http-backend blocks bad PATH_INFO' ' - config http.getanyfile true && - - expect_aliased 0 /repo.git/HEAD && - - expect_aliased 1 /repo.git/../HEAD && - expect_aliased 1 /../etc/passwd && - expect_aliased 1 ../etc/passwd && - expect_aliased 1 /etc//passwd && - expect_aliased 1 /etc/./passwd && - expect_aliased 1 //domain/data.txt -' - -cat >exp <act <"$HTTPD_ROOT_PATH"/access.log && - test_cmp exp act -' - -stop_httpd -test_done diff --git a/t/t5561-http-backend.sh b/t/t5561-http-backend.sh new file mode 100755 index 0000000000..8c6d0b2f20 --- /dev/null +++ b/t/t5561-http-backend.sh @@ -0,0 +1,149 @@ +#!/bin/sh + +test_description='test git-http-backend' +. ./test-lib.sh + +if test -n "$NO_CURL"; then + say 'skipping test, git built without http support' + test_done +fi + +LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5561'} +. "$TEST_DIRECTORY"/lib-httpd.sh +start_httpd + +GET() { + curl --include "$HTTPD_URL/$SMART/repo.git/$1" >out 2>/dev/null && + tr '\015' Q act && + echo "HTTP/1.1 $2" >exp && + test_cmp exp act +} + +POST() { + curl --include --data "$2" \ + --header "Content-Type: application/x-$1-request" \ + "$HTTPD_URL/smart/repo.git/$1" >out 2>/dev/null && + tr '\015' Q act && + echo "HTTP/1.1 $3" >exp && + test_cmp exp act +} + +log_div() { + echo >>"$HTTPD_ROOT_PATH"/access.log + echo "### $1" >>"$HTTPD_ROOT_PATH"/access.log + echo "###" >>"$HTTPD_ROOT_PATH"/access.log +} + +. "$TEST_DIRECTORY"/t556x_common + +cat >exp <act <"$HTTPD_ROOT_PATH"/access.log && + test_cmp exp act +' + +stop_httpd +test_done diff --git a/t/t556x_common b/t/t556x_common new file mode 100755 index 0000000000..1b4921c878 --- /dev/null +++ b/t/t556x_common @@ -0,0 +1,119 @@ +#!/bin/sh + +find_file() { + cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && + find $1 -type f | + sed -e 1q +} + +config() { + git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" config $1 $2 +} + +test_expect_success 'setup repository' ' + echo content >file && + git add file && + git commit -m one && + + mkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && + (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && + git --bare init && + : >objects/info/alternates && + : >objects/info/http-alternates + ) && + git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && + git push public master:master && + + (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && + git repack -a -d + ) && + + echo other >file && + git add file && + git commit -m two && + git push public master:master && + + LOOSE_URL=$(find_file objects/??) && + PACK_URL=$(find_file objects/pack/*.pack) && + IDX_URL=$(find_file objects/pack/*.idx) +' + +get_static_files() { + GET HEAD "$1" && + GET info/refs "$1" && + GET objects/info/packs "$1" && + GET objects/info/alternates "$1" && + GET objects/info/http-alternates "$1" && + GET $LOOSE_URL "$1" && + GET $PACK_URL "$1" && + GET $IDX_URL "$1" +} + +SMART=smart +test_expect_success 'direct refs/heads/master not found' ' + log_div "refs/heads/master" + GET refs/heads/master "404 Not Found" +' +test_expect_success 'static file is ok' ' + log_div "getanyfile default" + get_static_files "200 OK" +' +SMART=smart_noexport +test_expect_success 'no export by default' ' + log_div "no git-daemon-export-ok" + get_static_files "404 Not Found" +' +test_expect_success 'export if git-daemon-export-ok' ' + log_div "git-daemon-export-ok" + (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && + touch git-daemon-export-ok + ) && + get_static_files "200 OK" +' +SMART=smart +test_expect_success 'static file if http.getanyfile true is ok' ' + log_div "getanyfile true" + config http.getanyfile true && + get_static_files "200 OK" +' +test_expect_success 'static file if http.getanyfile false fails' ' + log_div "getanyfile false" + config http.getanyfile false && + get_static_files "403 Forbidden" +' + +test_expect_success 'http.uploadpack default enabled' ' + log_div "uploadpack default" + GET info/refs?service=git-upload-pack "200 OK" && + POST git-upload-pack 0000 "200 OK" +' +test_expect_success 'http.uploadpack true' ' + log_div "uploadpack true" + config http.uploadpack true && + GET info/refs?service=git-upload-pack "200 OK" && + POST git-upload-pack 0000 "200 OK" +' +test_expect_success 'http.uploadpack false' ' + log_div "uploadpack false" + config http.uploadpack false && + GET info/refs?service=git-upload-pack "403 Forbidden" && + POST git-upload-pack 0000 "403 Forbidden" +' + +test_expect_success 'http.receivepack default disabled' ' + log_div "receivepack default" + GET info/refs?service=git-receive-pack "403 Forbidden" && + POST git-receive-pack 0000 "403 Forbidden" +' +test_expect_success 'http.receivepack true' ' + log_div "receivepack true" + config http.receivepack true && + GET info/refs?service=git-receive-pack "200 OK" && + POST git-receive-pack 0000 "200 OK" +' +test_expect_success 'http.receivepack false' ' + log_div "receivepack false" + config http.receivepack false && + GET info/refs?service=git-receive-pack "403 Forbidden" && + POST git-receive-pack 0000 "403 Forbidden" +' -- cgit v1.2.1 From fd0a8c2e6428acb883bf4707de54b3e026c57455 Mon Sep 17 00:00:00 2001 From: Tarmigan Casebolt Date: Sat, 2 Jan 2010 13:43:59 -0800 Subject: Smart-http tests: Test http-backend without curl or a webserver This reuses many of the tests from the old t5560 but runs those tests without curl or a webserver. This will hopefully increase the testing coverage for http-backend because it does not require users to set GIT_TEST_HTTPD. Signed-off-by: Tarmigan Casebolt Signed-off-by: Junio C Hamano --- t/t5560-http-backend-noserver.sh | 28 ++++++++++++++++++++++------ t/t556x_common | 3 +++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/t/t5560-http-backend-noserver.sh b/t/t5560-http-backend-noserver.sh index a9ba2d9aae..5f8c88e261 100755 --- a/t/t5560-http-backend-noserver.sh +++ b/t/t5560-http-backend-noserver.sh @@ -6,18 +6,34 @@ test_description='test git-http-backend-noserver' HTTPD_DOCUMENT_ROOT_PATH="$TRASH_DIRECTORY" run_backend() { - REQUEST_METHOD=GET \ + echo "$2" | + QUERY_STRING="${1#*\?}" \ GIT_PROJECT_ROOT="$HTTPD_DOCUMENT_ROOT_PATH" \ - PATH_INFO="$1" \ + PATH_INFO="${1%%\?*}" \ git http-backend >act.out 2>act.err } GET() { - return 0 + REQUEST_METHOD="GET" \ + run_backend "/repo.git/$1" && + if ! grep "Status" act.out >act + then + printf "Status: 200 OK\r\n" >act + fi + printf "Status: $2\r\n" >exp && + test_cmp exp act } POST() { - return 0 + REQUEST_METHOD="POST" \ + CONTENT_TYPE="application/x-$1-request" \ + run_backend "/repo.git/$1" "$2" && + if ! grep "Status" act.out >act + then + printf "Status: 200 OK\r\n" >act + fi + printf "Status: $3\r\n" >exp && + test_cmp exp act } log_div() { @@ -28,9 +44,9 @@ log_div() { expect_aliased() { if test $1 = 0; then - run_backend "$2" + REQUEST_METHOD=GET run_backend "$2" else - run_backend "$2" && + REQUEST_METHOD=GET run_backend "$2" && echo "fatal: '$2': aliased" >exp.err && test_cmp exp.err act.err fi diff --git a/t/t556x_common b/t/t556x_common index 1b4921c878..be024e551c 100755 --- a/t/t556x_common +++ b/t/t556x_common @@ -50,6 +50,7 @@ get_static_files() { } SMART=smart +export GIT_HTTP_EXPORT_ALL=1 test_expect_success 'direct refs/heads/master not found' ' log_div "refs/heads/master" GET refs/heads/master "404 Not Found" @@ -59,6 +60,7 @@ test_expect_success 'static file is ok' ' get_static_files "200 OK" ' SMART=smart_noexport +unset GIT_HTTP_EXPORT_ALL test_expect_success 'no export by default' ' log_div "no git-daemon-export-ok" get_static_files "404 Not Found" @@ -71,6 +73,7 @@ test_expect_success 'export if git-daemon-export-ok' ' get_static_files "200 OK" ' SMART=smart +export GIT_HTTP_EXPORT_ALL=1 test_expect_success 'static file if http.getanyfile true is ok' ' log_div "getanyfile true" config http.getanyfile true && -- cgit v1.2.1 From e8189ee90e65094dd46a9e4ee6455d9efa90fa76 Mon Sep 17 00:00:00 2001 From: Tarmigan Casebolt Date: Thu, 14 Jan 2010 22:44:02 -0800 Subject: Test t5560: Fix test when run with dash A command invocation preceded by variable assignments, i.e. VAR1=VAL1 VAR2=VAL2 ... command args are implemented by dash and ksh in such a way not to export these variables, and keep the values after the command finishes, when the command is a shell function. POSIX.1 "2.9.5 Function Definition Command" specifies this behaviour. Many shells however treat this construct the same way as they are calling external commands. They export the variables during the duration of command, and resets their values after command returns. The test relied on the behaviour of the latter kind. Reported-by: Michael Haggerty Signed-off-by: Tarmigan Casebolt Signed-off-by: Junio C Hamano --- t/t5560-http-backend-noserver.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/t/t5560-http-backend-noserver.sh b/t/t5560-http-backend-noserver.sh index 5f8c88e261..44885b850c 100755 --- a/t/t5560-http-backend-noserver.sh +++ b/t/t5560-http-backend-noserver.sh @@ -14,8 +14,9 @@ run_backend() { } GET() { - REQUEST_METHOD="GET" \ + export REQUEST_METHOD="GET" && run_backend "/repo.git/$1" && + unset REQUEST_METHOD && if ! grep "Status" act.out >act then printf "Status: 200 OK\r\n" >act @@ -25,9 +26,11 @@ GET() { } POST() { - REQUEST_METHOD="POST" \ - CONTENT_TYPE="application/x-$1-request" \ + export REQUEST_METHOD="POST" && + export CONTENT_TYPE="application/x-$1-request" && run_backend "/repo.git/$1" "$2" && + unset REQUEST_METHOD && + unset CONTENT_TYPE && if ! grep "Status" act.out >act then printf "Status: 200 OK\r\n" >act @@ -43,13 +46,15 @@ log_div() { . "$TEST_DIRECTORY"/t556x_common expect_aliased() { + export REQUEST_METHOD="GET" && if test $1 = 0; then - REQUEST_METHOD=GET run_backend "$2" + run_backend "$2" else - REQUEST_METHOD=GET run_backend "$2" && + run_backend "$2" && echo "fatal: '$2': aliased" >exp.err && test_cmp exp.err act.err fi + unset REQUEST_METHOD } test_expect_success 'http-backend blocks bad PATH_INFO' ' -- cgit v1.2.1