X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/a6587818c397ffbdfc336e77d5021efb103debf9..cb0d2e2b200e6610054021db977334088f9bd04f:/owner-group-mod.diff diff --git a/owner-group-mod.diff b/owner-group-mod.diff index d512b46..d75cf3d 100644 --- a/owner-group-mod.diff +++ b/owner-group-mod.diff @@ -5,72 +5,77 @@ groups, even if they weren't returned by getgroups(). E.g.: rsync -avoogg host:/from/ /to/ ---- orig/compat.c 2004-07-21 23:59:35 -+++ compat.c 2004-09-09 01:59:08 -@@ -28,8 +28,11 @@ +--- orig/compat.c 2005-11-14 21:24:47 ++++ compat.c 2005-12-03 01:28:51 +@@ -28,11 +28,14 @@ int remote_protocol = 0; extern int verbose; +extern int am_root; extern int am_server; extern int am_sender; + extern int inplace; + extern int fuzzy_basis; + extern int read_batch; +extern int preserve_uid; +extern int preserve_gid; - extern int read_batch; extern int checksum_seed; + extern int basis_dir_cnt; extern int protocol_version; -@@ -81,4 +84,11 @@ void setup_protocol(int f_out,int f_in) +@@ -107,4 +110,11 @@ void setup_protocol(int f_out,int f_in) } else { checksum_seed = read_int(f_in); } + + if (am_root) { + if (preserve_uid) -+ preserve_uid = 2; ++ preserve_uid = 3; + if (preserve_gid) -+ preserve_gid = 2; ++ preserve_gid = 3; + } } ---- orig/options.c 2004-09-20 05:10:48 -+++ options.c 2004-09-09 01:59:08 -@@ -358,8 +358,8 @@ static struct poptOption long_options[] - {"no-whole-file", 0, POPT_ARG_VAL, &whole_file, 0, 0, 0 }, - {"copy-unsafe-links", 0, POPT_ARG_NONE, ©_unsafe_links, 0, 0, 0 }, - {"perms", 'p', POPT_ARG_NONE, &preserve_perms, 0, 0, 0 }, -- {"owner", 'o', POPT_ARG_NONE, &preserve_uid, 0, 0, 0 }, -- {"group", 'g', POPT_ARG_NONE, &preserve_gid, 0, 0, 0 }, -+ {"owner", 'o', POPT_ARG_NONE, 0, 'o', 0, 0 }, -+ {"group", 'g', POPT_ARG_NONE, 0, 'g', 0, 0 }, - {"devices", 'D', POPT_ARG_NONE, &preserve_devices, 0, 0, 0 }, - {"times", 't', POPT_ARG_NONE, &preserve_times, 0, 0, 0 }, - {"checksum", 'c', POPT_ARG_NONE, &always_checksum, 0, 0, 0 }, -@@ -568,6 +568,14 @@ int parse_arguments(int *argc, const cha +--- orig/options.c 2005-11-15 18:21:22 ++++ options.c 2005-12-03 01:28:45 +@@ -404,10 +404,10 @@ static struct poptOption long_options[] + {"no-t", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 }, + {"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 2, 0, 0 }, + {"modify-window", 0, POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 }, +- {"owner", 'o', POPT_ARG_VAL, &preserve_uid, 1, 0, 0 }, ++ {"owner", 'o', POPT_ARG_NONE, 0, 'o', 0, 0 }, + {"no-owner", 0, POPT_ARG_VAL, &preserve_uid, 0, 0, 0 }, + {"no-o", 0, POPT_ARG_VAL, &preserve_uid, 0, 0, 0 }, +- {"group", 'g', POPT_ARG_VAL, &preserve_gid, 1, 0, 0 }, ++ {"group", 'g', POPT_ARG_NONE, 0, 'g', 0, 0 }, + {"no-group", 0, POPT_ARG_VAL, &preserve_gid, 0, 0, 0 }, + {"no-g", 0, POPT_ARG_VAL, &preserve_gid, 0, 0, 0 }, + {"devices", 'D', POPT_ARG_VAL, &preserve_devices, 1, 0, 0 }, +@@ -872,8 +872,8 @@ int parse_arguments(int *argc, const cha + #endif + preserve_perms = 1; + preserve_times = 1; +- preserve_gid = 1; +- preserve_uid = 1; ++ preserve_uid |= 1; ++ preserve_gid |= 1; + preserve_devices = 1; + break; + +@@ -881,6 +881,14 @@ int parse_arguments(int *argc, const cha usage(FINFO); exit_cleanup(0); + case 'o': -+ preserve_uid++; ++ preserve_uid += 2; + break; + + case 'g': -+ preserve_gid++; ++ preserve_gid += 2; + break; + case 'v': verbose++; break; -@@ -707,8 +715,8 @@ int parse_arguments(int *argc, const cha - #endif - preserve_perms = 1; - preserve_times = 1; -- preserve_gid = 1; -- preserve_uid = 1; -+ preserve_uid |= 1; -+ preserve_gid |= 1; - preserve_devices = 1; - } - -@@ -938,10 +946,16 @@ void server_options(char **args,int *arg +@@ -1432,10 +1440,16 @@ void server_options(char **args,int *arg if (preserve_hard_links) argstr[x++] = 'H'; @@ -78,38 +83,38 @@ groups, even if they weren't returned by getgroups(). E.g.: + if (preserve_uid) { argstr[x++] = 'o'; - if (preserve_gid) -+ if (preserve_uid > 1) ++ if (preserve_uid > 2) + argstr[x++] = 'o'; + } + if (preserve_gid) { argstr[x++] = 'g'; -+ if (preserve_gid > 1) ++ if (preserve_gid > 2) + argstr[x++] = 'g'; + } if (preserve_devices) argstr[x++] = 'D'; if (preserve_times) ---- orig/rsync.c 2004-09-07 21:45:30 -+++ rsync.c 2004-09-09 01:59:08 -@@ -25,7 +25,6 @@ - extern int verbose; - extern int dry_run; +--- orig/rsync.c 2005-07-27 23:31:12 ++++ rsync.c 2005-12-03 01:29:17 +@@ -27,7 +27,6 @@ extern int dry_run; + extern int daemon_log_format_has_i; extern int preserve_times; + extern int omit_dir_times; -extern int am_root; + extern int am_server; extern int am_sender; extern int am_generator; - extern int preserve_uid; -@@ -158,7 +157,7 @@ int set_perms(char *fname,struct file_st - updated = 1; +@@ -82,7 +81,7 @@ int set_perms(char *fname,struct file_st + updated = 1; } - change_uid = am_root && preserve_uid && st->st_uid != file->uid; -+ change_uid = preserve_uid > 1 && st->st_uid != file->uid; ++ change_uid = preserve_uid > 2 && st->st_uid != file->uid; change_gid = preserve_gid && file->gid != GID_NONE && st->st_gid != file->gid; - if (change_uid || change_gid) { ---- orig/uidlist.c 2004-04-29 19:37:25 -+++ uidlist.c 2004-09-09 01:59:08 + #if !defined HAVE_LCHOWN && !defined CHOWN_MODIFIES_SYMLINK +--- orig/uidlist.c 2005-11-10 16:58:36 ++++ uidlist.c 2005-12-03 01:29:52 @@ -35,7 +35,6 @@ extern int verbose; extern int preserve_uid; extern int preserve_gid; @@ -123,21 +128,21 @@ groups, even if they weren't returned by getgroups(). E.g.: struct idlist *node; - if (!am_root && !is_in_group(id2)) -+ if (preserve_gid < 2 && !is_in_group(id2)) ++ if (preserve_gid < 3 && !is_in_group(id2)) id2 = GID_NONE; node = add_to_list(&gidlist, id, name, id2); -@@ -339,11 +338,11 @@ void recv_uid_list(int f, struct file_li +@@ -338,11 +337,11 @@ void recv_uid_list(int f, struct file_li /* now convert the uid/gid of all files in the list to the mapped * uid/gid */ - if (am_root && preserve_uid && !numeric_ids) { -+ if (preserve_uid > 1 && !numeric_ids) { ++ if (preserve_uid > 2 && !numeric_ids) { for (i = 0; i < flist->count; i++) flist->files[i]->uid = match_uid(flist->files[i]->uid); } - if (preserve_gid && (!am_root || !numeric_ids)) { -+ if (preserve_gid && (preserve_gid < 2 || !numeric_ids)) { ++ if (preserve_gid && (preserve_gid < 3 || !numeric_ids)) { for (i = 0; i < flist->count; i++) flist->files[i]->gid = match_gid(flist->files[i]->gid); }