bug in permissions on symlinks

Martin Pool mbp at samba.org
Sun Dec 2 23:52:08 EST 2001


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?

--
Martin




More information about the rsync mailing list