extattr problems?
Robert Watson
rwatson at FreeBSD.org
Mon Jan 12 07:45:45 PST 2009
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 at dark /tmp]$ ./extattr_test
> fd=3
> extattr_set_fd() = -1
> errno = 13 (Permission denied)
> [tim at 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 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>
More information about the freebsd-hackers
mailing list