Re: [PATCH v2] Fix testcase failure when extended attributes are in use

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Oct 19, 2008 at 12:59:06PM -0700, Junio C Hamano wrote:
> Deskin Miller <deskinm@xxxxxxxxx> writes:
> 
> > 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?

I looked through all the options to ls several times, and there wasn't anything
which stood out to me.  The output format of ls is rather rigid.
 
> 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.

My fault for not reading up more carefully.  In that case, yes, I agree that we
should be able to deal with any such flag character, which my patch does not
do.
 
> 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?

Yes.  SELinux, in particular, associates a 'security context' with *every*
file, which is used in SELinux access control checks.  This is stored as a
filesystem extended attribute in the 'security.selinux' namespace, and one will
exist from the moment the file is created.

One could dream up other access control methods, such as a kernel module which
would deny access to any files with the string 'frob' in the filename, and
suppose that ls could be extended to recognise the presence of this module and
alter its display accordingly.  There is clearly no way to ensure that no
'alternate or additional access control method' is associated with a file,
since the POSIX.1 language is sufficiently general to allow for almost
anything.

> 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?

I hope I've made the case for the necessity of a patch (if nothing else, t1301
fails 10/16 tests on my system without some sort of patch), and I'll happily
agree that stripping any printable is a better choice.  Thanks for the
feedback; FWIW, your suggested patch here is

Tested-by: Deskin Miller <deskinm@xxxxxxxxx>

>  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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux