./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/acls.c b/acls.c
--- a/acls.c
+++ b/acls.c
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -203,13 +203,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -205,13 +205,6 @@ void setup_protocol(int f_out,int f_in)
if (protocol_version < 30) {
if (append_mode == 1)
append_mode = 2;
Fix a bug that could lose some bits when stripping some (supposedly)
superfluous ACL info.
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
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: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -47,6 +47,7 @@ extern int protocol_version;
+@@ -48,6 +48,7 @@ extern int protocol_version;
extern int protect_args;
extern int preserve_uid;
extern int preserve_gid;
extern int preserve_acls;
extern int preserve_xattrs;
extern int need_messages_from_generator;
-@@ -64,7 +65,7 @@ extern char *iconv_opt;
+@@ -65,7 +66,7 @@ extern char *iconv_opt;
#endif
/* These index values are for the file-list's extra-attribute array. */
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -142,6 +143,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -144,6 +145,8 @@ void setup_protocol(int f_out,int f_in)
uid_ndx = ++file_extra_cnt;
if (preserve_gid)
gid_ndx = ++file_extra_cnt;
}
}
-@@ -2049,8 +2060,11 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+@@ -2063,8 +2074,11 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
if (need_retouch_dir_times) {
STRUCT_STAT st;
if (link_stat(fname, &st, 0) == 0
-O, --omit-dir-times omit directories from --times
-J, --omit-link-times omit symlinks from --times
--super receiver attempts super-user activities
-@@ -1178,6 +1179,12 @@ cause the next transfer to behave as if it used bf(-I), causing all files to be
+@@ -1180,6 +1181,12 @@ cause the next transfer to behave as if it used bf(-I), causing all files to be
updated (though rsync's delta-transfer algorithm will make the update fairly efficient
if the files haven't actually changed, you're much better off using bf(-t)).
dit(bf(-O, --omit-dir-times)) This tells rsync to omit directories when
it is preserving modification times (see bf(--times)). If NFS is sharing
the directories on the receiving side, it is a good idea to use bf(-O).
-@@ -2135,7 +2142,10 @@ quote(itemization(
+@@ -2137,7 +2144,10 @@ quote(itemization(
sender's value (requires bf(--owner) and super-user privileges).
it() A bf(g) means the group is different and is being updated to the
sender's value (requires bf(--group) and the authority to set the group).
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -1780,7 +1780,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1794,7 +1794,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto notify_others;
if (read_batch || whole_file) {
if (!(backupptr = get_backup_name(fname)))
goto cleanup;
if (!(back_file = make_file(fname, NULL, NULL, 0, NO_FILTERS)))
-@@ -1816,7 +1816,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1830,7 +1830,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto notify_others;
}
if (!(backupptr = get_backup_name(fname))) {
close(fd);
goto cleanup;
-@@ -1940,7 +1940,7 @@ int atomic_create(struct file_struct *file, char *fname, const char *slnk, const
+@@ -1954,7 +1954,7 @@ int atomic_create(struct file_struct *file, char *fname, const char *slnk, const
skip_atomic = 0;
if (del_for_flag) {
{"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 },
-@@ -2599,6 +2601,10 @@ void server_options(char **args, int *argc_p)
+@@ -2600,6 +2602,10 @@ void server_options(char **args, int *argc_p)
}
if (am_sender) {
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
-u, --update skip files that are newer on the receiver
-@@ -778,6 +779,11 @@ in the list so that it has a high enough priority to be effective (e.g., if
+@@ -780,6 +781,11 @@ in the list so that it has a high enough priority to be effective (e.g., if
your rules specify a trailing inclusion/exclusion of '*', the auto-added
rule would never be reached).
rprintf(FERROR, "backup filename too long\n");
return NULL;
-@@ -339,3 +351,13 @@ int make_backup(const char *fname, BOOL prefer_rename)
+@@ -340,3 +352,13 @@ int make_backup(const char *fname, BOOL prefer_rename)
rprintf(FINFO, "backed up %s to %s\n", fname, buf);
return ret;
}
if (preserve_times) {
preserve_times = PRESERVE_FILE_TIMES;
-@@ -2591,6 +2653,10 @@ void server_options(char **args, int *argc_p)
+@@ -2592,6 +2654,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) {
-@@ -2599,7 +2665,14 @@ void server_options(char **args, int *argc_p)
+@@ -2600,7 +2666,14 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
}
void write_del_stats(int f)
-@@ -1445,6 +1448,14 @@ RETSIGTYPE remember_children(UNUSED(int val))
+@@ -1445,6 +1448,14 @@ void remember_children(UNUSED(int val))
break;
}
}
}
#endif
#ifndef HAVE_SIGACTION
-@@ -1502,6 +1513,12 @@ static RETSIGTYPE rsync_panic_handler(UNUSED(int whatsig))
+@@ -1502,6 +1513,12 @@ static void rsync_panic_handler(UNUSED(int whatsig))
}
#endif
-+static RETSIGTYPE rsync_crash_handler(UNUSED(int whatsig))
++static void rsync_crash_handler(UNUSED(int whatsig))
+{
+ log_exit(RERR_WECRASHED, __FILE__, __LINE__);
+ logfile_close();
--- a/socket.c
+++ b/socket.c
@@ -532,7 +532,17 @@ int is_a_socket(int fd)
- static RETSIGTYPE sigchld_handler(UNUSED(int val))
+ static void sigchld_handler(UNUSED(int val))
{
#ifdef WNOHANG
- while (waitpid(-1, NULL, WNOHANG) > 0) {}
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
if (protocol_version < 30) {
/* Recv the io_error flag */
-@@ -2807,7 +3071,7 @@ void flist_free(struct file_list *flist)
+@@ -2835,7 +3099,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;
-@@ -2858,7 +3122,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2886,7 +3150,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;
-@@ -2874,8 +3138,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2902,8 +3166,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);
-@@ -2897,7 +3161,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2925,7 +3189,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
}
flist->high = prev_i;
continue;
best_match = j;
match_level = 2;
-@@ -1183,7 +1187,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1184,7 +1188,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;
static struct file_list *fuzzy_dirlist[MAX_BASIS_DIRS+1];
struct file_struct *fuzzy_file = NULL;
int fd = -1, f_copy = -1;
stat_x sx, real_sx;
-@@ -1274,8 +1278,9 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1287,8 +1291,9 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fuzzy_dirlist[i] = NULL;
}
}
#ifdef SUPPORT_ACLS
if (!preserve_perms)
dflt_perms = default_perms_for_dir(dn);
-@@ -1283,7 +1288,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1296,7 +1301,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
parent_dirname = dn;
int i;
strlcpy(fnamecmpbuf, dn, sizeof fnamecmpbuf);
for (i = 0; i < fuzzy_basis; i++) {
-@@ -1295,7 +1300,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1308,7 +1313,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fuzzy_dirlist[i] = NULL;
}
}
}
statret = link_stat(fname, &sx.st, keep_dirlinks && is_dir);
-@@ -1740,7 +1748,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1754,7 +1762,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
;
else if (fnamecmp_type == FNAMECMP_FUZZY)
;
/* Some utility defines: */
#define F_IS_ACTIVE(f) (f)->basename[0]
#define F_IS_HLINKED(f) ((f)->flags & FLAG_HLINKED)
-@@ -970,6 +974,13 @@ typedef struct {
+@@ -969,6 +973,13 @@ typedef struct {
char fname[1]; /* has variable size */
} relnamecache;
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
-r, --recursive recurse into directories
-@@ -617,9 +618,9 @@ uses a "quick check" that (by default) checks if each file's size and time
+@@ -619,9 +620,9 @@ uses a "quick check" that (by default) checks if each file's size and time
of last modification match between the sender and receiver. This option
changes this to compare a 128-bit checksum for each file that has a
matching size. Generating the checksums means that both sides will expend
The sending side generates its checksums while it is doing the file-system
scan that builds the list of the available files. The receiver generates
-@@ -627,6 +628,8 @@ its checksums when it is scanning for changed files, and will checksum any
+@@ -629,6 +630,8 @@ its checksums when it is scanning for changed files, and will checksum any
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.
Note that rsync always verifies that each em(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
-@@ -636,6 +639,36 @@ option's before-the-transfer "Does this file need to be updated?" check.
+@@ -638,6 +641,36 @@ option's before-the-transfer "Does this file need to be updated?" check.
For protocol 30 and beyond (first supported in 3.0.0), the checksum used is
MD5. For older protocols, the checksum used is MD4.
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -331,6 +331,17 @@ locking on this file to ensure that the max connections limit is not
+@@ -335,6 +335,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).
else
file_checksum(fn, st, sum);
return memcmp(sum, F_SUM(file), checksum_len) == 0;
-@@ -1301,7 +1302,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1314,7 +1315,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
}
if (checksum_files) {
}
need_new_dirscan = 0;
}
-@@ -1475,6 +1477,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1488,6 +1490,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
else
change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
}
+ upcoming_whole_dir = file->flags & FLAG_CONTENT_DIR && f_out != -1 ? 1 : 0;
+ prior_dir_file = file;
goto cleanup;
}
-
-@@ -1754,6 +1757,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1768,6 +1771,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
handle_partial_dir(partialptr, PDIR_DELETE);
}
set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT);
if (itemizing)
itemize(fnamecmp, file, ndx, statret, &sx, 0, 0, NULL);
#ifdef SUPPORT_HARD_LINKS
-@@ -2248,6 +2253,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2262,6 +2267,7 @@ void generate_files(int f_out, const char *local_name)
} else
change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
}
}
for (i = cur_flist->low; i <= cur_flist->high; i++) {
struct file_struct *file = cur_flist->sorted[i];
-@@ -2342,6 +2348,9 @@ void generate_files(int f_out, const char *local_name)
+@@ -2356,6 +2362,9 @@ void generate_files(int f_out, const char *local_name)
wait_for_receiver();
}
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -976,6 +976,8 @@ typedef struct {
+@@ -975,6 +975,8 @@ typedef struct {
#define CSF_ENABLE (1<<1)
#define CSF_LAX (1<<2)
diff --git a/rsync.yo b/rsync.yo
--- a/rsync.yo
+++ b/rsync.yo
-@@ -648,9 +648,13 @@ computed just as it would be if bf(--sumfiles) was not specified.
+@@ -650,9 +650,13 @@ computed just as it would be if bf(--sumfiles) was not specified.
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/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -334,13 +334,15 @@ The default is tt(/var/run/rsyncd.lock).
+@@ -338,13 +338,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: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
#ifdef HAVE_SIGACTION
static struct sigaction sigact;
-@@ -166,6 +168,37 @@ static RETSIGTYPE contimeout_handler(UNUSED(int val))
+@@ -166,6 +168,37 @@ static void contimeout_handler(UNUSED(int val))
connect_timeout = -1;
}
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int preserve_specials;
extern int preserve_hard_links;
extern int preserve_executability;
-@@ -1636,7 +1637,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1650,7 +1651,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
{"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 },
-@@ -2763,6 +2766,9 @@ void server_options(char **args, int *argc_p)
+@@ -2764,6 +2767,9 @@ void server_options(char **args, int *argc_p)
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
diff --git a/sender.c b/sender.c
--- a/sender.c
+++ b/sender.c
-@@ -365,6 +365,20 @@ void send_files(int f_in, int f_out)
+@@ -366,6 +366,20 @@ void send_files(int f_in, int f_out)
exit_cleanup(RERR_FILEIO);
}
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -48,6 +48,7 @@ extern int force_change;
+@@ -49,6 +49,7 @@ extern int force_change;
extern int protect_args;
extern int preserve_uid;
extern int preserve_gid;
extern int preserve_fileflags;
extern int preserve_acls;
extern int preserve_xattrs;
-@@ -66,7 +67,7 @@ extern char *iconv_opt;
+@@ -67,7 +68,7 @@ extern char *iconv_opt;
#endif
/* These index values are for the file-list's extra-attribute array. */
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -144,6 +145,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -146,6 +147,8 @@ void setup_protocol(int f_out,int f_in)
uid_ndx = ++file_extra_cnt;
if (preserve_gid)
gid_ndx = ++file_extra_cnt;
}
}
-@@ -1250,6 +1270,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1251,6 +1271,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
return;
}
}
#define DEV_EXTRA_CNT 2
#define DIRNODE_EXTRA_CNT 3
#define SUM_EXTRA_CNT ((MAX_DIGEST_LEN + EXTRA_LEN - 1) / EXTRA_LEN)
-@@ -1022,6 +1026,7 @@ typedef struct {
+@@ -1021,6 +1025,7 @@ typedef struct {
typedef struct {
STRUCT_STAT st;
-O, --omit-dir-times omit directories from --times
-J, --omit-link-times omit symlinks from --times
--super receiver attempts super-user activities
-@@ -1206,6 +1207,9 @@ cause the next transfer to behave as if it used bf(-I), causing all files to be
+@@ -1208,6 +1209,9 @@ cause the next transfer to behave as if it used bf(-I), causing all files to be
updated (though rsync's delta-transfer algorithm will make the update fairly efficient
if the files haven't actually changed, you're much better off using bf(-t)).
dit(bf(-O, --omit-dir-times)) This tells rsync to omit directories when
it is preserving modification times (see bf(--times)). If NFS is sharing
the directories on the receiving side, it is a good idea to use bf(-O).
-@@ -2108,7 +2112,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -2110,7 +2114,7 @@ with older versions of rsync, but that also turns on the output of other
verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
type of update being done, bf(X) is replaced by the file-type, and the
other letters represent attributes that may be output if they are being
modified.
-@@ -2167,6 +2171,8 @@ quote(itemization(
+@@ -2169,6 +2173,8 @@ quote(itemization(
it() The bf(f) means that the fileflags information changed.
it() The bf(a) means that the ACL information changed.
it() The bf(x) means that the extended attribute information changed.
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
-@@ -267,6 +267,8 @@ static void add_rule(filter_rule_list *listp, const char *pat, unsigned int pat_
- if (!(lp = new_array(filter_rule_list, 1)))
+@@ -261,6 +261,8 @@ static void add_rule(filter_rule_list *listp, const char *pat, unsigned int pat_
+
+ if (!(lp = new_array0(filter_rule_list, 1)))
out_of_memory("add_rule");
- lp->head = lp->tail = lp->parent_dirscan_head = NULL;
+ if (rule->rflags & FILTRULE_CVS_IGNORE)
+ cp = "CVS";
if (asprintf(&lp->debug_type, " [per-dir %s]", cp) < 0)
out_of_memory("add_rule");
rule->u.mergelist = lp;
-@@ -526,6 +528,14 @@ void *push_local_filters(const char *dir, unsigned int dirlen)
+@@ -530,6 +532,14 @@ void *push_local_filters(const char *dir, unsigned int dirlen)
set_filter_dir(dir, dirlen);
}
if (strlcpy(dirbuf + dirbuf_len, ex->pattern,
MAXPATHLEN - dirbuf_len) < MAXPATHLEN - dirbuf_len) {
parse_filter_file(lp, dirbuf, ex,
-@@ -1147,6 +1157,7 @@ void parse_filter_file(filter_rule_list *listp, const char *fname, const filter_
+@@ -1146,6 +1156,7 @@ void parse_filter_file(filter_rule_list *listp, const char *fname, const filter_
char line[BIGPATHBUFLEN];
char *eob = line + sizeof line - 1;
BOOL word_split = (template->rflags & FILTRULE_WORD_SPLIT) != 0;
if (!fname || !*fname)
return;
-@@ -1193,6 +1204,24 @@ void parse_filter_file(filter_rule_list *listp, const char *fname, const filter_
+@@ -1192,6 +1203,24 @@ void parse_filter_file(filter_rule_list *listp, const char *fname, const filter_
}
break;
}
if (word_split && isspace(ch))
break;
if (eol_nulls? !ch : (ch == '\n' || ch == '\r'))
-@@ -1202,13 +1231,14 @@ void parse_filter_file(filter_rule_list *listp, const char *fname, const filter_
+@@ -1201,13 +1230,14 @@ void parse_filter_file(filter_rule_list *listp, const char *fname, const filter_
else
overflow = 1;
}
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.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 },
-@@ -2650,6 +2653,9 @@ void server_options(char **args, int *argc_p)
+@@ -2651,6 +2654,9 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
--modify-window=NUM compare mod-times with reduced accuracy
-T, --temp-dir=DIR create temporary files in directory DIR
-y, --fuzzy find similar file for basis if no dest file
-@@ -603,6 +604,12 @@ time to just looking for files that have changed in size. This is useful
+@@ -605,6 +606,12 @@ time to just looking for files that have changed in size. This is useful
when starting to use rsync after using another mirroring system which may
not preserve timestamps exactly.
./configure
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
-@@ -23,6 +23,7 @@
-
+@@ -24,6 +24,7 @@
extern int checksum_seed;
extern int protocol_version;
+ extern int proper_seed_order;
+extern int use_db;
/*
a simple 32 bit checksum that can be upadted from either end
-@@ -127,6 +128,9 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -136,6 +137,9 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
md5_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
md5_result(&m, (uchar *)sum);
} else {
mdfour_begin(&m);
-@@ -144,6 +148,9 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -153,6 +157,9 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
mdfour_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
mdfour_result(&m, (uchar *)sum);
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -351,6 +351,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
+@@ -344,6 +344,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \
sys/ioctl.h sys/filio.h string.h stdlib.h sys/socket.h sys/mode.h \
sys/un.h sys/attr.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \
netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h \
sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h \
popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netinet/ip.h \
-@@ -1103,6 +1104,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
+@@ -1068,6 +1069,48 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
fi
fi
return memcmp(sum, F_SUM(file), checksum_len) == 0;
}
-@@ -2209,6 +2211,13 @@ void generate_files(int f_out, const char *local_name)
+@@ -2223,6 +2225,13 @@ void generate_files(int f_out, const char *local_name)
: "enabled");
}
dflt_perms = (ACCESSPERMS & ~orig_umask);
do {
-@@ -2334,6 +2343,9 @@ void generate_files(int f_out, const char *local_name)
+@@ -2348,6 +2357,9 @@ void generate_files(int f_out, const char *local_name)
wait_for_receiver();
}
#define NDX_DONE -1
#define NDX_FLIST_EOF -2
#define NDX_DEL_STATS -3
-@@ -1257,7 +1261,8 @@ extern short info_levels[], debug_levels[];
+@@ -1256,7 +1260,8 @@ extern short info_levels[], debug_levels[];
#define DEBUG_CHDIR (DEBUG_BIND+1)
#define DEBUG_CONNECT (DEBUG_CHDIR+1)
#define DEBUG_CMD (DEBUG_CONNECT+1)
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
-r, --recursive recurse into directories
-@@ -636,6 +639,67 @@ option's before-the-transfer "Does this file need to be updated?" check.
+@@ -638,6 +641,67 @@ option's before-the-transfer "Does this file need to be updated?" check.
For protocol 30 and beyond (first supported in 3.0.0), the checksum used is
MD5. For older protocols, the checksum used is MD4.
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -313,6 +313,22 @@ is daemon. This setting has no effect if the "log file" setting is a
+@@ -317,6 +317,22 @@ is daemon. This setting has no effect if the "log file" setting is a
non-empty string (either set in the per-modules settings, or inherited
from the global settings).
diff = u_strcmp(fmid->basename, f->basename);
if (diff == 0) {
good_match = mid;
-@@ -1925,6 +1927,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1939,6 +1941,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fnamecmp = partialptr;
fnamecmp_type = FNAMECMP_PARTIAL_DIR;
statret = 0;
{"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 },
-@@ -2637,8 +2641,14 @@ void server_options(char **args, int *argc_p)
+@@ -2638,8 +2642,14 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
--compare-dest=DIR also compare received files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -1814,6 +1816,17 @@ the bf(--partial-dir) option, that directory will be used instead. These
+@@ -1816,6 +1818,17 @@ the bf(--partial-dir) option, that directory will be used instead. These
potential alternate-basis files will be removed as the transfer progresses.
This option conflicts with bf(--inplace) and bf(--append).
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -44,6 +44,7 @@ extern int checksum_seed;
+@@ -45,6 +45,7 @@ extern int checksum_seed;
extern int basis_dir_cnt;
extern int prune_empty_dirs;
extern int protocol_version;
extern int protect_args;
extern int preserve_uid;
extern int preserve_gid;
-@@ -125,6 +126,7 @@ void set_allow_inc_recurse(void)
+@@ -127,6 +128,7 @@ void set_allow_inc_recurse(void)
allow_inc_recurse = 0;
else if (!am_sender
&& (delete_before || delete_after
static int phase = 0;
static int dflt_perms;
-@@ -1260,7 +1402,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1273,7 +1415,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
&& do_stat(dn, &sx.st) < 0) {
if (dry_run)
goto parent_is_dry_missing;
rsyserr(FERROR_XFER, errno,
"recv_generator: mkdir %s failed",
full_fname(dn));
-@@ -1413,7 +1555,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1426,7 +1568,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
if (real_ret != 0 && do_mkdir(fname,file->mode|added_perms) < 0 && errno != EEXIST) {
if (!relative_paths || errno != ENOENT
|| (do_mkdir(fname, file->mode|added_perms) < 0 && errno != EEXIST)) {
rsyserr(FERROR_XFER, errno,
"recv_generator: mkdir %s failed",
-@@ -1462,9 +1604,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1475,9 +1617,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
else if (delete_during && f_out != -1 && !phase
&& !(file->flags & FLAG_MISSING_DIR)) {
+ } else
change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
}
- goto cleanup;
-@@ -1729,8 +1874,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+ prior_dir_file = file;
+@@ -1743,8 +1888,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
#endif
rsyserr(FERROR_XFER, stat_errno, "recv_generator: failed to stat %s",
full_fname(fname));
goto cleanup;
-@@ -2190,6 +2341,12 @@ void generate_files(int f_out, const char *local_name)
+@@ -2204,6 +2355,12 @@ void generate_files(int f_out, const char *local_name)
if (DEBUG_GTE(GENR, 1))
rprintf(FINFO, "generator starting pid=%d\n", (int)getpid());
if (delete_before && !solo_file && cur_flist->used > 0)
do_delete_pass();
if (delete_during == 2) {
-@@ -2200,7 +2357,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2214,7 +2371,7 @@ void generate_files(int f_out, const char *local_name)
}
info_levels[INFO_FLIST] = info_levels[INFO_PROGRESS] = 0;
whole_file = 0;
if (DEBUG_GTE(FLIST, 1)) {
rprintf(FINFO, "delta-transmission %s\n",
-@@ -2236,7 +2393,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2250,7 +2407,7 @@ void generate_files(int f_out, const char *local_name)
dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
} else
dirdev = MAKEDEV(0, 0);
} else
change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
}
-@@ -2283,7 +2440,21 @@ void generate_files(int f_out, const char *local_name)
+@@ -2297,7 +2454,21 @@ void generate_files(int f_out, const char *local_name)
} while ((cur_flist = cur_flist->next) != NULL);
if (delete_during)
delay_updates ? "delay-updates" : "partial-dir");
return 0;
}
-@@ -2633,6 +2637,8 @@ void server_options(char **args, int *argc_p)
+@@ -2634,6 +2638,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
--compare-dest=DIR also compare received files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -1798,6 +1799,21 @@ Note that the use of the bf(--delete) option might get rid of any potential
+@@ -1800,6 +1801,21 @@ Note that the use of the bf(--delete) option might get rid of any potential
fuzzy-match files, so either use bf(--delete-after) or specify some
filename exclusions if you need to prevent this.
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-m, --prune-empty-dirs prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
-@@ -2367,6 +2368,14 @@ See also the "atomic-rsync" perl script in the "support" subdir for an
+@@ -2369,6 +2370,14 @@ See also the "atomic-rsync" perl script in the "support" subdir for an
update algorithm that is even more atomic (it uses bf(--link-dest) and a
parallel hierarchy of files).
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int human_readable;
extern int ignore_existing;
extern int ignore_non_existing;
-@@ -1671,6 +1672,13 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1685,6 +1686,13 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
fnamecmp_type = FNAMECMP_FNAME;
if (statret == 0 && !S_ISREG(sx.st.st_mode)) {
-@@ -2096,6 +2104,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
+@@ -2110,6 +2118,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
ignore_existing = -ignore_existing;
ignore_non_existing = -ignore_non_existing;
update_only = -update_only;
always_checksum = -always_checksum;
size_only = -size_only;
append_mode = -append_mode;
-@@ -2121,6 +2130,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
+@@ -2135,6 +2144,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
ignore_existing = -ignore_existing;
ignore_non_existing = -ignore_non_existing;
update_only = -update_only;
./configure
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -44,9 +44,11 @@ extern int checksum_seed;
+@@ -45,9 +45,11 @@ extern int checksum_seed;
extern int basis_dir_cnt;
extern int prune_empty_dirs;
extern int protocol_version;
extern int preserve_acls;
extern int preserve_xattrs;
extern int need_messages_from_generator;
-@@ -64,7 +66,7 @@ extern char *iconv_opt;
+@@ -65,7 +67,7 @@ extern char *iconv_opt;
#endif
/* These index values are for the file-list's extra-attribute array. */
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -142,6 +144,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -144,6 +146,8 @@ void setup_protocol(int f_out,int f_in)
uid_ndx = ++file_extra_cnt;
if (preserve_gid)
gid_ndx = ++file_extra_cnt;
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -600,6 +600,7 @@ AC_FUNC_UTIME_NULL
+@@ -593,6 +593,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 \
#ifdef SUPPORT_ACLS
if (preserve_acls && !S_ISLNK(file->mode)) {
if (!ACL_READY(*sxp))
-@@ -1395,6 +1406,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1408,6 +1419,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
file->mode = dest_mode(file->mode, sx.st.st_mode,
dflt_perms, statret == 0);
}
if (statret != 0 && basis_dir[0] != NULL) {
int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &sx,
itemizing, code);
-@@ -1439,10 +1454,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1452,10 +1467,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
* readable and writable permissions during the time we are
* putting files within them. This is then restored to the
* former permissions after the transfer is done. */
rsyserr(FERROR_XFER, errno,
"failed to modify permissions on %s",
full_fname(fname));
-@@ -1477,6 +1497,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1491,6 +1511,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms,
exists);
}
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && F_HLINK_NOT_FIRST(file)
-@@ -2045,13 +2069,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+@@ -2059,13 +2083,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
continue;
fname = f_name(file, NULL);
if (fix_dir_perms)
{"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 },
-@@ -2540,6 +2566,9 @@ void server_options(char **args, int *argc_p)
+@@ -2541,6 +2567,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;
-@@ -2627,6 +2656,16 @@ void server_options(char **args, int *argc_p)
+@@ -2628,6 +2657,16 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--delete-excluded";
if (force_delete)
args[ac++] = "--force";
--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
-@@ -644,7 +648,8 @@ specified, in which case bf(-r) is not implied.
+@@ -646,7 +650,8 @@ specified, in which case bf(-r) is not implied.
Note that bf(-a) bf(does not preserve hardlinks), because
finding multiply-linked files is expensive. You must separately
dit(--no-OPTION) You may turn off one or more implied options by prefixing
the option name with "no-". Not all options may be prefixed with a "no-":
-@@ -948,7 +953,7 @@ they would be using bf(--copy-links).
+@@ -950,7 +955,7 @@ they would be using bf(--copy-links).
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
See also bf(--keep-dirlinks) for an analogous option for the receiving
side.
-@@ -1111,6 +1116,29 @@ Note that this option does not copy rsyncs special xattr values (e.g. those
+@@ -1113,6 +1118,29 @@ Note that this option does not copy rsyncs special xattr values (e.g. those
used by bf(--fake-super)) unless you repeat the option (e.g. -XX). This
"copy all xattrs" mode cannot be used with bf(--fake-super).
dit(bf(--chmod)) This option tells rsync to apply one or more
comma-separated "chmod" modes to the permission of the files in the
transfer. The resulting value is treated as though it were the permissions
-@@ -1440,12 +1468,13 @@ display as a "*missing" entry in the bf(--list-only) output.
+@@ -1442,12 +1470,13 @@ display as a "*missing" entry in the bf(--list-only) output.
dit(bf(--ignore-errors)) Tells bf(--delete) to go ahead and delete files
even when there are I/O errors.
bf(--recursive) option was also enabled.
dit(bf(--max-delete=NUM)) This tells rsync not to delete more than NUM
-@@ -2079,7 +2108,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -2081,7 +2110,7 @@ with older versions of rsync, but that also turns on the output of other
verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
type of update being done, bf(X) is replaced by the file-type, and the
other letters represent attributes that may be output if they are being
modified.
-@@ -2135,7 +2164,7 @@ quote(itemization(
+@@ -2137,7 +2166,7 @@ quote(itemization(
sender's value (requires bf(--owner) and super-user privileges).
it() A bf(g) means the group is different and is being updated to the
sender's value (requires bf(--group) and the authority to set the group).
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
#define SLASH_WILD3_SUFFIX "/***"
-@@ -118,8 +121,27 @@ static void teardown_mergelist(filter_rule *ex)
- mergelist_cnt--;
+@@ -124,8 +127,27 @@ static void teardown_mergelist(filter_rule *ex)
+ mergelist_cnt--;
}
+static struct filter_chmod_struct *ref_filter_chmod(struct filter_chmod_struct *chmod)
{
+ if (ex->rflags & FILTRULE_CHMOD)
+ unref_filter_chmod(ex->chmod);
+ if (ex->rflags & FILTRULE_PERDIR_MERGE)
+ teardown_mergelist(ex);
free(ex->pattern);
- free(ex);
- }
-@@ -722,7 +744,8 @@ static void report_filter_result(enum logcode code, char const *name,
+@@ -720,7 +742,8 @@ static void report_filter_result(enum logcode code, char const *name,
}
/* Return -1 if file "name" is defined to be excluded by the specified
int check_filter(filter_rule_list *listp, enum logcode code,
const char *name, int name_is_dir)
{
-@@ -748,10 +771,12 @@ int check_filter(filter_rule_list *listp, enum logcode code,
+@@ -746,10 +769,12 @@ int check_filter(filter_rule_list *listp, enum logcode code,
if (rule_matches(name, ent, name_is_dir)) {
report_filter_result(code, name, ent, name_is_dir,
listp->debug_type);
return 0;
}
-@@ -768,9 +793,46 @@ static const uchar *rule_strcmp(const uchar *str, const char *rule, int rule_len
+@@ -766,9 +791,46 @@ static const uchar *rule_strcmp(const uchar *str, const char *rule, int rule_len
return NULL;
}
/* Gets the next include/exclude rule from *rulestr_ptr and advances
* *rulestr_ptr to point beyond it. Stores the pattern's start (within
-@@ -785,6 +847,7 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
+@@ -783,6 +845,7 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
const char **pat_ptr, unsigned int *pat_len_ptr)
{
const uchar *s = (const uchar *)*rulestr_ptr;
filter_rule *rule;
unsigned int len;
-@@ -804,6 +867,12 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
+@@ -802,6 +865,12 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
/* Inherit from the template. Don't inherit FILTRULES_SIDES; we check
* that later. */
rule->rflags = template->rflags & FILTRULES_FROM_CONTAINER;
/* Figure out what kind of a filter rule "s" is pointing at. Note
* that if FILTRULE_NO_PREFIXES is set, the rule is either an include
-@@ -949,11 +1018,63 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
+@@ -947,11 +1016,63 @@ static filter_rule *parse_rule_tok(const char **rulestr_ptr,
goto invalid;
rule->rflags |= FILTRULE_EXCLUDE_SELF;
break;
case 'p':
rule->rflags |= FILTRULE_PERISHABLE;
break;
-@@ -1271,6 +1392,23 @@ char *get_rule_prefix(filter_rule *rule, const char *pat, int for_xfer,
+@@ -1270,6 +1391,23 @@ char *get_rule_prefix(filter_rule *rule, const char *pat, int for_xfer,
else if (am_sender)
return NULL;
}
diff --git a/rsync.yo b/rsync.yo
--- a/rsync.yo
+++ b/rsync.yo
-@@ -1133,6 +1133,8 @@ quote(--chmod=D2775,F664)
+@@ -1135,6 +1135,8 @@ quote(--chmod=D2775,F664)
It is also legal to specify multiple bf(--chmod) options, as each
additional option is just appended to the list of changes to make.
See the bf(--perms) and bf(--executability) options for how the resulting
permission value can be applied to the files in the transfer.
-@@ -2029,6 +2031,10 @@ be omitted, but if USER is empty, a leading colon must be supplied.
+@@ -2031,6 +2033,10 @@ be omitted, but if USER is empty, a leading colon must be supplied.
If you specify "--chown=foo:bar, this is exactly the same as specifying
"--usermap=*:foo --groupmap=*:bar", only easier.
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.
-@@ -2888,6 +2894,15 @@ itemization(
+@@ -2890,6 +2896,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)
-@@ -2949,6 +2964,12 @@ itemization(
+@@ -2951,6 +2966,12 @@ itemization(
a rule prefix such as bf(hide)).
)
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
{"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 },
-@@ -2712,6 +2715,9 @@ void server_options(char **args, int *argc_p)
+@@ -2713,6 +2716,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = tmpdir;
}
extern int preserve_links;
extern int preserve_devices;
extern int preserve_specials;
-@@ -1762,6 +1763,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1776,6 +1777,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fname, fnamecmpbuf);
}
sx.st.st_size = F_LENGTH(fuzzy_file);
statret = 0;
fnamecmp = fnamecmpbuf;
}
-@@ -1929,6 +1938,18 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1943,6 +1952,18 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
if (read_batch)
goto cleanup;
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);
-@@ -2576,6 +2596,11 @@ void server_options(char **args, int *argc_p)
+@@ -2577,6 +2597,11 @@ void server_options(char **args, int *argc_p)
if (preserve_fileflags)
args[ac++] = "--fileflags";
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
-@@ -1140,6 +1142,42 @@ flags on files and directories that are being updated or deleted on the
+@@ -1142,6 +1144,42 @@ flags on files and directories that are being updated or deleted on the
receiving side. It does not try to affect user flags. This option overrides
bf(--force-change) and bf(--force-uchange).
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
extern int am_server;
extern int am_sender;
-@@ -687,16 +688,15 @@ static int rule_matches(const char *fname, filter_rule *ex, int name_is_dir)
+@@ -685,16 +686,15 @@ static int rule_matches(const char *fname, filter_rule *ex, int name_is_dir)
if (litmatch_array(pattern, strings, slash_handling))
return ret_match;
} else if (anchored_match) {
extern int ignore_errors;
extern int numeric_ids;
extern int recurse;
-@@ -3048,6 +3049,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3076,6 +3077,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;
-@@ -3158,7 +3160,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3186,7 +3188,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
if (type1 != type2)
return type1 == t_PATH ? 1 : -1;
}
{"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},
-@@ -2662,6 +2666,9 @@ void server_options(char **args, int *argc_p)
+@@ -2663,6 +2667,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
-@@ -1749,6 +1750,10 @@ default (with is overridden by both the environment and the command-line).
+@@ -1751,6 +1752,10 @@ default (with is overridden by both the environment and the command-line).
This option will eventually become a new default setting at some
as-yet-undetermined point in the future.
./configure
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -678,6 +678,31 @@ if test x"$enable_iconv" != x"no"; then
+@@ -665,6 +665,31 @@ if test x"$enable_iconv" != x"no"; then
AC_DEFINE(UTF8_CHARSET, "UTF-8", [String to pass to iconv() for the UTF-8 charset.])
fi
+fi
+
AC_CACHE_CHECK([whether chown() modifies symlinks],rsync_cv_chown_modifies_symlink,[
- AC_TRY_RUN([
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
#if HAVE_UNISTD_H
diff --git a/gss-auth.c b/gss-auth.c
new file mode 100644
./configure
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
-@@ -21,8 +21,11 @@
+@@ -21,9 +21,12 @@
#include "rsync.h"
+extern int checksum_len;
extern int checksum_seed;
extern int protocol_version;
+ extern int proper_seed_order;
+extern char *link_by_hash_dir;
+extern char link_by_hash_extra_sum[MAX_DIGEST_LEN];
/*
a simple 32 bit checksum that can be upadted from either end
-@@ -151,7 +154,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -160,7 +163,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
}
static int32 sumresidue;
void sum_init(int seed)
{
-@@ -164,6 +167,8 @@ void sum_init(int seed)
+@@ -173,6 +176,8 @@ void sum_init(int seed)
sumresidue = 0;
SIVAL(s, 0, seed);
sum_update(s, 4);
}
}
-@@ -182,6 +187,9 @@ void sum_update(const char *p, int32 len)
+@@ -191,6 +196,9 @@ void sum_update(const char *p, int32 len)
return;
}
if (len + sumresidue < CSUM_CHUNK) {
memcpy(md.buffer + sumresidue, p, len);
sumresidue += len;
-@@ -214,6 +222,9 @@ int sum_end(char *sum)
+@@ -223,6 +231,9 @@ int sum_end(char *sum)
return MD5_DIGEST_LEN;
}
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -56,6 +56,7 @@ extern char *partial_dir;
+@@ -57,6 +57,7 @@ extern char *partial_dir;
extern char *dest_option;
extern char *files_from;
extern char *filesfrom_host;
}
if (daemon_filter_list.head && !am_sender) {
filter_rule_list *elp = &daemon_filter_list;
-@@ -2741,6 +2765,12 @@ void server_options(char **args, int *argc_p)
+@@ -2742,6 +2766,12 @@ void server_options(char **args, int *argc_p)
} else if (inplace)
args[ac++] = "--inplace";
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -1266,7 +1266,8 @@ extern short info_levels[], debug_levels[];
+@@ -1265,7 +1265,8 @@ extern short info_levels[], debug_levels[];
#define DEBUG_FUZZY (DEBUG_FLIST+1)
#define DEBUG_GENR (DEBUG_FUZZY+1)
#define DEBUG_HASH (DEBUG_GENR+1)
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with suffix in LIST
-@@ -1879,6 +1880,48 @@ bf(--link-dest) from working properly for a non-super-user when bf(-o) was
+@@ -1881,6 +1882,48 @@ bf(--link-dest) from working properly for a non-super-user when bf(-o) was
specified (or implied by bf(-a)). You can work-around this bug by avoiding
the bf(-o) option when sending to an old rsync.
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -284,6 +284,21 @@ message telling them to try later. The default is 0, which means no limit.
+@@ -288,6 +288,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: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/authenticate.c b/authenticate.c
--- a/authenticate.c
+++ b/authenticate.c
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -195,10 +195,11 @@ if the module is not read-only).
+@@ -199,10 +199,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).
-@@ -264,6 +265,27 @@ path elements that rsync believes will allow a symlink to escape the module's
+@@ -268,6 +269,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.
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
iflags |= ITEM_REPORT_GROUP;
#ifdef SUPPORT_ACLS
if (preserve_acls && !S_ISLNK(file->mode)) {
-@@ -1391,7 +1394,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1404,7 +1407,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
real_ret = statret;
if (file->flags & FLAG_DIR_CREATED)
statret = -1;
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse handle sparse files efficiently
-@@ -1197,6 +1198,10 @@ directories.
+@@ -1199,6 +1200,10 @@ directories.
dit(bf(-J, --omit-link-times)) This tells rsync to omit symlinks when
it is preserving modification times (see bf(--times)).
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -737,6 +737,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
+@@ -721,6 +721,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
+AC_SUBST(SLPOBJ)
+
AC_CACHE_CHECK([for working socketpair],rsync_cv_HAVE_SOCKETPAIR,[
- AC_TRY_RUN([
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <sys/types.h>
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -124,6 +124,15 @@ via the bf(--sockopts) command-line option.
+@@ -126,6 +126,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)
-@@ -853,6 +862,7 @@ use chroot = yes
+@@ -857,6 +866,7 @@ use chroot = yes
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/options.c b/options.c
--- 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 },
-@@ -2641,6 +2644,8 @@ void server_options(char **args, int *argc_p)
+@@ -2642,6 +2645,8 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
-@@ -1337,6 +1338,14 @@ bf(--exclude='*.new') for the rsync transfer).
+@@ -1339,6 +1340,14 @@ bf(--exclude='*.new') for the rsync transfer).
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.
if (!remove_source_files)
return;
-@@ -152,7 +154,11 @@ void successful_send(int ndx)
+@@ -153,7 +155,11 @@ void successful_send(int ndx)
return;
}
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
if (files_from) {
char *h, *p;
int q;
-@@ -2650,6 +2669,25 @@ void server_options(char **args, int *argc_p)
+@@ -2651,6 +2670,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)
-@@ -2548,6 +2551,33 @@ file previously generated by bf(--write-batch).
+@@ -2550,6 +2553,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.
extern struct stats stats;
extern struct file_list *cur_flist, *first_flist, *dir_flist;
-@@ -201,6 +202,26 @@ void send_files(int f_in, int f_out)
+@@ -202,6 +203,26 @@ void send_files(int f_in, int f_out)
int f_xfer = write_batch < 0 ? batch_fd : f_out;
int save_io_error = io_error;
int ndx, j;
if (DEBUG_GTE(SEND, 1))
rprintf(FINFO, "send_files starting\n");
-@@ -335,6 +356,7 @@ void send_files(int f_in, int f_out)
+@@ -336,6 +357,7 @@ void send_files(int f_in, int f_out)
exit_cleanup(RERR_PROTOCOL);
}
fd = do_open(fname, O_RDONLY, 0);
if (fd == -1) {
if (errno == ENOENT) {
-@@ -356,6 +378,33 @@ void send_files(int f_in, int f_out)
+@@ -357,6 +379,33 @@ void send_files(int f_in, int f_out)
continue;
}
/* map the local file */
if (do_fstat(fd, &st) != 0) {
io_error |= IOERR_GENERAL;
-@@ -406,6 +455,8 @@ void send_files(int f_in, int f_out)
+@@ -407,6 +456,8 @@ void send_files(int f_in, int f_out)
}
}
close(fd);
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.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 },
-@@ -2573,6 +2576,12 @@ void server_options(char **args, int *argc_p)
+@@ -2574,6 +2577,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
--preallocate allocate dest files before writing
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (w/o delta-xfer algorithm)
-@@ -1253,6 +1254,15 @@ filesystem, but with this option rsync will probably copy more slowly. If the
+@@ -1255,6 +1256,15 @@ filesystem, but with this option rsync will probably copy more slowly. If the
destination is not an extent-supporting filesystem (such as ext4, xfs, NTFS,
etc.), this option may have no positive effect at all.
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/io.c b/io.c
--- a/io.c
+++ b/io.c
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2585,6 +2621,15 @@ void server_options(char **args, int *argc_p)
+@@ -2586,6 +2622,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
-@@ -2522,6 +2524,19 @@ files can show up as being rapidly sent when the data is quickly buffered,
+@@ -2524,6 +2526,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.
./configure (optional if already run)
make
-based-on: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
am_starting_up = 0;
return 1;
-@@ -2758,6 +2779,12 @@ void server_options(char **args, int *argc_p)
+@@ -2759,6 +2780,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
-@@ -2586,6 +2587,22 @@ daemon uses the charset specified in its "charset" configuration parameter
+@@ -2588,6 +2589,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: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
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: 2ac35b45071c7bfd8be6be41bfd45326f1f57bce
+based-on: f8d2ecd223eedabdf3174762b64c77cb01cc403b
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int preserve_specials;
extern int preserve_hard_links;
extern int preserve_executability;
-@@ -1673,7 +1674,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1687,7 +1688,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fnamecmp_type = FNAMECMP_FNAME;
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2758,6 +2766,9 @@ void server_options(char **args, int *argc_p)
+@@ -2759,6 +2767,9 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -203,13 +203,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -205,13 +205,6 @@ void setup_protocol(int f_out,int f_in)
if (protocol_version < 30) {
if (append_mode == 1)
append_mode = 2;