[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#29788: chown: recursive operation with "-H" flag does not work as do
From: |
Bernhard Voelker |
Subject: |
bug#29788: chown: recursive operation with "-H" flag does not work as documented |
Date: |
Wed, 20 Dec 2017 21:58:57 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 |
tag 29788 notabug
stop
On 12/20/2017 07:24 PM, Michael Orlitzky wrote:
The documentation for the "-H" flag to chown says,
The following options modify how a hierarchy is traversed when the
-R option is also specified. If more than one is specified, only
the final one takes effect.
-H if a command line argument is a symbolic link to a directory,
traverse it
This is not doing what I think it should do. In a terminal, as my "mjo"
system user, I can run,
$ mkdir foo
$ mkdir bar
$ ln -s ../bar foo/baz
$ sudo chown --verbose --recursive -H root foo
which outputs...
changed ownership of 'foo/baz' from mjo to root
changed ownership of 'foo' from mjo to root
However, the path "foo/baz" was not passed on the command-line, and
chown did in fact follow the symlink,
$ ls -l | grep bar
drwxr-xr-x 2 root mjo 4.0K 2017-12-20 13:19 bar
as evidenced by the fact that "bar" was created as mjo:mjo.
I think there is something else going on you didn't consider:
--dereference affect the referent of each symbolic link (this is
the default), rather than the symbolic link itself
The -H option does not affect 'foo/baz' (or the target it references),
but only the command line arg 'foo'. So the test case for -H is:
$ mkdir bar bar/baz
$ ln -s bar foo
$ sudo chown --verbose --recursive -H root foo
changed ownership of 'foo/baz' from berny to root
changed ownership of 'foo' from berny to root
$ find . -ls
4014266 4 drwxr-xr-x 3 berny users 4096 Dec 20 21:50 .
4014269 4 drwxr-xr-x 3 root users 4096 Dec 20 21:50 ./bar
4014271 4 drwxr-xr-x 2 root users 4096 Dec 20 21:50
./bar/baz
4014272 0 lrwxrwxrwx 1 berny users 3 Dec 20 21:50 ./foo
-> bar
Without -H, chown would not dereference 'foo', and change the ownership of
the symlink (on systems which support this):
$ sudo chown --verbose --recursive root foo
changed ownership of 'foo' from berny to root
$ find . -ls
4014266 4 drwxr-xr-x 3 berny users 4096 Dec 20 21:51 .
4014269 4 drwxr-xr-x 3 berny users 4096 Dec 20 21:51 ./bar
4014271 4 drwxr-xr-x 2 berny users 4096 Dec 20 21:51
./bar/baz
4014272 0 lrwxrwxrwx 1 root users 3 Dec 20 21:51 ./foo
-> bar
Thus, I think this not a bug in chmod or the documentation, but in the
your expectations. Therefore, I'm marking this as not-a-bug in our bug
tracker. Of course, you are welcome to continue the discussion, and if
needed we can reopen this issue at a later point.
Have a nice day,
Berny