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