Decided against this patch in favor of the new --super option.
authorWayne Davison <wayned@samba.org>
Thu, 26 Jan 2006 11:15:45 +0000 (11:15 +0000)
committerWayne Davison <wayned@samba.org>
Thu, 26 Jan 2006 11:15:45 +0000 (11:15 +0000)
owner-group-mod.diff [deleted file]

diff --git a/owner-group-mod.diff b/owner-group-mod.diff
deleted file mode 100644 (file)
index d75cf3d..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-This patch implements an idiom where two -o options cause rsync
-to try to set the owner information even if we're not running as
-UID 0.  Similarly, two -g options cause rsync to try to set all
-groups, even if they weren't returned by getgroups().  E.g.:
-
-    rsync -avoogg host:/from/ /to/
-
---- 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 checksum_seed;
- extern int basis_dir_cnt;
- extern int protocol_version;
-@@ -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 = 3;
-+              if (preserve_gid)
-+                      preserve_gid = 3;
-+      }
- }
---- 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 += 2;
-+                      break;
-+
-+              case 'g':
-+                      preserve_gid += 2;
-+                      break;
-+
-               case 'v':
-                       verbose++;
-                       break;
-@@ -1432,10 +1440,16 @@ void server_options(char **args,int *arg
-       if (preserve_hard_links)
-               argstr[x++] = 'H';
--      if (preserve_uid)
-+      if (preserve_uid) {
-               argstr[x++] = 'o';
--      if (preserve_gid)
-+              if (preserve_uid > 2)
-+                      argstr[x++] = 'o';
-+      }
-+      if (preserve_gid) {
-               argstr[x++] = 'g';
-+              if (preserve_gid > 2)
-+                      argstr[x++] = 'g';
-+      }
-       if (preserve_devices)
-               argstr[x++] = 'D';
-       if (preserve_times)
---- 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;
-@@ -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 > 2 && st->st_uid != file->uid;
-       change_gid = preserve_gid && file->gid != GID_NONE
-               && st->st_gid != file->gid;
- #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;
- extern int numeric_ids;
--extern int am_root;
- struct idlist {
-       struct idlist *next;
-@@ -177,7 +176,7 @@ static struct idlist *recv_add_gid(int i
-       int id2 = name ? map_gid(id, name) : id;
-       struct idlist *node;
--      if (!am_root && !is_in_group(id2))
-+      if (preserve_gid < 3 && !is_in_group(id2))
-               id2 = GID_NONE;
-       node = add_to_list(&gidlist, id, name, id2);
-@@ -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 > 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 < 3 || !numeric_ids)) {
-               for (i = 0; i < flist->count; i++)
-                       flist->files[i]->gid = match_gid(flist->files[i]->gid);
-       }