Skip to content

Commit

Permalink
t: test http access to "half-auth" repositories
Browse files Browse the repository at this point in the history
Some sites set up http access to repositories such that
fetching is anonymous and unauthenticated, but pushing is
authenticated. While there are multiple ways to do this, the
technique advertised in the git-http-backend manpage is to
block access to locations matching "/git-receive-pack$".

Let's emulate that advice in our test setup, which makes it
clear that this advice does not actually work.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Aug 27, 2012
1 parent 6ac2b3a commit 4c71009
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
7 changes: 7 additions & 0 deletions t/lib-httpd/apache.conf
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,13 @@ SSLEngine On
Require valid-user
</Location>

<LocationMatch "^/auth-push/.*/git-receive-pack$">
AuthType Basic
AuthName "git-auth"
AuthUserFile passwd
Require valid-user
</LocationMatch>

<IfDefine DAV>
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
Expand Down
12 changes: 12 additions & 0 deletions t/t5541-http-push.sh
Original file line number Diff line number Diff line change
Expand Up @@ -280,5 +280,17 @@ test_expect_success 'push over smart http with auth' '
test_cmp expect actual
'

test_expect_failure 'push to auth-only-for-push repo' '
cd "$ROOT_PATH/test_repo_clone" &&
echo push-half-auth >expect &&
test_commit push-half-auth &&
set_askpass user@host &&
git push "$HTTPD_URL"/auth-push/smart/test_repo.git &&
git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
log -1 --format=%s >actual &&
expect_askpass both user@host &&
test_cmp expect actual
'

stop_httpd
test_done
9 changes: 9 additions & 0 deletions t/t5551-http-fetch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,15 @@ test_expect_success 'clone from password-protected repository' '
test_cmp expect actual
'

test_expect_success 'clone from auth-only-for-push repository' '
echo two >expect &&
set_askpass wrong &&
git clone --bare "$HTTPD_URL/auth-push/smart/repo.git" smart-noauth &&
expect_askpass none &&
git --git-dir=smart-noauth log -1 --format=%s >actual &&
test_cmp expect actual
'

test -n "$GIT_TEST_LONG" && test_set_prereq EXPENSIVE

test_expect_success EXPENSIVE 'create 50,000 tags in the repo' '
Expand Down

0 comments on commit 4c71009

Please sign in to comment.