Browse Source
With a recent update to refuse access to repositories of other people by default, "sudo make install" and "sudo git describe" stopped working. This series intends to loosen it while keeping the safety. * cb/path-owner-check-with-sudo: t0034: add negative tests and allow git init to mostly work under sudo git-compat-util: avoid failing dir ownership checks if running privileged t: regression git needs safe.directory when using sudomaint

4 changed files with 186 additions and 1 deletions
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
# Helpers for running git commands under sudo. |
||||
|
||||
# Runs a scriplet passed through stdin under sudo. |
||||
run_with_sudo () { |
||||
local ret |
||||
local RUN="$TEST_DIRECTORY/$$.sh" |
||||
write_script "$RUN" "$TEST_SHELL_PATH" |
||||
# avoid calling "$RUN" directly so sudo doesn't get a chance to |
||||
# override the shell, add aditional restrictions or even reject |
||||
# running the script because its security policy deem it unsafe |
||||
sudo "$TEST_SHELL_PATH" -c "\"$RUN\"" |
||||
ret=$? |
||||
rm -f "$RUN" |
||||
return $ret |
||||
} |
@ -0,0 +1,106 @@
@@ -0,0 +1,106 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='verify safe.directory checks while running as root' |
||||
|
||||
. ./test-lib.sh |
||||
. "$TEST_DIRECTORY"/lib-sudo.sh |
||||
|
||||
if [ "$GIT_TEST_ALLOW_SUDO" != "YES" ] |
||||
then |
||||
skip_all="You must set env var GIT_TEST_ALLOW_SUDO=YES in order to run this test" |
||||
test_done |
||||
fi |
||||
|
||||
if ! test_have_prereq NOT_ROOT |
||||
then |
||||
skip_all="These tests do not support running as root" |
||||
test_done |
||||
fi |
||||
|
||||
test_lazy_prereq SUDO ' |
||||
sudo -n id -u >u && |
||||
id -u root >r && |
||||
test_cmp u r && |
||||
command -v git >u && |
||||
sudo command -v git >r && |
||||
test_cmp u r |
||||
' |
||||
|
||||
if ! test_have_prereq SUDO |
||||
then |
||||
skip_all="Your sudo/system configuration is either too strict or unsupported" |
||||
test_done |
||||
fi |
||||
|
||||
test_expect_success SUDO 'setup' ' |
||||
sudo rm -rf root && |
||||
mkdir -p root/r && |
||||
( |
||||
cd root/r && |
||||
git init |
||||
) |
||||
' |
||||
|
||||
test_expect_success SUDO 'sudo git status as original owner' ' |
||||
( |
||||
cd root/r && |
||||
git status && |
||||
sudo git status |
||||
) |
||||
' |
||||
|
||||
test_expect_success SUDO 'setup root owned repository' ' |
||||
sudo mkdir -p root/p && |
||||
sudo git init root/p |
||||
' |
||||
|
||||
test_expect_success 'cannot access if owned by root' ' |
||||
( |
||||
cd root/p && |
||||
test_must_fail git status |
||||
) |
||||
' |
||||
|
||||
test_expect_success 'can access if addressed explicitly' ' |
||||
( |
||||
cd root/p && |
||||
GIT_DIR=.git GIT_WORK_TREE=. git status |
||||
) |
||||
' |
||||
|
||||
test_expect_failure SUDO 'can access with sudo if root' ' |
||||
( |
||||
cd root/p && |
||||
sudo git status |
||||
) |
||||
' |
||||
|
||||
test_expect_success SUDO 'can access with sudo if root by removing SUDO_UID' ' |
||||
( |
||||
cd root/p && |
||||
run_with_sudo <<-END |
||||
unset SUDO_UID && |
||||
git status |
||||
END |
||||
) |
||||
' |
||||
|
||||
test_lazy_prereq SUDO_SUDO ' |
||||
sudo sudo id -u >u && |
||||
id -u root >r && |
||||
test_cmp u r |
||||
' |
||||
|
||||
test_expect_success SUDO_SUDO 'can access with sudo abusing SUDO_UID' ' |
||||
( |
||||
cd root/p && |
||||
sudo sudo git status |
||||
) |
||||
' |
||||
|
||||
# this MUST be always the last test |
||||
test_expect_success SUDO 'cleanup' ' |
||||
sudo rm -rf root |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue