1#!/bin/sh 2 3test_description='test git-http-backend-noserver' 4GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 5export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 6 7. ./test-lib.sh 8 9HTTPD_DOCUMENT_ROOT_PATH="$TRASH_DIRECTORY" 10 11if test_have_prereq GREP_STRIPS_CR 12then 13 GREP_OPTIONS=-U 14 export GREP_OPTIONS 15fi 16 17run_backend() { 18 echo "$2" | 19 QUERY_STRING="${1#*[?]}" \ 20 PATH_TRANSLATED="$HTTPD_DOCUMENT_ROOT_PATH/${1%%[?]*}" \ 21 git http-backend >act.out 2>act.err 22} 23 24GET() { 25 REQUEST_METHOD="GET" && export REQUEST_METHOD && 26 run_backend "/repo.git/$1" && 27 sane_unset REQUEST_METHOD && 28 if ! grep "Status" act.out >act 29 then 30 printf "Status: 200 OK\r\n" >act 31 fi 32 printf "Status: $2\r\n" >exp && 33 test_cmp exp act 34} 35 36POST() { 37 REQUEST_METHOD="POST" && export REQUEST_METHOD && 38 CONTENT_TYPE="application/x-$1-request" && export CONTENT_TYPE && 39 run_backend "/repo.git/$1" "$2" && 40 sane_unset REQUEST_METHOD && 41 sane_unset CONTENT_TYPE && 42 if ! grep "Status" act.out >act 43 then 44 printf "Status: 200 OK\r\n" >act 45 fi 46 printf "Status: $3\r\n" >exp && 47 test_cmp exp act 48} 49 50. "$TEST_DIRECTORY"/t556x_common 51 52expect_aliased() { 53 REQUEST_METHOD="GET" && export REQUEST_METHOD && 54 if test $1 = 0; then 55 run_backend "$2" 56 else 57 run_backend "$2" && 58 echo "fatal: '$2': aliased" >exp.err && 59 test_cmp exp.err act.err 60 fi 61 unset REQUEST_METHOD 62} 63 64test_expect_success 'http-backend blocks bad PATH_INFO' ' 65 config http.getanyfile true && 66 67 expect_aliased 0 /repo.git/HEAD && 68 69 expect_aliased 1 /repo.git/../HEAD && 70 expect_aliased 1 /../etc/passwd && 71 expect_aliased 1 ../etc/passwd && 72 expect_aliased 1 /etc//passwd && 73 expect_aliased 1 /etc/./passwd && 74 expect_aliased 1 //domain/data.txt 75' 76 77test_done 78