Fixed failing hunks.
authorWayne Davison <wayned@samba.org>
Sun, 8 Oct 2006 22:32:34 +0000 (22:32 +0000)
committerWayne Davison <wayned@samba.org>
Sun, 8 Oct 2006 22:32:34 +0000 (22:32 +0000)
acls.diff
atimes.diff
flags.diff
id-pair.diff
xattrs.diff

index 084f7db..c0803b5 100644 (file)
--- a/acls.diff
+++ b/acls.diff
@@ -1508,8 +1508,8 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +                       char *cmpbuf, statx *sxp, int itemizing,
                         int maybe_ATTRS_REPORT, enum logcode code)
  {
-       int save_ignore_times = ignore_times;
-@@ -618,7 +629,7 @@ static int try_dests_reg(struct file_str
+       int best_match = -1;
+@@ -613,7 +624,7 @@ static int try_dests_reg(struct file_str
  
        do {
                pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname);
@@ -1518,7 +1518,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                        continue;
                switch (match_level) {
                case 0:
-@@ -626,16 +637,20 @@ static int try_dests_reg(struct file_str
+@@ -621,16 +632,20 @@ static int try_dests_reg(struct file_str
                        match_level = 1;
                        /* FALL THROUGH */
                case 1:
@@ -1542,7 +1542,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                continue;
                        best_match = j;
                        match_level = 3;
-@@ -652,14 +667,14 @@ static int try_dests_reg(struct file_str
+@@ -645,14 +660,14 @@ static int try_dests_reg(struct file_str
        if (j != best_match) {
                j = best_match;
                pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname);
@@ -1559,7 +1559,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                          cmpbuf, 1,
                                          itemizing && verbose > 1,
                                          code) < 0)
-@@ -668,8 +683,13 @@ static int try_dests_reg(struct file_str
+@@ -661,8 +676,13 @@ static int try_dests_reg(struct file_str
                                hard_link_cluster(file, ndx, itemizing, code);
                } else
  #endif
@@ -1575,7 +1575,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                if (verbose > 1 && maybe_ATTRS_REPORT) {
                        rprintf(FCLIENT, "%s is uptodate\n", fname);
                }
-@@ -685,8 +705,13 @@ static int try_dests_reg(struct file_str
+@@ -678,8 +698,13 @@ static int try_dests_reg(struct file_str
                        }
                        return -1;
                }
@@ -1591,7 +1591,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                set_file_attrs(fname, file, NULL, 0);
                if (maybe_ATTRS_REPORT
                 && ((!itemizing && verbose && match_level == 2)
-@@ -710,13 +735,18 @@ static int try_dests_non(struct file_str
+@@ -703,13 +728,18 @@ static int try_dests_non(struct file_str
                         enum logcode code)
  {
        char fnamebuf[MAXPATHLEN];
@@ -1613,7 +1613,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                        continue;
                if (S_ISLNK(file->mode)) {
  #ifdef SUPPORT_LINKS
-@@ -729,10 +759,10 @@ static int try_dests_non(struct file_str
+@@ -722,10 +752,10 @@ static int try_dests_non(struct file_str
  #endif
                                continue;
                } else if (IS_SPECIAL(file->mode)) {
@@ -1626,7 +1626,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                continue;
                } else {
                        rprintf(FERROR,
-@@ -763,7 +793,15 @@ static int try_dests_non(struct file_str
+@@ -756,7 +786,15 @@ static int try_dests_non(struct file_str
                        int changes = compare_dest ? 0 : ITEM_LOCAL_CHANGE
                                    + (link_dest ? ITEM_XNAME_FOLLOWS : 0);
                        char *lp = link_dest ? "" : NULL;
@@ -1643,7 +1643,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                }
                if (verbose > 1 && maybe_ATTRS_REPORT) {
                        rprintf(FCLIENT, "%s is uptodate\n", fname);
-@@ -775,6 +813,7 @@ static int try_dests_non(struct file_str
+@@ -768,6 +806,7 @@ static int try_dests_non(struct file_str
  }
  
  static int phase = 0;
@@ -1651,7 +1651,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
  /* Acts on the_file_list->file's ndx'th item, whose name is fname.  If a dir,
   * make sure it exists, and has the right permissions/timestamp info.  For
-@@ -796,7 +835,8 @@ static void recv_generator(char *fname, 
+@@ -789,7 +828,8 @@ static void recv_generator(char *fname, 
        static int need_fuzzy_dirlist = 0;
        struct file_struct *fuzzy_file = NULL;
        int fd = -1, f_copy = -1;
@@ -1661,7 +1661,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        struct file_struct *back_file = NULL;
        int statret, real_ret, stat_errno;
        char *fnamecmp, *partialptr, *backupptr = NULL;
-@@ -852,6 +892,9 @@ static void recv_generator(char *fname, 
+@@ -845,6 +885,9 @@ static void recv_generator(char *fname, 
                } else if (!dry_run)
                        return;
        }
@@ -1671,7 +1671,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        if (dry_run > 1) {
                statret = -1;
                stat_errno = ENOENT;
-@@ -859,7 +902,7 @@ static void recv_generator(char *fname, 
+@@ -852,7 +895,7 @@ static void recv_generator(char *fname, 
                char *dn = file->dirname ? file->dirname : ".";
                if (parent_dirname != dn && strcmp(parent_dirname, dn) != 0) {
                        if (relative_paths && !implied_dirs
@@ -1680,7 +1680,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                         && create_directory_path(fname) < 0) {
                                rsyserr(FERROR, errno,
                                        "recv_generator: mkdir %s failed",
-@@ -871,6 +914,10 @@ static void recv_generator(char *fname, 
+@@ -864,6 +907,10 @@ static void recv_generator(char *fname, 
                        }
                        if (fuzzy_basis)
                                need_fuzzy_dirlist = 1;
@@ -1691,7 +1691,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                }
                parent_dirname = dn;
  
-@@ -879,7 +926,7 @@ static void recv_generator(char *fname, 
+@@ -872,7 +919,7 @@ static void recv_generator(char *fname, 
                        need_fuzzy_dirlist = 0;
                }
  
@@ -1700,7 +1700,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                    keep_dirlinks && S_ISDIR(file->mode));
                stat_errno = errno;
        }
-@@ -897,8 +944,9 @@ static void recv_generator(char *fname, 
+@@ -890,8 +937,9 @@ static void recv_generator(char *fname, 
         * mode based on the local permissions and some heuristics. */
        if (!preserve_perms) {
                int exists = statret == 0
@@ -1712,7 +1712,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        }
  
        if (S_ISDIR(file->mode)) {
-@@ -907,8 +955,8 @@ static void recv_generator(char *fname, 
+@@ -900,8 +948,8 @@ static void recv_generator(char *fname, 
                 * file of that name and it is *not* a directory, then
                 * we need to delete it.  If it doesn't exist, then
                 * (perhaps recursively) create it. */
@@ -1723,7 +1723,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                return;
                        statret = -1;
                }
-@@ -917,7 +965,11 @@ static void recv_generator(char *fname, 
+@@ -910,7 +958,11 @@ static void recv_generator(char *fname, 
                        dry_run++;
                }
                if (itemizing && f_out != -1) {
@@ -1736,7 +1736,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                statret ? ITEM_LOCAL_CHANGE : 0, 0, NULL);
                }
                if (statret != 0 && do_mkdir(fname,file->mode) < 0 && errno != EEXIST) {
-@@ -937,19 +989,19 @@ static void recv_generator(char *fname, 
+@@ -930,19 +982,19 @@ static void recv_generator(char *fname, 
                                return;
                        }
                }
@@ -1761,7 +1761,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
        if (preserve_links && S_ISLNK(file->mode)) {
  #ifdef SUPPORT_LINKS
-@@ -967,7 +1019,7 @@ static void recv_generator(char *fname, 
+@@ -960,7 +1012,7 @@ static void recv_generator(char *fname, 
                        char lnk[MAXPATHLEN];
                        int len;
  
@@ -1770,7 +1770,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                            && (len = readlink(fname, lnk, MAXPATHLEN-1)) > 0) {
                                lnk[len] = 0;
                                /* A link already pointing to the
-@@ -975,10 +1027,10 @@ static void recv_generator(char *fname, 
+@@ -968,10 +1020,10 @@ static void recv_generator(char *fname, 
                                 * required. */
                                if (strcmp(lnk, file->u.link) == 0) {
                                        if (itemizing) {
@@ -1783,7 +1783,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                                       maybe_ATTRS_REPORT);
                                        if (preserve_hard_links
                                            && file->link_u.links) {
-@@ -993,9 +1045,9 @@ static void recv_generator(char *fname, 
+@@ -986,9 +1038,9 @@ static void recv_generator(char *fname, 
                        }
                        /* Not the right symlink (or not a symlink), so
                         * delete it. */
@@ -1795,7 +1795,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                statret = -1;
                } else if (basis_dir[0] != NULL) {
                        if (try_dests_non(file, fname, ndx, itemizing,
-@@ -1011,7 +1063,7 @@ static void recv_generator(char *fname, 
+@@ -1004,7 +1056,7 @@ static void recv_generator(char *fname, 
                        }
                }
                if (preserve_hard_links && file->link_u.links
@@ -1804,7 +1804,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                       itemizing, code, HL_SKIP))
                        return;
                if (do_symlink(file->u.link,fname) != 0) {
-@@ -1020,7 +1072,7 @@ static void recv_generator(char *fname, 
+@@ -1013,7 +1065,7 @@ static void recv_generator(char *fname, 
                } else {
                        set_file_attrs(fname, file, NULL, 0);
                        if (itemizing) {
@@ -1813,7 +1813,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                        ITEM_LOCAL_CHANGE, 0, NULL);
                        }
                        if (code && verbose) {
-@@ -1051,18 +1103,22 @@ static void recv_generator(char *fname, 
+@@ -1044,18 +1096,22 @@ static void recv_generator(char *fname, 
                                itemizing = code = 0;
                        }
                }
@@ -1844,7 +1844,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                statret = -1;
                        if (verbose > 2) {
                                rprintf(FINFO,"mknod(%s,0%o,0x%x)\n",
-@@ -1075,7 +1131,7 @@ static void recv_generator(char *fname, 
+@@ -1068,7 +1124,7 @@ static void recv_generator(char *fname, 
                        } else {
                                set_file_attrs(fname, file, NULL, 0);
                                if (itemizing) {
@@ -1853,7 +1853,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                                ITEM_LOCAL_CHANGE, 0, NULL);
                                }
                                if (code && verbose)
-@@ -1089,14 +1145,14 @@ static void recv_generator(char *fname, 
+@@ -1082,14 +1138,14 @@ static void recv_generator(char *fname, 
                        }
                } else {
                        if (itemizing)
@@ -1871,7 +1871,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        }
  
        if (!S_ISREG(file->mode)) {
-@@ -1130,7 +1186,7 @@ static void recv_generator(char *fname, 
+@@ -1123,7 +1179,7 @@ static void recv_generator(char *fname, 
        }
  
        if (update_only && statret == 0
@@ -1880,7 +1880,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                if (verbose > 1)
                        rprintf(FINFO, "%s is newer\n", fname);
                return;
-@@ -1139,20 +1195,20 @@ static void recv_generator(char *fname, 
+@@ -1132,20 +1188,20 @@ static void recv_generator(char *fname, 
        fnamecmp = fname;
        fnamecmp_type = FNAMECMP_FNAME;
  
@@ -1903,9 +1903,9 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 -                      return;
 +                      goto cleanup;
                }
-               if (j != -1) {
+               if (j >= 0) {
                        fnamecmp = fnamecmpbuf;
-@@ -1162,7 +1218,7 @@ static void recv_generator(char *fname, 
+@@ -1155,7 +1211,7 @@ static void recv_generator(char *fname, 
        }
  
        real_ret = statret;
@@ -1914,7 +1914,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
        if (partial_dir && (partialptr = partial_dir_fname(fname)) != NULL
            && link_stat(partialptr, &partial_st, 0) == 0
-@@ -1181,7 +1237,7 @@ static void recv_generator(char *fname, 
+@@ -1174,7 +1230,7 @@ static void recv_generator(char *fname, 
                                rprintf(FINFO, "fuzzy basis selected for %s: %s\n",
                                        fname, fnamecmpbuf);
                        }
@@ -1923,7 +1923,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                        statret = 0;
                        fnamecmp = fnamecmpbuf;
                        fnamecmp_type = FNAMECMP_FUZZY;
-@@ -1190,7 +1246,7 @@ static void recv_generator(char *fname, 
+@@ -1183,7 +1239,7 @@ static void recv_generator(char *fname, 
  
        if (statret != 0) {
                if (preserve_hard_links && file->link_u.links
@@ -1932,7 +1932,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                       itemizing, code, HL_SKIP))
                        return;
                if (stat_errno == ENOENT)
-@@ -1200,39 +1256,52 @@ static void recv_generator(char *fname, 
+@@ -1193,39 +1249,52 @@ static void recv_generator(char *fname, 
                return;
        }
  
@@ -1992,7 +1992,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                fnamecmp = partialptr;
                fnamecmp_type = FNAMECMP_PARTIAL_DIR;
                statret = 0;
-@@ -1256,17 +1325,21 @@ static void recv_generator(char *fname, 
+@@ -1249,17 +1318,21 @@ static void recv_generator(char *fname, 
          pretend_missing:
                /* pretend the file didn't exist */
                if (preserve_hard_links && file->link_u.links
@@ -2017,7 +2017,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                }
                if (!(back_file = make_file(fname, NULL, NULL, 0, NO_FILTERS))) {
                        close(fd);
-@@ -1277,7 +1350,7 @@ static void recv_generator(char *fname, 
+@@ -1270,7 +1343,7 @@ static void recv_generator(char *fname, 
                                full_fname(backupptr));
                        free(back_file);
                        close(fd);
@@ -2026,7 +2026,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                }
                if ((f_copy = do_open(backupptr,
                    O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) < 0) {
-@@ -1285,14 +1358,14 @@ static void recv_generator(char *fname, 
+@@ -1278,14 +1351,14 @@ static void recv_generator(char *fname, 
                                full_fname(backupptr));
                        free(back_file);
                        close(fd);
@@ -2043,7 +2043,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        }
  
        if (verbose > 2)
-@@ -1310,24 +1383,32 @@ static void recv_generator(char *fname, 
+@@ -1303,24 +1376,32 @@ static void recv_generator(char *fname, 
                        iflags |= ITEM_BASIS_TYPE_FOLLOWS;
                if (fnamecmp_type == FNAMECMP_FUZZY)
                        iflags |= ITEM_XNAME_FOLLOWS;
@@ -2081,7 +2081,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
        if (f_copy >= 0) {
                close(f_copy);
-@@ -1340,6 +1421,13 @@ static void recv_generator(char *fname, 
+@@ -1333,6 +1414,13 @@ static void recv_generator(char *fname, 
        }
  
        close(fd);
@@ -2095,7 +2095,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  }
  
  void generate_files(int f_out, struct file_list *flist, char *local_name)
-@@ -1399,6 +1487,8 @@ void generate_files(int f_out, struct fi
+@@ -1392,6 +1480,8 @@ void generate_files(int f_out, struct fi
         * notice that and let us know via the redo pipe (or its closing). */
        ignore_timeout = 1;
  
@@ -5592,16 +5592,16 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
    rprintf(F,"     --no-OPTION             turn off an implied OPTION (e.g. --no-D)\n");
    rprintf(F," -r, --recursive             recurse into directories\n");
    rprintf(F," -R, --relative              use relative path names\n");
-@@ -303,6 +309,9 @@ void usage(enum logcode F)
-   rprintf(F," -H, --hard-links            preserve hard links\n");
+@@ -304,6 +310,9 @@ void usage(enum logcode F)
    rprintf(F," -p, --perms                 preserve permissions\n");
    rprintf(F," -E, --executability         preserve the file's executability\n");
+   rprintf(F,"     --chmod=CHMOD           change the permissions of transferred files\n");
 +#ifdef SUPPORT_ACLS
 +  rprintf(F," -A, --acls                  preserve ACLs (implies --perms)\n");
 +#endif
-   rprintf(F,"     --chmod=CHMOD           change destination permissions\n");
    rprintf(F," -o, --owner                 preserve owner (super-user only)\n");
    rprintf(F," -g, --group                 preserve group\n");
+   rprintf(F,"     --devices               preserve device files (super-user only)\n");
 @@ -421,6 +430,9 @@ static struct poptOption long_options[] 
    {"no-perms",         0,  POPT_ARG_VAL,    &preserve_perms, 0, 0, 0 },
    {"no-p",             0,  POPT_ARG_VAL,    &preserve_perms, 0, 0, 0 },
@@ -5707,7 +5707,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  {
        int new_mode;
        /* If the file already exists, we'll return the local permissions,
-@@ -117,57 +119,66 @@ mode_t dest_mode(mode_t flist_mode, mode
+@@ -117,56 +119,65 @@ mode_t dest_mode(mode_t flist_mode, mode
                                new_mode |= (new_mode & 0444) >> 2;
                }
        } else {
@@ -5717,8 +5717,6 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +               * off special permissions. */
 +              new_mode = flist_mode & (~CHMOD_BITS | dflt_perms);
        }
-       if (daemon_chmod_modes && !S_ISLNK(flist_mode))
-               new_mode = tweak_mode(new_mode, daemon_chmod_modes);
        return new_mode;
  }
  
@@ -5730,6 +5728,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 -      STRUCT_STAT st2;
 +      statx sx2;
        int change_uid, change_gid;
+       mode_t new_mode = file->mode;
  
 -      if (!st) {
 +      if (!sxp) {
@@ -5745,12 +5744,12 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +#ifdef SUPPORT_ACLS
 +              sx2.acc_acl = sx2.def_acl = NULL;
 +#endif
-               if (!preserve_perms && S_ISDIR(file->mode)
+               if (!preserve_perms && S_ISDIR(new_mode)
 -               && st->st_mode & S_ISGID) {
 +               && sx2.st.st_mode & S_ISGID) {
                        /* We just created this directory and its setgid
                         * bit is on, so make sure it stays on. */
-                       file->mode |= S_ISGID;
+                       new_mode |= S_ISGID;
                }
 +              sxp = &sx2;
        }
@@ -5789,7 +5788,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                ;
        else
  #endif
-@@ -177,43 +188,55 @@ int set_file_attrs(char *fname, struct f
+@@ -176,45 +187,57 @@ int set_file_attrs(char *fname, struct f
                                rprintf(FINFO,
                                        "set uid of %s from %ld to %ld\n",
                                        fname,
@@ -5830,6 +5829,9 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                updated = 1;
        }
  
+       if (daemon_chmod_modes && !S_ISLNK(new_mode))
+               new_mode = tweak_mode(new_mode, daemon_chmod_modes);
++
 +#ifdef SUPPORT_ACLS
 +      /* It's OK to call set_acl() now, even for a dir, as the generator
 +       * will enable owner-writability using chmod, if necessary.
@@ -5842,11 +5844,9 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +#endif
 +
  #ifdef HAVE_CHMOD
--      if ((st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
--              int ret = do_chmod(fname, file->mode);
-+      if ((sxp->st.st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
-+              mode_t mode = file->mode;
-+              int ret = do_chmod(fname, mode);
+-      if ((st->st_mode & CHMOD_BITS) != (new_mode & CHMOD_BITS)) {
++      if ((sxp->st.st_mode & CHMOD_BITS) != (new_mode & CHMOD_BITS)) {
+               int ret = do_chmod(fname, new_mode);
                if (ret < 0) {
                        rsyserr(FERROR, errno,
                                "failed to set permissions on %s",
@@ -5856,7 +5856,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                }
                if (ret == 0) /* ret == 1 if symlink could not be set */
                        updated = 1;
-@@ -226,6 +249,11 @@ int set_file_attrs(char *fname, struct f
+@@ -227,6 +250,11 @@ int set_file_attrs(char *fname, struct f
                else
                        rprintf(FCLIENT, "%s is uptodate\n", fname);
        }
@@ -5932,15 +5932,15 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
       --no-OPTION             turn off an implied OPTION (e.g. --no-D)
   -r, --recursive             recurse into directories
   -R, --relative              use relative path names
-@@ -321,6 +321,7 @@ to the detailed description below for a 
-  -H, --hard-links            preserve hard links
+@@ -322,6 +322,7 @@ to the detailed description below for a 
   -p, --perms                 preserve permissions
   -E, --executability         preserve executability
+      --chmod=CHMOD           change the permissions of transferred files
 + -A, --acls                  preserve ACLs (implies -p) [non-standard]
-      --chmod=CHMOD           change destination permissions
   -o, --owner                 preserve owner (super-user only)
   -g, --group                 preserve group
-@@ -746,7 +747,9 @@ quote(itemize(
+      --devices               preserve device files (super-user only)
+@@ -747,7 +748,9 @@ quote(itemize(
    permissions, though the bf(--executability) option might change just
    the execute permission for the file.
    it() New files get their "normal" permission bits set to the source
@@ -5951,7 +5951,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
    their special permission bits disabled except in the case where a new
    directory inherits a setgid bit from its parent directory.
  ))
-@@ -777,9 +780,11 @@ The preservation of the destination's se
+@@ -778,9 +781,11 @@ The preservation of the destination's se
  directories when bf(--perms) is off was added in rsync 2.6.7.  Older rsync
  versions erroneously preserved the three special permission bits for
  newly-created files when bf(--perms) was off, while overriding the
@@ -5966,7 +5966,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
  dit(bf(-E, --executability)) This option causes rsync to preserve the
  executability (or non-executability) of regular files when bf(--perms) is
-@@ -797,6 +802,15 @@ quote(itemize(
+@@ -798,6 +803,15 @@ quote(itemize(
  
  If bf(--perms) is enabled, this option is ignored.
  
@@ -5982,7 +5982,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  dit(bf(--chmod)) This option tells rsync to apply one or more
  comma-separated "chmod" strings to the permission of the files in the
  transfer.  The resulting value is treated as though it was the permissions
-@@ -1377,8 +1391,8 @@ if the receiving rsync is at least versi
+@@ -1383,8 +1397,8 @@ if the receiving rsync is at least versi
  with older versions of rsync, but that also turns on the output of other
  verbose messages).
  
@@ -5993,7 +5993,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  type of update being done, bf(X) is replaced by the file-type, and the
  other letters represent attributes that may be output if they are being
  modified.
-@@ -1427,7 +1441,11 @@ quote(itemize(
+@@ -1433,7 +1447,11 @@ quote(itemize(
    sender's value (requires bf(--owner) and super-user privileges).
    it() A bf(g) means the group is different and is being updated to the
    sender's value (requires bf(--group) and the authority to set the group).
@@ -6726,7 +6726,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                for (i = 0; i < flist->count; i++)
 --- old/util.c
 +++ new/util.c
-@@ -1549,3 +1549,31 @@ int bitbag_next_bit(struct bitbag *bb, i
+@@ -1550,3 +1550,31 @@ int bitbag_next_bit(struct bitbag *bb, i
  
        return -1;
  }
index 9bf36bd..3eaf5d3 100644 (file)
@@ -174,7 +174,7 @@ After applying this patch, run these commands for a successful build:
                void *save_filters;
                unsigned int len = strlen(fbuf);
                if (len > 1 && fbuf[len-1] == '/')
-@@ -1583,8 +1608,9 @@ static void clean_flist(struct file_list
+@@ -1585,8 +1610,9 @@ static void clean_flist(struct file_list
                        }
                        /* Make sure we don't lose track of a user-specified
                         * top directory. */
@@ -186,7 +186,7 @@ After applying this patch, run these commands for a successful build:
  
                        clear_file(flist->files[drop], flist);
  
-@@ -1708,7 +1734,7 @@ static void output_flist(struct file_lis
+@@ -1710,7 +1736,7 @@ static void output_flist(struct file_lis
                        file->dirname ? file->dirname : "",
                        file->dirname ? "/" : "", NS(file->basename),
                        S_ISDIR(file->mode) ? "/" : "", (int)file->mode,
@@ -273,7 +273,7 @@ After applying this patch, run these commands for a successful build:
                        continue;
  
                name = fp->basename;
-@@ -664,6 +669,8 @@ static int try_dests_reg(struct file_str
+@@ -657,6 +662,8 @@ static int try_dests_reg(struct file_str
                                          itemizing && verbose > 1,
                                          code) < 0)
                                goto try_a_copy;
@@ -282,7 +282,7 @@ After applying this patch, run these commands for a successful build:
                        if (preserve_hard_links && file->link_u.links)
                                hard_link_cluster(file, ndx, itemizing, code);
                } else
-@@ -941,7 +948,7 @@ static void recv_generator(char *fname, 
+@@ -934,7 +941,7 @@ static void recv_generator(char *fname, 
                    && verbose && code && f_out != -1)
                        rprintf(code, "%s/\n", fname);
                if (delete_during && f_out != -1 && !phase && dry_run < 2
@@ -291,7 +291,7 @@ After applying this patch, run these commands for a successful build:
                        delete_in_dir(the_file_list, fname, file, &st);
                return;
        }
-@@ -1244,7 +1251,7 @@ static void recv_generator(char *fname, 
+@@ -1237,7 +1244,7 @@ static void recv_generator(char *fname, 
        if (fuzzy_dirlist) {
                int j = flist_find(fuzzy_dirlist, file);
                if (j >= 0) /* don't use changing file as future fuzzy basis */
@@ -422,15 +422,15 @@ After applying this patch, run these commands for a successful build:
  extern int preserve_times;
  extern int omit_dir_times;
  extern int am_root;
-@@ -127,6 +128,7 @@ int set_file_attrs(char *fname, struct f
+@@ -129,6 +130,7 @@ int set_file_attrs(char *fname, struct f
        int updated = 0;
        STRUCT_STAT st2;
        int change_uid, change_gid;
 +      time_t atime, mtime;
+       mode_t new_mode = file->mode;
  
        if (!st) {
-               if (dry_run)
-@@ -145,18 +147,33 @@ int set_file_attrs(char *fname, struct f
+@@ -148,18 +150,33 @@ int set_file_attrs(char *fname, struct f
                }
        }
  
@@ -513,7 +513,7 @@ After applying this patch, run these commands for a successful build:
       --super                 receiver attempts super-user activities
   -S, --sparse                handle sparse files efficiently
   -n, --dry-run               show what would have been transferred
-@@ -862,6 +863,12 @@ it is preserving modification times (see
+@@ -863,6 +864,12 @@ it is preserving modification times (see
  the directories on the receiving side, it is a good idea to use bf(-O).
  This option is inferred if you use bf(--backup) without bf(--backup-dir).
  
@@ -526,7 +526,7 @@ After applying this patch, run these commands for a successful build:
  dit(bf(--super)) This tells the receiving side to attempt super-user
  activities even if the receiving rsync wasn't run by the super-user.  These
  activities include: preserving users via the bf(--owner) option, preserving
-@@ -1378,7 +1385,7 @@ with older versions of rsync, but that a
+@@ -1384,7 +1391,7 @@ with older versions of rsync, but that a
  verbose messages).
  
  The "%i" escape has a cryptic output that is 9 letters long.  The general
@@ -535,7 +535,7 @@ After applying this patch, run these commands for a successful build:
  type of update being done, bf(X) is replaced by the file-type, and the
  other letters represent attributes that may be output if they are being
  modified.
-@@ -1418,7 +1425,7 @@ quote(itemize(
+@@ -1424,7 +1431,7 @@ quote(itemize(
    by the file transfer.
    it() A bf(t) means the modification time is different and is being updated
    to the sender's value (requires bf(--times)).  An alternate value of bf(T)
@@ -544,7 +544,7 @@ After applying this patch, run these commands for a successful build:
    anytime a symlink is transferred, or when a file or device is transferred
    without bf(--times).
    it() A bf(p) means the permissions are different and are being updated to
-@@ -1427,7 +1434,10 @@ quote(itemize(
+@@ -1433,7 +1440,10 @@ quote(itemize(
    sender's value (requires bf(--owner) and super-user privileges).
    it() A bf(g) means the group is different and is being updated to the
    sender's value (requires bf(--group) and the authority to set the group).
@@ -566,7 +566,7 @@ After applying this patch, run these commands for a successful build:
  extern struct stats stats;
  extern struct file_list *the_file_list;
  extern char *stdout_format;
-@@ -368,7 +369,7 @@ void send_files(struct file_list *flist,
+@@ -373,7 +374,7 @@ void send_files(struct file_list *flist,
                        rprintf(FINFO, "sender finished %s\n", fname);
  
                /* Flag that we actually sent this entry. */
index 13e7e4b..629c6bd 100644 (file)
@@ -5,7 +5,7 @@ Modified from a patch that was written by Rolf Grossmann:
 
 --- old/configure.in
 +++ new/configure.in
-@@ -494,7 +494,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strd
+@@ -527,7 +527,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strd
      memmove lchown vsnprintf snprintf vasprintf asprintf setsid glob strpbrk \
      strlcat strlcpy strtol mallinfo getgroups setgroups geteuid getegid \
      setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \
@@ -92,7 +92,7 @@ Modified from a patch that was written by Rolf Grossmann:
        file->uid = uid;
        file->gid = gid;
  
-@@ -855,6 +878,9 @@ struct file_struct *make_file(char *fnam
+@@ -857,6 +880,9 @@ struct file_struct *make_file(char *fnam
        file->modtime = st.st_mtime;
        file->length = st.st_size;
        file->mode = st.st_mode;
@@ -181,7 +181,7 @@ Modified from a patch that was written by Rolf Grossmann:
    rprintf(F," -p, --perms                 preserve permissions\n");
 +  rprintf(F,"     --flags                 preserve file flags\n");
    rprintf(F," -E, --executability         preserve the file's executability\n");
-   rprintf(F,"     --chmod=CHMOD           change destination permissions\n");
+   rprintf(F,"     --chmod=CHMOD           change the permissions of transferred files\n");
    rprintf(F," -o, --owner                 preserve owner (super-user only)\n");
 @@ -420,6 +427,8 @@ static struct poptOption long_options[] 
    {"perms",           'p', POPT_ARG_VAL,    &preserve_perms, 1, 0, 0 },
@@ -192,7 +192,7 @@ Modified from a patch that was written by Rolf Grossmann:
    {"executability",   'E', POPT_ARG_NONE,   &preserve_executability, 0, 0, 0 },
    {"times",           't', POPT_ARG_VAL,    &preserve_times, 1, 0, 0 },
    {"no-times",         0,  POPT_ARG_VAL,    &preserve_times, 0, 0, 0 },
-@@ -1122,6 +1131,15 @@ int parse_arguments(int *argc, const cha
+@@ -1123,6 +1132,15 @@ int parse_arguments(int *argc, const cha
        }
  #endif
  
@@ -208,7 +208,7 @@ Modified from a patch that was written by Rolf Grossmann:
        if (write_batch && read_batch) {
                snprintf(err_buf, sizeof err_buf,
                        "--write-batch and --read-batch can not be used together\n");
-@@ -1579,6 +1597,9 @@ void server_options(char **args,int *arg
+@@ -1580,6 +1598,9 @@ void server_options(char **args,int *arg
        if (xfer_dirs && !recurse && delete_mode && am_sender)
                args[ac++] = "--no-r";
  
@@ -228,7 +228,7 @@ Modified from a patch that was written by Rolf Grossmann:
  extern int preserve_executability;
  extern int preserve_times;
  extern int omit_dir_times;
-@@ -216,6 +217,19 @@ int set_file_attrs(char *fname, struct f
+@@ -221,6 +222,19 @@ int set_file_attrs(char *fname, struct f
        }
  #endif
  
@@ -248,7 +248,7 @@ Modified from a patch that was written by Rolf Grossmann:
        if (verbose > 1 && flags & ATTRS_REPORT) {
                if (updated)
                        rprintf(FCLIENT, "%s\n", fname);
-@@ -249,6 +263,10 @@ void finish_transfer(char *fname, char *
+@@ -254,6 +268,10 @@ void finish_transfer(char *fname, char *
  {
        int ret;
  
@@ -259,7 +259,7 @@ Modified from a patch that was written by Rolf Grossmann:
        if (inplace) {
                if (verbose > 2)
                        rprintf(FINFO, "finishing %s\n", fname);
-@@ -302,3 +320,21 @@ const char *who_am_i(void)
+@@ -307,3 +325,21 @@ const char *who_am_i(void)
                return am_server ? "server" : "client";
        return am_sender ? "sender" : am_generator ? "generator" : "receiver";
  }
@@ -291,7 +291,7 @@ Modified from a patch that was written by Rolf Grossmann:
  
  /* These flags are used in the live flist data. */
  
-@@ -338,6 +339,10 @@ enum msgcode {
+@@ -344,6 +345,10 @@ enum msgcode {
  #define schar char
  #endif
  
@@ -302,7 +302,7 @@ Modified from a patch that was written by Rolf Grossmann:
  /* Find a variable that is either exactly 32-bits or longer.
   * If some code depends on 32-bit truncation, it will need to
   * take special action in a "#if SIZEOF_INT32 > 4" section. */
-@@ -520,6 +525,9 @@ struct file_struct {
+@@ -526,6 +531,9 @@ struct file_struct {
                struct hlink *links;
        } link_u;
        time_t modtime;
@@ -314,15 +314,15 @@ Modified from a patch that was written by Rolf Grossmann:
        mode_t mode;
 --- old/rsync.yo
 +++ new/rsync.yo
-@@ -322,6 +322,7 @@ to the detailed description below for a 
+@@ -320,6 +320,7 @@ to the detailed description below for a 
+  -K, --keep-dirlinks         treat symlinked dir on receiver as dir
+  -H, --hard-links            preserve hard links
   -p, --perms                 preserve permissions
-  -E, --executability         preserve executability
-      --chmod=CHMOD           change destination permissions
 +     --flags                 preserve file flags
+  -E, --executability         preserve executability
+      --chmod=CHMOD           change the permissions of transferred files
   -o, --owner                 preserve owner (super-user only)
-  -g, --group                 preserve group
-      --devices               preserve device files (super-user only)
-@@ -502,7 +503,9 @@ specified, in which case bf(-r) is not i
+@@ -503,7 +504,9 @@ specified, in which case bf(-r) is not i
  
  Note that bf(-a) bf(does not preserve hardlinks), because
  finding multiply-linked files is expensive.  You must separately
@@ -333,7 +333,7 @@ Modified from a patch that was written by Rolf Grossmann:
  
  dit(--no-OPTION) You may turn off one or more implied options by prefixing
  the option name with "no-".  Not all options may be prefixed with a "no-":
-@@ -797,6 +800,13 @@ quote(itemize(
+@@ -798,6 +801,13 @@ quote(itemize(
  
  If bf(--perms) is enabled, this option is ignored.
  
index 200ffe6..078ac43 100644 (file)
@@ -67,7 +67,7 @@ gets to be really large.
                        file->u.link = NULL;
                } else
                        file->mode = save_mode;
-@@ -1377,7 +1375,7 @@ struct file_list *recv_file_list(int f)
+@@ -1379,7 +1377,7 @@ struct file_list *recv_file_list(int f)
        clean_flist(flist, relative_paths, 1);
  
        if (f >= 0) {
@@ -76,7 +76,7 @@ gets to be really large.
  
                /* Recv the io_error flag */
                if (lp_ignore_errors(module_id) || ignore_errors)
-@@ -1693,13 +1691,15 @@ static void output_flist(struct file_lis
+@@ -1695,13 +1693,15 @@ static void output_flist(struct file_lis
  
        for (i = 0; i < flist->count; i++) {
                file = flist->files[i];
@@ -186,16 +186,16 @@ gets to be really large.
  extern struct chmod_mode_struct *daemon_chmod_modes;
  
  #if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
-@@ -127,6 +128,8 @@ int set_file_attrs(char *fname, struct f
-       int updated = 0;
+@@ -130,6 +131,8 @@ int set_file_attrs(char *fname, struct f
        STRUCT_STAT st2;
        int change_uid, change_gid;
+       mode_t new_mode = file->mode;
 +      uid_t uid;
 +      gid_t gid;
  
        if (!st) {
                if (dry_run)
-@@ -159,9 +162,11 @@ int set_file_attrs(char *fname, struct f
+@@ -162,9 +165,11 @@ int set_file_attrs(char *fname, struct f
                        updated = 1;
        }
  
@@ -210,7 +210,7 @@ gets to be really large.
  #if !defined HAVE_LCHOWN && !defined CHOWN_MODIFIES_SYMLINK
        if (S_ISLNK(st->st_mode))
                ;
-@@ -173,18 +178,18 @@ int set_file_attrs(char *fname, struct f
+@@ -176,18 +181,18 @@ int set_file_attrs(char *fname, struct f
                                rprintf(FINFO,
                                        "set uid of %s from %ld to %ld\n",
                                        fname,
index bd35628..40ea16b 100644 (file)
@@ -17,7 +17,7 @@ TODO:
 
 --- old/Makefile.in
 +++ new/Makefile.in
-@@ -27,13 +27,13 @@ VERSION=@VERSION@
+@@ -28,13 +28,13 @@ VERSION=@VERSION@
  
  HEADERS=byteorder.h config.h errcode.h proto.h rsync.h smb_acls.h lib/pool_alloc.h
  LIBOBJ=lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o \
@@ -134,7 +134,7 @@ TODO:
        if ((am_root && preserve_devices && IS_DEVICE(file->mode))
 --- old/configure.in
 +++ new/configure.in
-@@ -823,6 +823,30 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_
+@@ -856,6 +856,30 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_
    AC_MSG_RESULT(no)
  )
  
@@ -211,7 +211,7 @@ TODO:
        bp += xtra_len;
  #endif
  
-@@ -717,6 +724,10 @@ static struct file_struct *receive_file_
+@@ -719,6 +726,10 @@ static struct file_struct *receive_file_
        if (preserve_acls)
                receive_acl(file, f);
  #endif
@@ -222,7 +222,7 @@ TODO:
  
        return file;
  }
-@@ -987,6 +998,13 @@ static struct file_struct *send_file_nam
+@@ -989,6 +1000,13 @@ static struct file_struct *send_file_nam
                        return NULL;
        }
  #endif
@@ -236,7 +236,7 @@ TODO:
  
        maybe_emit_filelist_progress(flist->count + flist_count_offset);
  
-@@ -999,11 +1017,19 @@ static struct file_struct *send_file_nam
+@@ -1001,11 +1019,19 @@ static struct file_struct *send_file_nam
                if (preserve_acls)
                        send_acl(&sx, f);
  #endif
@@ -369,16 +369,16 @@ TODO:
    rprintf(F,"     --no-OPTION             turn off an implied OPTION (e.g. --no-D)\n");
    rprintf(F," -r, --recursive             recurse into directories\n");
    rprintf(F," -R, --relative              use relative path names\n");
-@@ -312,6 +316,9 @@ void usage(enum logcode F)
+@@ -313,6 +317,9 @@ void usage(enum logcode F)
  #ifdef SUPPORT_ACLS
    rprintf(F," -A, --acls                  preserve ACLs (implies --perms)\n");
  #endif
 +#ifdef SUPPORT_XATTRS
 +  rprintf(F," -X, --xattrs                preserve extended attributes (implies --perms)\n");
 +#endif
-   rprintf(F,"     --chmod=CHMOD           change destination permissions\n");
    rprintf(F," -o, --owner                 preserve owner (super-user only)\n");
    rprintf(F," -g, --group                 preserve group\n");
+   rprintf(F,"     --devices               preserve device files (super-user only)\n");
 @@ -433,6 +440,9 @@ static struct poptOption long_options[] 
    {"acls",            'A', POPT_ARG_NONE,   0, 'A', 0, 0 },
    {"no-acls",          0,  POPT_ARG_VAL,    &preserve_acls, 0, 0, 0 },
@@ -389,7 +389,7 @@ TODO:
    {"times",           't', POPT_ARG_VAL,    &preserve_times, 1, 0, 0 },
    {"no-times",         0,  POPT_ARG_VAL,    &preserve_times, 0, 0, 0 },
    {"no-t",             0,  POPT_ARG_VAL,    &preserve_times, 0, 0, 0 },
-@@ -1112,6 +1122,17 @@ int parse_arguments(int *argc, const cha
+@@ -1113,6 +1123,17 @@ int parse_arguments(int *argc, const cha
                        return 0;
  #endif
  
@@ -407,7 +407,7 @@ TODO:
  
                default:
                        /* A large opt value means that set_refuse_options()
-@@ -1562,6 +1583,10 @@ void server_options(char **args,int *arg
+@@ -1563,6 +1584,10 @@ void server_options(char **args,int *arg
        if (preserve_acls)
                argstr[x++] = 'A';
  #endif
@@ -428,7 +428,7 @@ TODO:
  extern int preserve_perms;
  extern int preserve_executability;
  extern int preserve_times;
-@@ -222,6 +223,10 @@ int set_file_attrs(char *fname, struct f
+@@ -229,6 +230,10 @@ int set_file_attrs(char *fname, struct f
        if (preserve_acls && set_acl(fname, file, sxp) == 0)
                updated = 1;
  #endif
@@ -438,10 +438,10 @@ TODO:
 +#endif
  
  #ifdef HAVE_CHMOD
-       if ((sxp->st.st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
+       if ((sxp->st.st_mode & CHMOD_BITS) != (new_mode & CHMOD_BITS)) {
 --- old/rsync.h
 +++ new/rsync.h
-@@ -495,6 +495,10 @@ struct idev {
+@@ -501,6 +501,10 @@ struct idev {
  #define ACLS_NEED_MASK 1
  #endif
  
@@ -452,7 +452,7 @@ TODO:
  #define GID_NONE ((gid_t)-1)
  
  #define HL_CHECK_MASTER       0
-@@ -687,6 +691,9 @@ typedef struct {
+@@ -693,6 +697,9 @@ typedef struct {
      struct rsync_acl *acc_acl; /* access ACL */
      struct rsync_acl *def_acl; /* default ACL */
  #endif
@@ -473,15 +473,15 @@ TODO:
       --no-OPTION             turn off an implied OPTION (e.g. --no-D)
   -r, --recursive             recurse into directories
   -R, --relative              use relative path names
-@@ -322,6 +322,7 @@ to the detailed description below for a 
-  -p, --perms                 preserve permissions
+@@ -323,6 +323,7 @@ to the detailed description below for a 
   -E, --executability         preserve executability
+      --chmod=CHMOD           change the permissions of transferred files
   -A, --acls                  preserve ACLs (implies -p) [non-standard]
 + -X, --xattrs                preserve extended attrs (implies -p) [n.s.]
-      --chmod=CHMOD           change destination permissions
   -o, --owner                 preserve owner (super-user only)
   -g, --group                 preserve group
-@@ -811,6 +812,11 @@ version makes it incompatible with sendi
+      --devices               preserve device files (super-user only)
+@@ -812,6 +813,11 @@ version makes it incompatible with sendi
  rsync unless you double the bf(--acls) option (e.g. bf(-AA)).  This
  doubling is not needed when pulling files from an older rsync.