| #!/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_success 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 | |
| ) | |
| ' | |
| # this MUST be always the last test | |
| test_expect_success SUDO 'cleanup' ' | |
| sudo rm -rf root | |
| ' | |
| test_done |