./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/acls.c b/acls.c
--- a/acls.c
+++ b/acls.c
Fix a bug that could lose some bits when stripping some (supposedly)
superfluous ACL info.
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/lib/sysacls.c b/lib/sysacls.c
--- a/lib/sysacls.c
+++ b/lib/sysacls.c
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
diff --git a/log.c b/log.c
--- a/log.c
+++ b/log.c
-@@ -729,7 +729,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
+@@ -720,7 +720,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
c[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p';
c[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o';
c[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g';
int update_only = 0;
int cvs_exclude = 0;
int dry_run = 0;
-@@ -708,6 +709,7 @@ void usage(enum logcode F)
+@@ -707,6 +708,7 @@ void usage(enum logcode F)
rprintf(F," --specials preserve special files\n");
rprintf(F," -D same as --devices --specials\n");
rprintf(F," -t, --times preserve modification times\n");
{"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 1, 0, 0 },
{"no-omit-dir-times",0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 },
{"no-O", 0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 },
-@@ -2428,6 +2433,8 @@ void server_options(char **args, int *argc_p)
+@@ -2419,6 +2424,8 @@ void server_options(char **args, int *argc_p)
argstr[x++] = 'D';
if (preserve_times)
argstr[x++] = 't';
diff --git a/tls.c b/tls.c
--- a/tls.c
+++ b/tls.c
-@@ -110,6 +110,8 @@ static int stat_xattr(const char *fname, STRUCT_STAT *fst)
+@@ -109,6 +109,8 @@ static int stat_xattr(const char *fname, STRUCT_STAT *fst)
#endif
static void failed(char const *what, char const *where)
{
fprintf(stderr, PROGRAM ": %s %s: %s\n",
-@@ -117,12 +119,37 @@ static void failed(char const *what, char const *where)
+@@ -116,12 +118,37 @@ static void failed(char const *what, char const *where)
exit(1);
}
char linkbuf[4096];
if (do_lstat(fname, &buf) < 0)
-@@ -160,30 +187,17 @@ static void list_file(const char *fname)
+@@ -159,30 +186,17 @@ static void list_file(const char *fname)
}
permstring(permbuf, buf.st_mode);
/* TODO: Perhaps escape special characters in fname? */
-@@ -194,13 +208,14 @@ static void list_file(const char *fname)
+@@ -193,13 +207,14 @@ static void list_file(const char *fname)
(long)minor(buf.st_rdev));
} else
printf("%15s", do_big_num(buf.st_size, 1, NULL));
{"link-times", 'l', POPT_ARG_NONE, &link_times, 0, 0, 0 },
{"link-owner", 'L', POPT_ARG_NONE, &link_owner, 0, 0, 0 },
#ifdef SUPPORT_XATTRS
-@@ -219,6 +234,7 @@ static void tls_usage(int ret)
+@@ -218,6 +233,7 @@ static void tls_usage(int ret)
fprintf(F,"usage: " PROGRAM " [OPTIONS] FILE ...\n");
fprintf(F,"Trivial file listing program for portably checking rsync\n");
fprintf(F,"\nOptions:\n");
diff --git a/util.c b/util.c
--- a/util.c
+++ b/util.c
-@@ -127,20 +127,24 @@ NORETURN void overflow_exit(const char *str)
+@@ -116,20 +116,24 @@ void print_child_argv(const char *prefix, char **cmd)
/* This returns 0 for success, 1 for a symlink if symlink time-setting
* is not possible, or -1 for any other error. */
break;
if (errno != ENOSYS)
return -1;
-@@ -150,7 +154,7 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
+@@ -139,7 +143,7 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
#ifdef HAVE_LUTIMES
#include "case_N.h"
break;
if (errno != ENOSYS)
return -1;
-@@ -169,10 +173,10 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
+@@ -158,10 +162,10 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
#include "case_N.h"
#ifdef HAVE_UTIMES
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -678,6 +678,7 @@ void usage(enum logcode F)
+@@ -677,6 +677,7 @@ void usage(enum logcode F)
rprintf(F," -R, --relative use relative path names\n");
rprintf(F," --no-implied-dirs don't send implied dirs with --relative\n");
rprintf(F," -b, --backup make backups (see --suffix & --backup-dir)\n");
{"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 },
-@@ -2581,6 +2583,10 @@ void server_options(char **args, int *argc_p)
+@@ -2572,6 +2574,10 @@ void server_options(char **args, int *argc_p)
}
if (am_sender) {
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -152,10 +152,14 @@ int no_detach
+@@ -151,10 +151,14 @@ int no_detach
int write_batch = 0;
int read_batch = 0;
int backup_dir_len = 0;
char *tmpdir = NULL;
char *partial_dir = NULL;
char *basis_dir[MAX_BASIS_DIRS+1];
-@@ -167,7 +171,9 @@ char *stdout_format = NULL;
+@@ -166,7 +170,9 @@ char *stdout_format = NULL;
char *password_file = NULL;
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
char *sockopts = NULL;
char *usermap = NULL;
char *groupmap = NULL;
-@@ -681,6 +687,8 @@ void usage(enum logcode F)
+@@ -680,6 +686,8 @@ void usage(enum logcode F)
rprintf(F," --backup-deleted make backups only of deleted files\n");
rprintf(F," --backup-dir=DIR make backups into hierarchy based in DIR\n");
rprintf(F," --suffix=SUFFIX set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
{"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 },
-@@ -2080,6 +2090,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2071,6 +2081,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);
}
if (daemon_filter_list.head && !am_sender) {
filter_rule_list *elp = &daemon_filter_list;
-@@ -2101,6 +2113,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2092,6 +2104,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
if (check_filter(elp, FLOG, dir, 1) < 0)
goto options_rejected;
}
}
if (!backup_suffix)
-@@ -2112,6 +2132,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2103,6 +2123,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
backup_suffix);
return 0;
}
if (backup_dir) {
size_t len;
while (*backup_dir == '.' && backup_dir[1] == '/')
-@@ -2147,6 +2181,34 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2138,6 +2172,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);
}
if (preserve_times) {
preserve_times = PRESERVE_FILE_TIMES;
-@@ -2573,6 +2635,10 @@ void server_options(char **args, int *argc_p)
+@@ -2564,6 +2626,10 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--backup-dir";
args[ac++] = backup_dir;
}
/* Only send --suffix if it specifies a non-default value. */
if (strcmp(backup_suffix, backup_dir ? "" : BACKUP_SUFFIX) != 0) {
-@@ -2581,7 +2647,14 @@ void server_options(char **args, int *argc_p)
+@@ -2572,7 +2638,14 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
if (unsort_ndx)
F_NDX(file) = stats.num_dirs;
-@@ -2552,7 +2816,7 @@ struct file_list *recv_file_list(int f)
+@@ -2553,7 +2817,7 @@ struct file_list *recv_file_list(int f)
rprintf(FINFO, "[%s] flist_eof=1\n", who_am_i());
}
if (protocol_version < 30) {
/* Recv the io_error flag */
-@@ -2775,7 +3039,7 @@ void flist_free(struct file_list *flist)
+@@ -2776,7 +3040,7 @@ void flist_free(struct file_list *flist)
/* This routine ensures we don't have any duplicate names in our file list.
* duplicate names can cause corruption because of the pipelining. */
{
char fbuf[MAXPATHLEN];
int i, prev_i;
-@@ -2826,7 +3090,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2827,7 +3091,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
/* If one is a dir and the other is not, we want to
* keep the dir because it might have contents in the
* list. Otherwise keep the first one. */
struct file_struct *fp = flist->sorted[j];
if (!S_ISDIR(fp->mode))
keep = i, drop = j;
-@@ -2842,8 +3106,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2843,8 +3107,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
} else
keep = j, drop = i;
rprintf(FINFO,
"removing duplicate name %s from file list (%d)\n",
f_name(file, fbuf), drop + flist->ndx_start);
-@@ -2865,7 +3129,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2866,7 +3130,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
}
flist->high = prev_i;
int max_delete = INT_MIN;
OFF_T max_size = -1;
OFF_T min_size = -1;
-@@ -672,6 +673,7 @@ void usage(enum logcode F)
+@@ -671,6 +672,7 @@ void usage(enum logcode F)
rprintf(F," -q, --quiet suppress non-error messages\n");
rprintf(F," --no-motd suppress daemon-mode MOTD (see manpage caveat)\n");
rprintf(F," -c, --checksum skip based on checksum, not mod-time & size\n");
case OPT_INFO:
arg = poptGetOptArg(pc);
parse_output_words(info_words, info_levels, arg, USER_PRIORITY);
-@@ -1932,6 +1952,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1923,6 +1943,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -323,6 +323,17 @@ locking on this file to ensure that the max connections limit is not
+@@ -324,6 +324,17 @@ locking on this file to ensure that the max connections limit is not
exceeded for the modules sharing the lock file.
The default is tt(/var/run/rsyncd.lock).
if (f >= 0 && recurse && !divert_dirs) {
int i, end = flist->used - 1;
/* send_if_directory() bumps flist->used, so use "end". */
-@@ -2685,6 +2901,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2686,6 +2902,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
rprintf(FINFO, "[%s] flist_eof=1\n", who_am_i());
}
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -326,13 +326,15 @@ The default is tt(/var/run/rsyncd.lock).
+@@ -327,13 +327,15 @@ The default is tt(/var/run/rsyncd.lock).
dit(bf(checksum files)) This parameter tells rsync to make use of any cached
checksum information it finds in per-directory .rsyncsums files when the
current transfer is using the bf(--checksum) option. The value can be set
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int preserve_links = 0;
int preserve_hard_links = 0;
int preserve_acls = 0;
-@@ -705,6 +706,7 @@ void usage(enum logcode F)
+@@ -704,6 +705,7 @@ void usage(enum logcode F)
rprintf(F," -o, --owner preserve owner (super-user only)\n");
rprintf(F," -g, --group preserve group\n");
rprintf(F," --devices preserve device files (super-user only)\n");
{"specials", 0, POPT_ARG_VAL, &preserve_specials, 1, 0, 0 },
{"no-specials", 0, POPT_ARG_VAL, &preserve_specials, 0, 0, 0 },
{"links", 'l', POPT_ARG_VAL, &preserve_links, 1, 0, 0 },
-@@ -2745,6 +2748,9 @@ void server_options(char **args, int *argc_p)
+@@ -2736,6 +2739,9 @@ void server_options(char **args, int *argc_p)
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
diff --git a/log.c b/log.c
--- a/log.c
+++ b/log.c
-@@ -732,7 +732,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
+@@ -723,7 +723,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
c[8] = !(iflags & ITEM_REPORT_FFLAGS) ? '.' : 'f';
c[9] = !(iflags & ITEM_REPORT_ACL) ? '.' : 'a';
c[10] = !(iflags & ITEM_REPORT_XATTR) ? '.' : 'x';
int update_only = 0;
int cvs_exclude = 0;
int dry_run = 0;
-@@ -717,6 +718,7 @@ void usage(enum logcode F)
+@@ -716,6 +717,7 @@ void usage(enum logcode F)
rprintf(F," --specials preserve special files\n");
rprintf(F," -D same as --devices --specials\n");
rprintf(F," -t, --times preserve modification times\n");
{"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 1, 0, 0 },
{"no-omit-dir-times",0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 },
{"no-O", 0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 },
-@@ -2454,6 +2459,8 @@ void server_options(char **args, int *argc_p)
+@@ -2445,6 +2450,8 @@ void server_options(char **args, int *argc_p)
argstr[x++] = 'D';
if (preserve_times)
argstr[x++] = 't';
diff --git a/tls.c b/tls.c
--- a/tls.c
+++ b/tls.c
-@@ -110,6 +110,8 @@ static int stat_xattr(const char *fname, STRUCT_STAT *fst)
+@@ -109,6 +109,8 @@ static int stat_xattr(const char *fname, STRUCT_STAT *fst)
#endif
static void failed(char const *what, char const *where)
{
fprintf(stderr, PROGRAM ": %s %s: %s\n",
-@@ -117,16 +119,44 @@ static void failed(char const *what, char const *where)
+@@ -116,16 +118,44 @@ static void failed(char const *what, char const *where)
exit(1);
}
#ifdef SUPPORT_XATTRS
if (am_root < 0)
stat_xattr(fname, &buf);
-@@ -161,29 +191,11 @@ static void list_file(const char *fname)
+@@ -160,29 +190,11 @@ static void list_file(const char *fname)
permstring(permbuf, buf.st_mode);
/* TODO: Perhaps escape special characters in fname? */
-@@ -194,13 +206,14 @@ static void list_file(const char *fname)
+@@ -193,13 +205,14 @@ static void list_file(const char *fname)
(long)minor(buf.st_rdev));
} else
printf("%15s", do_big_num(buf.st_size, 1, NULL));
{"link-times", 'l', POPT_ARG_NONE, &link_times, 0, 0, 0 },
{"link-owner", 'L', POPT_ARG_NONE, &link_owner, 0, 0, 0 },
#ifdef SUPPORT_XATTRS
-@@ -219,6 +232,7 @@ static void tls_usage(int ret)
+@@ -218,6 +231,7 @@ static void tls_usage(int ret)
fprintf(F,"usage: " PROGRAM " [OPTIONS] FILE ...\n");
fprintf(F,"Trivial file listing program for portably checking rsync\n");
fprintf(F,"\nOptions:\n");
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
-@@ -756,6 +757,7 @@ void usage(enum logcode F)
+@@ -755,6 +756,7 @@ void usage(enum logcode F)
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," -M, --remote-option=OPTION send OPTION to the remote side only\n");
rprintf(F," --size-only skip files that match in size\n");
{"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 },
-@@ -2632,6 +2635,9 @@ void server_options(char **args, int *argc_p)
+@@ -2623,6 +2626,9 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
./configure
make
-based-on: 62327b1281be9151423048235573e0ca208fc095
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -761,6 +761,8 @@ void usage(enum logcode F)
+@@ -760,6 +760,8 @@ void usage(enum logcode F)
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
rprintf(F," --detect-renamed try to find renamed files to speed up the transfer\n");
{"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 },
-@@ -2619,8 +2623,14 @@ void server_options(char **args, int *argc_p)
+@@ -2610,8 +2614,14 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: 70d4a945f7d1ab1aca2c3ca8535240fad4bdf06b
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
static void send_directory(int f, struct file_list *flist,
char *fbuf, int len, int flags);
-@@ -2554,6 +2596,25 @@ struct file_list *recv_file_list(int f)
+@@ -2555,6 +2597,25 @@ struct file_list *recv_file_list(int f)
flist_sort_and_clean(flist, relative_paths);
./configure (optional if already run)
make
-based-on: 70d4a945f7d1ab1aca2c3ca8535240fad4bdf06b
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int cvs_exclude = 0;
int dry_run = 0;
int do_xfers = 1;
-@@ -681,6 +682,7 @@ void usage(enum logcode F)
+@@ -680,6 +681,7 @@ void usage(enum logcode F)
rprintf(F," --backup-dir=DIR make backups into hierarchy based in DIR\n");
rprintf(F," --suffix=SUFFIX set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
rprintf(F," -u, --update skip files that are newer on the receiver\n");
./configure
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -43,7 +43,7 @@ popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
+@@ -45,7 +45,7 @@ popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
# Programs we must have to run the test cases
CHECK_PROGS = rsync$(EXEEXT) tls$(EXEEXT) getgroups$(EXEEXT) getfsdev$(EXEEXT) \
-@@ -111,7 +111,7 @@ getgroups$(EXEEXT): getgroups.o
+@@ -127,7 +127,7 @@ getgroups$(EXEEXT): getgroups.o
getfsdev$(EXEEXT): getfsdev.o
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ getfsdev.o $(LIBS)
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -596,6 +596,7 @@ AC_FUNC_UTIME_NULL
+@@ -597,6 +597,7 @@ AC_FUNC_UTIME_NULL
AC_FUNC_ALLOCA
AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \
fchmod fstat ftruncate strchr readlink link utime utimes lutimes strftime \
diff --git a/log.c b/log.c
--- a/log.c
+++ b/log.c
-@@ -729,7 +729,7 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
+@@ -720,7 +720,7 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
c[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p';
c[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o';
c[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g';
int io_timeout = 0;
int prune_empty_dirs = 0;
int use_qsort = 0;
-@@ -573,6 +575,7 @@ static void print_rsync_version(enum logcode f)
+@@ -572,6 +574,7 @@ static void print_rsync_version(enum logcode f)
char const *links = "no ";
char const *iconv = "no ";
char const *ipv6 = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -609,6 +612,9 @@ static void print_rsync_version(enum logcode f)
+@@ -608,6 +611,9 @@ static void print_rsync_version(enum logcode f)
#ifdef CAN_SET_SYMLINK_TIMES
symtimes = "";
#endif
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -622,8 +628,8 @@ static void print_rsync_version(enum logcode f)
+@@ -621,8 +627,8 @@ static void print_rsync_version(enum logcode f)
(int)(sizeof (int64) * 8));
rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n",
got_socketpair, hardlinks, links, ipv6, have_inplace);
#ifdef MAINTAINER_MODE
rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -694,6 +700,9 @@ void usage(enum logcode F)
+@@ -693,6 +699,9 @@ void usage(enum logcode F)
rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n");
rprintf(F," -H, --hard-links preserve hard links\n");
rprintf(F," -p, --perms preserve permissions\n");
rprintf(F," -E, --executability preserve the file's executability\n");
rprintf(F," --chmod=CHMOD affect file and/or directory permissions\n");
#ifdef SUPPORT_ACLS
-@@ -739,7 +748,12 @@ void usage(enum logcode F)
+@@ -738,7 +747,12 @@ void usage(enum logcode F)
rprintf(F," --ignore-missing-args ignore missing source args without error\n");
rprintf(F," --delete-missing-args delete missing source args from destination\n");
rprintf(F," --ignore-errors delete even if there are I/O errors\n");
{"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 },
-@@ -2522,6 +2548,9 @@ void server_options(char **args, int *argc_p)
+@@ -2513,6 +2539,9 @@ void server_options(char **args, int *argc_p)
if (xfer_dirs && !recurse && delete_mode && am_sender)
args[ac++] = "--no-r";
if (do_compression && def_compress_level != Z_DEFAULT_COMPRESSION) {
if (asprintf(&arg, "--compress-level=%d", def_compress_level) < 0)
goto oom;
-@@ -2609,6 +2638,16 @@ void server_options(char **args, int *argc_p)
+@@ -2600,6 +2629,16 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--delete-excluded";
if (force_delete)
args[ac++] = "--force";
diff --git a/t_stub.c b/t_stub.c
--- a/t_stub.c
+++ b/t_stub.c
-@@ -26,6 +26,7 @@ int preallocate_files = 0;
- int module_id = -1;
+@@ -28,6 +28,7 @@ int module_id = -1;
+ int checksum_len = 0;
int relative_paths = 0;
int module_dirlen = 0;
+int force_change = 0;
int preserve_acls = 0;
int preserve_times = 0;
int preserve_xattrs = 0;
-@@ -96,3 +97,23 @@ filter_rule_list daemon_filter_list;
+@@ -97,3 +98,23 @@ filter_rule_list daemon_filter_list;
{
return "tester";
}
diff --git a/util.c b/util.c
--- a/util.c
+++ b/util.c
-@@ -31,6 +31,7 @@ extern int relative_paths;
+@@ -32,6 +32,7 @@ extern int relative_paths;
extern int preserve_times;
extern int preserve_xattrs;
extern int preallocate_files;
extern char *module_dir;
extern unsigned int module_dirlen;
extern char *partial_dir;
-@@ -125,9 +126,36 @@ NORETURN void overflow_exit(const char *str)
- exit_cleanup(RERR_MALLOC);
+@@ -114,9 +115,36 @@ void print_child_argv(const char *prefix, char **cmd)
+ rprintf(FCLIENT, " (%d args)\n", cnt);
}
+#ifdef SUPPORT_FORCE_CHANGE
{
static int switch_step = 0;
-@@ -142,6 +170,11 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
+@@ -131,6 +159,11 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
#include "case_N.h"
if (do_utimensat(fname, modtime, mod_nsec) == 0)
break;
if (errno != ENOSYS)
return -1;
switch_step++;
-@@ -152,6 +185,11 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
+@@ -141,6 +174,11 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
#include "case_N.h"
if (do_lutimes(fname, modtime, mod_nsec) == 0)
break;
if (errno != ENOSYS)
return -1;
switch_step++;
-@@ -175,6 +213,13 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
+@@ -164,6 +202,13 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
if (do_utime(fname, modtime, mod_nsec) == 0)
break;
#endif
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
file->mode = tweak_mode(file->mode, chmod_modes);
if (f >= 0) {
-@@ -2306,7 +2327,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2307,7 +2328,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
struct file_struct *file;
file = send_file_name(f, flist, fbuf, &st,
FLAG_TOP_DIR | FLAG_CONTENT_DIR | flags,
if (!file)
continue;
if (inc_recurse) {
-@@ -2320,7 +2341,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2321,7 +2342,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
} else
send_if_directory(f, flist, file, fbuf, len, flags);
} else
dit(bf(--timeout=TIMEOUT)) This option allows you to set a maximum I/O
timeout in seconds. If no data is transferred for the specified time
then rsync will exit. The default is 0, which means no timeout.
-@@ -2840,6 +2846,15 @@ itemization(
+@@ -2841,6 +2847,15 @@ itemization(
option's default 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.
)
manpagesection(MERGE-FILE FILTER RULES)
-@@ -2901,6 +2916,12 @@ itemization(
+@@ -2902,6 +2917,12 @@ itemization(
a rule prefix such as bf(hide)).
)
diff --git a/util.c b/util.c
--- a/util.c
+++ b/util.c
-@@ -842,6 +842,25 @@ size_t stringjoin(char *dest, size_t destsize, ...)
+@@ -836,6 +836,25 @@ size_t stringjoin(char *dest, size_t destsize, ...)
return ret;
}
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
int preserve_links = 0;
int preserve_hard_links = 0;
int preserve_acls = 0;
-@@ -747,6 +748,7 @@ void usage(enum logcode F)
+@@ -746,6 +747,7 @@ void usage(enum logcode F)
rprintf(F," --partial-dir=DIR put a partially transferred file into DIR\n");
rprintf(F," --delay-updates put all updated files into place at transfer's end\n");
rprintf(F," -m, --prune-empty-dirs prune empty directory chains from the file-list\n");
{"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
{"rsync-path", 0, POPT_ARG_STRING, &rsync_path, 0, 0, 0 },
{"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
-@@ -2694,6 +2697,9 @@ void server_options(char **args, int *argc_p)
+@@ -2685,6 +2688,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = tmpdir;
}
+int do_fsync = 0;
int modify_window = 0;
int preallocate_files = 0;
- int module_id = -1;
+ int protect_args = 0;
diff --git a/util.c b/util.c
--- a/util.c
+++ b/util.c
extern int module_id;
+extern int do_fsync;
+ extern int protect_args;
extern int modify_window;
extern int relative_paths;
- extern int preserve_times;
-@@ -408,6 +409,13 @@ int copy_file(const char *source, const char *dest, int ofd, mode_t mode)
+@@ -397,6 +398,13 @@ int copy_file(const char *source, const char *dest, int ofd, mode_t mode)
}
#endif
int preserve_perms = 0;
int preserve_fileflags = 0;
int preserve_executability = 0;
-@@ -712,6 +713,10 @@ void usage(enum logcode F)
+@@ -711,6 +712,10 @@ void usage(enum logcode F)
#ifdef SUPPORT_XATTRS
rprintf(F," -X, --xattrs preserve extended attributes\n");
#endif
{"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 },
-@@ -1963,6 +1974,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1954,6 +1965,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
if (block_size > MAX_BLOCK_SIZE) {
snprintf(err_buf, sizeof err_buf,
"--block-size=%lu is too large (max: %u)\n", block_size, MAX_BLOCK_SIZE);
-@@ -2558,6 +2578,11 @@ void server_options(char **args, int *argc_p)
+@@ -2549,6 +2569,11 @@ void server_options(char **args, int *argc_p)
if (preserve_fileflags)
args[ac++] = "--fileflags";
diff --git a/t_stub.c b/t_stub.c
--- a/t_stub.c
+++ b/t_stub.c
-@@ -30,6 +30,7 @@ int force_change = 0;
+@@ -32,6 +32,7 @@ int force_change = 0;
int preserve_acls = 0;
int preserve_times = 0;
int preserve_xattrs = 0;
+int preserve_hfs_compression = 0;
- char number_separator = ',';
char *partial_dir;
char *module_dir;
+ filter_rule_list daemon_filter_list;
diff --git a/xattrs.c b/xattrs.c
--- a/xattrs.c
+++ b/xattrs.c
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
extern int ignore_errors;
extern int numeric_ids;
extern int recurse;
-@@ -3016,6 +3017,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3017,6 +3018,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
{
int dif;
const uchar *c1, *c2;
enum fnc_state state1, state2;
enum fnc_type type1, type2;
enum fnc_type t_path = protocol_version >= 29 ? t_PATH : t_ITEM;
-@@ -3126,7 +3128,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3127,7 +3129,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
if (type1 != type2)
return type1 == t_PATH ? 1 : -1;
}
int blocking_io = -1;
int checksum_seed = 0;
int inplace = 0;
-@@ -776,6 +777,7 @@ void usage(enum logcode F)
+@@ -775,6 +776,7 @@ void usage(enum logcode F)
rprintf(F," --files-from=FILE read list of source-file names from FILE\n");
rprintf(F," -0, --from0 all *-from/filter files are delimited by 0s\n");
rprintf(F," -s, --protect-args no space-splitting; only wildcard special-chars\n");
{"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},
-@@ -2644,6 +2648,9 @@ void server_options(char **args, int *argc_p)
+@@ -2635,6 +2639,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
+int ignore_case = 0;
int wildmatch_errors = 0;
- char number_separator = ',';
+ typedef char bool;
./configure
make
-based-on: 0488a14b9930bf91719ac0f1d1c0c8770ca10646
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -37,7 +37,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -39,7 +39,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
util.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -283,6 +283,21 @@ message telling them to try later. The default is 0, which means no limit.
+@@ -284,6 +284,21 @@ message telling them to try later. The default is 0, which means no limit.
A negative value disables the module.
See also the "lock file" parameter.
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/authenticate.c b/authenticate.c
--- a/authenticate.c
+++ b/authenticate.c
-@@ -217,7 +217,7 @@ char *auth_server(int f_in, int f_out, int module, const char *host,
+@@ -224,7 +224,7 @@ char *auth_server(int f_in, int f_out, int module, const char *host,
char *users = lp_auth_users(module);
char challenge[MAX_DIGEST_LEN*2];
char line[BIGPATHBUFLEN];
int auth_uid_groups_cnt = -1;
const char *err = NULL;
int group_match = -1;
-@@ -277,7 +277,7 @@ char *auth_server(int f_in, int f_out, int module, const char *host,
+@@ -284,7 +284,7 @@ char *auth_server(int f_in, int f_out, int module, const char *host,
|| getallgroups(auth_uid, gid_list, &auth_uid_groups_cnt) != NULL)
auth_uid_groups_cnt = 0;
else {
out_of_memory("auth_server");
for (j = 0; j < auth_uid_groups_cnt; j++)
auth_uid_groups[j] = gid_to_group(gid_list[j]);
-@@ -304,7 +304,7 @@ char *auth_server(int f_in, int f_out, int module, const char *host,
+@@ -311,7 +311,7 @@ char *auth_server(int f_in, int f_out, int module, const char *host,
else if (opt_ch == 'd')
err = "denied by rule";
else {
err = check_secret(module, line, group, challenge, pass);
}
-@@ -315,7 +315,7 @@ char *auth_server(int f_in, int f_out, int module, const char *host,
+@@ -322,7 +322,7 @@ char *auth_server(int f_in, int f_out, int module, const char *host,
int j;
for (j = 0; j < auth_uid_groups_cnt; j++) {
if (auth_uid_groups[j])
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -194,10 +194,11 @@ if the module is not read-only).
+@@ -195,10 +195,11 @@ if the module is not read-only).
When this parameter is enabled, rsync will not attempt to map users and groups
by name (by default), but instead copy IDs as though bf(--numeric-ids) had
process in the chroot hierarchy will need to have access to the resources
used by these library functions (traditionally /etc/passwd and
/etc/group, but perhaps additional dynamic libraries as well).
-@@ -263,6 +264,27 @@ path elements that rsync believes will allow a symlink to escape the module's
+@@ -264,6 +265,27 @@ path elements that rsync believes will allow a symlink to escape the module's
hierarchy. There are tricky ways to work around this, though, so you had
better trust your users if you choose this combination of parameters.
diff --git a/t_stub.c b/t_stub.c
--- a/t_stub.c
+++ b/t_stub.c
-@@ -32,6 +32,7 @@ int preserve_xattrs = 0;
- char number_separator = ',';
+@@ -33,6 +33,7 @@ int preserve_times = 0;
+ int preserve_xattrs = 0;
char *partial_dir;
char *module_dir;
+pid_t namecvt_pid;
filter_rule_list daemon_filter_list;
void rprintf(UNUSED(enum logcode code), const char *format, ...)
-@@ -82,6 +83,11 @@ filter_rule_list daemon_filter_list;
+@@ -83,6 +84,11 @@ filter_rule_list daemon_filter_list;
return;
}
diff --git a/util.c b/util.c
--- a/util.c
+++ b/util.c
-@@ -34,6 +34,8 @@ extern int preallocate_files;
+@@ -35,6 +35,8 @@ extern int preallocate_files;
extern char *module_dir;
extern unsigned int module_dirlen;
extern char *partial_dir;
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int update_only = 0;
int cvs_exclude = 0;
int dry_run = 0;
-@@ -710,6 +711,7 @@ void usage(enum logcode F)
+@@ -709,6 +710,7 @@ void usage(enum logcode F)
rprintf(F," -t, --times preserve modification times\n");
rprintf(F," -O, --omit-dir-times omit directories from --times\n");
rprintf(F," -J, --omit-link-times omit symlinks from --times\n");
{"modify-window", 0, 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 },
-@@ -2146,6 +2149,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2137,6 +2140,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0);
}
if (preserve_times) {
preserve_times = PRESERVE_FILE_TIMES;
if (!omit_dir_times)
-@@ -2397,6 +2403,8 @@ void server_options(char **args, int *argc_p)
+@@ -2388,6 +2394,8 @@ void server_options(char **args, int *argc_p)
argstr[x++] = 'O';
if (omit_link_times)
argstr[x++] = 'J';
./configure
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -41,7 +41,7 @@ OBJS3=progress.o pipe.o
+@@ -43,7 +43,7 @@ OBJS3=progress.o pipe.o
DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -327,6 +327,25 @@ if test x"$enable_locale" != x"no"; then
+@@ -328,6 +328,25 @@ if test x"$enable_locale" != x"no"; then
AC_DEFINE(CONFIG_LOCALE)
fi
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -192,6 +192,14 @@ int logfile_format_has_o_or_i = 0;
+@@ -191,6 +191,14 @@ int logfile_format_has_o_or_i = 0;
int always_checksum = 0;
int list_only = 0;
#define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */
char *batch_name = NULL;
-@@ -573,6 +581,7 @@ static void print_rsync_version(enum logcode f)
+@@ -572,6 +580,7 @@ static void print_rsync_version(enum logcode f)
char const *links = "no ";
char const *iconv = "no ";
char const *ipv6 = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -609,6 +618,9 @@ static void print_rsync_version(enum logcode f)
+@@ -608,6 +617,9 @@ static void print_rsync_version(enum logcode f)
#ifdef CAN_SET_SYMLINK_TIMES
symtimes = "";
#endif
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -622,8 +634,8 @@ static void print_rsync_version(enum logcode f)
+@@ -621,8 +633,8 @@ static void print_rsync_version(enum logcode f)
(int)(sizeof (int64) * 8));
rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n",
got_socketpair, hardlinks, links, ipv6, have_inplace);
#ifdef MAINTAINER_MODE
rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
@@ -804,6 +816,13 @@ void usage(enum logcode F)
- #endif
+ rprintf(F," --checksum-seed=NUM set block/file checksum seed (advanced)\n");
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
+#ifdef HAVE_OPENSSL
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2240,6 +2303,17 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2231,6 +2294,17 @@ int parse_arguments(int *argc_p, const char ***argv_p)
if (delay_updates && !partial_dir)
partial_dir = tmp_partialdir;
if (inplace) {
#ifdef HAVE_FTRUNCATE
if (partial_dir) {
-@@ -2837,9 +2911,21 @@ char *check_for_hostspec(char *s, char **host_ptr, int *port_ptr)
+@@ -2828,9 +2902,21 @@ char *check_for_hostspec(char *s, char **host_ptr, int *port_ptr)
{
char *path;
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
size_t bwlimit_writemax = 0;
int ignore_existing = 0;
int ignore_non_existing = 0;
-@@ -792,6 +793,7 @@ void usage(enum logcode F)
+@@ -791,6 +792,7 @@ void usage(enum logcode F)
rprintf(F," --password-file=FILE read daemon-access password from FILE\n");
rprintf(F," --list-only list the files instead of copying them\n");
rprintf(F," --bwlimit=RATE limit socket I/O bandwidth\n");
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
-@@ -13,6 +13,8 @@ CFLAGS=@CFLAGS@
+@@ -14,6 +14,8 @@ CFLAGS=@CFLAGS@
CPPFLAGS=@CPPFLAGS@
EXEEXT=@EXEEXT@
LDFLAGS=@LDFLAGS@
INSTALLCMD=@INSTALL@
INSTALLMAN=@INSTALL@
-@@ -38,7 +40,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
+@@ -40,7 +42,7 @@ OBJS1=flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o \
OBJS2=options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o \
fileio.o batch.o clientname.o chmod.o acls.o xattrs.o
OBJS3=progress.o pipe.o
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(DAEMON_OBJ) $(LIBOBJ) @BUILD_ZLIB@ @BUILD_POPT@
-@@ -74,7 +76,7 @@ install-strip:
+@@ -90,7 +92,7 @@ install-strip:
$(MAKE) INSTALL_STRIP='-s' install
rsync$(EXEEXT): $(OBJS)
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -731,6 +731,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
+@@ -732,6 +732,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
AC_DEFINE(CAN_HARDLINK_SPECIAL, 1, [Define to 1 if link() can hard-link special files.])
fi
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -573,6 +573,7 @@ static void print_rsync_version(enum logcode f)
+@@ -572,6 +572,7 @@ static void print_rsync_version(enum logcode f)
char const *links = "no ";
char const *iconv = "no ";
char const *ipv6 = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -609,6 +610,9 @@ static void print_rsync_version(enum logcode f)
+@@ -608,6 +609,9 @@ static void print_rsync_version(enum logcode f)
#ifdef CAN_SET_SYMLINK_TIMES
symtimes = "";
#endif
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -622,8 +626,8 @@ static void print_rsync_version(enum logcode f)
+@@ -621,8 +625,8 @@ static void print_rsync_version(enum logcode f)
(int)(sizeof (int64) * 8));
rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n",
got_socketpair, hardlinks, links, ipv6, have_inplace);
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -123,6 +123,15 @@ via the bf(--sockopts) command-line option.
+@@ -124,6 +124,15 @@ via the bf(--sockopts) command-line option.
dit(bf(listen backlog)) You can override the default backlog value when the
daemon listens for connections. It defaults to 5.
enddit()
manpagesection(MODULE PARAMETERS)
-@@ -845,6 +854,7 @@ use chroot = yes
+@@ -846,6 +855,7 @@ use chroot = yes
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
/**
* If 1, send the whole file as literal data rather than trying to
-@@ -729,6 +730,7 @@ void usage(enum logcode F)
+@@ -728,6 +729,7 @@ void usage(enum logcode F)
rprintf(F," --existing skip creating new files on receiver\n");
rprintf(F," --ignore-existing skip updating files that already exist on receiver\n");
rprintf(F," --remove-source-files sender removes synchronized files (non-dirs)\n");
{"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 },
-@@ -2623,6 +2626,8 @@ void server_options(char **args, int *argc_p)
+@@ -2614,6 +2617,8 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
-@@ -165,6 +166,8 @@ char *logfile_name = NULL;
+@@ -164,6 +165,8 @@ char *logfile_name = NULL;
char *logfile_format = NULL;
char *stdout_format = NULL;
char *password_file = NULL;
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
char backup_dir_buf[MAXPATHLEN];
-@@ -756,6 +759,7 @@ void usage(enum logcode F)
+@@ -755,6 +758,7 @@ void usage(enum logcode F)
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," -M, --remote-option=OPTION send OPTION to the remote side only\n");
rprintf(F," --size-only skip files that match in size\n");
rprintf(F," --modify-window=NUM compare mod-times with reduced accuracy\n");
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
-@@ -798,6 +802,8 @@ void usage(enum logcode F)
+@@ -797,6 +801,8 @@ void usage(enum logcode F)
rprintf(F," --write-batch=FILE write a batched update to FILE\n");
rprintf(F," --only-write-batch=FILE like --write-batch but w/o updating destination\n");
rprintf(F," --read-batch=FILE read a batched update from FILE\n");
#ifdef HAVE_SETVBUF
{"outbuf", 0, POPT_ARG_STRING, &outbuf_mode, 0, 0, 0 },
#endif
-@@ -2281,6 +2290,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2272,6 +2281,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
if (files_from) {
char *h, *p;
int q;
-@@ -2632,6 +2651,25 @@ void server_options(char **args, int *argc_p)
+@@ -2623,6 +2642,25 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
--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)
-@@ -2504,6 +2507,33 @@ file previously generated by bf(--write-batch).
+@@ -2505,6 +2508,33 @@ file previously generated by bf(--write-batch).
If em(FILE) is bf(-), the batch data will be read from standard input.
See the "BATCH MODE" section for details.
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
int preallocate_files = 0;
int do_compression = 0;
int def_compress_level = Z_DEFAULT_COMPRESSION;
-@@ -715,6 +716,7 @@ void usage(enum logcode F)
+@@ -714,6 +715,7 @@ void usage(enum logcode F)
rprintf(F," --fake-super store/recover privileged attrs using xattrs\n");
#endif
rprintf(F," -S, --sparse handle sparse files efficiently\n");
{"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 },
-@@ -2555,6 +2558,12 @@ void server_options(char **args, int *argc_p)
+@@ -2546,6 +2549,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/io.c b/io.c
--- a/io.c
+++ b/io.c
int max_delete = INT_MIN;
OFF_T max_size = -1;
OFF_T min_size = -1;
-@@ -792,6 +793,8 @@ void usage(enum logcode F)
+@@ -791,6 +792,8 @@ void usage(enum logcode F)
rprintf(F," --password-file=FILE read daemon-access password from FILE\n");
rprintf(F," --list-only list the files instead of copying them\n");
rprintf(F," --bwlimit=RATE limit socket I/O bandwidth\n");
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2567,6 +2603,15 @@ void server_options(char **args, int *argc_p)
+@@ -2558,6 +2594,15 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating dest
--read-batch=FILE read a batched update from FILE
-@@ -2478,6 +2480,19 @@ files can show up as being rapidly sent when the data is quickly buffered,
+@@ -2479,6 +2481,19 @@ files can show up as being rapidly sent when the data is quickly buffered,
while other can show up as very slow when the flushing of the output buffer
occurs. This may be fixed in a future version.
diff --git a/util.c b/util.c
--- a/util.c
+++ b/util.c
-@@ -125,6 +125,133 @@ NORETURN void overflow_exit(const char *str)
- exit_cleanup(RERR_MALLOC);
+@@ -114,6 +114,133 @@ void print_child_argv(const char *prefix, char **cmd)
+ rprintf(FCLIENT, " (%d args)\n", cnt);
}
+/* Allow the user to specify a time in the format yyyy-mm-ddThh:mm while
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
if (*thisname)
clean_fname(thisname, 0);
-@@ -2440,6 +2464,15 @@ struct file_list *recv_file_list(int f)
+@@ -2441,6 +2465,15 @@ struct file_list *recv_file_list(int f)
parse_name_map(usermap, True);
if (groupmap)
parse_name_map(groupmap, False);
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -191,6 +191,7 @@ int logfile_format_has_i = 0;
+@@ -190,6 +190,7 @@ int logfile_format_has_i = 0;
int logfile_format_has_o_or_i = 0;
int always_checksum = 0;
int list_only = 0;
#define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */
char *batch_name = NULL;
-@@ -802,6 +803,7 @@ void usage(enum logcode F)
+@@ -801,6 +802,7 @@ void usage(enum logcode F)
#ifdef ICONV_OPTION
rprintf(F," --iconv=CONVERT_SPEC request charset conversion of filenames\n");
#endif
+ rprintf(F," --tr=BAD/GOOD transliterate filenames\n");
+ rprintf(F," --checksum-seed=NUM set block/file checksum seed (advanced)\n");
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
- rprintf(F," --version print version number\n");
@@ -1019,6 +1021,7 @@ static struct poptOption long_options[] = {
{"iconv", 0, POPT_ARG_STRING, &iconv_opt, 0, 0, 0 },
{"no-iconv", 0, POPT_ARG_NONE, 0, OPT_NO_ICONV, 0, 0 },
{"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 },
-@@ -2327,6 +2330,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2318,6 +2321,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
am_starting_up = 0;
return 1;
-@@ -2740,6 +2761,12 @@ void server_options(char **args, int *argc_p)
+@@ -2731,6 +2752,12 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";
--checksum-seed=NUM set block/file checksum seed (advanced)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
-@@ -2542,6 +2543,22 @@ daemon uses the charset specified in its "charset" configuration parameter
+@@ -2543,6 +2544,22 @@ daemon uses the charset specified in its "charset" configuration parameter
regardless of the remote charset you actually pass. Thus, you may feel free to
specify just the local charset for a daemon transfer (e.g. bf(--iconv=utf8)).
./configure (optional if already run)
make
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
This patch has not yet been tested by me (Wayne), but was provided
Darryl Dixon. Thanks!
-based-on: 1e9ee19a716b72454dfeab663802c626b81cdf2e
+based-on: 05fce6582a9192c58b2107153ec00056fd120d14
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int preserve_links = 0;
int preserve_hard_links = 0;
int preserve_acls = 0;
-@@ -705,6 +706,7 @@ void usage(enum logcode F)
+@@ -704,6 +705,7 @@ void usage(enum logcode F)
rprintf(F," -o, --owner preserve owner (super-user only)\n");
rprintf(F," -g, --group preserve group\n");
rprintf(F," --devices preserve device files (super-user only)\n");
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2740,6 +2748,9 @@ void server_options(char **args, int *argc_p)
+@@ -2731,6 +2739,9 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";
OFF_T preallocated_len = 0;
#endif
-- if (preallocate_files && fd != -1 && total_size > 0) {
-+ if (preallocate_files && fd != -1 && F_LENGTH(file) > 0) {
+- if (preallocate_files && fd != -1 && total_size > 0 && (!inplace || total_size > size_r)) {
++ if (preallocate_files && fd != -1 && F_LENGTH(file) > 0 && (!inplace || F_LENGTH(file) > size_r)) {
/* Try to preallocate enough space for file's eventual length. Can
* reduce fragmentation on filesystems like ext4, xfs, and NTFS. */
- if (do_fallocate(fd, 0, total_size) == 0) {