--link-dest uid/gid checking bug?
Chris Darroch
chrisd at pearsoncmg.com
Thu Mar 20 08:38:43 EST 2003
Hi --
I was very keen to download rsync and give it a whirl with the
new --link-dest feature. However, I was terribly puzzled when I
couldn't seem to get it working, even though --compare-dest with
the same argument would work. It seemed like new files would
be transferred even though files existed in the compare-dest/link-dest
location; compare-dest would detect them but link-dest would make
new files anyway.
I tracked down my confusion to the new portion of skip_file()
in generator.c. Because I wasn't supplying the --owner or --group
options, the preserve_uid and preserve_gid flags were not set,
and the source file's file->uid and file->gid values were just 0.
But skip_file() was checking them against the destination file's
st->st_uid and st->st_gid, and reporting the difference.
Here's my stab at a patch -- I only just looked at the rsync
code today, so I might very well be missing something.
Thanks,
Chris.
diff -u generator.c.orig generator.c
====================================
--- generator.c.orig 2003-03-19 15:07:29.592476000 -0500
+++ generator.c 2003-03-19 16:12:24.994685000 -0500
@@ -27,6 +27,8 @@
extern int dry_run;
extern int relative_paths;
extern int preserve_links;
+extern int preserve_uid;
+extern int preserve_gid;
extern int am_root;
extern int preserve_devices;
extern int preserve_hard_links;
@@ -55,7 +57,8 @@
if((st->st_mode & ~_S_IFMT) != (file->mode & ~_S_IFMT)) {
return 0;
}
- if (st->st_uid != file->uid || st->st_gid != file->gid) {
+ if ((preserve_uid && st->st_uid != file->uid) ||
+ (preserve_gid && st->st_gid != file->gid)) {
return 0;
}
}
====================================
--
GPG Key ID: 366A375B
GPG Key Fingerprint: 485E 5041 17E1 E2BB C263 E4DE C8E3 FA36 366A 375B
More information about the rsync
mailing list