X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/1ed0b5c9ae5edd0232d22a0d8acf05bb120b23af..686ce3aa4f643829bdde0d9908228adb6b541f6d:/acls.diff diff --git a/acls.diff b/acls.diff index c0803b5..94a7cd0 100644 --- a/acls.diff +++ b/acls.diff @@ -1430,7 +1430,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. extern int preserve_links; extern int preserve_devices; extern int preserve_specials; -@@ -84,6 +85,7 @@ extern long block_size; /* "long" becaus +@@ -85,6 +86,7 @@ extern long block_size; /* "long" becaus extern int max_delete; extern int force_delete; extern int one_file_system; @@ -1438,7 +1438,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. extern struct stats stats; extern dev_t filesystem_dev; extern char *backup_dir; -@@ -316,22 +318,27 @@ static void do_delete_pass(struct file_l +@@ -317,22 +319,27 @@ static void do_delete_pass(struct file_l rprintf(FINFO, " \r"); } @@ -1471,7 +1471,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. int32 iflags, uchar fnamecmp_type, char *xname) { if (statret >= 0) { /* A from-dest-dir statret can == 1! */ -@@ -339,19 +346,23 @@ void itemize(struct file_struct *file, i +@@ -340,19 +347,23 @@ void itemize(struct file_struct *file, i : S_ISDIR(file->mode) ? !omit_dir_times : !S_ISLNK(file->mode); @@ -1500,7 +1500,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } else iflags |= ITEM_IS_NEW; -@@ -604,7 +615,7 @@ void check_for_finished_hlinks(int itemi +@@ -605,7 +616,7 @@ void check_for_finished_hlinks(int itemi * handling the file, -1 if no dest-linking occurred, or a non-negative * value if we found an alternate basis file. */ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, @@ -1509,7 +1509,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. int maybe_ATTRS_REPORT, enum logcode code) { int best_match = -1; -@@ -613,7 +624,7 @@ static int try_dests_reg(struct file_str +@@ -614,7 +625,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: -@@ -621,16 +632,20 @@ static int try_dests_reg(struct file_str +@@ -622,16 +633,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; -@@ -645,14 +660,14 @@ static int try_dests_reg(struct file_str +@@ -646,14 +661,14 @@ static int try_dests_reg(struct file_str if (j != best_match) { j = best_match; pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname); @@ -1559,8 +1559,8 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. cmpbuf, 1, itemizing && verbose > 1, code) < 0) -@@ -661,8 +676,13 @@ static int try_dests_reg(struct file_str - hard_link_cluster(file, ndx, itemizing, code); +@@ -665,8 +680,13 @@ static int try_dests_reg(struct file_str + } } else #endif - if (itemizing) @@ -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); } -@@ -678,8 +698,13 @@ static int try_dests_reg(struct file_str +@@ -682,8 +702,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) -@@ -703,13 +728,18 @@ static int try_dests_non(struct file_str +@@ -707,13 +732,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 -@@ -722,10 +752,10 @@ static int try_dests_non(struct file_str +@@ -726,10 +756,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, -@@ -756,7 +786,15 @@ static int try_dests_non(struct file_str +@@ -760,7 +790,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); -@@ -768,6 +806,7 @@ static int try_dests_non(struct file_str +@@ -772,6 +810,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 -@@ -789,7 +828,8 @@ static void recv_generator(char *fname, +@@ -793,7 +832,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; -@@ -845,6 +885,9 @@ static void recv_generator(char *fname, +@@ -849,6 +889,9 @@ static void recv_generator(char *fname, } else if (!dry_run) return; } @@ -1671,16 +1671,16 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (dry_run > 1) { statret = -1; stat_errno = ENOENT; -@@ -852,7 +895,7 @@ static void recv_generator(char *fname, +@@ -856,7 +899,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 -- && safe_stat(dn, &st) < 0 -+ && safe_stat(dn, &sx.st) < 0 +- && do_stat(dn, &st) < 0 ++ && do_stat(dn, &sx.st) < 0 && create_directory_path(fname) < 0) { rsyserr(FERROR, errno, "recv_generator: mkdir %s failed", -@@ -864,6 +907,10 @@ static void recv_generator(char *fname, +@@ -868,6 +911,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; -@@ -872,7 +919,7 @@ static void recv_generator(char *fname, +@@ -876,7 +923,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; } -@@ -890,8 +937,9 @@ static void recv_generator(char *fname, +@@ -894,8 +941,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)) { -@@ -900,8 +948,8 @@ static void recv_generator(char *fname, +@@ -904,8 +952,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,26 +1723,26 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. return; statret = -1; } -@@ -910,7 +958,11 @@ static void recv_generator(char *fname, - dry_run++; - } - if (itemizing && f_out != -1) { -- itemize(file, ndx, statret, &st, +@@ -920,7 +968,11 @@ static void recv_generator(char *fname, + sr = -1; + new_root_dir = 0; + } +- itemize(file, ndx, sr, &st, +#ifdef SUPPORT_ACLS -+ if (preserve_acls && statret == 0) ++ if (preserve_acls && sr == 0) + get_acl(fname, &sx); +#endif -+ itemize(file, ndx, statret, &sx, - statret ? ITEM_LOCAL_CHANGE : 0, 0, NULL); ++ itemize(file, ndx, sr, &sx, + sr ? ITEM_LOCAL_CHANGE : 0, 0, NULL); } if (statret != 0 && do_mkdir(fname,file->mode) < 0 && errno != EEXIST) { -@@ -930,19 +982,19 @@ static void recv_generator(char *fname, +@@ -940,19 +992,19 @@ static void recv_generator(char *fname, return; } } - if (set_file_attrs(fname, file, statret ? NULL : &st, 0) + if (set_file_attrs(fname, file, statret ? NULL : &sx, 0) - && verbose && code && f_out != -1) + && verbose && code != FNONE && f_out != -1) rprintf(code, "%s/\n", fname); if (delete_during && f_out != -1 && !phase && dry_run < 2 && (file->flags & FLAG_DEL_HERE)) @@ -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 -@@ -960,7 +1012,7 @@ static void recv_generator(char *fname, +@@ -970,7 +1022,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 -@@ -968,10 +1020,10 @@ static void recv_generator(char *fname, +@@ -978,10 +1030,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) { -@@ -986,9 +1038,9 @@ static void recv_generator(char *fname, +@@ -996,9 +1048,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, -@@ -1004,7 +1056,7 @@ static void recv_generator(char *fname, +@@ -1015,7 +1067,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) { -@@ -1013,7 +1065,7 @@ static void recv_generator(char *fname, +@@ -1024,7 +1076,7 @@ static void recv_generator(char *fname, } else { set_file_attrs(fname, file, NULL, 0); if (itemizing) { @@ -1812,9 +1812,9 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. + itemize(file, ndx, statret, &sx, ITEM_LOCAL_CHANGE, 0, NULL); } - if (code && verbose) { -@@ -1044,18 +1096,22 @@ static void recv_generator(char *fname, - itemizing = code = 0; + if (code != FNONE && verbose) { +@@ -1056,18 +1108,22 @@ static void recv_generator(char *fname, + code = FNONE; } } +#ifdef SUPPORT_ACLS @@ -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", -@@ -1068,7 +1124,7 @@ static void recv_generator(char *fname, +@@ -1080,7 +1136,7 @@ static void recv_generator(char *fname, } else { set_file_attrs(fname, file, NULL, 0); if (itemizing) { @@ -1852,8 +1852,8 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. + itemize(file, ndx, statret, &sx, ITEM_LOCAL_CHANGE, 0, NULL); } - if (code && verbose) -@@ -1082,14 +1138,14 @@ static void recv_generator(char *fname, + if (code != FNONE && verbose) +@@ -1094,14 +1150,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)) { -@@ -1123,7 +1179,7 @@ static void recv_generator(char *fname, +@@ -1135,7 +1191,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; -@@ -1132,20 +1188,20 @@ static void recv_generator(char *fname, +@@ -1144,20 +1200,20 @@ static void recv_generator(char *fname, fnamecmp = fname; fnamecmp_type = FNAMECMP_FNAME; @@ -1905,7 +1905,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } if (j >= 0) { fnamecmp = fnamecmpbuf; -@@ -1155,7 +1211,7 @@ static void recv_generator(char *fname, +@@ -1167,7 +1223,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 -@@ -1174,7 +1230,7 @@ static void recv_generator(char *fname, +@@ -1186,7 +1242,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; -@@ -1183,7 +1239,7 @@ static void recv_generator(char *fname, +@@ -1195,7 +1251,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) -@@ -1193,39 +1249,52 @@ static void recv_generator(char *fname, +@@ -1205,39 +1261,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; -@@ -1249,17 +1318,21 @@ static void recv_generator(char *fname, +@@ -1261,17 +1330,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); -@@ -1270,7 +1343,7 @@ static void recv_generator(char *fname, +@@ -1282,7 +1355,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) { -@@ -1278,14 +1351,14 @@ static void recv_generator(char *fname, +@@ -1290,14 +1363,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) -@@ -1303,24 +1376,32 @@ static void recv_generator(char *fname, +@@ -1315,24 +1388,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); -@@ -1333,6 +1414,13 @@ static void recv_generator(char *fname, +@@ -1345,6 +1426,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) -@@ -1392,6 +1480,8 @@ void generate_files(int f_out, struct fi +@@ -1404,6 +1492,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; @@ -2154,16 +2154,16 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. enum logcode code, int skip) { #ifdef SUPPORT_HARD_LINKS -@@ -209,7 +214,7 @@ int hard_link_check(struct file_struct * +@@ -215,7 +220,7 @@ int hard_link_check(struct file_struct * || st2.st_ino != st3.st_ino) continue; statret = 1; - st = &st3; + sxp->st = st3; - if (verbose < 2 || !stdout_format_has_i) - itemizing = code = 0; - break; -@@ -217,12 +222,16 @@ int hard_link_check(struct file_struct * + if (verbose < 2 || !stdout_format_has_i) { + itemizing = 0; + code = FNONE; +@@ -225,12 +230,16 @@ int hard_link_check(struct file_struct * if (!unchanged_file(cmpbuf, file, &st3)) continue; statret = 1; @@ -2183,7 +2183,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. toname, &st2, itemizing, code); if (remove_source_files == 1 && do_xfers) { char numbuf[4]; -@@ -240,7 +249,7 @@ int hard_link_check(struct file_struct * +@@ -248,7 +257,7 @@ int hard_link_check(struct file_struct * #ifdef SUPPORT_HARD_LINKS int hard_link_one(struct file_struct *file, int ndx, char *fname, @@ -2192,7 +2192,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. int itemizing, enum logcode code) { if (do_link(toname, fname)) { -@@ -256,7 +265,11 @@ int hard_link_one(struct file_struct *fi +@@ -264,7 +273,11 @@ int hard_link_one(struct file_struct *fi } if (itemizing) { @@ -2205,7 +2205,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. ITEM_LOCAL_CHANGE | ITEM_XNAME_FOLLOWS, 0, terse ? "" : toname); } -@@ -273,11 +286,12 @@ void hard_link_cluster(struct file_struc +@@ -281,11 +294,12 @@ void hard_link_cluster(struct file_struc #ifdef SUPPORT_HARD_LINKS char hlink1[MAXPATHLEN]; char *hlink2; @@ -2220,7 +2220,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. return; if (!(file->flags & FLAG_HLINK_TOL)) { while (!(file->flags & FLAG_HLINK_EOL)) { -@@ -291,9 +305,13 @@ void hard_link_cluster(struct file_struc +@@ -299,9 +313,13 @@ void hard_link_cluster(struct file_struc if (file->F_HLINDEX != SKIPPED_LINK) continue; hlink2 = f_name(file, NULL); @@ -5518,7 +5518,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 -@@ -609,8 +609,10 @@ static void log_formatted(enum logcode c +@@ -615,8 +615,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'; @@ -5531,17 +5531,6 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (iflags & (ITEM_IS_NEW|ITEM_MISSING_DATA)) { char ch = iflags & ITEM_IS_NEW ? '+' : '?'; ---- old/mkproto.awk -+++ new/mkproto.awk -@@ -58,7 +58,7 @@ BEGIN { - next; - } - --!/^OFF_T|^size_t|^off_t|^pid_t|^unsigned|^mode_t|^DIR|^user|^int|^char|^uint|^uchar|^short|^struct|^BOOL|^void|^time|^const|^RETSIGTYPE/ { -+!/^OFF_T|^size_t|^off_t|^pid_t|^id_t|^unsigned|^mode_t|^DIR|^user|^int|^char|^uint|^uchar|^short|^struct|^BOOL|^void|^time|^const|^RETSIGTYPE/ { - next; - } - --- old/options.c +++ new/options.c @@ -47,6 +47,7 @@ int copy_dirlinks = 0; @@ -5595,7 +5584,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. @@ -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"); + rprintf(F," --chmod=CHMOD affect file and/or directory permissions\n"); +#ifdef SUPPORT_ACLS + rprintf(F," -A, --acls preserve ACLs (implies --perms)\n"); +#endif @@ -5612,7 +5601,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 }, -@@ -1084,6 +1096,24 @@ int parse_arguments(int *argc, const cha +@@ -1082,6 +1094,24 @@ int parse_arguments(int *argc, const cha usage(FINFO); exit_cleanup(0); @@ -5637,7 +5626,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. */ -@@ -1529,6 +1559,10 @@ void server_options(char **args,int *arg +@@ -1523,6 +1553,10 @@ void server_options(char **args,int *arg if (preserve_hard_links) argstr[x++] = 'H'; @@ -5658,7 +5647,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. extern struct stats stats; extern char *stdout_format; extern char *tmpdir; -@@ -349,6 +350,10 @@ int recv_files(int f_in, struct file_lis +@@ -350,6 +351,10 @@ int recv_files(int f_in, struct file_lis int itemizing = am_server ? logfile_format_has_i : stdout_format_has_i; enum logcode log_code = log_before_transfer ? FLOG : FINFO; int max_phase = protocol_version >= 29 ? 2 : 1; @@ -5669,7 +5658,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. int i, recv_ok; if (verbose > 2) -@@ -549,7 +554,16 @@ int recv_files(int f_in, struct file_lis +@@ -553,7 +558,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; @@ -5886,7 +5875,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 -@@ -652,6 +661,17 @@ struct stats { +@@ -653,6 +662,17 @@ struct stats { struct chmod_mode_struct; @@ -5904,9 +5893,9 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. #include "byteorder.h" #include "lib/mdfour.h" #include "lib/wildmatch.h" -@@ -667,6 +687,16 @@ struct chmod_mode_struct; - +@@ -669,6 +689,16 @@ struct chmod_mode_struct; #define UNUSED(x) x __attribute__((__unused__)) + #define NORETURN __attribute__((__noreturn__)) +typedef struct { + STRUCT_STAT st; @@ -5935,12 +5924,12 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. @@ -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 + --chmod=CHMOD affect file and/or directory permissions + -A, --acls preserve ACLs (implies -p) [non-standard] -o, --owner preserve owner (super-user only) -g, --group preserve group --devices preserve device files (super-user only) -@@ -747,7 +748,9 @@ quote(itemize( +@@ -745,7 +746,9 @@ quote(itemization( 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 +5940,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. )) -@@ -778,9 +781,11 @@ The preservation of the destination's se +@@ -776,9 +779,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 +5955,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 -@@ -798,6 +803,15 @@ quote(itemize( +@@ -796,6 +801,15 @@ quote(itemization( If bf(--perms) is enabled, this option is ignored. @@ -5982,7 +5971,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 -@@ -1383,8 +1397,8 @@ if the receiving rsync is at least versi +@@ -1381,8 +1395,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 +5982,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. -@@ -1433,7 +1447,11 @@ quote(itemize( +@@ -1431,7 +1445,11 @@ quote(itemization( 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). @@ -6450,10 +6439,11 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. sed -e '/block2\.5/d' \ --- old/testsuite/itemize.test +++ new/testsuite/itemize.test -@@ -29,14 +29,14 @@ ln "$fromdir/foo/config1" "$fromdir/foo/ +@@ -29,15 +29,15 @@ ln "$fromdir/foo/config1" "$fromdir/foo/ $RSYNC -iplr "$fromdir/" "$todir/" \ | tee "$outfile" cat <"$chkfile" +-cd+++++++ ./ -cd+++++++ bar/ -cd+++++++ bar/baz/ ->f+++++++ bar/baz/rsync @@ -6462,6 +6452,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. ->f+++++++ foo/config2 ->f+++++++ foo/extra -cL+++++++ foo/sym -> ../bar/baz/rsync ++cd+++++++++ ./ +cd+++++++++ bar/ +cd+++++++++ bar/baz/ +>f+++++++++ bar/baz/rsync @@ -6473,7 +6464,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. EOT diff $diffopt "$chkfile" "$outfile" || test_fail "test 1 failed" -@@ -48,10 +48,10 @@ chmod 601 "$fromdir/foo/config2" +@@ -49,10 +49,10 @@ chmod 601 "$fromdir/foo/config2" $RSYNC -iplrH "$fromdir/" "$todir/" \ | tee "$outfile" cat <"$chkfile" @@ -6488,7 +6479,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. EOT diff $diffopt "$chkfile" "$outfile" || test_fail "test 2 failed" -@@ -68,11 +68,11 @@ chmod 777 "$todir/bar/baz/rsync" +@@ -69,11 +69,11 @@ chmod 777 "$todir/bar/baz/rsync" $RSYNC -iplrtc "$fromdir/" "$todir/" \ | tee "$outfile" cat <"$chkfile" @@ -6505,7 +6496,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. EOT diff $diffopt "$chkfile" "$outfile" || test_fail "test 3 failed" -@@ -97,15 +97,15 @@ $RSYNC -ivvplrtH "$fromdir/" "$todir/" \ +@@ -98,15 +98,15 @@ $RSYNC -ivvplrtH "$fromdir/" "$todir/" \ | tee "$outfile" filter_outfile cat <"$chkfile" @@ -6530,7 +6521,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. EOT diff $diffopt "$chkfile" "$outfile" || test_fail "test 5 failed" -@@ -124,8 +124,8 @@ touch "$todir/foo/config2" +@@ -125,8 +125,8 @@ touch "$todir/foo/config2" $RSYNC -iplrtH "$fromdir/" "$todir/" \ | tee "$outfile" cat <"$chkfile" @@ -6541,11 +6532,11 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. EOT diff $diffopt "$chkfile" "$outfile" || test_fail "test 7 failed" -@@ -134,15 +134,15 @@ $RSYNC -ivvplrtH --copy-dest="$lddir" "$ +@@ -135,15 +135,15 @@ $RSYNC -ivvplrtH --copy-dest=../ld "$fro | tee "$outfile" filter_outfile cat <"$chkfile" --.d..t.... ./ +-cd+++++++ ./ -cd+++++++ bar/ -cd+++++++ bar/baz/ -cf bar/baz/rsync @@ -6554,7 +6545,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. -cf foo/config2 -hf foo/extra => foo/config1 -cL..T.... foo/sym -> ../bar/baz/rsync -+.d..t...... ./ ++cd+++++++++ ./ +cd+++++++++ bar/ +cd+++++++++ bar/baz/ +cf bar/baz/rsync @@ -6566,16 +6557,16 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. EOT diff $diffopt "$chkfile" "$outfile" || test_fail "test 8 failed" -@@ -150,11 +150,11 @@ rm -rf "$todir" - $RSYNC -iplrtH --copy-dest="$lddir" "$fromdir/" "$todir/" \ +@@ -151,11 +151,11 @@ rm -rf "$todir" + $RSYNC -iplrtH --copy-dest=../ld "$fromdir/" "$todir/" \ | tee "$outfile" cat <"$chkfile" --.d..t.... ./ +-cd+++++++ ./ -cd+++++++ bar/ -cd+++++++ bar/baz/ -cd+++++++ foo/ -hf foo/extra => foo/config1 -+.d..t...... ./ ++cd+++++++++ ./ +cd+++++++++ bar/ +cd+++++++++ bar/baz/ +cd+++++++++ foo/ @@ -6583,11 +6574,11 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. EOT diff $diffopt "$chkfile" "$outfile" || test_fail "test 9 failed" -@@ -181,15 +181,15 @@ $RSYNC -ivvplrtH --link-dest="$lddir" "$ +@@ -182,15 +182,15 @@ $RSYNC -ivvplrtH --link-dest="$lddir" "$ | tee "$outfile" filter_outfile cat <"$chkfile" --.d..t.... ./ +-cd+++++++ ./ -cd+++++++ bar/ -cd+++++++ bar/baz/ -hf bar/baz/rsync @@ -6596,7 +6587,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. -hf foo/config2 -hf foo/extra => foo/config1 -hL foo/sym -> ../bar/baz/rsync -+.d..t...... ./ ++cd+++++++++ ./ +cd+++++++++ bar/ +cd+++++++++ bar/baz/ +hf bar/baz/rsync @@ -6608,26 +6599,41 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. EOT diff $diffopt "$chkfile" "$outfile" || test_fail "test 11 failed" -@@ -197,10 +197,10 @@ rm -rf "$todir" - $RSYNC -iplrtH --link-dest="$lddir" "$fromdir/" "$todir/" \ +@@ -198,10 +198,10 @@ rm -rf "$todir" + $RSYNC -iplrtH --dry-run --link-dest=../ld "$fromdir/" "$todir/" \ | tee "$outfile" cat <"$chkfile" --.d..t.... ./ +-cd+++++++ ./ -cd+++++++ bar/ -cd+++++++ bar/baz/ -cd+++++++ foo/ -+.d..t...... ./ ++cd+++++++++ ./ +cd+++++++++ bar/ +cd+++++++++ bar/baz/ +cd+++++++++ foo/ EOT diff $diffopt "$chkfile" "$outfile" || test_fail "test 12 failed" -@@ -228,14 +228,14 @@ filter_outfile +@@ -209,10 +209,10 @@ rm -rf "$todir" + $RSYNC -iplrtH --link-dest=../ld "$fromdir/" "$todir/" \ + | tee "$outfile" + cat <"$chkfile" +-cd+++++++ ./ +-cd+++++++ bar/ +-cd+++++++ bar/baz/ +-cd+++++++ foo/ ++cd+++++++++ ./ ++cd+++++++++ bar/ ++cd+++++++++ bar/baz/ ++cd+++++++++ foo/ + EOT + diff $diffopt "$chkfile" "$outfile" || test_fail "test 13 failed" + +@@ -240,14 +240,14 @@ filter_outfile # TODO fix really-old problem when combining -H with --compare-dest: # missing output for foo/extra hard-link (and it might not be updated)! cat <"$chkfile" --.d..t.... ./ +-cd+++++++ ./ -cd+++++++ bar/ -cd+++++++ bar/baz/ -.f bar/baz/rsync @@ -6635,7 +6641,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. -.f foo/config1 -.f foo/config2 -.L foo/sym -> ../bar/baz/rsync -+.d..t...... ./ ++cd+++++++++ ./ +cd+++++++++ bar/ +cd+++++++++ bar/baz/ +.f bar/baz/rsync @@ -6644,22 +6650,22 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. +.f foo/config2 +.L foo/sym -> ../bar/baz/rsync EOT - diff $diffopt "$chkfile" "$outfile" || test_fail "test 14 failed" + diff $diffopt "$chkfile" "$outfile" || test_fail "test 15 failed" -@@ -243,10 +243,10 @@ rm -rf "$todir" +@@ -255,10 +255,10 @@ rm -rf "$todir" $RSYNC -iplrtH --compare-dest="$lddir" "$fromdir/" "$todir/" \ | tee "$outfile" cat <"$chkfile" --.d..t.... ./ +-cd+++++++ ./ -cd+++++++ bar/ -cd+++++++ bar/baz/ -cd+++++++ foo/ -+.d..t...... ./ ++cd+++++++++ ./ +cd+++++++++ bar/ +cd+++++++++ bar/baz/ +cd+++++++++ foo/ EOT - diff $diffopt "$chkfile" "$outfile" || test_fail "test 15 failed" + diff $diffopt "$chkfile" "$outfile" || test_fail "test 16 failed" --- old/uidlist.c +++ new/uidlist.c @@ -6726,7 +6732,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 -@@ -1550,3 +1550,31 @@ int bitbag_next_bit(struct bitbag *bb, i +@@ -1468,3 +1468,31 @@ int bitbag_next_bit(struct bitbag *bb, i return -1; }