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