Fixed a failing hunk.
[rsync/rsync-patches.git] / acls.diff
index dc1ab65..d8b5419 100644 (file)
--- a/acls.diff
+++ b/acls.diff
@@ -30,7 +30,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  popt_OBJS=popt/findme.o  popt/popt.o  popt/poptconfig.o \
 --- old/acls.c
 +++ new/acls.c
  popt_OBJS=popt/findme.o  popt/popt.o  popt/poptconfig.o \
 --- old/acls.c
 +++ new/acls.c
-@@ -0,0 +1,1099 @@
+@@ -0,0 +1,1093 @@
 +/*
 + * Handle passing Access Control Lists between systems.
 + *
 +/*
 + * Handle passing Access Control Lists between systems.
 + *
@@ -160,9 +160,6 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +{
 +      racl->user_obj = (mode >> 6) & 7;
 +      racl->group_obj = (mode >> 3) & 7;
 +{
 +      racl->user_obj = (mode >> 6) & 7;
 +      racl->group_obj = (mode >> 3) & 7;
-+#ifdef ACLS_NEED_MASK
-+      racl->mask = (mode >> 3) & 7;
-+#endif
 +      racl->other = mode & 7;
 +}
 +
 +      racl->other = mode & 7;
 +}
 +
@@ -185,19 +182,19 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +
 +static BOOL rsync_acl_equal(const rsync_acl *racl1, const rsync_acl *racl2)
 +{
 +
 +static BOOL rsync_acl_equal(const rsync_acl *racl1, const rsync_acl *racl2)
 +{
-+      return (racl1->user_obj == racl2->user_obj
-+           && racl1->group_obj == racl2->group_obj
-+           && racl1->mask == racl2->mask
-+           && racl1->other == racl2->other
-+           && ida_entries_equal(&racl1->users, &racl2->users)
-+           && ida_entries_equal(&racl1->groups, &racl2->groups));
++      return racl1->user_obj == racl2->user_obj
++          && racl1->group_obj == racl2->group_obj
++          && racl1->mask == racl2->mask
++          && racl1->other == racl2->other
++          && ida_entries_equal(&racl1->users, &racl2->users)
++          && ida_entries_equal(&racl1->groups, &racl2->groups);
 +}
 +
 +/* Are the extended (non-permission-bit) entries equal?  If so, the rest of
 + * the ACL will be handled by the normal mode-preservation code.  This is
 + * only meaningful for access ACLs!  Note: the 1st arg is a fully-populated
 + * rsync_acl, but the 2nd parameter can be a condensed rsync_acl, which means
 +}
 +
 +/* Are the extended (non-permission-bit) entries equal?  If so, the rest of
 + * the ACL will be handled by the normal mode-preservation code.  This is
 + * only meaningful for access ACLs!  Note: the 1st arg is a fully-populated
 + * rsync_acl, but the 2nd parameter can be a condensed rsync_acl, which means
-+ * that it might have several of its perm objects set to NO_ENTRY. */
++ * that it might have several of its permission objects set to NO_ENTRY. */
 +static BOOL rsync_acl_equal_enough(const rsync_acl *racl1,
 +                                 const rsync_acl *racl2, mode_t m)
 +{
 +static BOOL rsync_acl_equal_enough(const rsync_acl *racl1,
 +                                 const rsync_acl *racl2, mode_t m)
 +{
@@ -289,7 +286,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +
 +/* === System ACLs === */
 +
 +
 +/* === System ACLs === */
 +
-+/* Unpack system acl -> rsync acl verbatim.  Return whether we succeeded. */
++/* Unpack system ACL -> rsync ACL verbatim.  Return whether we succeeded. */
 +static BOOL unpack_smb_acl(rsync_acl *racl, SMB_ACL_T sacl)
 +{
 +      static item_list temp_ida_list = EMPTY_ITEM_LIST;
 +static BOOL unpack_smb_acl(rsync_acl *racl, SMB_ACL_T sacl)
 +{
 +      static item_list temp_ida_list = EMPTY_ITEM_LIST;
@@ -380,7 +377,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +      sort_ida_entries(&racl->groups);
 +
 +#ifdef ACLS_NEED_MASK
 +      sort_ida_entries(&racl->groups);
 +
 +#ifdef ACLS_NEED_MASK
-+      if (!racl->users.count && !racl->groups.count) {
++      if (!racl->users.count && !racl->groups.count && racl->mask != NO_ENTRY) {
 +              /* Throw away a superfluous mask, but mask off the
 +               * group perms with it first. */
 +              racl->group_obj &= racl->mask;
 +              /* Throw away a superfluous mask, but mask off the
 +               * group perms with it first. */
 +              racl->group_obj &= racl->mask;
@@ -427,7 +424,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +      return -1;
 +}
 +
 +      return -1;
 +}
 +
-+/* Pack rsync acl -> system acl verbatim.  Return whether we succeeded. */
++/* Pack rsync ACL -> system ACL verbatim.  Return whether we succeeded. */
 +static BOOL pack_smb_acl(SMB_ACL_T *smb_acl, const rsync_acl *racl)
 +{
 +#ifdef ACLS_NEED_MASK
 +static BOOL pack_smb_acl(SMB_ACL_T *smb_acl, const rsync_acl *racl)
 +{
 +#ifdef ACLS_NEED_MASK
@@ -522,7 +519,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +      return *match;
 +}
 +
 +      return *match;
 +}
 +
-+/* Return the ACL(s) for the given filename. */
++/* Return the Access Control List for the given filename. */
 +int get_acl(const char *fname, statx *sxp)
 +{
 +      SMB_ACL_TYPE_T type;
 +int get_acl(const char *fname, statx *sxp)
 +{
 +      SMB_ACL_TYPE_T type;
@@ -570,7 +567,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +
 +/* The general strategy with the tag_type <-> character mapping is that
 + * lowercase implies that no qualifier follows, where uppercase does.
 +
 +/* The general strategy with the tag_type <-> character mapping is that
 + * lowercase implies that no qualifier follows, where uppercase does.
-+ * A similar idiom for the acl type (access or default) itself, but
++ * A similar idiom for the ACL type (access or default) itself, but
 + * lowercase in this instance means there's no ACL following, so the
 + * ACL is a repeat, so the receiver should reuse the last of the same
 + * type ACL. */
 + * lowercase in this instance means there's no ACL following, so the
 + * ACL is a repeat, so the receiver should reuse the last of the same
 + * type ACL. */
@@ -594,7 +591,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +      }
 +}
 +
 +      }
 +}
 +
-+/* Send an rsync acl over the file descriptor. */
++/* Send an rsync ACL over the file descriptor. */
 +static void send_rsync_acl(int f, const rsync_acl *racl)
 +{
 +      size_t count = count_racl_entries(racl);
 +static void send_rsync_acl(int f, const rsync_acl *racl)
 +{
 +      size_t count = count_racl_entries(racl);
@@ -647,9 +644,6 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +                              sxp->def_acl = racl;
 +              }
 +
 +                              sxp->def_acl = racl;
 +              }
 +
-+              /* Discard a superfluous mask. */
-+              if (racl->mask != NO_ENTRY && !racl->users.count && !racl->groups.count)
-+                      racl->mask = NO_ENTRY;
 +              /* Avoid sending values that can be inferred from other data,
 +               * but only when preserve_acls == 1 (it is 2 when we must be
 +               * backward compatible with older acls.diff versions). */
 +              /* Avoid sending values that can be inferred from other data,
 +               * but only when preserve_acls == 1 (it is 2 when we must be
 +               * backward compatible with older acls.diff versions). */
@@ -868,7 +862,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +
 +      if (S_ISDIR(mode)) {
 +              /* If the sticky bit is going on, it's not safe to allow all
 +
 +      if (S_ISDIR(mode)) {
 +              /* If the sticky bit is going on, it's not safe to allow all
-+               * the new ACLs to go into effect before it gets set. */
++               * the new ACL to go into effect before it gets set. */
 +#ifdef SMB_ACL_LOSES_SPECIAL_MODE_BITS
 +              if (mode & S_ISVTX)
 +                      mode &= ~0077;
 +#ifdef SMB_ACL_LOSES_SPECIAL_MODE_BITS
 +              if (mode & S_ISVTX)
 +                      mode &= ~0077;
@@ -877,7 +871,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +                      mode &= ~0077;
 +      } else {
 +              /* If setuid or setgid is going off, it's not safe to allow all
 +                      mode &= ~0077;
 +      } else {
 +              /* If setuid or setgid is going off, it's not safe to allow all
-+               * the new ACLs to go into effect before they get cleared. */
++               * the new ACL to go into effect before they get cleared. */
 +              if ((old_mode & S_ISUID && !(mode & S_ISUID))
 +               || (old_mode & S_ISGID && !(mode & S_ISGID)))
 +                      mode &= ~0077;
 +              if ((old_mode & S_ISUID && !(mode & S_ISUID))
 +               || (old_mode & S_ISGID && !(mode & S_ISGID)))
 +                      mode &= ~0077;
@@ -938,12 +932,12 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +
 +/* Set ACL on indicated filename.
 + *
 +
 +/* Set ACL on indicated filename.
 + *
-+ * This sets extended access ACL entries and default ACLs.  If convenient,
-+ * it sets permission bits along with the access ACLs and signals having
++ * This sets extended access ACL entries and default ACL.  If convenient,
++ * it sets permission bits along with the access ACL and signals having
 + * done so by modifying sxp->st.st_mode.
 + *
 + * Returns 1 for unchanged, 0 for changed, -1 for failed.  Call this
 + * done so by modifying sxp->st.st_mode.
 + *
 + * Returns 1 for unchanged, 0 for changed, -1 for failed.  Call this
-+ * with fname set to NULL to just check if the ACLs are unchanged. */
++ * with fname set to NULL to just check if the ACL is unchanged. */
 +int set_acl(const char *fname, const struct file_struct *file, statx *sxp)
 +{
 +      int unchanged = 1;
 +int set_acl(const char *fname, const struct file_struct *file, statx *sxp)
 +{
 +      int unchanged = 1;
@@ -1030,7 +1024,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +static int enum_ida_index = 0;
 +static size_t enum_racl_index = 0;
 +
 +static int enum_ida_index = 0;
 +static size_t enum_racl_index = 0;
 +
-+/* This returns the next tag_type id from the given acl for the next entry,
++/* This returns the next tag_type id from the given ACL for the next entry,
 + * or it returns 0 if there are no more tag_type ids in the acl. */
 +static id_t *next_ace_id(SMB_ACL_TAG_T tag_type, const rsync_acl *racl)
 +{
 + * or it returns 0 if there are no more tag_type ids in the acl. */
 +static id_t *next_ace_id(SMB_ACL_TAG_T tag_type, const rsync_acl *racl)
 +{
@@ -1317,7 +1311,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
 --- old/flist.c
 +++ new/flist.c
  
 --- old/flist.c
 +++ new/flist.c
-@@ -41,6 +41,7 @@ extern int curr_dir_depth;
+@@ -40,6 +40,7 @@ extern int filesfrom_fd;
  extern int one_file_system;
  extern int copy_dirlinks;
  extern int keep_dirlinks;
  extern int one_file_system;
  extern int copy_dirlinks;
  extern int keep_dirlinks;
@@ -1325,7 +1319,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  extern int preserve_links;
  extern int preserve_hard_links;
  extern int preserve_devices;
  extern int preserve_links;
  extern int preserve_hard_links;
  extern int preserve_devices;
-@@ -134,6 +135,8 @@ static void list_file_entry(struct file_
+@@ -133,6 +134,8 @@ static void list_file_entry(struct file_
  
        permstring(permbuf, f->mode);
  
  
        permstring(permbuf, f->mode);
  
@@ -1334,7 +1328,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  #ifdef SUPPORT_LINKS
        if (preserve_links && S_ISLNK(f->mode)) {
                rprintf(FINFO, "%s %11.0f %s %s -> %s\n",
  #ifdef SUPPORT_LINKS
        if (preserve_links && S_ISLNK(f->mode)) {
                rprintf(FINFO, "%s %11.0f %s %s -> %s\n",
-@@ -492,6 +495,9 @@ static struct file_struct *receive_file_
+@@ -491,6 +494,9 @@ static struct file_struct *receive_file_
        char thisname[MAXPATHLEN];
        unsigned int l1 = 0, l2 = 0;
        int alloc_len, basename_len, dirname_len, linkname_len, sum_len;
        char thisname[MAXPATHLEN];
        unsigned int l1 = 0, l2 = 0;
        int alloc_len, basename_len, dirname_len, linkname_len, sum_len;
@@ -1344,7 +1338,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        OFF_T file_length;
        char *basename, *dirname, *bp;
        struct file_struct *file;
        OFF_T file_length;
        char *basename, *dirname, *bp;
        struct file_struct *file;
-@@ -595,13 +601,27 @@ static struct file_struct *receive_file_
+@@ -594,13 +600,27 @@ static struct file_struct *receive_file_
  
        sum_len = always_checksum && S_ISREG(mode) ? MD4_SUM_LENGTH : 0;
  
  
        sum_len = always_checksum && S_ISREG(mode) ? MD4_SUM_LENGTH : 0;
  
@@ -1372,7 +1366,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
        file->modtime = modtime;
        file->length = file_length;
  
        file->modtime = modtime;
        file->length = file_length;
-@@ -694,6 +714,11 @@ static struct file_struct *receive_file_
+@@ -693,6 +713,11 @@ static struct file_struct *receive_file_
                read_buf(f, sum, checksum_len);
        }
  
                read_buf(f, sum, checksum_len);
        }
  
@@ -1384,7 +1378,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        return file;
  }
  
        return file;
  }
  
-@@ -943,6 +968,9 @@ static struct file_struct *send_file_nam
+@@ -942,6 +967,9 @@ static struct file_struct *send_file_nam
                                          unsigned short flags)
  {
        struct file_struct *file;
                                          unsigned short flags)
  {
        struct file_struct *file;
@@ -1394,7 +1388,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
        file = make_file(fname, flist, stp, flags,
                         f == -2 ? SERVER_FILTERS : ALL_FILTERS);
  
        file = make_file(fname, flist, stp, flags,
                         f == -2 ? SERVER_FILTERS : ALL_FILTERS);
-@@ -952,6 +980,15 @@ static struct file_struct *send_file_nam
+@@ -951,6 +979,15 @@ static struct file_struct *send_file_nam
        if (chmod_modes && !S_ISLNK(file->mode))
                file->mode = tweak_mode(file->mode, chmod_modes);
  
        if (chmod_modes && !S_ISLNK(file->mode))
                file->mode = tweak_mode(file->mode, chmod_modes);
  
@@ -1410,7 +1404,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        maybe_emit_filelist_progress(flist->count + flist_count_offset);
  
        flist_expand(flist);
        maybe_emit_filelist_progress(flist->count + flist_count_offset);
  
        flist_expand(flist);
-@@ -959,6 +996,15 @@ static struct file_struct *send_file_nam
+@@ -958,6 +995,15 @@ static struct file_struct *send_file_nam
        if (file->basename[0]) {
                flist->files[flist->count++] = file;
                send_file_entry(file, f);
        if (file->basename[0]) {
                flist->files[flist->count++] = file;
                send_file_entry(file, f);
@@ -1515,7 +1509,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                         int maybe_ATTRS_REPORT, enum logcode code)
  {
        int save_ignore_times = ignore_times;
                         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
+@@ -617,7 +628,7 @@ static int try_dests_reg(struct file_str
  
        do {
                pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname);
  
        do {
                pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname);
@@ -1524,7 +1518,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                        continue;
                switch (match_level) {
                case 0:
                        continue;
                switch (match_level) {
                case 0:
-@@ -626,16 +637,20 @@ static int try_dests_reg(struct file_str
+@@ -625,16 +636,20 @@ static int try_dests_reg(struct file_str
                        match_level = 1;
                        /* FALL THROUGH */
                case 1:
                        match_level = 1;
                        /* FALL THROUGH */
                case 1:
@@ -1542,13 +1536,13 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +#endif
 +                      if (!unchanged_attrs(file, sxp))
                                continue;
 +#endif
 +                      if (!unchanged_attrs(file, sxp))
                                continue;
-                       if (always_checksum
+                       if (always_checksum && preserve_times
 -                       && cmp_time(stp->st_mtime, file->modtime))
 +                       && cmp_time(sxp->st.st_mtime, file->modtime))
                                continue;
                        best_match = j;
                        match_level = 3;
 -                       && cmp_time(stp->st_mtime, file->modtime))
 +                       && cmp_time(sxp->st.st_mtime, file->modtime))
                                continue;
                        best_match = j;
                        match_level = 3;
-@@ -653,22 +668,27 @@ static int try_dests_reg(struct file_str
+@@ -651,14 +666,14 @@ static int try_dests_reg(struct file_str
        if (j != best_match) {
                j = best_match;
                pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname);
        if (j != best_match) {
                j = best_match;
                pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname);
@@ -1557,20 +1551,21 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                        match_level = 0;
        }
  
                        match_level = 0;
        }
  
- #ifdef HAVE_LINK
        if (match_level == 3 && !copy_dest) {
        if (match_level == 3 && !copy_dest) {
+ #ifdef SUPPORT_HARD_LINKS
                if (link_dest) {
 -                      if (hard_link_one(file, ndx, fname, 0, stp,
 +                      if (hard_link_one(file, ndx, fname, 0, sxp,
                                          cmpbuf, 1,
                                          itemizing && verbose > 1,
                                          code) < 0)
                if (link_dest) {
 -                      if (hard_link_one(file, ndx, fname, 0, stp,
 +                      if (hard_link_one(file, ndx, fname, 0, sxp,
                                          cmpbuf, 1,
                                          itemizing && verbose > 1,
                                          code) < 0)
-                               goto try_a_copy;
-                       if (preserve_hard_links && file->link_u.links)
+@@ -667,8 +682,13 @@ static int try_dests_reg(struct file_str
                                hard_link_cluster(file, ndx, itemizing, code);
                                hard_link_cluster(file, ndx, itemizing, code);
--              } else if (itemizing)
+               } else
+ #endif
+-              if (itemizing)
 -                      itemize(file, ndx, 0, stp, 0, 0, NULL);
 -                      itemize(file, ndx, 0, stp, 0, 0, NULL);
-+              } else if (itemizing) {
++              if (itemizing) {
 +#ifdef SUPPORT_ACLS
 +                      if (preserve_acls && !ACL_READY(*sxp))
 +                              get_acl(fname, sxp);
 +#ifdef SUPPORT_ACLS
 +                      if (preserve_acls && !ACL_READY(*sxp))
 +                              get_acl(fname, sxp);
@@ -1578,9 +1573,9 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +                      itemize(file, ndx, 0, sxp, 0, 0, NULL);
 +              }
                if (verbose > 1 && maybe_ATTRS_REPORT) {
 +                      itemize(file, ndx, 0, sxp, 0, 0, NULL);
 +              }
                if (verbose > 1 && maybe_ATTRS_REPORT) {
-                       code = daemon_log_format_has_i || dry_run
+                       code = logfile_format_has_i || dry_run
                             ? FCLIENT : FINFO;
                             ? FCLIENT : FINFO;
-@@ -687,8 +707,13 @@ static int try_dests_reg(struct file_str
+@@ -686,8 +706,13 @@ static int try_dests_reg(struct file_str
                        }
                        return -1;
                }
                        }
                        return -1;
                }
@@ -1596,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)
                set_file_attrs(fname, file, NULL, 0);
                if (maybe_ATTRS_REPORT
                 && ((!itemizing && verbose && match_level == 2)
-@@ -713,13 +738,18 @@ static int try_dests_non(struct file_str
+@@ -712,13 +737,18 @@ static int try_dests_non(struct file_str
                         enum logcode code)
  {
        char fnamebuf[MAXPATHLEN];
                         enum logcode code)
  {
        char fnamebuf[MAXPATHLEN];
@@ -1618,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
                        continue;
                if (S_ISLNK(file->mode)) {
  #ifdef SUPPORT_LINKS
-@@ -732,10 +762,10 @@ static int try_dests_non(struct file_str
+@@ -731,10 +761,10 @@ static int try_dests_non(struct file_str
  #endif
                                continue;
                } else if (IS_SPECIAL(file->mode)) {
  #endif
                                continue;
                } else if (IS_SPECIAL(file->mode)) {
@@ -1631,7 +1626,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                continue;
                } else {
                        rprintf(FERROR,
                                continue;
                } else {
                        rprintf(FERROR,
-@@ -764,7 +794,15 @@ static int try_dests_non(struct file_str
+@@ -765,7 +795,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;
                        int changes = compare_dest ? 0 : ITEM_LOCAL_CHANGE
                                    + (link_dest ? ITEM_XNAME_FOLLOWS : 0);
                        char *lp = link_dest ? "" : NULL;
@@ -1647,8 +1642,8 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +#endif
                }
                if (verbose > 1 && maybe_ATTRS_REPORT) {
 +#endif
                }
                if (verbose > 1 && maybe_ATTRS_REPORT) {
-                       code = daemon_log_format_has_i || dry_run
-@@ -778,6 +816,7 @@ static int try_dests_non(struct file_str
+                       code = logfile_format_has_i || dry_run
+@@ -779,6 +817,7 @@ static int try_dests_non(struct file_str
  }
  
  static int phase = 0;
  }
  
  static int phase = 0;
@@ -1656,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
  
  /* 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
-@@ -799,7 +838,8 @@ static void recv_generator(char *fname, 
+@@ -800,7 +839,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;
        static int need_fuzzy_dirlist = 0;
        struct file_struct *fuzzy_file = NULL;
        int fd = -1, f_copy = -1;
@@ -1666,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;
        struct file_struct *back_file = NULL;
        int statret, real_ret, stat_errno;
        char *fnamecmp, *partialptr, *backupptr = NULL;
-@@ -850,6 +890,9 @@ static void recv_generator(char *fname, 
+@@ -851,6 +891,9 @@ static void recv_generator(char *fname, 
                dry_run--;
                missing_below = -1;
        }
                dry_run--;
                missing_below = -1;
        }
@@ -1676,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;
        if (dry_run > 1) {
                statret = -1;
                stat_errno = ENOENT;
-@@ -857,7 +900,7 @@ static void recv_generator(char *fname, 
+@@ -858,7 +901,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
                char *dn = file->dirname ? file->dirname : ".";
                if (parent_dirname != dn && strcmp(parent_dirname, dn) != 0) {
                        if (relative_paths && !implied_dirs
@@ -1685,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",
                         && create_directory_path(fname) < 0) {
                                rsyserr(FERROR, errno,
                                        "recv_generator: mkdir %s failed",
-@@ -869,6 +912,10 @@ static void recv_generator(char *fname, 
+@@ -870,6 +913,10 @@ static void recv_generator(char *fname, 
                        }
                        if (fuzzy_basis)
                                need_fuzzy_dirlist = 1;
                        }
                        if (fuzzy_basis)
                                need_fuzzy_dirlist = 1;
@@ -1696,7 +1691,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                }
                parent_dirname = dn;
  
                }
                parent_dirname = dn;
  
-@@ -877,7 +924,7 @@ static void recv_generator(char *fname, 
+@@ -878,7 +925,7 @@ static void recv_generator(char *fname, 
                        need_fuzzy_dirlist = 0;
                }
  
                        need_fuzzy_dirlist = 0;
                }
  
@@ -1705,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;
        }
                                    keep_dirlinks && S_ISDIR(file->mode));
                stat_errno = errno;
        }
-@@ -895,8 +942,9 @@ static void recv_generator(char *fname, 
+@@ -896,8 +943,9 @@ static void recv_generator(char *fname, 
         * mode based on the local permissions and some heuristics. */
        if (!preserve_perms) {
                int exists = statret == 0
         * mode based on the local permissions and some heuristics. */
        if (!preserve_perms) {
                int exists = statret == 0
@@ -1717,7 +1712,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        }
  
        if (S_ISDIR(file->mode)) {
        }
  
        if (S_ISDIR(file->mode)) {
-@@ -905,8 +953,8 @@ static void recv_generator(char *fname, 
+@@ -906,8 +954,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. */
                 * 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. */
@@ -1728,7 +1723,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                return;
                        statret = -1;
                }
                                return;
                        statret = -1;
                }
-@@ -915,7 +963,11 @@ static void recv_generator(char *fname, 
+@@ -916,7 +964,11 @@ static void recv_generator(char *fname, 
                        dry_run++;
                }
                if (itemizing && f_out != -1) {
                        dry_run++;
                }
                if (itemizing && f_out != -1) {
@@ -1741,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) {
                                statret ? ITEM_LOCAL_CHANGE : 0, 0, NULL);
                }
                if (statret != 0 && do_mkdir(fname,file->mode) < 0 && errno != EEXIST) {
-@@ -927,19 +979,19 @@ static void recv_generator(char *fname, 
+@@ -928,19 +980,19 @@ static void recv_generator(char *fname, 
                                        full_fname(fname));
                        }
                }
                                        full_fname(fname));
                        }
                }
@@ -1766,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
  
        if (preserve_links && S_ISLNK(file->mode)) {
  #ifdef SUPPORT_LINKS
-@@ -957,7 +1009,7 @@ static void recv_generator(char *fname, 
+@@ -958,7 +1010,7 @@ static void recv_generator(char *fname, 
                        char lnk[MAXPATHLEN];
                        int len;
  
                        char lnk[MAXPATHLEN];
                        int len;
  
@@ -1775,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
                            && (len = readlink(fname, lnk, MAXPATHLEN-1)) > 0) {
                                lnk[len] = 0;
                                /* A link already pointing to the
-@@ -965,10 +1017,10 @@ static void recv_generator(char *fname, 
+@@ -966,10 +1018,10 @@ static void recv_generator(char *fname, 
                                 * required. */
                                if (strcmp(lnk, file->u.link) == 0) {
                                        if (itemizing) {
                                 * required. */
                                if (strcmp(lnk, file->u.link) == 0) {
                                        if (itemizing) {
@@ -1788,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) {
                                                       maybe_ATTRS_REPORT);
                                        if (preserve_hard_links
                                            && file->link_u.links) {
-@@ -981,9 +1033,9 @@ static void recv_generator(char *fname, 
+@@ -982,9 +1034,9 @@ static void recv_generator(char *fname, 
                        }
                        /* Not the right symlink (or not a symlink), so
                         * delete it. */
                        }
                        /* Not the right symlink (or not a symlink), so
                         * delete it. */
@@ -1800,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,
                                statret = -1;
                } else if (basis_dir[0] != NULL) {
                        if (try_dests_non(file, fname, ndx, itemizing,
-@@ -999,7 +1051,7 @@ static void recv_generator(char *fname, 
+@@ -1000,7 +1052,7 @@ static void recv_generator(char *fname, 
                        }
                }
                if (preserve_hard_links && file->link_u.links
                        }
                }
                if (preserve_hard_links && file->link_u.links
@@ -1809,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) {
                                       itemizing, code, HL_SKIP))
                        return;
                if (do_symlink(file->u.link,fname) != 0) {
-@@ -1008,7 +1060,7 @@ static void recv_generator(char *fname, 
+@@ -1009,7 +1061,7 @@ static void recv_generator(char *fname, 
                } else {
                        set_file_attrs(fname, file, NULL, 0);
                        if (itemizing) {
                } else {
                        set_file_attrs(fname, file, NULL, 0);
                        if (itemizing) {
@@ -1818,7 +1813,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                        ITEM_LOCAL_CHANGE, 0, NULL);
                        }
                        if (code && verbose) {
                                        ITEM_LOCAL_CHANGE, 0, NULL);
                        }
                        if (code && verbose) {
-@@ -1042,18 +1094,22 @@ static void recv_generator(char *fname, 
+@@ -1043,18 +1095,22 @@ static void recv_generator(char *fname, 
                                itemizing = code = 0;
                        }
                }
                                itemizing = code = 0;
                        }
                }
@@ -1849,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",
                                statret = -1;
                        if (verbose > 2) {
                                rprintf(FINFO,"mknod(%s,0%o,0x%x)\n",
-@@ -1066,7 +1122,7 @@ static void recv_generator(char *fname, 
+@@ -1067,7 +1123,7 @@ static void recv_generator(char *fname, 
                        } else {
                                set_file_attrs(fname, file, NULL, 0);
                                if (itemizing) {
                        } else {
                                set_file_attrs(fname, file, NULL, 0);
                                if (itemizing) {
@@ -1858,7 +1853,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                                ITEM_LOCAL_CHANGE, 0, NULL);
                                }
                                if (code && verbose)
                                                ITEM_LOCAL_CHANGE, 0, NULL);
                                }
                                if (code && verbose)
-@@ -1078,12 +1134,12 @@ static void recv_generator(char *fname, 
+@@ -1079,12 +1135,12 @@ static void recv_generator(char *fname, 
                        }
                } else {
                        if (itemizing)
                        }
                } else {
                        if (itemizing)
@@ -1874,7 +1869,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        }
  
        if (!S_ISREG(file->mode)) {
        }
  
        if (!S_ISREG(file->mode)) {
-@@ -1117,7 +1173,7 @@ static void recv_generator(char *fname, 
+@@ -1118,7 +1174,7 @@ static void recv_generator(char *fname, 
        }
  
        if (update_only && statret == 0
        }
  
        if (update_only && statret == 0
@@ -1883,7 +1878,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;
                if (verbose > 1)
                        rprintf(FINFO, "%s is newer\n", fname);
                return;
-@@ -1126,18 +1182,18 @@ static void recv_generator(char *fname, 
+@@ -1127,18 +1183,18 @@ static void recv_generator(char *fname, 
        fnamecmp = fname;
        fnamecmp_type = FNAMECMP_FNAME;
  
        fnamecmp = fname;
        fnamecmp_type = FNAMECMP_FNAME;
  
@@ -1906,7 +1901,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                if (j != -1) {
                        fnamecmp = fnamecmpbuf;
                        fnamecmp_type = j;
                if (j != -1) {
                        fnamecmp = fnamecmpbuf;
                        fnamecmp_type = j;
-@@ -1146,7 +1202,7 @@ static void recv_generator(char *fname, 
+@@ -1147,7 +1203,7 @@ static void recv_generator(char *fname, 
        }
  
        real_ret = statret;
        }
  
        real_ret = statret;
@@ -1915,7 +1910,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
  
        if (partial_dir && (partialptr = partial_dir_fname(fname)) != NULL
            && link_stat(partialptr, &partial_st, 0) == 0
-@@ -1165,7 +1221,7 @@ static void recv_generator(char *fname, 
+@@ -1166,7 +1222,7 @@ static void recv_generator(char *fname, 
                                rprintf(FINFO, "fuzzy basis selected for %s: %s\n",
                                        fname, fnamecmpbuf);
                        }
                                rprintf(FINFO, "fuzzy basis selected for %s: %s\n",
                                        fname, fnamecmpbuf);
                        }
@@ -1924,7 +1919,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                        statret = 0;
                        fnamecmp = fnamecmpbuf;
                        fnamecmp_type = FNAMECMP_FUZZY;
                        statret = 0;
                        fnamecmp = fnamecmpbuf;
                        fnamecmp_type = FNAMECMP_FUZZY;
-@@ -1174,7 +1230,7 @@ static void recv_generator(char *fname, 
+@@ -1175,7 +1231,7 @@ static void recv_generator(char *fname, 
  
        if (statret != 0) {
                if (preserve_hard_links && file->link_u.links
  
        if (statret != 0) {
                if (preserve_hard_links && file->link_u.links
@@ -1933,7 +1928,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                                       itemizing, code, HL_SKIP))
                        return;
                if (stat_errno == ENOENT)
                                       itemizing, code, HL_SKIP))
                        return;
                if (stat_errno == ENOENT)
-@@ -1184,31 +1240,44 @@ static void recv_generator(char *fname, 
+@@ -1185,31 +1241,44 @@ static void recv_generator(char *fname, 
                return;
        }
  
                return;
        }
  
@@ -1984,7 +1979,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                fnamecmp = partialptr;
                fnamecmp_type = FNAMECMP_PARTIAL_DIR;
                statret = 0;
                fnamecmp = partialptr;
                fnamecmp_type = FNAMECMP_PARTIAL_DIR;
                statret = 0;
-@@ -1232,17 +1301,21 @@ static void recv_generator(char *fname, 
+@@ -1233,17 +1302,21 @@ static void recv_generator(char *fname, 
          pretend_missing:
                /* pretend the file didn't exist */
                if (preserve_hard_links && file->link_u.links
          pretend_missing:
                /* pretend the file didn't exist */
                if (preserve_hard_links && file->link_u.links
@@ -2009,7 +2004,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);
                }
                if (!(back_file = make_file(fname, NULL, NULL, 0, NO_FILTERS))) {
                        close(fd);
-@@ -1253,7 +1326,7 @@ static void recv_generator(char *fname, 
+@@ -1254,7 +1327,7 @@ static void recv_generator(char *fname, 
                                full_fname(backupptr));
                        free(back_file);
                        close(fd);
                                full_fname(backupptr));
                        free(back_file);
                        close(fd);
@@ -2018,7 +2013,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) {
                }
                if ((f_copy = do_open(backupptr,
                    O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) < 0) {
-@@ -1261,14 +1334,14 @@ static void recv_generator(char *fname, 
+@@ -1262,14 +1335,14 @@ static void recv_generator(char *fname, 
                                full_fname(backupptr));
                        free(back_file);
                        close(fd);
                                full_fname(backupptr));
                        free(back_file);
                        close(fd);
@@ -2035,7 +2030,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        }
  
        if (verbose > 2)
        }
  
        if (verbose > 2)
-@@ -1286,24 +1359,32 @@ static void recv_generator(char *fname, 
+@@ -1287,24 +1360,32 @@ static void recv_generator(char *fname, 
                        iflags |= ITEM_BASIS_TYPE_FOLLOWS;
                if (fnamecmp_type == FNAMECMP_FUZZY)
                        iflags |= ITEM_XNAME_FOLLOWS;
                        iflags |= ITEM_BASIS_TYPE_FOLLOWS;
                if (fnamecmp_type == FNAMECMP_FUZZY)
                        iflags |= ITEM_XNAME_FOLLOWS;
@@ -2073,7 +2068,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
        if (f_copy >= 0) {
                close(f_copy);
  
        if (f_copy >= 0) {
                close(f_copy);
-@@ -1316,6 +1397,13 @@ static void recv_generator(char *fname, 
+@@ -1317,6 +1398,13 @@ static void recv_generator(char *fname, 
        }
  
        close(fd);
        }
  
        close(fd);
@@ -2087,7 +2082,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)
  }
  
  void generate_files(int f_out, struct file_list *flist, char *local_name)
-@@ -1375,6 +1463,8 @@ void generate_files(int f_out, struct fi
+@@ -1376,6 +1464,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;
  
         * notice that and let us know via the redo pipe (or its closing). */
        ignore_timeout = 1;
  
@@ -5510,7 +5505,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 +int sys_acl_free_qualifier(void *qual, SMB_ACL_TAG_T tagtype);
 --- old/log.c
 +++ new/log.c
 +int sys_acl_free_qualifier(void *qual, SMB_ACL_TAG_T tagtype);
 --- old/log.c
 +++ new/log.c
-@@ -600,8 +600,10 @@ static void log_formatted(enum logcode c
+@@ -592,8 +592,10 @@ static void log_formatted(enum logcode c
                        n[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p';
                        n[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o';
                        n[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g';
                        n[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p';
                        n[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o';
                        n[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g';
@@ -5544,7 +5539,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  int preserve_perms = 0;
  int preserve_executability = 0;
  int preserve_devices = 0;
  int preserve_perms = 0;
  int preserve_executability = 0;
  int preserve_devices = 0;
-@@ -194,6 +195,7 @@ static void print_rsync_version(enum log
+@@ -198,6 +199,7 @@ static void print_rsync_version(enum log
        char const *got_socketpair = "no ";
        char const *have_inplace = "no ";
        char const *hardlinks = "no ";
        char const *got_socketpair = "no ";
        char const *have_inplace = "no ";
        char const *hardlinks = "no ";
@@ -5552,7 +5547,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        char const *links = "no ";
        char const *ipv6 = "no ";
        STRUCT_STAT *dumstat;
        char const *links = "no ";
        char const *ipv6 = "no ";
        STRUCT_STAT *dumstat;
-@@ -210,6 +212,10 @@ static void print_rsync_version(enum log
+@@ -214,6 +216,10 @@ static void print_rsync_version(enum log
        hardlinks = "";
  #endif
  
        hardlinks = "";
  #endif
  
@@ -5563,7 +5558,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  #ifdef SUPPORT_LINKS
        links = "";
  #endif
  #ifdef SUPPORT_LINKS
        links = "";
  #endif
-@@ -223,9 +229,9 @@ static void print_rsync_version(enum log
+@@ -227,9 +233,9 @@ static void print_rsync_version(enum log
        rprintf(f, "Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.\n");
        rprintf(f, "<http://rsync.samba.org/>\n");
        rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, "
        rprintf(f, "Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.\n");
        rprintf(f, "<http://rsync.samba.org/>\n");
        rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, "
@@ -5575,7 +5570,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
        /* Note that this field may not have type ino_t.  It depends
         * on the complicated interaction between largefile feature
  
        /* Note that this field may not have type ino_t.  It depends
         * on the complicated interaction between largefile feature
-@@ -295,6 +301,9 @@ void usage(enum logcode F)
+@@ -299,6 +305,9 @@ void usage(enum logcode F)
    rprintf(F," -H, --hard-links            preserve hard links\n");
    rprintf(F," -p, --perms                 preserve permissions\n");
    rprintf(F," -E, --executability         preserve the file's executability\n");
    rprintf(F," -H, --hard-links            preserve hard links\n");
    rprintf(F," -p, --perms                 preserve permissions\n");
    rprintf(F," -E, --executability         preserve the file's executability\n");
@@ -5585,7 +5580,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
    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,"     --chmod=CHMOD           change destination permissions\n");
    rprintf(F," -o, --owner                 preserve owner (super-user only)\n");
    rprintf(F," -g, --group                 preserve group\n");
-@@ -410,6 +419,9 @@ static struct poptOption long_options[] 
+@@ -415,6 +424,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 },
    {"executability",   'E', POPT_ARG_NONE,   &preserve_executability, 0, 0, 0 },
    {"no-perms",         0,  POPT_ARG_VAL,    &preserve_perms, 0, 0, 0 },
    {"no-p",             0,  POPT_ARG_VAL,    &preserve_perms, 0, 0, 0 },
    {"executability",   'E', POPT_ARG_NONE,   &preserve_executability, 0, 0, 0 },
@@ -5595,7 +5590,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
    {"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 },
    {"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 },
-@@ -1070,6 +1082,24 @@ int parse_arguments(int *argc, const cha
+@@ -1080,6 +1092,24 @@ int parse_arguments(int *argc, const cha
                        usage(FINFO);
                        exit_cleanup(0);
  
                        usage(FINFO);
                        exit_cleanup(0);
  
@@ -5620,7 +5615,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
                default:
                        /* A large opt value means that set_refuse_options()
                         * turned this option off. */
                default:
                        /* A large opt value means that set_refuse_options()
                         * turned this option off. */
-@@ -1504,6 +1534,10 @@ void server_options(char **args,int *arg
+@@ -1526,6 +1556,10 @@ void server_options(char **args,int *arg
  
        if (preserve_hard_links)
                argstr[x++] = 'H';
  
        if (preserve_hard_links)
                argstr[x++] = 'H';
@@ -5633,7 +5628,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        if (preserve_gid)
 --- old/receiver.c
 +++ new/receiver.c
        if (preserve_gid)
 --- old/receiver.c
 +++ new/receiver.c
-@@ -48,6 +48,7 @@ extern int keep_partial;
+@@ -47,6 +47,7 @@ extern int keep_partial;
  extern int checksum_seed;
  extern int inplace;
  extern int delay_updates;
  extern int checksum_seed;
  extern int inplace;
  extern int delay_updates;
@@ -5641,9 +5636,9 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  extern struct stats stats;
  extern char *log_format;
  extern char *tmpdir;
  extern struct stats stats;
  extern char *log_format;
  extern char *tmpdir;
-@@ -346,6 +347,10 @@ int recv_files(int f_in, struct file_lis
-       int itemizing = am_daemon ? daemon_log_format_has_i
-                     : !am_server && log_format_has_i;
+@@ -344,6 +345,10 @@ int recv_files(int f_in, struct file_lis
+       int save_make_backups = make_backups;
+       int itemizing = am_server ? logfile_format_has_i : log_format_has_i;
        int max_phase = protocol_version >= 29 ? 2 : 1;
 +      int dflt_perms = (ACCESSPERMS & ~orig_umask);
 +#ifdef SUPPORT_ACLS
        int max_phase = protocol_version >= 29 ? 2 : 1;
 +      int dflt_perms = (ACCESSPERMS & ~orig_umask);
 +#ifdef SUPPORT_ACLS
@@ -5652,7 +5647,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
        int i, recv_ok;
  
        if (verbose > 2)
        int i, recv_ok;
  
        if (verbose > 2)
-@@ -543,7 +548,16 @@ int recv_files(int f_in, struct file_lis
+@@ -541,7 +546,16 @@ int recv_files(int f_in, struct file_lis
                 * mode based on the local permissions and some heuristics. */
                if (!preserve_perms) {
                        int exists = fd1 != -1;
                 * mode based on the local permissions and some heuristics. */
                if (!preserve_perms) {
                        int exists = fd1 != -1;
@@ -5675,7 +5670,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
 @@ -33,6 +33,7 @@
  extern int verbose;
  extern int dry_run;
 @@ -33,6 +33,7 @@
  extern int verbose;
  extern int dry_run;
- extern int daemon_log_format_has_i;
+ extern int logfile_format_has_i;
 +extern int preserve_acls;
  extern int preserve_perms;
  extern int preserve_executability;
 +extern int preserve_acls;
  extern int preserve_perms;
  extern int preserve_executability;
@@ -5849,7 +5844,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  
 --- old/rsync.h
 +++ new/rsync.h
  
 --- old/rsync.h
 +++ new/rsync.h
-@@ -485,6 +485,15 @@ struct idev {
+@@ -486,6 +486,15 @@ struct idev {
  #define IN_LOOPBACKNET 127
  #endif
  
  #define IN_LOOPBACKNET 127
  #endif
  
@@ -5865,7 +5860,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  #define GID_NONE ((gid_t)-1)
  
  #define HL_CHECK_MASTER       0
  #define GID_NONE ((gid_t)-1)
  
  #define HL_CHECK_MASTER       0
-@@ -645,6 +654,17 @@ struct stats {
+@@ -646,6 +655,17 @@ struct stats {
  
  struct chmod_mode_struct;
  
  
  struct chmod_mode_struct;
  
@@ -5883,7 +5878,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
  #include "byteorder.h"
  #include "lib/mdfour.h"
  #include "lib/wildmatch.h"
  #include "byteorder.h"
  #include "lib/mdfour.h"
  #include "lib/wildmatch.h"
-@@ -660,6 +680,16 @@ struct chmod_mode_struct;
+@@ -661,6 +681,16 @@ struct chmod_mode_struct;
  
  #define UNUSED(x) x __attribute__((__unused__))
  
  
  #define UNUSED(x) x __attribute__((__unused__))
  
@@ -5910,7 +5905,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync.
       --chmod=CHMOD           change destination permissions
   -o, --owner                 preserve owner (super-user only)
   -g, --group                 preserve group
       --chmod=CHMOD           change destination permissions
   -o, --owner                 preserve owner (super-user only)
   -g, --group                 preserve group
-@@ -742,7 +743,9 @@ quote(itemize(
+@@ -744,7 +745,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
    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
@@ -5921,7 +5916,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.
  ))
    their special permission bits disabled except in the case where a new
    directory inherits a setgid bit from its parent directory.
  ))
-@@ -773,9 +776,11 @@ The preservation of the destination's se
+@@ -775,9 +778,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
  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
@@ -5936,7 +5931,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
  
  dit(bf(-E, --executability)) This option causes rsync to preserve the
  executability (or non-executability) of regular files when bf(--perms) is
-@@ -793,6 +798,15 @@ quote(itemize(
+@@ -795,6 +800,15 @@ quote(itemize(
  
  If bf(--perms) is enabled, this option is ignored.
  
  
  If bf(--perms) is enabled, this option is ignored.
  
@@ -5952,7 +5947,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
  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
-@@ -1372,8 +1386,8 @@ if the receiving rsync is at least versi
+@@ -1376,8 +1390,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).
  
  with older versions of rsync, but that also turns on the output of other
  verbose messages).
  
@@ -5963,7 +5958,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.
  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.
-@@ -1422,7 +1436,11 @@ quote(itemize(
+@@ -1426,7 +1440,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).
    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).
@@ -6706,7 +6701,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
                for (i = 0; i < flist->count; i++)
 --- old/util.c
 +++ new/util.c
-@@ -1515,3 +1515,31 @@ int bitbag_next_bit(struct bitbag *bb, i
+@@ -1555,3 +1555,31 @@ int bitbag_next_bit(struct bitbag *bb, i
  
        return -1;
  }
  
        return -1;
  }