From a99b4480bf08f442ef6746b2a8d07a9fe01f5bf6 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sun, 2 Jan 2022 15:57:19 -0800 Subject: [PATCH 1/1] The patches for 3.2.4pre1. --- backup-deleted.diff | 8 +++--- backup-dir-dels.diff | 18 ++++++------ catch_crash_signals.diff | 2 +- checksum-reading.diff | 52 ++++++++++++++++++++++++++++------ checksum-updating.diff | 15 ++++++++-- checksum-xattr.diff | 2 +- clone-dest.diff | 14 ++++----- congestion.diff | 4 +-- copy-devices.diff | 16 +++++------ date-only.diff | 10 +++---- db.diff | 38 ++++++++++++------------- detect-renamed-lax.diff | 8 +++--- detect-renamed.diff | 14 ++++----- direct-io.diff | 6 ++-- downdate.diff | 4 +-- fileflags.diff | 52 +++++++++++++++++++++++----------- filter-attribute-mods.diff | 10 +++---- hfs-compression.diff | 24 ++++++++++------ ignore-case.diff | 10 +++---- kerberos.diff | 2 +- link-by-hash.diff | 22 +++++++------- md5p8.diff | 2 +- omit-dir-changes.diff | 10 +++---- slow-down.diff | 6 ++-- slp.diff | 4 +-- soften-links.diff | 2 +- source-backup.diff | 8 +++--- source-filter_dest-filter.diff | 16 +++++------ sparse-block.diff | 8 +++--- transliterate.diff | 12 ++++---- xxh3-safety-check.diff | 4 +-- 31 files changed, 236 insertions(+), 167 deletions(-) diff --git a/backup-deleted.diff b/backup-deleted.diff index f72d349..1bd97c2 100644 --- a/backup-deleted.diff +++ b/backup-deleted.diff @@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -41,7 +41,7 @@ diff --git a/generator.c b/generator.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -768,7 +768,8 @@ static struct poptOption long_options[] = { +@@ -769,7 +769,8 @@ static struct poptOption long_options[] = { {"no-i", 0, POPT_ARG_VAL, &itemize_changes, 0, 0, 0 }, {"bwlimit", 0, POPT_ARG_STRING, &bwlimit_arg, OPT_BWLIMIT, 0, 0 }, {"no-bwlimit", 0, POPT_ARG_VAL, &bwlimit, 0, 0, 0 }, @@ -51,7 +51,7 @@ diff --git a/options.c b/options.c {"no-backup", 0, POPT_ARG_VAL, &make_backups, 0, 0, 0 }, {"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 }, {"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 }, -@@ -2682,6 +2683,10 @@ void server_options(char **args, int *argc_p) +@@ -2687,6 +2688,10 @@ void server_options(char **args, int *argc_p) } if (am_sender) { @@ -94,7 +94,7 @@ diff --git a/rsync.1.md b/rsync.1.md --backup-dir=DIR make backups into hierarchy based in DIR --suffix=SUFFIX backup suffix (default ~ w/o --backup-dir) --update, -u skip files that are newer on the receiver -@@ -861,6 +862,13 @@ your home directory (remove the '=' for that). +@@ -873,6 +874,13 @@ your home directory (remove the '=' for that). trailing inclusion/exclusion of `*`, the auto-added rule would never be reached). diff --git a/backup-dir-dels.diff b/backup-dir-dels.diff index 2a2f111..867f920 100644 --- a/backup-dir-dels.diff +++ b/backup-dir-dels.diff @@ -204,7 +204,7 @@ diff --git a/delete.c b/delete.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -160,10 +160,14 @@ int no_detach +@@ -161,10 +161,14 @@ int no_detach int write_batch = 0; int read_batch = 0; int backup_dir_len = 0; @@ -219,7 +219,7 @@ diff --git a/options.c b/options.c char *tmpdir = NULL; char *partial_dir = NULL; char *basis_dir[MAX_BASIS_DIRS+1]; -@@ -176,7 +180,9 @@ char *password_file = NULL; +@@ -177,7 +181,9 @@ char *password_file = NULL; char *early_input_file = NULL; char *rsync_path = RSYNC_PATH; char *backup_dir = NULL; @@ -229,7 +229,7 @@ diff --git a/options.c b/options.c char *sockopts = NULL; char *usermap = NULL; char *groupmap = NULL; -@@ -772,7 +778,9 @@ static struct poptOption long_options[] = { +@@ -773,7 +779,9 @@ static struct poptOption long_options[] = { {"backup-deleted", 0, POPT_ARG_VAL, &make_backups, 1, 0, 0 }, {"no-backup", 0, POPT_ARG_VAL, &make_backups, 0, 0, 0 }, {"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 }, @@ -239,7 +239,7 @@ diff --git a/options.c b/options.c {"list-only", 0, POPT_ARG_VAL, &list_only, 2, 0, 0 }, {"read-batch", 0, POPT_ARG_STRING, &batch_name, OPT_READ_BATCH, 0, 0 }, {"write-batch", 0, POPT_ARG_STRING, &batch_name, OPT_WRITE_BATCH, 0, 0 }, -@@ -2194,6 +2202,8 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2199,6 +2207,8 @@ int parse_arguments(int *argc_p, const char ***argv_p) tmpdir = sanitize_path(NULL, tmpdir, NULL, 0, SP_DEFAULT); if (backup_dir) backup_dir = sanitize_path(NULL, backup_dir, NULL, 0, SP_DEFAULT); @@ -248,7 +248,7 @@ diff --git a/options.c b/options.c } if (daemon_filter_list.head && !am_sender) { filter_rule_list *elp = &daemon_filter_list; -@@ -2215,6 +2225,14 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2220,6 +2230,14 @@ int parse_arguments(int *argc_p, const char ***argv_p) if (check_filter(elp, FLOG, dir, 1) < 0) goto options_rejected; } @@ -263,7 +263,7 @@ diff --git a/options.c b/options.c } if (!backup_suffix) -@@ -2226,6 +2244,20 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2231,6 +2249,20 @@ int parse_arguments(int *argc_p, const char ***argv_p) backup_suffix); return 0; } @@ -284,7 +284,7 @@ diff --git a/options.c b/options.c if (backup_dir) { size_t len; make_backups = 1; /* --backup-dir implies --backup */ -@@ -2262,6 +2294,34 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2267,6 +2299,34 @@ int parse_arguments(int *argc_p, const char ***argv_p) "P *%s", backup_suffix); parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0); } @@ -319,7 +319,7 @@ diff --git a/options.c b/options.c if (make_backups && !backup_dir) omit_dir_times = -1; /* Implied, so avoid -O to sender. */ -@@ -2657,6 +2717,10 @@ void server_options(char **args, int *argc_p) +@@ -2662,6 +2722,10 @@ void server_options(char **args, int *argc_p) args[ac++] = "--backup-dir"; args[ac++] = backup_dir; } @@ -330,7 +330,7 @@ diff --git a/options.c b/options.c /* Only send --suffix if it specifies a non-default value. */ if (strcmp(backup_suffix, backup_dir ? "" : BACKUP_SUFFIX) != 0) { -@@ -2665,6 +2729,14 @@ void server_options(char **args, int *argc_p) +@@ -2670,6 +2734,14 @@ void server_options(char **args, int *argc_p) goto oom; args[ac++] = arg; } diff --git a/catch_crash_signals.diff b/catch_crash_signals.diff index 90a5d56..339a2a1 100644 --- a/catch_crash_signals.diff +++ b/catch_crash_signals.diff @@ -25,7 +25,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/errcode.h b/errcode.h --- a/errcode.h +++ b/errcode.h diff --git a/checksum-reading.diff b/checksum-reading.diff index ca89b93..97e8961 100644 --- a/checksum-reading.diff +++ b/checksum-reading.diff @@ -16,7 +16,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/clientserver.c b/clientserver.c --- a/clientserver.c +++ b/clientserver.c @@ -502,6 +502,15 @@ diff --git a/generator.c b/generator.c continue; if (match_level == 1) { best_match = j; +@@ -1076,7 +1080,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx, + match_level = 1; + best_match = j; + } +- if (!quick_check_ok(ftype, cmpbuf, file, &sxp->st)) ++ if (!quick_check_ok(ftype, cmpbuf, file, &sxp->st, j+1)) + continue; + if (match_level < 2) { + match_level = 2; @@ -1212,7 +1216,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, * --ignore-non-existing, daemon exclude, or mkdir failure. */ static struct file_struct *skip_dir = NULL; @@ -548,6 +557,33 @@ diff --git a/generator.c b/generator.c statret = link_stat(fname, &sx.st, keep_dirlinks && is_dir); stat_errno = errno; } +@@ -1384,7 +1407,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, + if (INFO_GTE(SKIP, 2)) { + if (ftype != stype) + suf = " (type change)"; +- else if (!quick_check_ok(ftype, fname, file, &sx.st)) ++ else if (!quick_check_ok(ftype, fname, file, &sx.st, 0)) + suf = always_checksum ? " (sum change)" : " (file change)"; + else if (!unchanged_attrs(fname, file, &sx)) + suf = " (attr change)"; +@@ -1555,7 +1578,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, + goto cleanup; + } + if (statret == 0) { +- if (stype == FT_SYMLINK && quick_check_ok(stype, fname, file, &sx.st)) { ++ if (stype == FT_SYMLINK && quick_check_ok(stype, fname, file, &sx.st, 0)) { + /* The link is pointing to the right place. */ + set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT); + if (itemizing) +@@ -1624,7 +1647,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, + if (statret == 0) { + if (ftype != stype) + statret = -1; +- else if (quick_check_ok(ftype, fname, file, &sx.st)) { ++ else if (quick_check_ok(ftype, fname, file, &sx.st, 0)) { + /* The device or special file is identical. */ + set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT); + if (itemizing) @@ -1749,22 +1772,6 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, partialptr = NULL; @@ -612,7 +648,7 @@ diff --git a/loadparm.c b/loadparm.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -120,6 +120,7 @@ size_t bwlimit_writemax = 0; +@@ -121,6 +121,7 @@ size_t bwlimit_writemax = 0; int ignore_existing = 0; int ignore_non_existing = 0; int need_messages_from_generator = 0; @@ -620,7 +656,7 @@ diff --git a/options.c b/options.c int max_delete = INT_MIN; OFF_T max_size = -1; OFF_T min_size = -1; -@@ -575,7 +576,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, +@@ -576,7 +577,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD, OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE, OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE, @@ -629,7 +665,7 @@ diff --git a/options.c b/options.c OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS, OPT_STOP_AFTER, OPT_STOP_AT, OPT_REFUSED_BASE = 9000}; -@@ -731,6 +732,7 @@ static struct poptOption long_options[] = { +@@ -732,6 +733,7 @@ static struct poptOption long_options[] = { {"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 }, {"checksum-choice", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 }, {"cc", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 }, @@ -637,7 +673,7 @@ diff --git a/options.c b/options.c {"block-size", 'B', POPT_ARG_STRING, 0, OPT_BLOCK_SIZE, 0, 0 }, {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 }, {"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 }, -@@ -1725,6 +1727,23 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1726,6 +1728,23 @@ int parse_arguments(int *argc_p, const char ***argv_p) } break; @@ -661,7 +697,7 @@ diff --git a/options.c b/options.c case OPT_INFO: arg = poptGetOptArg(pc); parse_output_words(info_words, info_levels, arg, USER_PRIORITY); -@@ -2059,6 +2078,9 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2064,6 +2083,9 @@ int parse_arguments(int *argc_p, const char ***argv_p) } #endif @@ -682,7 +718,7 @@ diff --git a/rsync.1.md b/rsync.1.md --archive, -a archive mode is -rlptgoD (no -A,-X,-U,-N,-H) --no-OPTION turn off an implied OPTION (e.g. --no-D) --recursive, -r recurse into directories -@@ -703,6 +704,8 @@ your home directory (remove the '=' for that). +@@ -715,6 +716,8 @@ your home directory (remove the '=' for that). file that has the same size as the corresponding sender's file: files with either a changed size or a changed checksum are selected for transfer. @@ -691,7 +727,7 @@ diff --git a/rsync.1.md b/rsync.1.md Note that rsync always verifies that each _transferred_ file was correctly reconstructed on the receiving side by checking a whole-file checksum that is generated as the file is transferred, but that automatic -@@ -713,6 +716,38 @@ your home directory (remove the '=' for that). +@@ -725,6 +728,38 @@ your home directory (remove the '=' for that). can be overridden using either the `--checksum-choice` (`--cc`) option or an environment variable that is discussed in that option's section. diff --git a/checksum-updating.diff b/checksum-updating.diff index a68e6ae..c48274b 100644 --- a/checksum-updating.diff +++ b/checksum-updating.diff @@ -455,6 +455,15 @@ diff --git a/generator.c b/generator.c static const char *solo_file = NULL; /* Forward declarations. */ +@@ -627,7 +628,7 @@ int quick_check_ok(enum filetype ftype, const char *fn, struct file_struct *file + if (always_checksum > 0) { + char sum[MAX_DIGEST_LEN]; + if (checksum_files && slot >= 0) +- get_cached_checksum(slot, fn, file, st, sum); ++ get_cached_checksum(slot, fn, file, -1, st, sum); + else + file_checksum(fn, st, sum); + return memcmp(sum, F_SUM(file), flist_csum_len) == 0; @@ -1356,7 +1357,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, } } @@ -511,7 +520,7 @@ diff --git a/io.c b/io.c extern int daemon_connection; extern int protocol_version; extern int remove_source_files; -@@ -1084,6 +1085,9 @@ static void got_flist_entry_status(enum festatus status, int ndx) +@@ -1085,6 +1086,9 @@ static void got_flist_entry_status(enum festatus status, int ndx) if (inc_recurse) flist->in_progress++; } @@ -538,7 +547,7 @@ diff --git a/loadparm.c b/loadparm.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -1729,7 +1729,15 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1730,7 +1730,15 @@ int parse_arguments(int *argc_p, const char ***argv_p) case OPT_SUMFILES: arg = poptGetOptArg(pc); @@ -587,7 +596,7 @@ diff --git a/receiver.c b/receiver.c diff --git a/rsync.1.md b/rsync.1.md --- a/rsync.1.md +++ b/rsync.1.md -@@ -727,9 +727,13 @@ your home directory (remove the '=' for that). +@@ -739,9 +739,13 @@ your home directory (remove the '=' for that). The MODE value is either "lax", for relaxed checking (which compares size and mtime), "strict" (which also compares ctime and inode), or "none" to diff --git a/checksum-xattr.diff b/checksum-xattr.diff index 3897359..1896973 100644 --- a/checksum-xattr.diff +++ b/checksum-xattr.diff @@ -8,7 +8,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c diff --git a/clone-dest.diff b/clone-dest.diff index d478866..d85bda8 100644 --- a/clone-dest.diff +++ b/clone-dest.diff @@ -13,7 +13,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in @@ -79,7 +79,7 @@ diff --git a/generator.c b/generator.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -575,7 +575,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, +@@ -576,7 +576,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD, OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE, OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE, @@ -88,7 +88,7 @@ diff --git a/options.c b/options.c OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS, OPT_STOP_AFTER, OPT_STOP_AT, OPT_REFUSED_BASE = 9000}; -@@ -735,6 +735,7 @@ static struct poptOption long_options[] = { +@@ -736,6 +736,7 @@ static struct poptOption long_options[] = { {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 }, {"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 }, {"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 }, @@ -96,7 +96,7 @@ diff --git a/options.c b/options.c {"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 }, {"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, {"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, -@@ -989,6 +990,9 @@ static void set_refuse_options(void) +@@ -990,6 +991,9 @@ static void set_refuse_options(void) #ifndef SUPPORT_HARD_LINKS parse_one_refuse_match(0, "link-dest", list_end); #endif @@ -106,7 +106,7 @@ diff --git a/options.c b/options.c #ifndef HAVE_MKTIME parse_one_refuse_match(0, "stop-at", list_end); #endif -@@ -1318,6 +1322,8 @@ char *alt_dest_opt(int type) +@@ -1319,6 +1323,8 @@ char *alt_dest_opt(int type) return "--copy-dest"; case LINK_DEST: return "--link-dest"; @@ -115,7 +115,7 @@ diff --git a/options.c b/options.c default: NOISY_DEATH("Unknown alt_dest_opt type"); } -@@ -1688,6 +1694,10 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1689,6 +1695,10 @@ int parse_arguments(int *argc_p, const char ***argv_p) want_dest_type = LINK_DEST; goto set_dest_dir; @@ -137,7 +137,7 @@ diff --git a/rsync.1.md b/rsync.1.md --compress, -z compress file data during the transfer --compress-choice=STR choose the compression algorithm (aka --zc) --compress-level=NUM explicitly set compression level (aka --zl) -@@ -2362,6 +2363,17 @@ your home directory (remove the '=' for that). +@@ -2381,6 +2382,17 @@ your home directory (remove the '=' for that). specified (or implied by `-a`). You can work-around this bug by avoiding the `-o` option when sending to an old rsync. diff --git a/congestion.diff b/congestion.diff index 753ecfb..a4ad942 100644 --- a/congestion.diff +++ b/congestion.diff @@ -27,7 +27,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/daemon-parm.txt b/daemon-parm.txt --- a/daemon-parm.txt +++ b/daemon-parm.txt @@ -59,7 +59,7 @@ diff --git a/options.c b/options.c int remove_source_files = 0; int one_file_system = 0; int protocol_version = PROTOCOL_VERSION; -@@ -819,6 +821,8 @@ static struct poptOption long_options[] = { +@@ -820,6 +822,8 @@ static struct poptOption long_options[] = { {"outbuf", 0, POPT_ARG_STRING, &outbuf_mode, 0, 0, 0 }, {"remote-option", 'M', POPT_ARG_STRING, 0, 'M', 0, 0 }, {"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 }, diff --git a/copy-devices.diff b/copy-devices.diff index 3148430..15a0c65 100644 --- a/copy-devices.diff +++ b/copy-devices.diff @@ -8,7 +8,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -50,7 +50,7 @@ diff --git a/options.c b/options.c int write_devices = 0; int preserve_links = 0; int preserve_hard_links = 0; -@@ -654,6 +655,7 @@ static struct poptOption long_options[] = { +@@ -655,6 +656,7 @@ static struct poptOption long_options[] = { {"no-D", 0, POPT_ARG_NONE, 0, OPT_NO_D, 0, 0 }, {"devices", 0, POPT_ARG_VAL, &preserve_devices, 1, 0, 0 }, {"no-devices", 0, POPT_ARG_VAL, &preserve_devices, 0, 0, 0 }, @@ -58,7 +58,7 @@ diff --git a/options.c b/options.c {"write-devices", 0, POPT_ARG_VAL, &write_devices, 1, 0, 0 }, {"no-write-devices", 0, POPT_ARG_VAL, &write_devices, 0, 0, 0 }, {"specials", 0, POPT_ARG_VAL, &preserve_specials, 1, 0, 0 }, -@@ -945,6 +947,7 @@ static void set_refuse_options(void) +@@ -946,6 +948,7 @@ static void set_refuse_options(void) || strcmp("iconv", longName) == 0 || strcmp("no-iconv", longName) == 0 || strcmp("checksum-seed", longName) == 0 @@ -66,7 +66,7 @@ diff --git a/options.c b/options.c || strcmp("write-devices", longName) == 0 /* disable wild-match (it gets refused below) */ || strcmp("log-format", longName) == 0 /* aka out-format (NOT log-file-format) */ || strcmp("sender", longName) == 0 -@@ -956,6 +959,7 @@ static void set_refuse_options(void) +@@ -957,6 +960,7 @@ static void set_refuse_options(void) assert(list_end != NULL); if (am_daemon) { /* Refused by default, but can be accepted via a negated exact match. */ @@ -74,7 +74,7 @@ diff --git a/options.c b/options.c parse_one_refuse_match(0, "write-devices", list_end); } -@@ -2858,6 +2862,9 @@ void server_options(char **args, int *argc_p) +@@ -2863,6 +2867,9 @@ void server_options(char **args, int *argc_p) else if (remove_source_files) args[ac++] = "--remove-sent-files"; @@ -119,9 +119,9 @@ diff --git a/rsync.c b/rsync.c diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md --- a/rsyncd.conf.5.md +++ b/rsyncd.conf.5.md -@@ -930,9 +930,10 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details. - If you are un-refusing the compress option, you probably want to match - "`!compress*`" so that you also accept the `--compress-level` option. +@@ -931,9 +931,10 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details. + If you are un-refusing the compress option, you may want to match + "`!compress*`" if you also want to allow the `--compress-level` option. - Note that the "write-devices" option is refused by default, but can be - explicitly accepted with "`!write-devices`". The options "log-file" and diff --git a/date-only.diff b/date-only.diff index ede5aab..f4d869b 100644 --- a/date-only.diff +++ b/date-only.diff @@ -14,7 +14,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -39,7 +39,7 @@ diff --git a/generator.c b/generator.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -113,6 +113,7 @@ int safe_symlinks = 0; +@@ -114,6 +114,7 @@ int safe_symlinks = 0; int copy_unsafe_links = 0; int munge_symlinks = 0; int size_only = 0; @@ -47,7 +47,7 @@ diff --git a/options.c b/options.c int daemon_bwlimit = 0; int bwlimit = 0; int fuzzy_basis = 0; -@@ -681,6 +682,7 @@ static struct poptOption long_options[] = { +@@ -682,6 +683,7 @@ static struct poptOption long_options[] = { {"chmod", 0, POPT_ARG_STRING, 0, OPT_CHMOD, 0, 0 }, {"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 }, {"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 }, @@ -55,7 +55,7 @@ diff --git a/options.c b/options.c {"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 }, {"no-one-file-system",0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 }, {"no-x", 0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 }, -@@ -2738,6 +2740,9 @@ void server_options(char **args, int *argc_p) +@@ -2743,6 +2745,9 @@ void server_options(char **args, int *argc_p) else if (missing_args == 1 && !am_sender) args[ac++] = "--ignore-missing-args"; @@ -76,7 +76,7 @@ diff --git a/rsync.1.md b/rsync.1.md --modify-window=NUM, -@ set the accuracy for mod-time comparisons --temp-dir=DIR, -T create temporary files in directory DIR --fuzzy, -y find similar file for basis if no dest file -@@ -665,6 +666,14 @@ your home directory (remove the '=' for that). +@@ -677,6 +678,14 @@ your home directory (remove the '=' for that). after using another mirroring system which may not preserve timestamps exactly. diff --git a/db.diff b/db.diff index 01c66f3..84e02f1 100644 --- a/db.diff +++ b/db.diff @@ -21,7 +21,7 @@ To use this patch, run these commands for a successful build: ./configure make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/.gitignore b/.gitignore --- a/.gitignore +++ b/.gitignore @@ -74,7 +74,7 @@ diff --git a/Makefile.in b/Makefile.in + if test -f rsyncdb.1; then $(INSTALLMAN) -m 644 rsyncdb.1 $(DESTDIR)$(mandir)/man1; fi if test -f rsyncd.conf.5; then $(INSTALLMAN) -m 644 rsyncd.conf.5 $(DESTDIR)$(mandir)/man5; fi if test "$(with_rrsync)" = yes; then \ - $(INSTALLCMD) -m 755 $(srcdir)/support/rrsync $(DESTDIR)$(bindir); \ + $(INSTALLCMD) -m 755 rrsync $(DESTDIR)$(bindir); \ @@ -104,10 +107,13 @@ rsync$(EXEEXT): $(OBJS) rrsync: support/rrsync cp -p $(srcdir)/support/rrsync rrsync @@ -108,13 +108,13 @@ diff --git a/Makefile.in b/Makefile.in +man: rsync.1 rsync-ssl.1 rsyncd.conf.5 @MAKE_RRSYNC_1@ rsyncdb.1 rsync.1: rsync.1.md md-convert version.h Makefile - @$(srcdir)/maybe-make-man $(srcdir) rsync.1.md + @$(srcdir)/maybe-make-man rsync.1.md @@ -269,9 +278,12 @@ rsyncd.conf.5: rsyncd.conf.5.md md-convert version.h Makefile rrsync.1: support/rrsync.1.md md-convert Makefile - @$(srcdir)/maybe-make-man $(srcdir) support/rrsync.1.md + @$(srcdir)/maybe-make-man support/rrsync.1.md +rsyncdb.1: rsyncdb.1.md md-convert NEWS.md Makefile -+ @$(srcdir)/maybe-make-man $(srcdir) rsyncdb.1.md ++ @$(srcdir)/maybe-make-man rsyncdb.1.md + .PHONY: clean clean: cleantests @@ -2375,7 +2375,7 @@ diff --git a/io.c b/io.c extern int io_error; extern int batch_fd; extern int eol_nulls; -@@ -1512,6 +1514,32 @@ static void read_a_msg(void) +@@ -1513,6 +1515,32 @@ static void read_a_msg(void) if (am_sender) maybe_send_keepalive(time(NULL), MSK_ALLOW_FLUSH); break; @@ -2408,7 +2408,7 @@ diff --git a/io.c b/io.c case MSG_DELETED: if (msg_bytes >= sizeof data) goto overflow; -@@ -1665,6 +1693,7 @@ static void read_a_msg(void) +@@ -1666,6 +1694,7 @@ static void read_a_msg(void) * with a duplicate exit message. */ _exit_cleanup(val, __FILE__, 0 - __LINE__); default: @@ -2474,7 +2474,7 @@ diff --git a/options.c b/options.c int relative_paths = -1; int implied_dirs = 1; int missing_args = 0; /* 0 = FERROR_XFER, 1 = ignore, 2 = delete */ -@@ -99,6 +100,7 @@ int use_qsort = 0; +@@ -100,6 +101,7 @@ int use_qsort = 0; char *files_from = NULL; int filesfrom_fd = -1; char *filesfrom_host = NULL; @@ -2482,7 +2482,7 @@ diff --git a/options.c b/options.c int eol_nulls = 0; int protect_args = -1; int human_readable = 1; -@@ -107,6 +109,9 @@ int mkpath_dest_arg = 0; +@@ -108,6 +110,9 @@ int mkpath_dest_arg = 0; int allow_inc_recurse = 1; int xfer_dirs = -1; int am_daemon = 0; @@ -2492,7 +2492,7 @@ diff --git a/options.c b/options.c int connect_timeout = 0; int keep_partial = 0; int safe_symlinks = 0; -@@ -286,6 +291,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = { +@@ -287,6 +292,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = { DEBUG_WORD(CHDIR, W_CLI|W_SRV, "Debug when the current directory changes"), DEBUG_WORD(CONNECT, W_CLI, "Debug connection events (levels 1-2)"), DEBUG_WORD(CMD, W_CLI, "Debug commands+options that are issued (levels 1-2)"), @@ -2500,7 +2500,7 @@ diff --git a/options.c b/options.c DEBUG_WORD(DEL, W_REC, "Debug delete actions (levels 1-3)"), DEBUG_WORD(DELTASUM, W_SND|W_REC, "Debug delta-transfer checksumming (levels 1-4)"), DEBUG_WORD(DUP, W_REC, "Debug weeding of duplicate names"), -@@ -575,6 +581,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, +@@ -576,6 +582,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD, OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE, OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE, @@ -2508,7 +2508,7 @@ diff --git a/options.c b/options.c OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT, OPT_STDERR, OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS, OPT_STOP_AFTER, OPT_STOP_AT, -@@ -731,6 +738,10 @@ static struct poptOption long_options[] = { +@@ -732,6 +739,10 @@ static struct poptOption long_options[] = { {"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 }, {"checksum-choice", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 }, {"cc", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 }, @@ -2519,7 +2519,7 @@ diff --git a/options.c b/options.c {"block-size", 'B', POPT_ARG_STRING, 0, OPT_BLOCK_SIZE, 0, 0 }, {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 }, {"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 }, -@@ -828,6 +839,9 @@ static struct poptOption long_options[] = { +@@ -829,6 +840,9 @@ static struct poptOption long_options[] = { {"dparam", 0, POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 }, {"detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 }, {"no-detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 }, @@ -2529,7 +2529,7 @@ diff --git a/options.c b/options.c {0,0,0,0, 0, 0, 0} }; -@@ -856,6 +870,31 @@ static struct poptOption long_daemon_options[] = { +@@ -857,6 +871,31 @@ static struct poptOption long_daemon_options[] = { {0,0,0,0, 0, 0, 0} }; @@ -2561,7 +2561,7 @@ diff --git a/options.c b/options.c static char err_buf[200]; -@@ -981,6 +1020,8 @@ static void set_refuse_options(void) +@@ -982,6 +1021,8 @@ static void set_refuse_options(void) parse_one_refuse_match(0, "iconv", list_end); #endif parse_one_refuse_match(0, "log-file*", list_end); @@ -2570,7 +2570,7 @@ diff --git a/options.c b/options.c } #ifndef SUPPORT_ATIMES -@@ -1288,6 +1329,102 @@ static void create_refuse_error(int which) +@@ -1289,6 +1330,102 @@ static void create_refuse_error(int which) snprintf(err_buf + n, sizeof err_buf - n, " (-%c)\n", op->shortName); } @@ -2673,7 +2673,7 @@ diff --git a/options.c b/options.c /* This is used to make sure that --daemon & --server cannot be aliased to * something else. These options have always disabled popt aliases for the * parsing of a daemon or server command-line, but we have to make sure that -@@ -1344,6 +1481,12 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1345,6 +1482,12 @@ int parse_arguments(int *argc_p, const char ***argv_p) return 0; } @@ -2686,7 +2686,7 @@ diff --git a/options.c b/options.c set_refuse_options(); #ifdef ICONV_OPTION -@@ -1462,6 +1605,12 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1463,6 +1606,12 @@ int parse_arguments(int *argc_p, const char ***argv_p) am_daemon = 1; return 1; @@ -2699,7 +2699,7 @@ diff --git a/options.c b/options.c case OPT_MODIFY_WINDOW: /* The value has already been set by popt, but * we need to remember that we're using a -@@ -1534,6 +1683,10 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1535,6 +1684,10 @@ int parse_arguments(int *argc_p, const char ***argv_p) preserve_devices = preserve_specials = 0; break; diff --git a/detect-renamed-lax.diff b/detect-renamed-lax.diff index 4f753a9..714c073 100644 --- a/detect-renamed-lax.diff +++ b/detect-renamed-lax.diff @@ -39,7 +39,7 @@ diff --git a/generator.c b/generator.c fnamecmp = partialptr; fnamecmp_type = FNAMECMP_PARTIAL_DIR; statret = 0; -+ if (detect_renamed > 1 && unchanged_file(fnamecmp, file, &sx.st)) { ++ if (detect_renamed > 1 && quick_check_ok(FT_REG, fnamecmp, file, &sx.st)) { + /* Adopt the partial file. */ + finish_transfer(fname, fnamecmp, NULL, NULL, file, 1, 1); + handle_partial_dir(partialptr, PDIR_DELETE); @@ -60,7 +60,7 @@ diff --git a/generator.c b/generator.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -736,7 +736,9 @@ static struct poptOption long_options[] = { +@@ -737,7 +737,9 @@ static struct poptOption long_options[] = { {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 }, {"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 }, {"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 }, @@ -71,7 +71,7 @@ diff --git a/options.c b/options.c {"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 }, {"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, {"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, -@@ -2719,8 +2721,14 @@ void server_options(char **args, int *argc_p) +@@ -2724,8 +2726,14 @@ void server_options(char **args, int *argc_p) args[ac++] = "--super"; if (size_only) args[ac++] = "--size-only"; @@ -100,7 +100,7 @@ diff --git a/rsync.1.md b/rsync.1.md --compare-dest=DIR also compare destination files relative to DIR --copy-dest=DIR ... and include copies of unchanged files --link-dest=DIR hardlink to files in DIR when unchanged -@@ -2295,6 +2297,17 @@ your home directory (remove the '=' for that). +@@ -2314,6 +2316,17 @@ your home directory (remove the '=' for that). otential alternate-basis files will be removed as the transfer progresses. This option conflicts with `--inplace` and `--append`. diff --git a/detect-renamed.diff b/detect-renamed.diff index 270333d..8e88aa3 100644 --- a/detect-renamed.diff +++ b/detect-renamed.diff @@ -38,7 +38,7 @@ TODO: a file that can't use it, while missing out on giving it to a file that could use it. -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/backup.c b/backup.c --- a/backup.c +++ b/backup.c @@ -62,7 +62,7 @@ diff --git a/compat.c b/compat.c extern int protect_args; extern int preserve_uid; extern int preserve_gid; -@@ -166,6 +167,7 @@ void set_allow_inc_recurse(void) +@@ -168,6 +169,7 @@ void set_allow_inc_recurse(void) allow_inc_recurse = 0; else if (!am_sender && (delete_before || delete_after @@ -609,7 +609,7 @@ diff --git a/options.c b/options.c int implied_dirs = 1; int missing_args = 0; /* 0 = FERROR_XFER, 1 = ignore, 2 = delete */ int numeric_ids = 0; -@@ -735,6 +736,7 @@ static struct poptOption long_options[] = { +@@ -736,6 +737,7 @@ static struct poptOption long_options[] = { {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 }, {"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 }, {"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 }, @@ -617,7 +617,7 @@ diff --git a/options.c b/options.c {"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 }, {"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, {"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, -@@ -2341,7 +2343,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2346,7 +2348,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) inplace = 1; } @@ -626,7 +626,7 @@ diff --git a/options.c b/options.c partial_dir = tmp_partialdir; if (inplace) { -@@ -2350,6 +2352,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2355,6 +2357,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) snprintf(err_buf, sizeof err_buf, "--%s cannot be used with --%s\n", append_mode ? "append" : "inplace", @@ -634,7 +634,7 @@ diff --git a/options.c b/options.c delay_updates ? "delay-updates" : "partial-dir"); return 0; } -@@ -2716,6 +2719,8 @@ void server_options(char **args, int *argc_p) +@@ -2721,6 +2724,8 @@ void server_options(char **args, int *argc_p) args[ac++] = "--super"; if (size_only) args[ac++] = "--size-only"; @@ -666,7 +666,7 @@ diff --git a/rsync.1.md b/rsync.1.md --compare-dest=DIR also compare destination files relative to DIR --copy-dest=DIR ... and include copies of unchanged files --link-dest=DIR hardlink to files in DIR when unchanged -@@ -2278,6 +2279,22 @@ your home directory (remove the '=' for that). +@@ -2297,6 +2298,22 @@ your home directory (remove the '=' for that). fuzzy-match files, so either use `--delete-after` or specify some filename exclusions if you need to prevent this. diff --git a/direct-io.diff b/direct-io.diff index 0c80e0d..62339e1 100644 --- a/direct-io.diff +++ b/direct-io.diff @@ -10,7 +10,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/options.c b/options.c --- a/options.c +++ b/options.c @@ -22,7 +22,7 @@ diff --git a/options.c b/options.c extern int module_id; extern int local_server; extern int sanitize_paths; -@@ -756,6 +757,8 @@ static struct poptOption long_options[] = { +@@ -757,6 +758,8 @@ static struct poptOption long_options[] = { {"partial-dir", 0, POPT_ARG_STRING, &partial_dir, 0, 0, 0 }, {"delay-updates", 0, POPT_ARG_VAL, &delay_updates, 1, 0, 0 }, {"no-delay-updates", 0, POPT_ARG_VAL, &delay_updates, 0, 0, 0 }, @@ -42,7 +42,7 @@ diff --git a/rsync.1.md b/rsync.1.md --prune-empty-dirs, -m prune empty directory chains from file-list --numeric-ids don't map uid/gid values by user/group name --usermap=STRING custom username mapping -@@ -3048,6 +3049,16 @@ your home directory (remove the '=' for that). +@@ -3065,6 +3066,16 @@ your home directory (remove the '=' for that). update algorithm that is even more atomic (it uses `--link-dest` and a parallel hierarchy of files). diff --git a/downdate.diff b/downdate.diff index 0a35297..80ccf18 100644 --- a/downdate.diff +++ b/downdate.diff @@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -59,7 +59,7 @@ diff --git a/options.c b/options.c int open_noatime = 0; int cvs_exclude = 0; int dry_run = 0; -@@ -685,6 +686,7 @@ static struct poptOption long_options[] = { +@@ -686,6 +687,7 @@ static struct poptOption long_options[] = { {"no-one-file-system",0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 }, {"no-x", 0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 }, {"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 }, diff --git a/fileflags.diff b/fileflags.diff index 64a8aee..9beb4e1 100644 --- a/fileflags.diff +++ b/fileflags.diff @@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/compat.c b/compat.c --- a/compat.c +++ b/compat.c @@ -27,7 +27,7 @@ diff --git a/compat.c b/compat.c extern int xfer_flags_as_varint; extern int need_messages_from_generator; extern int delete_mode, delete_before, delete_during, delete_after; -@@ -78,7 +80,7 @@ int do_negotiated_strings = 0; +@@ -80,7 +82,7 @@ int do_negotiated_strings = 0; int xmit_id0_names = 0; /* These index values are for the file-list's extra-attribute array. */ @@ -36,7 +36,7 @@ diff --git a/compat.c b/compat.c int receiver_symlink_times = 0; /* receiver can set the time on a symlink */ int sender_symlink_iconv = 0; /* sender should convert symlink content */ -@@ -572,6 +574,8 @@ void setup_protocol(int f_out,int f_in) +@@ -574,6 +576,8 @@ void setup_protocol(int f_out,int f_in) uid_ndx = ++file_extra_cnt; if (preserve_gid) gid_ndx = ++file_extra_cnt; @@ -45,7 +45,7 @@ diff --git a/compat.c b/compat.c if (preserve_acls && !am_sender) acls_ndx = ++file_extra_cnt; if (preserve_xattrs) -@@ -732,6 +736,10 @@ void setup_protocol(int f_out,int f_in) +@@ -737,6 +741,10 @@ void setup_protocol(int f_out,int f_in) fprintf(stderr, "Both rsync versions must be at least 3.2.0 for --crtimes.\n"); exit_cleanup(RERR_PROTOCOL); } @@ -375,15 +375,15 @@ diff --git a/options.c b/options.c int preserve_executability = 0; int preserve_devices = 0; int preserve_specials = 0; -@@ -93,6 +94,7 @@ int numeric_ids = 0; - int msgs2stderr = 2; /* Default: send errors to stderr for local & remote-shell transfers */ +@@ -94,6 +95,7 @@ int msgs2stderr = 2; /* Default: send errors to stderr for local & remote-shell + int saw_stderr_opt = 0; int allow_8bit_chars = 0; int force_delete = 0; +int force_change = 0; int io_timeout = 0; int prune_empty_dirs = 0; int use_qsort = 0; -@@ -616,6 +618,8 @@ static struct poptOption long_options[] = { +@@ -617,6 +619,8 @@ static struct poptOption long_options[] = { {"perms", 'p', POPT_ARG_VAL, &preserve_perms, 1, 0, 0 }, {"no-perms", 0, POPT_ARG_VAL, &preserve_perms, 0, 0, 0 }, {"no-p", 0, POPT_ARG_VAL, &preserve_perms, 0, 0, 0 }, @@ -392,7 +392,7 @@ diff --git a/options.c b/options.c {"executability", 'E', POPT_ARG_NONE, &preserve_executability, 0, 0, 0 }, {"acls", 'A', POPT_ARG_NONE, 0, 'A', 0, 0 }, {"no-acls", 0, POPT_ARG_VAL, &preserve_acls, 0, 0, 0 }, -@@ -713,6 +717,12 @@ static struct poptOption long_options[] = { +@@ -714,6 +718,12 @@ static struct poptOption long_options[] = { {"remove-source-files",0,POPT_ARG_VAL, &remove_source_files, 1, 0, 0 }, {"force", 0, POPT_ARG_VAL, &force_delete, 1, 0, 0 }, {"no-force", 0, POPT_ARG_VAL, &force_delete, 0, 0, 0 }, @@ -405,7 +405,7 @@ diff --git a/options.c b/options.c {"ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 1, 0, 0 }, {"no-ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 0, 0, 0 }, {"max-delete", 0, POPT_ARG_INT, &max_delete, 0, 0, 0 }, -@@ -1001,6 +1011,14 @@ static void set_refuse_options(void) +@@ -1002,6 +1012,14 @@ static void set_refuse_options(void) #ifndef SUPPORT_CRTIMES parse_one_refuse_match(0, "crtimes", list_end); #endif @@ -420,7 +420,7 @@ diff --git a/options.c b/options.c /* Now we use the descrip values to actually mark the options for refusal. */ for (op = long_options; op != list_end; op++) { -@@ -2602,6 +2620,9 @@ void server_options(char **args, int *argc_p) +@@ -2607,6 +2625,9 @@ void server_options(char **args, int *argc_p) if (xfer_dirs && !recurse && delete_mode && am_sender) args[ac++] = "--no-r"; @@ -430,7 +430,7 @@ diff --git a/options.c b/options.c if (do_compression && do_compression_level != CLVL_NOT_SPECIFIED) { if (asprintf(&arg, "--compress-level=%d", do_compression_level) < 0) goto oom; -@@ -2710,6 +2731,16 @@ void server_options(char **args, int *argc_p) +@@ -2715,6 +2736,16 @@ void server_options(char **args, int *argc_p) args[ac++] = "--delete-excluded"; if (force_delete) args[ac++] = "--force"; @@ -470,7 +470,7 @@ diff --git a/rsync.1.md b/rsync.1.md --max-delete=NUM don't delete more than NUM files --max-size=SIZE don't transfer any file larger than SIZE --min-size=SIZE don't transfer any file smaller than SIZE -@@ -719,6 +723,7 @@ your home directory (remove the '=' for that). +@@ -731,6 +735,7 @@ your home directory (remove the '=' for that). recursion and want to preserve almost everything. Be aware that it does **not** include preserving ACLs (`-A`), xattrs (`-X`), atimes (`-U`), crtimes (`-N`), nor the finding and preserving of hardlinks (`-H`). @@ -478,7 +478,7 @@ diff --git a/rsync.1.md b/rsync.1.md The only exception to the above equivalence is when `--files-from` is specified, in which case `-r` is not implied. -@@ -1087,7 +1092,7 @@ your home directory (remove the '=' for that). +@@ -1106,7 +1111,7 @@ your home directory (remove the '=' for that). Without this option, if the sending side has replaced a directory with a symlink to a directory, the receiving side will delete anything that is in the way of the new symlink, including a directory hierarchy (as long as @@ -487,7 +487,7 @@ diff --git a/rsync.1.md b/rsync.1.md See also `--keep-dirlinks` for an analogous option for the receiving side. -@@ -1273,6 +1278,29 @@ your home directory (remove the '=' for that). +@@ -1292,6 +1297,29 @@ your home directory (remove the '=' for that). those used by `--fake-super`) unless you repeat the option (e.g. `-XX`). This "copy all xattrs" mode cannot be used with `--fake-super`. @@ -517,7 +517,7 @@ diff --git a/rsync.1.md b/rsync.1.md 0. `--chmod=CHMOD` This option tells rsync to apply one or more comma-separated "chmod" modes -@@ -1756,7 +1784,7 @@ your home directory (remove the '=' for that). +@@ -1775,7 +1803,7 @@ your home directory (remove the '=' for that). option a step farther: each missing arg will become a deletion request of the corresponding destination file on the receiving side (should it exist). If the destination file is a non-empty directory, it will only be @@ -526,7 +526,7 @@ diff --git a/rsync.1.md b/rsync.1.md that, this option is independent of any other type of delete processing. The missing source files are represented by special file-list entries which -@@ -1767,15 +1795,16 @@ your home directory (remove the '=' for that). +@@ -1786,15 +1814,16 @@ your home directory (remove the '=' for that). Tells `--delete` to go ahead and delete files even when there are I/O errors. @@ -547,7 +547,7 @@ diff --git a/rsync.1.md b/rsync.1.md 0. `--max-delete=NUM` -@@ -2736,7 +2765,7 @@ your home directory (remove the '=' for that). +@@ -2753,7 +2782,7 @@ your home directory (remove the '=' for that). output of other verbose messages). The "%i" escape has a cryptic output that is 11 letters long. The general @@ -1084,6 +1084,24 @@ diff --git a/util1.c b/util1.c diff --git a/xattrs.c b/xattrs.c --- a/xattrs.c +++ b/xattrs.c +@@ -1091,7 +1091,7 @@ int set_xattr(const char *fname, const struct file_struct *file, const char *fna + && !S_ISLNK(sxp->st.st_mode) + #endif + && access(fname, W_OK) < 0 +- && do_chmod(fname, (sxp->st.st_mode & CHMOD_BITS) | S_IWUSR) == 0) ++ && do_chmod(fname, (sxp->st.st_mode & CHMOD_BITS) | S_IWUSR, ST_FLAGS(sxp->st)) == 0) + added_write_perm = 1; + + ndx = F_XATTR(file); +@@ -1099,7 +1099,7 @@ int set_xattr(const char *fname, const struct file_struct *file, const char *fna + lst = &glst->xa_items; + int return_value = rsync_xal_set(fname, lst, fnamecmp, sxp); + if (added_write_perm) /* remove the temporary write permission */ +- do_chmod(fname, sxp->st.st_mode); ++ do_chmod(fname, sxp->st.st_mode, ST_FLAGS(sxp->st)); + return return_value; + } + @@ -1216,7 +1216,7 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode) mode = (fst.st_mode & _S_IFMT) | (fmode & ACCESSPERMS) | (S_ISDIR(fst.st_mode) ? 0700 : 0600); diff --git a/filter-attribute-mods.diff b/filter-attribute-mods.diff index dbc561f..d92f78b 100644 --- a/filter-attribute-mods.diff +++ b/filter-attribute-mods.diff @@ -9,7 +9,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/exclude.c b/exclude.c --- a/exclude.c +++ b/exclude.c @@ -336,7 +336,7 @@ diff --git a/flist.c b/flist.c diff --git a/rsync.1.md b/rsync.1.md --- a/rsync.1.md +++ b/rsync.1.md -@@ -1296,7 +1296,9 @@ your home directory (remove the '=' for that). +@@ -1315,7 +1315,9 @@ your home directory (remove the '=' for that). > --chmod=D2775,F664 It is also legal to specify multiple `--chmod` options, as each additional @@ -347,7 +347,7 @@ diff --git a/rsync.1.md b/rsync.1.md See the `--perms` and `--executability` options for how the resulting permission value can be applied to the files in the transfer. -@@ -2672,6 +2674,10 @@ your home directory (remove the '=' for that). +@@ -2689,6 +2691,10 @@ your home directory (remove the '=' for that). If your shell complains about the wildcards, use `--protect-args` (`-s`). @@ -358,7 +358,7 @@ diff --git a/rsync.1.md b/rsync.1.md 0. `--timeout=SECONDS` This option allows you to set a maximum I/O timeout in seconds. If no data -@@ -3676,6 +3682,15 @@ The following modifiers are accepted after a "`+`" or "`-`": +@@ -3693,6 +3699,15 @@ The following modifiers are accepted after a "`+`" or "`-`": rules that exclude things like "CVS" and "`*.o`" are marked as perishable, and will not prevent a directory that was removed on the source from being deleted on the destination. @@ -374,7 +374,7 @@ diff --git a/rsync.1.md b/rsync.1.md - An `x` indicates that a rule affects xattr names in xattr copy/delete operations (and is thus ignored when matching file/dir names). If no xattr-matching rules are specified, a default xattr filtering rule is used -@@ -3733,6 +3748,12 @@ The following modifiers are accepted after a merge or dir-merge rule: +@@ -3750,6 +3765,12 @@ The following modifiers are accepted after a merge or dir-merge rule: rules in the file must not specify sides (via a modifier or a rule prefix such as `hide`). diff --git a/hfs-compression.diff b/hfs-compression.diff index a4a5bbb..e9414e4 100644 --- a/hfs-compression.diff +++ b/hfs-compression.diff @@ -21,12 +21,14 @@ based-on: patch/master/fileflags diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -1631,6 +1631,9 @@ static struct file_struct *send_file_name(int f, struct file_list *flist, +@@ -1631,6 +1631,11 @@ static struct file_struct *send_file_name(int f, struct file_list *flist, #ifdef SUPPORT_XATTRS if (preserve_xattrs) { sx.st.st_mode = file->mode; ++#if defined SUPPORT_FILEFLAGS || defined SUPPORT_FORCE_CHANGE + if (preserve_fileflags) + sx.st.st_flags = F_FFLAGS(file); ++#endif + sx.st.st_mtime = file->modtime; /* get_xattr needs mtime for decmpfs xattrs */ if (get_xattr(fname, &sx) < 0) { io_error |= IOERR_GENERAL; @@ -255,7 +257,7 @@ diff --git a/options.c b/options.c int preserve_perms = 0; int preserve_fileflags = 0; int preserve_executability = 0; -@@ -723,6 +724,10 @@ static struct poptOption long_options[] = { +@@ -724,6 +725,10 @@ static struct poptOption long_options[] = { {"no-force-change", 0, POPT_ARG_VAL, &force_change, 0, 0, 0 }, {"force-uchange", 0, POPT_ARG_VAL, &force_change, USR_IMMUTABLE, 0, 0 }, {"force-schange", 0, POPT_ARG_VAL, &force_change, SYS_IMMUTABLE, 0, 0 }, @@ -266,7 +268,7 @@ diff --git a/options.c b/options.c {"ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 1, 0, 0 }, {"no-ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 0, 0, 0 }, {"max-delete", 0, POPT_ARG_INT, &max_delete, 0, 0, 0 }, -@@ -1019,6 +1024,10 @@ static void set_refuse_options(void) +@@ -1020,6 +1025,10 @@ static void set_refuse_options(void) parse_one_refuse_match(0, "force-uchange", list_end); parse_one_refuse_match(0, "force-schange", list_end); #endif @@ -277,7 +279,7 @@ diff --git a/options.c b/options.c /* Now we use the descrip values to actually mark the options for refusal. */ for (op = long_options; op != list_end; op++) { -@@ -2077,6 +2086,15 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2082,6 +2091,15 @@ int parse_arguments(int *argc_p, const char ***argv_p) } #endif @@ -293,7 +295,7 @@ diff --git a/options.c b/options.c if (write_batch && read_batch) { snprintf(err_buf, sizeof err_buf, "--write-batch and --read-batch can not be used together\n"); -@@ -2623,6 +2641,11 @@ void server_options(char **args, int *argc_p) +@@ -2628,6 +2646,11 @@ void server_options(char **args, int *argc_p) if (preserve_fileflags) args[ac++] = "--fileflags"; @@ -317,7 +319,7 @@ diff --git a/rsync.1.md b/rsync.1.md --owner, -o preserve owner (super-user only) --group, -g preserve group --devices preserve device files (super-user only) -@@ -1301,6 +1303,47 @@ your home directory (remove the '=' for that). +@@ -1320,6 +1322,47 @@ your home directory (remove the '=' for that). receiving side. It does not try to affect user flags. This option overrides `--force-change` and `--force-uchange`. @@ -368,23 +370,27 @@ diff --git a/rsync.1.md b/rsync.1.md diff --git a/rsync.c b/rsync.c --- a/rsync.c +++ b/rsync.c -@@ -607,8 +607,14 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -607,8 +607,18 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, #ifdef SUPPORT_XATTRS if (am_root < 0) set_stat_xattr(fname, file, new_mode); - if (preserve_xattrs && fnamecmp) + if (preserve_xattrs && fnamecmp) { ++#if defined SUPPORT_FILEFLAGS || defined SUPPORT_FORCE_CHANGE + uint32 tmpflags = sxp->st.st_flags; + sxp->st.st_flags = F_FFLAGS(file); /* set_xattr() needs to check UF_COMPRESSED */ ++#endif set_xattr(fname, file, fnamecmp, sxp); ++#if defined SUPPORT_FILEFLAGS || defined SUPPORT_FORCE_CHANGE + sxp->st.st_flags = tmpflags; ++#endif + if (S_ISDIR(sxp->st.st_mode)) + link_stat(fname, &sx2.st, 0); + } #endif if ((omit_dir_times && S_ISDIR(sxp->st.st_mode)) -@@ -625,7 +631,11 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -625,7 +635,11 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, } if (sxp != &sx2) memcpy(&sx2.st, &sxp->st, sizeof sx2.st); @@ -397,7 +403,7 @@ diff --git a/rsync.c b/rsync.c sx2.st.st_mtime = file->modtime; #ifdef ST_MTIME_NSEC sx2.st.ST_MTIME_NSEC = F_MOD_NSEC_or_0(file); -@@ -710,6 +720,16 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -710,6 +724,16 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, && !set_fileflags(fname, fileflags)) goto cleanup; updated = 1; diff --git a/ignore-case.diff b/ignore-case.diff index 5c07cfc..3ab5ee7 100644 --- a/ignore-case.diff +++ b/ignore-case.diff @@ -12,7 +12,7 @@ TODO: - Make this code handle multibyte character encodings, and honor the --iconv setting when converting case. -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/exclude.c b/exclude.c --- a/exclude.c +++ b/exclude.c @@ -214,7 +214,7 @@ diff --git a/lib/wildmatch.c b/lib/wildmatch.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -125,6 +125,7 @@ OFF_T max_size = -1; +@@ -126,6 +126,7 @@ OFF_T max_size = -1; OFF_T min_size = -1; int ignore_errors = 0; int modify_window = 0; @@ -222,7 +222,7 @@ diff --git a/options.c b/options.c int blocking_io = -1; int checksum_seed = 0; int inplace = 0; -@@ -776,6 +777,8 @@ static struct poptOption long_options[] = { +@@ -777,6 +778,8 @@ static struct poptOption long_options[] = { {"read-batch", 0, POPT_ARG_STRING, &batch_name, OPT_READ_BATCH, 0, 0 }, {"write-batch", 0, POPT_ARG_STRING, &batch_name, OPT_WRITE_BATCH, 0, 0 }, {"only-write-batch", 0, POPT_ARG_STRING, &batch_name, OPT_ONLY_WRITE_BATCH, 0, 0 }, @@ -231,7 +231,7 @@ diff --git a/options.c b/options.c {"files-from", 0, POPT_ARG_STRING, &files_from, 0, 0, 0 }, {"from0", '0', POPT_ARG_VAL, &eol_nulls, 1, 0, 0}, {"no-from0", 0, POPT_ARG_VAL, &eol_nulls, 0, 0, 0}, -@@ -2751,6 +2754,9 @@ void server_options(char **args, int *argc_p) +@@ -2756,6 +2759,9 @@ void server_options(char **args, int *argc_p) args[ac++] = arg; } @@ -252,7 +252,7 @@ diff --git a/rsync.1.md b/rsync.1.md --address=ADDRESS bind address for outgoing socket to daemon --port=PORT specify double-colon alternate port number --sockopts=OPTIONS specify custom TCP options -@@ -2226,6 +2227,12 @@ your home directory (remove the '=' for that). +@@ -2245,6 +2246,12 @@ your home directory (remove the '=' for that). > sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/ diff --git a/kerberos.diff b/kerberos.diff index 1f05106..a4b9ea1 100644 --- a/kerberos.diff +++ b/kerberos.diff @@ -9,7 +9,7 @@ To use this patch, run these commands for a successful build: ./configure make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in diff --git a/link-by-hash.diff b/link-by-hash.diff index bd7e401..623f021 100644 --- a/link-by-hash.diff +++ b/link-by-hash.diff @@ -12,7 +12,7 @@ To use this patch, run these commands for a successful build: ./configure make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in @@ -205,7 +205,7 @@ new file mode 100644 diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -167,6 +167,7 @@ char *backup_suffix = NULL; +@@ -168,6 +168,7 @@ char *backup_suffix = NULL; char *tmpdir = NULL; char *partial_dir = NULL; char *basis_dir[MAX_BASIS_DIRS+1]; @@ -213,7 +213,7 @@ diff --git a/options.c b/options.c char *config_file = NULL; char *shell_cmd = NULL; char *logfile_name = NULL; -@@ -224,7 +225,7 @@ static const char *debug_verbosity[] = { +@@ -225,7 +226,7 @@ static const char *debug_verbosity[] = { /*2*/ "BIND,CMD,CONNECT,DEL,DELTASUM,DUP,FILTER,FLIST,ICONV", /*3*/ "ACL,BACKUP,CONNECT2,DELTASUM2,DEL2,EXIT,FILTER2,FLIST2,FUZZY,GENR,OWN,RECV,SEND,TIME", /*4*/ "CMD2,DELTASUM3,DEL3,EXIT2,FLIST3,ICONV2,OWN2,PROTO,TIME2", @@ -222,7 +222,7 @@ diff --git a/options.c b/options.c }; #define MAX_VERBOSITY ((int)(sizeof debug_verbosity / sizeof debug_verbosity[0]) - 1) -@@ -295,6 +296,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = { +@@ -296,6 +297,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = { DEBUG_WORD(FUZZY, W_REC, "Debug fuzzy scoring (levels 1-2)"), DEBUG_WORD(GENR, W_REC, "Debug generator functions"), DEBUG_WORD(HASH, W_SND|W_REC, "Debug hashtable code"), @@ -230,7 +230,7 @@ diff --git a/options.c b/options.c DEBUG_WORD(HLINK, W_SND|W_REC, "Debug hard-link actions (levels 1-3)"), DEBUG_WORD(ICONV, W_CLI|W_SRV, "Debug iconv character conversions (levels 1-2)"), DEBUG_WORD(IO, W_CLI|W_SRV, "Debug I/O routines (levels 1-4)"), -@@ -575,7 +577,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, +@@ -576,7 +578,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD, OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE, OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE, @@ -239,7 +239,7 @@ diff --git a/options.c b/options.c OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS, OPT_STOP_AFTER, OPT_STOP_AT, OPT_REFUSED_BASE = 9000}; -@@ -735,6 +737,7 @@ static struct poptOption long_options[] = { +@@ -736,6 +738,7 @@ static struct poptOption long_options[] = { {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 }, {"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 }, {"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 }, @@ -247,7 +247,7 @@ diff --git a/options.c b/options.c {"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 }, {"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, {"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, -@@ -975,6 +978,9 @@ static void set_refuse_options(void) +@@ -976,6 +979,9 @@ static void set_refuse_options(void) ref = cp + 1; } @@ -257,7 +257,7 @@ diff --git a/options.c b/options.c if (am_daemon) { #ifdef ICONV_OPTION if (!*lp_charset(module_id)) -@@ -1841,6 +1847,20 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1842,6 +1848,20 @@ int parse_arguments(int *argc_p, const char ***argv_p) return 0; #endif @@ -278,7 +278,7 @@ diff --git a/options.c b/options.c case OPT_STOP_AFTER: { long val; arg = poptGetOptArg(pc); -@@ -2193,6 +2213,8 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2198,6 +2218,8 @@ int parse_arguments(int *argc_p, const char ***argv_p) tmpdir = sanitize_path(NULL, tmpdir, NULL, 0, SP_DEFAULT); if (backup_dir) backup_dir = sanitize_path(NULL, backup_dir, NULL, 0, SP_DEFAULT); @@ -287,7 +287,7 @@ diff --git a/options.c b/options.c } if (daemon_filter_list.head && !am_sender) { filter_rule_list *elp = &daemon_filter_list; -@@ -2833,6 +2855,12 @@ void server_options(char **args, int *argc_p) +@@ -2838,6 +2860,12 @@ void server_options(char **args, int *argc_p) args[ac++] = "--no-W"; } @@ -311,7 +311,7 @@ diff --git a/rsync.1.md b/rsync.1.md --compress, -z compress file data during the transfer --compress-choice=STR choose the compression algorithm (aka --zc) --compress-level=NUM explicitly set compression level (aka --zl) -@@ -2362,6 +2363,50 @@ your home directory (remove the '=' for that). +@@ -2381,6 +2382,50 @@ your home directory (remove the '=' for that). specified (or implied by `-a`). You can work-around this bug by avoiding the `-o` option when sending to an old rsync. diff --git a/md5p8.diff b/md5p8.diff index 968fab8..2796bbe 100644 --- a/md5p8.diff +++ b/md5p8.diff @@ -27,7 +27,7 @@ xxHash is still preferred (and faster), but this provides a reasonably fast fallback for the case where xxHash libraries are not available at build time. -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in diff --git a/omit-dir-changes.diff b/omit-dir-changes.diff index 5d70d6d..d798cff 100644 --- a/omit-dir-changes.diff +++ b/omit-dir-changes.diff @@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -59,7 +59,7 @@ diff --git a/options.c b/options.c int one_file_system = 0; int protocol_version = PROTOCOL_VERSION; int sparse_files = 0; -@@ -640,6 +641,7 @@ static struct poptOption long_options[] = { +@@ -641,6 +642,7 @@ static struct poptOption long_options[] = { {"omit-link-times", 'J', POPT_ARG_VAL, &omit_link_times, 1, 0, 0 }, {"no-omit-link-times",0, POPT_ARG_VAL, &omit_link_times, 0, 0, 0 }, {"no-J", 0, POPT_ARG_VAL, &omit_link_times, 0, 0, 0 }, @@ -67,7 +67,7 @@ diff --git a/options.c b/options.c {"modify-window", '@', POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 }, {"super", 0, POPT_ARG_VAL, &am_root, 2, 0, 0 }, {"no-super", 0, POPT_ARG_VAL, &am_root, 0, 0, 0 }, -@@ -2262,6 +2264,9 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2267,6 +2269,9 @@ int parse_arguments(int *argc_p, const char ***argv_p) parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0); } @@ -77,7 +77,7 @@ diff --git a/options.c b/options.c if (make_backups && !backup_dir) omit_dir_times = -1; /* Implied, so avoid -O to sender. */ -@@ -2718,6 +2723,8 @@ void server_options(char **args, int *argc_p) +@@ -2723,6 +2728,8 @@ void server_options(char **args, int *argc_p) args[ac++] = "--size-only"; if (do_stats) args[ac++] = "--stats"; @@ -97,7 +97,7 @@ diff --git a/rsync.1.md b/rsync.1.md --super receiver attempts super-user activities --fake-super store/recover privileged attrs using xattrs --sparse, -S turn sequences of nulls into sparse blocks -@@ -1426,6 +1427,11 @@ your home directory (remove the '=' for that). +@@ -1445,6 +1446,11 @@ your home directory (remove the '=' for that). This tells rsync to omit symlinks when it is preserving modification, access, and create times. diff --git a/slow-down.diff b/slow-down.diff index 8065741..1914312 100644 --- a/slow-down.diff +++ b/slow-down.diff @@ -14,7 +14,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c @@ -39,7 +39,7 @@ diff --git a/flist.c b/flist.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -116,6 +116,7 @@ int size_only = 0; +@@ -117,6 +117,7 @@ int size_only = 0; int daemon_bwlimit = 0; int bwlimit = 0; int fuzzy_basis = 0; @@ -47,7 +47,7 @@ diff --git a/options.c b/options.c size_t bwlimit_writemax = 0; int ignore_existing = 0; int ignore_non_existing = 0; -@@ -766,6 +767,7 @@ static struct poptOption long_options[] = { +@@ -767,6 +768,7 @@ static struct poptOption long_options[] = { {"itemize-changes", 'i', POPT_ARG_NONE, 0, 'i', 0, 0 }, {"no-itemize-changes",0, POPT_ARG_VAL, &itemize_changes, 0, 0, 0 }, {"no-i", 0, POPT_ARG_VAL, &itemize_changes, 0, 0, 0 }, diff --git a/slp.diff b/slp.diff index 46ade14..2ab4de6 100644 --- a/slp.diff +++ b/slp.diff @@ -10,7 +10,7 @@ To use this patch, run these commands for a successful build: TODO: the configure changes should abort if the user requests --enable-slp and we can't honor that request. -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in @@ -200,7 +200,7 @@ diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md # MODULE PARAMETERS After the global parameters you should define a number of modules, each module -@@ -1168,6 +1183,7 @@ A more sophisticated example would be: +@@ -1173,6 +1188,7 @@ A more sophisticated example would be: > max connections = 4 > syslog facility = local5 > pid file = /var/run/rsyncd.pid diff --git a/soften-links.diff b/soften-links.diff index 5ae2480..8a5dda8 100644 --- a/soften-links.diff +++ b/soften-links.diff @@ -10,7 +10,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/syscall.c b/syscall.c --- a/syscall.c +++ b/syscall.c diff --git a/source-backup.diff b/source-backup.diff index 95773a3..99653ac 100644 --- a/source-backup.diff +++ b/source-backup.diff @@ -9,7 +9,7 @@ To use this patch, run these commands for a successful build: -- Matt McCutchen -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/options.c b/options.c --- a/options.c +++ b/options.c @@ -21,7 +21,7 @@ diff --git a/options.c b/options.c /** * If 1, send the whole file as literal data rather than trying to -@@ -769,6 +770,7 @@ static struct poptOption long_options[] = { +@@ -770,6 +771,7 @@ static struct poptOption long_options[] = { {"bwlimit", 0, POPT_ARG_STRING, &bwlimit_arg, OPT_BWLIMIT, 0, 0 }, {"no-bwlimit", 0, POPT_ARG_VAL, &bwlimit, 0, 0, 0 }, {"backup", 'b', POPT_ARG_VAL, &make_backups, 1, 0, 0 }, @@ -29,7 +29,7 @@ diff --git a/options.c b/options.c {"no-backup", 0, POPT_ARG_VAL, &make_backups, 0, 0, 0 }, {"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 }, {"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 }, -@@ -2724,6 +2726,8 @@ void server_options(char **args, int *argc_p) +@@ -2729,6 +2731,8 @@ void server_options(char **args, int *argc_p) goto oom; args[ac++] = arg; } @@ -49,7 +49,7 @@ diff --git a/rsync.1.md b/rsync.1.md --del an alias for --delete-during --delete delete extraneous files from dest dirs --delete-before receiver deletes before xfer, not during -@@ -1647,6 +1648,16 @@ your home directory (remove the '=' for that). +@@ -1666,6 +1667,16 @@ your home directory (remove the '=' for that). Starting with 3.1.0, rsync will skip the sender-side removal (and output an error) if the file's size or modify time has not stayed unchanged. diff --git a/source-filter_dest-filter.diff b/source-filter_dest-filter.diff index 924069b..c3d3c02 100644 --- a/source-filter_dest-filter.diff +++ b/source-filter_dest-filter.diff @@ -30,7 +30,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -66,7 +66,7 @@ diff --git a/main.c b/main.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -113,6 +113,7 @@ int safe_symlinks = 0; +@@ -114,6 +114,7 @@ int safe_symlinks = 0; int copy_unsafe_links = 0; int munge_symlinks = 0; int size_only = 0; @@ -74,7 +74,7 @@ diff --git a/options.c b/options.c int daemon_bwlimit = 0; int bwlimit = 0; int fuzzy_basis = 0; -@@ -173,6 +174,8 @@ char *logfile_name = NULL; +@@ -174,6 +175,8 @@ char *logfile_name = NULL; char *logfile_format = NULL; char *stdout_format = NULL; char *password_file = NULL; @@ -83,7 +83,7 @@ diff --git a/options.c b/options.c char *early_input_file = NULL; char *rsync_path = RSYNC_PATH; char *backup_dir = NULL; -@@ -681,6 +684,7 @@ static struct poptOption long_options[] = { +@@ -682,6 +685,7 @@ static struct poptOption long_options[] = { {"chmod", 0, POPT_ARG_STRING, 0, OPT_CHMOD, 0, 0 }, {"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 }, {"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 }, @@ -91,7 +91,7 @@ diff --git a/options.c b/options.c {"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 }, {"no-one-file-system",0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 }, {"no-x", 0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 }, -@@ -816,6 +820,8 @@ static struct poptOption long_options[] = { +@@ -817,6 +821,8 @@ static struct poptOption long_options[] = { {"early-input", 0, POPT_ARG_STRING, &early_input_file, 0, 0, 0 }, {"blocking-io", 0, POPT_ARG_VAL, &blocking_io, 1, 0, 0 }, {"no-blocking-io", 0, POPT_ARG_VAL, &blocking_io, 0, 0, 0 }, @@ -100,7 +100,7 @@ diff --git a/options.c b/options.c {"outbuf", 0, POPT_ARG_STRING, &outbuf_mode, 0, 0, 0 }, {"remote-option", 'M', POPT_ARG_STRING, 0, 'M', 0, 0 }, {"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 }, -@@ -2385,6 +2391,16 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2390,6 +2396,16 @@ int parse_arguments(int *argc_p, const char ***argv_p) } } @@ -117,7 +117,7 @@ diff --git a/options.c b/options.c if (files_from) { char *h, *p; int q; -@@ -2738,6 +2754,25 @@ void server_options(char **args, int *argc_p) +@@ -2743,6 +2759,25 @@ void server_options(char **args, int *argc_p) else if (missing_args == 1 && !am_sender) args[ac++] = "--ignore-missing-args"; @@ -330,7 +330,7 @@ diff --git a/rsync.1.md b/rsync.1.md --protocol=NUM force an older protocol version to be used --iconv=CONVERT_SPEC request charset conversion of filenames --checksum-seed=NUM set block/file checksum seed (advanced) -@@ -3319,6 +3322,36 @@ your home directory (remove the '=' for that). +@@ -3336,6 +3339,36 @@ your home directory (remove the '=' for that). `--write-batch`. If _FILE_ is `-`, the batch data will be read from standard input. See the "BATCH MODE" section for details. diff --git a/sparse-block.diff b/sparse-block.diff index 658dc16..aedb6ba 100644 --- a/sparse-block.diff +++ b/sparse-block.diff @@ -18,7 +18,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/fileio.c b/fileio.c --- a/fileio.c +++ b/fileio.c @@ -50,7 +50,7 @@ diff --git a/options.c b/options.c int preallocate_files = 0; int do_compression = 0; int do_compression_level = CLVL_NOT_SPECIFIED; -@@ -694,6 +695,7 @@ static struct poptOption long_options[] = { +@@ -695,6 +696,7 @@ static struct poptOption long_options[] = { {"sparse", 'S', POPT_ARG_VAL, &sparse_files, 1, 0, 0 }, {"no-sparse", 0, POPT_ARG_VAL, &sparse_files, 0, 0, 0 }, {"no-S", 0, POPT_ARG_VAL, &sparse_files, 0, 0, 0 }, @@ -58,7 +58,7 @@ diff --git a/options.c b/options.c {"preallocate", 0, POPT_ARG_NONE, &preallocate_files, 0, 0, 0}, {"inplace", 0, POPT_ARG_VAL, &inplace, 1, 0, 0 }, {"no-inplace", 0, POPT_ARG_VAL, &inplace, 0, 0, 0 }, -@@ -2640,6 +2642,12 @@ void server_options(char **args, int *argc_p) +@@ -2645,6 +2647,12 @@ void server_options(char **args, int *argc_p) args[ac++] = arg; } @@ -82,7 +82,7 @@ diff --git a/rsync.1.md b/rsync.1.md --preallocate allocate dest files before writing them --write-devices write to devices as files (implies --inplace) --dry-run, -n perform a trial run with no changes made -@@ -1498,6 +1499,18 @@ your home directory (remove the '=' for that). +@@ -1517,6 +1518,18 @@ your home directory (remove the '=' for that). opposed to allocated sequences of null bytes) if the kernel version and filesystem type support creating holes in the allocated data. diff --git a/transliterate.diff b/transliterate.diff index 039568a..edb3b02 100644 --- a/transliterate.diff +++ b/transliterate.diff @@ -10,7 +10,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 3008e7c2269936672d796d95b85b285fc07adc01 +based-on: 3e44bbd3132c22f7ce1ae48c0ce262f237473038 diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c @@ -88,7 +88,7 @@ diff --git a/flist.c b/flist.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -204,6 +204,7 @@ int logfile_format_has_i = 0; +@@ -205,6 +205,7 @@ int logfile_format_has_i = 0; int logfile_format_has_o_or_i = 0; int always_checksum = 0; int list_only = 0; @@ -96,7 +96,7 @@ diff --git a/options.c b/options.c #define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */ char *batch_name = NULL; -@@ -800,6 +801,7 @@ static struct poptOption long_options[] = { +@@ -801,6 +802,7 @@ static struct poptOption long_options[] = { {"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 }, {"iconv", 0, POPT_ARG_STRING, &iconv_opt, 0, 0, 0 }, {"no-iconv", 0, POPT_ARG_NONE, 0, OPT_NO_ICONV, 0, 0 }, @@ -104,7 +104,7 @@ diff --git a/options.c b/options.c {"ipv4", '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 }, {"ipv6", '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 }, {"8-bit-output", '8', POPT_ARG_VAL, &allow_8bit_chars, 1, 0, 0 }, -@@ -2431,6 +2433,24 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2436,6 +2438,24 @@ int parse_arguments(int *argc_p, const char ***argv_p) } } @@ -129,7 +129,7 @@ diff --git a/options.c b/options.c am_starting_up = 0; return 1; -@@ -2850,6 +2870,12 @@ void server_options(char **args, int *argc_p) +@@ -2855,6 +2875,12 @@ void server_options(char **args, int *argc_p) if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30)) args[ac++] = "--no-implied-dirs"; @@ -153,7 +153,7 @@ diff --git a/rsync.1.md b/rsync.1.md --checksum-seed=NUM set block/file checksum seed (advanced) --ipv4, -4 prefer IPv4 --ipv6, -6 prefer IPv6 -@@ -3361,6 +3362,25 @@ your home directory (remove the '=' for that). +@@ -3378,6 +3379,25 @@ your home directory (remove the '=' for that). free to specify just the local charset for a daemon transfer (e.g. `--iconv=utf8`). diff --git a/xxh3-safety-check.diff b/xxh3-safety-check.diff index 848617d..e996bd7 100644 --- a/xxh3-safety-check.diff +++ b/xxh3-safety-check.diff @@ -6,7 +6,7 @@ To use this patch, run these commands for a successful build: patch -p1