#!/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