2010-02-22 23:32:11 +01:00
|
|
|
#!/bin/sh
|
|
|
|
#
|
|
|
|
# Copyright (c) 2010 Matthieu Moy
|
|
|
|
#
|
|
|
|
|
|
|
|
test_description='Test repository with default ACL'
|
|
|
|
|
|
|
|
# Create the test repo with restrictive umask
|
|
|
|
# => this must come before . ./test-lib.sh
|
|
|
|
umask 077
|
|
|
|
|
tests: mark tests as passing with SANITIZE=leak
When the "ab/various-leak-fixes" topic was merged in [1] only t6021
would fail if the tests were run in the
"GIT_TEST_PASSING_SANITIZE_LEAK=check" mode, i.e. to check whether we
marked all leak-free tests with "TEST_PASSES_SANITIZE_LEAK=true".
Since then we've had various tests starting to pass under
SANITIZE=leak. Let's mark those as passing, this is when they started
to pass, narrowed down with "git bisect":
- t5317-pack-objects-filter-objects.sh: In
faebba436e6 (list-objects-filter: plug pattern_list leak, 2022-12-01).
- t3210-pack-refs.sh, t5613-info-alternate.sh,
t7403-submodule-sync.sh: In 189e97bc4ba (diff: remove parseopts member
from struct diff_options, 2022-12-01).
- t1408-packed-refs.sh: In ab91f6b7c42 (Merge branch
'rs/diff-parseopts', 2022-12-19).
- t0023-crlf-am.sh, t4152-am-subjects.sh, t4254-am-corrupt.sh,
t4256-am-format-flowed.sh, t4257-am-interactive.sh,
t5403-post-checkout-hook.sh: In a658e881c13 (am: don't pass strvec to
apply_parse_options(), 2022-12-13)
- t1301-shared-repo.sh, t1302-repo-version.sh: In b07a819c05f (reflog:
clear leftovers in reflog_expiry_cleanup(), 2022-12-13).
- t1304-default-acl.sh, t1410-reflog.sh,
t5330-no-lazy-fetch-with-commit-graph.sh, t5502-quickfetch.sh,
t5604-clone-reference.sh, t6014-rev-list-all.sh,
t7701-repack-unpack-unreachable.sh: In b0c61be3209 (Merge branch
'rs/reflog-expiry-cleanup', 2022-12-26)
- t3800-mktag.sh, t5302-pack-index.sh, t5306-pack-nobase.sh,
t5573-pull-verify-signatures.sh, t7612-merge-verify-signatures.sh: In
69bbbe484ba (hash-object: use fsck for object checks, 2023-01-18).
- t1451-fsck-buffer.sh: In 8e4309038f0 (fsck: do not assume
NUL-termination of buffers, 2023-01-19).
- t6501-freshen-objects.sh: In abf2bb895b4 (Merge branch
'jk/hash-object-fsck', 2023-01-30)
1. 9ea1378d046 (Merge branch 'ab/various-leak-fixes', 2022-12-14)
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2023-02-07 00:07:36 +01:00
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
2010-02-22 23:32:11 +01:00
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
# We need an arbitrary other user give permission to using ACLs. root
|
|
|
|
# is a good candidate: exists on all unices, and it has permission
|
|
|
|
# anyway, so we don't create a security hole running the testsuite.
|
t1304: improve setfacl prerequisite setup
t1304 first runs setfacl as an experiment to see whether the
filesystem supports ACLs, and skips the remaining tests if
it does not. However, our setfacl run did not exercise the
ACLs very well, and some filesystems may support our initial
setfacl, but not the rest of the test.
In particular, some versions of ecryptfs will erroneously
apply the umask on top of an inherited directory ACL,
causing our tests to fail. Let's be more careful and make
sure both that we can read back the user ACL we set, and
that the inherited ACL is propagated correctly. The latter
catches the ecryptfs bug, but may also catch other bugs
(e.g., an implementation which does not handle inherited
ACLs at all).
Since we're making the setup more complex, let's move it
into its own test. This will hide the output for us unless
the user wants to run "-v" to see it (and we don't need to
bother printing anything about setfacl failing; the
remaining tests will properly print "skip" due to the
missing prerequisite).
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-06-06 15:28:24 +02:00
|
|
|
test_expect_success 'checking for a working acl setup' '
|
|
|
|
if setfacl -m d:m:rwx -m u:root:rwx . &&
|
|
|
|
getfacl . | grep user:root:rwx &&
|
|
|
|
touch should-have-readable-acl &&
|
2022-09-21 15:02:31 +02:00
|
|
|
getfacl should-have-readable-acl | grep -E "mask::?rw-"
|
t1304: improve setfacl prerequisite setup
t1304 first runs setfacl as an experiment to see whether the
filesystem supports ACLs, and skips the remaining tests if
it does not. However, our setfacl run did not exercise the
ACLs very well, and some filesystems may support our initial
setfacl, but not the rest of the test.
In particular, some versions of ecryptfs will erroneously
apply the umask on top of an inherited directory ACL,
causing our tests to fail. Let's be more careful and make
sure both that we can read back the user ACL we set, and
that the inherited ACL is propagated correctly. The latter
catches the ecryptfs bug, but may also catch other bugs
(e.g., an implementation which does not handle inherited
ACLs at all).
Since we're making the setup more complex, let's move it
into its own test. This will hide the output for us unless
the user wants to run "-v" to see it (and we don't need to
bother printing anything about setfacl failing; the
remaining tests will properly print "skip" due to the
missing prerequisite).
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-06-06 15:28:24 +02:00
|
|
|
then
|
|
|
|
test_set_prereq SETFACL
|
|
|
|
fi
|
|
|
|
'
|
2010-02-22 23:32:11 +01:00
|
|
|
|
2011-10-14 19:44:45 +02:00
|
|
|
if test -z "$LOGNAME"
|
|
|
|
then
|
2014-10-17 23:39:00 +02:00
|
|
|
LOGNAME="${USER:-$(id -u -n)}"
|
2011-10-14 19:44:45 +02:00
|
|
|
fi
|
|
|
|
|
2010-02-22 23:32:11 +01:00
|
|
|
check_perms_and_acl () {
|
2010-03-15 18:14:35 +01:00
|
|
|
test -r "$1" &&
|
2010-02-22 23:32:11 +01:00
|
|
|
getfacl "$1" > actual &&
|
|
|
|
grep -q "user:root:rwx" actual &&
|
|
|
|
grep -q "user:${LOGNAME}:rwx" actual &&
|
2022-09-21 15:02:31 +02:00
|
|
|
grep -E "mask::?r--" actual > /dev/null 2>&1 &&
|
2010-02-22 23:32:11 +01:00
|
|
|
grep -q "group::---" actual || false
|
|
|
|
}
|
|
|
|
|
|
|
|
dirs_to_set="./ .git/ .git/objects/ .git/objects/pack/"
|
|
|
|
|
2010-08-11 21:04:04 +02:00
|
|
|
test_expect_success SETFACL 'Setup test repo' '
|
2010-03-15 18:14:34 +01:00
|
|
|
setfacl -m d:u::rwx,d:g::---,d:o:---,d:m:rwx $dirs_to_set &&
|
2010-03-15 19:35:03 +01:00
|
|
|
setfacl -m m:rwx $dirs_to_set &&
|
2010-02-22 23:32:11 +01:00
|
|
|
setfacl -m u:root:rwx $dirs_to_set &&
|
2010-03-15 18:14:33 +01:00
|
|
|
setfacl -m d:u:"$LOGNAME":rwx $dirs_to_set &&
|
|
|
|
setfacl -m d:u:root:rwx $dirs_to_set &&
|
2010-02-22 23:32:11 +01:00
|
|
|
|
|
|
|
touch file.txt &&
|
|
|
|
git add file.txt &&
|
|
|
|
git commit -m "init"
|
|
|
|
'
|
|
|
|
|
2010-08-11 21:04:04 +02:00
|
|
|
test_expect_success SETFACL 'Objects creation does not break ACLs with restrictive umask' '
|
2010-02-22 23:32:11 +01:00
|
|
|
# SHA1 for empty blob
|
2018-03-25 21:20:47 +02:00
|
|
|
check_perms_and_acl .git/objects/$(echo $EMPTY_BLOB | sed -e "s,^\(..\),\1/,")
|
2010-02-22 23:32:11 +01:00
|
|
|
'
|
|
|
|
|
2010-08-11 21:04:04 +02:00
|
|
|
test_expect_success SETFACL 'git gc does not break ACLs with restrictive umask' '
|
2010-02-22 23:32:11 +01:00
|
|
|
git gc &&
|
|
|
|
check_perms_and_acl .git/objects/pack/*.pack
|
|
|
|
'
|
|
|
|
|
|
|
|
test_done
|