Re: [PATCH v2] Fix testcase failure when extended attributes are in use
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Oct 19, 2008, 19:59 UTC
- Message-ID
- <7viqro73w5.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <20081019122419.GA2015@riemann.deskinm.fdns.net>
Deskin Miller <deskinm@umich.edu> writes:
Show 11 quoted lines
> My patch, on the other hand, is to deal with 'ls' output in case a file has > certain filesystem extended attributes. These could be e.g. POSIX ACLs, or a > SELinux security context, or perhaps others. If such an extended attribute is > present, 'ls -l' will print permissions with a '+' appended, e.g. > -rw-r--r--+ > Instead of > -rw-r--r-- > ... > For what it's worth, I've experienced this failure on my Ubuntu 8.04 laptop > with SELinux permissive mode, so it's possible ls behaves slightly differently > on other systems; I've not been able to determine this one way or another.
Is there way to explicitly tell "ls -l" not to do this, I have to wonder?
POSIX.1 says that the file mode written under the -l option is "%c%s%s%s%c" (where the first %c is for type, three %s are for owner, group and other perm, and the last %c is "optional alternate access method flag"). If there is no alternate or additional access control method associated with the file, the "optional alternate access method flag" would be a single SP, otherwise it would be a printable character.
If we drop the default ACL from the trash directory like Matt's patch does, does a file created in there (i.e. the ones we check with /bin/ls) still have "alternate or additional access control method associated with" it?
Somehow it feels wrong that you need your patch, but if you do, stripping only the trailing '+' as your patch does not look sufficient, either. Shouldn't we be stripping the last letter if the length of actual is longer than strlen("-rwxrwxrwx"), as any printable can come there?
t/t1301-shared-repo.sh | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)
diff --git c/t/t1301-shared-repo.sh i/t/t1301-shared-repo.sh index 2275caa..653362b 100755 --- c/t/t1301-shared-repo.sh +++ i/t/t1301-shared-repo.sh @@ -20,6 +20,10 @@ test_expect_success 'shared = 0400 (faulty permission u-w)' ' test $ret != "0" ' +modebits () { + ls -l "$1" | sed -e 's|^\(..........\).*|\1|' +} + for u in 002 022 do test_expect_success "shared=1 does not clear bits preset by umask $u" ' @@ -85,8 +89,7 @@ do rm -f .git/info/refs && git update-server-info && - actual="$(ls -l .git/info/refs)" && - actual=${actual%% *} && + actual="$(modebits .git/info/refs)" && test "x$actual" = "x-$y" || { ls -lt .git/info false @@ -98,8 +101,7 @@ do rm -f .git/info/refs && git update-server-info && - actual="$(ls -l .git/info/refs)" && - actual=${actual%% *} && + actual="$(modebits .git/info/refs)" && test "x$actual" = "x-$x" || { ls -lt .git/info false