Dave Kleikamp wrote:
On Fri, 2007-11-16 at 13:38 +0100, Christian Kujau wrote:
On Wed, November 14, 2007 06:25, Dave Kleikamp wrote:
This is the first I've heard of this.  I don't think Linux ever
supported setting the modification times on symlinks.  Surely, I wouldn't
expect it to be supported in file-system specific code.
I couldn't find a POSIX statement on utime() and symbolic links, only some
IBM document[0], saying that utime() would resolve the symbolic links,
hence modifying the targets, not the symlinks. And that's what I see on
Linux/ext3 and on Solaris/ufs:

I'm pretty sure it's not posix, but there's a new (at least to linux)
function called lutimes() which does set the time on a symlink.  I know
the kernel support (utimesat) was added in linux-2.6.22.  I'm not clear
on when the function was added to glibc.

It seems Charles' problem was that he built rsync on one system (which
probably had a newer glibc), and ran it on another where the lutimes()
function failed.

Yes after further testing, I can confirm the explanation given by Shaggy is the right one.  In order for lutimes() to work, it has to be implemented in both the kernel and glibc.  Kernel support it since 2.6.22.  For glibc, the function must have been added between February 2007 and August 2007 (those dates are the version freezes of Ubuntu 7.04 and 7.10, and lutimes is in 7.10 but not in 7.04).

>From what I read so far, lutimes() comes from FreeBSD.