Bug 12820 - rsync always try change owner and group of symlink in --fake-super mode
Summary: rsync always try change owner and group of symlink in --fake-super mode
Status: NEW
Alias: None
Product: rsync
Classification: Unclassified
Component: core (show other bugs)
Version: 3.0.9
Hardware: All All
: P5 normal (vote)
Target Milestone: ---
Assignee: Wayne Davison
QA Contact: Rsync QA Contact
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-06-05 21:32 UTC by Pavel Alexeev
Modified: 2018-02-28 23:32 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Pavel Alexeev 2017-06-05 21:32:04 UTC
Hello.

I long time discover strange to me behavior. If I add --fake-super
option on both sides rsync start always set owner and group of symlink.
What interesting there no error, but it done each time as it has been
changed.

Simple reproduce:
$ mkdir rsync.symlinks
$ echo 'file content' > rsync.symlinks/file.itself
$ ln -s file.itself rsync.symlinks/file.symlink

Then try to transfer it on remote host:
$ rsync -apr --links --itemize-changes --fake-super -M--fake-super
rsync.symlinks [hidden email]:~/temp/rsync.symlinks
cd+++++++++ rsync.symlinks/
<f+++++++++ rsync.symlinks/file.itself
cL+++++++++ rsync.symlinks/file.symlink -> file.itself

And again:
.L....og... rsync.symlinks/file.symlink -> file.itself


I had tried use --rsync-path="rsync --fake-super" instead of
-M--fake-super what unsurprisingly give me same result:
$ rsync -apr --links --itemize-changes --fake-super --rsync-path="rsync
--fake-super" rsync.symlinks
[hidden email]:~/temp/rsync.symlinks
.L....og... rsync.symlinks/file.symlink -> file.itself


Please note all symlinks correct:
$ LANG=en_US.utf-8 ls -l rsync.symlinks
total 4
-rw-rw-r--. 1 pasha pasha 13 Oct 11 06:10 file.itself
lrwxrwxrwx. 1 pasha pasha 11 Oct 11 06:11 file.symlink -> file.itself

$ cat rsync.symlinks/file.symlink
file content

It also correct on receiver side.


P.S. Asked long time ago in ML - http://samba.2283325.n4.nabble.com/rsync-always-try-change-owner-and-group-of-symlink-in-fake-super-mode-td4692664.html
Comment 1 Dave Gordon 2018-02-28 23:32:47 UTC
(In reply to Pavel Alexeev from comment #0)

The listing at the end of your report is presumably on the sending side; on the receiver, you should see that the transfer has converted the symlink into a plain file, which is how fake-super has worked ever since

commit 6e310d38fcdeacb8055bb7e83d4e64c37fd54a38
Author: Wayne Davison <wayned@samba.org>
Date:   Wed Sep 2 09:06:29 2009 -0700

    Have --fake-super turn a symlink into a file when
    NO_SYMLINK_XATTRS is defined.

(unless the destination system supports xattrs on symlinks?)

The expected result on a Linux destination would be:
$ LANG=en_US.utf-8 ls -l rsync.symlinks
total 4
-rw-rw-r--. 1 pasha pasha 13 Oct 11 06:10 file.itself
-rwxrwxrwx. 1 pasha pasha 11 Oct 11 06:11 file.symlink

$ cat rsync.symlinks/file.symlink
file.itself

i.e. the symlink would be transformed into a plain file containing the text of the link path (unfortunately, still with mode 0777!). Fake-super mode would also (try to) create an xattr named "user.rsync.%stat", but that wouldn't work if the filesystem object has been created as a symlink. Maybe failing to find the xattr causes rsync to think there's a uid/gid mismatch.

At all events, this doesn't happen (for me) with version 3.1.3 (or 3.1.1).

.Dave.