11.2.0 development build 14 released
Michael Stone
michael at laptop.org
Sun Mar 20 16:53:27 EDT 2011
On Sun, 20 Mar 2011 at 18:46:12 +0000, Daniel Drake <dsd at laptop.org> wrote:
> On 20 March 2011 18:05, C. Scott Ananian <cscott at laptop.org> wrote:
> so fakeroot (at least debian/unstable's version of fakeroot) should be
> able to handle this just fine.
>
> You're right, this should work.
>
> But it doesn't, even with fakeroot 1.14.5.
>
> Test case:
>
> As root:
> mkdir test
> echo closed > test/closed
> chmod 000 test/closed
> tar -cf test.tar test
> rm -rf test
>
> As user:
> fakeroot
> tar -xpf test.tar
> ls -l test/closed
> cat test/closed
>
> Last command gives error.
>
>
> Now exit from the fakeroot and:
> ls -l test/closed
>
> The 000 permissions somehow fell through onto the real filesystem, but
> in your more simplistic testcase the 000 permissions stayed only
> within the fake environment of fakeroot.
>
> So..tar must be doing something different from chmod when applying permissions.
A quick strace with fakeroot-1.14.5-2 and tar-1.25-3 on Debian Squeeze suggests
that tar is running something like:
umask(022) = 0
umask(0) = 022
mkdirat(AT_FDCWD, "test", 0700) = 0
newfstatat(AT_FDCWD, "test", {st_mode=S_IFDIR|0700, st_size=4096, ...}, 0) = 0
openat(AT_FDCWD, "test/closed", O_WRONLY|O_CREAT|O_EXCL|O_NOCTTY|O_NONBLOCK|O_CLOEXEC, 0) = 4
write(4, "closed\n", 7) = 7
dup2(4, 4) = 4
fstat(4, {st_mode=S_IFREG, st_size=7, ...}) = 0
utimensat(4, NULL, {{1300653754, 616972565}, {1300653712, 0}}, 0) = 0
fstat(4, {st_mode=S_IFREG, st_size=7, ...}) = 0
fchown(4, 0, 0) = -1 EPERM (Operation not permitted)
close(4) = 0
...and, sure enough, we have a bug [1] entitled "fakeroot: handle openat() and
friends".
Regards,
Michael
[1]: http://bugs.debian.org/402688
More information about the Devel
mailing list