Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Jan 2009 15:45:44 +0000 (GMT)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Tim Kientzle <kientzle@freebsd.org>
Cc:        freebsd-hackers@freebsd.org, pluknet <pluknet@gmail.com>
Subject:   Re: extattr problems?
Message-ID:  <alpine.BSF.2.00.0901121543520.16794@fledge.watson.org>
In-Reply-To: <496ABD9A.8080006@freebsd.org>
References:  <49692659.2030306@freebsd.org> <a31046fc0901101836q1f43028awe4f7b0ba746248ac@mail.gmail.com> <49696C24.8010601@freebsd.org> <a31046fc0901110004m629f9aeegc4ac1cdfd1591c69@mail.gmail.com> <496AA714.1090904@freebsd.org> <496ABD9A.8080006@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On Sun, 11 Jan 2009, Tim Kientzle wrote:

> I think this one is a bug.  It appears that extattr_set_fd() obeys the 
> permissions on the file, not the permissions of the descriptor.  In 
> particular, I see this on FreeBSD 6.3:

Hmm.  Not clear.  EAs live in a slightly hazy world between data and 
meta-data.  Normally you can perform operations like fchmod(2), which are 
strictly meta-data operations, regardless of the flags of the file descriptor 
they are performed on, subject to ownership/permissions.  With NFSv4 ACLs, 
where the right to change ACLs can be delegated, this only becomes more true. 
I've chosen to generally treat EAs as meta-data in this regard, where the file 
descriptor simply names the object rather than as an access method as occurs 
with write(), etc.  How do other systems handle this -- for example, Linux, 
with its notion of user vs. system namespaces?

Robert N M Watson
Computer Laboratory
University of Cambridge

>
> [tim@dark /tmp]$ ./extattr_test
> fd=3
> extattr_set_fd() = -1
>   errno = 13 (Permission denied)
> [tim@dark /tmp]$ cat extattr_test.c
> #include <sys/types.h>
> #include <sys/extattr.h>
> #include <errno.h>
> #include <fcntl.h>
> #include <stdio.h>
>
> int
> main(int argc, char **argv)
> {
>        int n, fd;
>
>        fd = open("/tmp/test12345", O_RDWR | O_CREAT | O_EXCL, 0000);
>        printf("fd=%d\n", fd);
>        n = extattr_set_fd(fd, EXTATTR_NAMESPACE_USER,
> 		"testattr", "1234", 4);
>        printf("extattr_set_fd() = %d\n", n);
>        if (n != 0)
>                printf("errno = %d (%s)\n",
> 			errno, strerror(errno));
>        exit(0);
> }
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.0901121543520.16794>