bug in permissions on symlinks

Dave Dykstra dwd at bell-labs.com
Tue Dec 4 05:42:19 EST 2001


On Sun, Dec 02, 2001 at 11:52:08PM +1100, Martin Pool wrote:
> I see rsync has this in rsync.h
> 
>   #ifndef HAVE_LCHOWN
>   #define lchown chown
>   #endif
> 
> So on Linux lchown changes the ownership on a symlink, whereas chown
> on a symlink will change the ownership of its target.  man lchown says
> 
>        In versions of Linux prior to 2.1.81  (and  distinct  from
>        2.1.46), chown did not follow symbolic links.  Since Linux
>        2.1.81, chown does follow symbolic links, and there  is  a
>        new  system  call  lchown  that  does  not follow symbolic
>        links.  Since Linux 2.1.86, this new call  (that  has  the
>        same  semantics as the old chown) has got the same syscall
>        number, and chown got the newly introduced number.
> 
> I'm not at all sure the way we're calling it is correct.  There could
> be systems where there is no lchown, but chown on a symlink still
> follows the link.  I seem to remember Solaris behaving this way, but
> I'm not sure if that is the system call or just the chown command.  
> 
> In this case we might be accidentally setting the ownership of the
> destination.  On such a machine we should just not set the ownership
> of the symlink at all.  (To be really tricky I guess we could
> seteuid() before creating the link.)
> 
> David, do you have a machine that behaves like this?


No, I don't.  Even my oldest systems have symbolic links and also have
lchown.  I think any system that has symbolic links would have to 
implement the lchown/chown distinction, so I don't think it's something
to worry about.

- Dave Dykstra




More information about the rsync mailing list