./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
f_name(f, NULL));
}
}
-@@ -2120,7 +2129,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+@@ -2121,7 +2130,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
STRUCT_STAT st;
if (link_stat(fname, &st, 0) == 0
&& cmp_time(st.st_mtime, file->modtime) != 0)
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse handle sparse files efficiently
-@@ -1058,6 +1059,12 @@ it is preserving modification times (see bf(--times)). If NFS is sharing
+@@ -1064,6 +1065,12 @@ 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).
This option is inferred if you use bf(--backup) without bf(--backup-dir).
dit(bf(--super)) This tells the receiving side to attempt super-user
activities even if the receiving rsync wasn't run by the super-user. These
activities include: preserving users via the bf(--owner) option, preserving
-@@ -1809,7 +1816,10 @@ quote(itemization(
+@@ -1815,7 +1822,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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
diff --git a/socket.c b/socket.c
--- a/socket.c
+++ b/socket.c
-@@ -521,7 +521,17 @@ int is_a_socket(int fd)
+@@ -532,7 +532,17 @@ int is_a_socket(int fd)
static RETSIGTYPE sigchld_handler(UNUSED(int val))
{
#ifdef WNOHANG
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
if (basename_len == 0+1) {
if (!pool)
unmake_file(file);
-@@ -2301,7 +2557,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2307,7 +2563,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
* file-list to check if this is a 1-file xfer. */
send_extra_file_list(f, 1);
}
return flist;
}
-@@ -2419,7 +2676,7 @@ struct file_list *recv_file_list(int f)
+@@ -2425,7 +2682,7 @@ struct file_list *recv_file_list(int f)
else if (f >= 0)
recv_id_list(f, flist);
if (protocol_version < 30) {
/* Recv the io_error flag */
-@@ -2639,7 +2896,7 @@ void flist_free(struct file_list *flist)
+@@ -2645,7 +2902,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;
-@@ -2690,7 +2947,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2696,7 +2953,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;
-@@ -2706,8 +2963,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2712,8 +2969,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);
-@@ -2729,7 +2986,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2735,7 +2992,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
}
flist->high = prev_i;
}
statret = link_stat(fname, &sx.st, keep_dirlinks && is_dir);
-@@ -1854,7 +1863,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1855,7 +1864,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
;
else if (fnamecmp_type == FNAMECMP_FUZZY)
;
-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
-@@ -520,9 +521,9 @@ uses a "quick check" that (by default) checks if each file's size and time
+@@ -526,9 +527,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
-@@ -530,6 +531,8 @@ its checksums when it is scanning for changed files, and will checksum any
+@@ -536,6 +537,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
-@@ -539,6 +542,36 @@ option's before-the-transfer "Does this file need to be updated?" check.
+@@ -545,6 +548,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
-@@ -281,6 +281,17 @@ locking on this file to ensure that the max connections limit is not
+@@ -287,6 +287,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(thisname, st.st_size, tmp_sum);
}
-@@ -1937,6 +2150,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
+@@ -1938,6 +2151,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
closedir(d);
if (f >= 0 && recurse && !divert_dirs) {
int i, end = flist->used - 1;
/* send_if_directory() bumps flist->used, so use "end". */
-@@ -2560,6 +2776,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -2566,6 +2782,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
} else
flist_eof = 1;
}
need_new_dirscan = 0;
}
-@@ -1571,6 +1573,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1572,6 +1574,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
else
change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
}
goto cleanup;
}
-@@ -1869,6 +1872,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1870,6 +1873,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
-@@ -2312,6 +2317,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2319,6 +2324,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];
-@@ -2396,6 +2402,9 @@ void generate_files(int f_out, const char *local_name)
+@@ -2403,6 +2409,9 @@ void generate_files(int f_out, const char *local_name)
wait_for_receiver();
}
extern int protocol_version;
extern int remove_source_files;
extern int preserve_hard_links;
-@@ -183,6 +184,9 @@ static void got_flist_entry_status(enum festatus status, const char *buf)
+@@ -188,6 +189,9 @@ static void got_flist_entry_status(enum festatus status, const char *buf)
flist_ndx_push(&hlink_list, ndx);
flist->in_progress++;
}
+ struct file_struct *file = flist->files[ndx - flist->ndx_start];
+ set_cached_checksum(flist, file);
}
+ #endif
break;
- case FES_REDO:
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
diff --git a/rsync.yo b/rsync.yo
--- a/rsync.yo
+++ b/rsync.yo
-@@ -551,9 +551,13 @@ computed just as it would be if bf(--sumfiles) was not specified.
+@@ -557,9 +557,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
-@@ -284,13 +284,15 @@ The default is tt(/var/run/rsyncd.lock).
+@@ -290,13 +290,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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
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;
-@@ -1750,7 +1751,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1751,7 +1752,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse handle sparse files efficiently
-@@ -1086,6 +1087,9 @@ it is preserving modification times (see bf(--times)). If NFS is sharing
+@@ -1092,6 +1093,9 @@ 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).
This option is inferred if you use bf(--backup) without bf(--backup-dir).
dit(bf(--super)) This tells the receiving side to attempt super-user
activities even if the receiving rsync wasn't run by the super-user. These
activities include: preserving users via the bf(--owner) option, preserving
-@@ -1782,7 +1786,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -1788,7 +1792,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.
-@@ -1841,6 +1845,8 @@ quote(itemization(
+@@ -1847,6 +1851,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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
--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
-@@ -506,6 +507,12 @@ time to just looking for files that have changed in size. This is useful
+@@ -512,6 +513,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.
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
-@@ -331,7 +331,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
+@@ -326,6 +326,7 @@ AC_HEADER_DIRENT
+ AC_HEADER_TIME
+ AC_HEADER_SYS_WAIT
+ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \
++ mysql/mysql.h sqlite3.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)
-+ popt.h popt/popt.h mysql/mysql.h sqlite3.h)
- AC_HEADER_MAJOR
-
- AC_CACHE_CHECK([if makedev takes 3 args],rsync_cv_MAKEDEV_TAKES_3_ARGS,[
-@@ -1004,6 +1004,29 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
+@@ -1008,6 +1009,29 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"
fi
fi
if (basename_len == 0+1) {
if (!pool)
unmake_file(file);
-@@ -1989,6 +1992,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
+@@ -1990,6 +1993,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
| (eol_nulls || reading_remotely ? RL_EOL_NULLS : 0);
int implied_dot_dir = 0;
return memcmp(sum, F_SUM(file), checksum_len) == 0;
}
-@@ -2272,6 +2274,9 @@ void generate_files(int f_out, const char *local_name)
+@@ -2279,6 +2281,9 @@ void generate_files(int f_out, const char *local_name)
* notice that and let us know via the message pipe (or its closing). */
ignore_timeout = 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
-@@ -540,6 +541,47 @@ option's before-the-transfer "Does this file need to be updated?" check.
+@@ -546,6 +547,47 @@ 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
-@@ -270,6 +270,18 @@ is daemon. This setting has no effect if the "log file" setting is a
+@@ -276,6 +276,18 @@ 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;
-@@ -2046,6 +2048,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -2047,6 +2049,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fnamecmp = partialptr;
fnamecmp_type = FNAMECMP_PARTIAL_DIR;
statret = 0;
--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
-@@ -1577,6 +1579,17 @@ the bf(--partial-dir) option, that directory will be used instead. These
+@@ -1583,6 +1585,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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
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);
-@@ -2421,6 +2463,25 @@ struct file_list *recv_file_list(int f)
+@@ -2427,6 +2469,25 @@ struct file_list *recv_file_list(int f)
flist_sort_and_clean(flist, relative_paths);
static int phase = 0;
static int dflt_perms;
-@@ -1557,9 +1706,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1558,9 +1707,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)) {
change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
}
goto cleanup;
-@@ -1843,8 +1995,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1844,8 +1996,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;
-@@ -2247,6 +2405,12 @@ void generate_files(int f_out, const char *local_name)
+@@ -2254,6 +2412,12 @@ void generate_files(int f_out, const char *local_name)
if (verbose > 2)
rprintf(FINFO, "generator starting pid=%ld\n", (long)getpid());
if (delete_before && !solo_file && cur_flist->used > 0)
do_delete_pass();
if (delete_during == 2) {
-@@ -2257,7 +2421,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2264,7 +2428,7 @@ void generate_files(int f_out, const char *local_name)
}
do_progress = 0;
whole_file = 0;
if (verbose >= 2) {
rprintf(FINFO, "delta-transmission %s\n",
-@@ -2299,7 +2463,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2306,7 +2470,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));
}
-@@ -2346,7 +2510,21 @@ void generate_files(int f_out, const char *local_name)
+@@ -2353,7 +2517,21 @@ void generate_files(int f_out, const char *local_name)
} while ((cur_flist = cur_flist->next) != NULL);
if (delete_during)
--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
-@@ -1561,6 +1562,21 @@ Note that the use of the bf(--delete) option might get rid of any potential
+@@ -1567,6 +1568,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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int ignore_existing;
extern int ignore_non_existing;
extern int inplace;
-@@ -1785,6 +1786,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1786,6 +1787,12 @@ 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)) {
-@@ -2158,6 +2165,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
+@@ -2165,6 +2172,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;
-@@ -2183,6 +2191,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
+@@ -2190,6 +2198,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 (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
--no-detach do not detach from the parent
--port=PORT listen on alternate port number
--log-file=FILE override the "log file" setting
-@@ -2242,6 +2243,14 @@ The default is /etc/rsyncd.conf unless the daemon is running over
+@@ -2248,6 +2249,14 @@ The default is /etc/rsyncd.conf unless the daemon is running over
a remote shell program and the remote user is not the super-user; in that case
the default is rsyncd.conf in the current directory (typically $HOME).
dit(bf(port)) You can override the default port the daemon will listen on
by specifying this value (defaults to 873). This is ignored if the daemon
-@@ -260,6 +264,12 @@ If the daemon fails to open the specified file, it will fall back to
+@@ -266,6 +270,12 @@ If the daemon fails to open the specified file, it will fall back to
using syslog and output an error about the failure. (Note that the
failure to open the specified log file used to be a fatal error.)
./configure
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (w/o delta-xfer algorithm)
-x, --one-file-system don't cross filesystem boundaries
-@@ -1103,6 +1104,10 @@ dit(bf(-S, --sparse)) Try to handle sparse files efficiently so they take
+@@ -1109,6 +1110,10 @@ dit(bf(-S, --sparse)) Try to handle sparse files efficiently so they take
up less space on the destination. Conflicts with bf(--inplace) because it's
not possible to overwrite data in a sparse fashion.
./configure
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
if (statret != 0 && basis_dir[0] != NULL) {
int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &sx,
itemizing, code);
-@@ -1534,10 +1559,17 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
- /* We need to ensure that the dirs in the transfer have writable
- * permissions during the time we are putting files within them.
- * This is then fixed after the transfer is done. */
+@@ -1535,10 +1560,17 @@ 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. */
+#ifdef SUPPORT_FORCE_CHANGE
+ if (force_change && F_FFLAGS(file) & force_change) {
+ mode_t mode = file->mode;
+ }
+#endif
#ifdef HAVE_CHMOD
- if (!am_root && !(file->mode & S_IWUSR) && dir_tweaking) {
- mode_t mode = file->mode | S_IWUSR;
+ if (!am_root && (file->mode & S_IRWXU) != S_IRWXU && dir_tweaking) {
+ mode_t mode = file->mode | S_IRWXU;
- if (do_chmod(fname, mode) < 0) {
+ if (do_chmod(fname, mode, 0) < 0) {
rsyserr(FERROR_XFER, errno,
"failed to modify permissions on %s",
full_fname(fname));
-@@ -1572,6 +1604,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1573,6 +1605,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)
-@@ -2115,13 +2151,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+@@ -2116,13 +2152,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
continue;
fname = f_name(file, NULL);
if (fix_dir_perms)
--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
-@@ -547,7 +551,8 @@ specified, in which case bf(-r) is not implied.
+@@ -553,7 +557,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-":
-@@ -827,7 +832,7 @@ they would be using bf(--copy-links).
+@@ -833,7 +838,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.
-@@ -990,6 +995,29 @@ Note that this option does not copy rsyncs special xattr values (e.g. those
+@@ -996,6 +1001,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" strings to the permission of the files in the
transfer. The resulting value is treated as though it were the permissions
-@@ -1260,12 +1288,13 @@ See bf(--delete) (which is implied) for more details on file-deletion.
+@@ -1266,12 +1294,13 @@ See bf(--delete) (which is implied) for more details on file-deletion.
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
-@@ -1753,7 +1782,7 @@ with older versions of rsync, but that also turns on the output of other
+@@ -1759,7 +1788,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.
-@@ -1809,7 +1838,7 @@ quote(itemization(
+@@ -1815,7 +1844,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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
extern int preserve_links;
extern int preserve_devices;
extern int preserve_specials;
-@@ -1887,6 +1888,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1888,6 +1889,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;
fnamecmp_type = FNAMECMP_FUZZY;
-@@ -2071,6 +2080,18 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -2072,6 +2081,18 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
if (read_batch)
goto cleanup;
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
-@@ -1019,6 +1021,42 @@ flags on files and directories that are being updated or deleted on the
+@@ -1025,6 +1027,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-schange).
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
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;
-@@ -2880,6 +2881,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -2886,6 +2887,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;
-@@ -2990,7 +2992,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -2996,7 +2998,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
if (type1 != type2)
return type1 == t_PATH ? 1 : -1;
}
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
-@@ -1519,6 +1520,10 @@ side will also be translated
+@@ -1525,6 +1526,10 @@ side will also be translated
from the local to the remote character-set. The translation happens before
wild-cards are expanded. See also the bf(--files-from) option.
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -510,6 +510,7 @@ quote(itemization(
+@@ -516,6 +516,7 @@ quote(itemization(
it() %b the number of bytes actually transferred
it() %B the permission bits of the file (e.g. rwxrwxrwt)
it() %c the total size of the block checksums received for the basis file (only when sending)
-k, --copy-dirlinks transform symlink to dir into referent dir
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-H, --hard-links preserve hard links
-@@ -820,6 +821,25 @@ which point outside the copied tree. All absolute symlinks are
+@@ -826,6 +827,25 @@ which point outside the copied tree. All absolute symlinks are
also ignored. Using this option in conjunction with bf(--relative) may
give unexpected results.
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -191,8 +191,9 @@ to translate names, and that it is not possible for a user to change those
+@@ -197,8 +197,9 @@ to translate names, and that it is not possible for a user to change those
resources.
dit(bf(munge symlinks)) This parameter tells rsync to modify
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo
--- a/rsyncd.conf.yo
+++ b/rsyncd.conf.yo
-@@ -159,10 +159,11 @@ if the module is not read-only).
+@@ -165,10 +165,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).
-@@ -227,6 +228,27 @@ path elements that rsync believes will allow a symlink to escape the module's
+@@ -233,6 +234,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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse handle sparse files efficiently
-@@ -1058,6 +1059,10 @@ it is preserving modification times (see bf(--times)). If NFS is sharing
+@@ -1064,6 +1065,10 @@ 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).
This option is inferred if you use bf(--backup) without bf(--backup-dir).
./configure
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
./configure
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (w/o delta-xfer algorithm)
-x, --one-file-system don't cross filesystem boundaries
-@@ -1103,6 +1104,17 @@ dit(bf(-S, --sparse)) Try to handle sparse files efficiently so they take
+@@ -1109,6 +1110,17 @@ dit(bf(-S, --sparse)) Try to handle sparse files efficiently so they take
up less space on the destination. Conflicts with bf(--inplace) because it's
not possible to overwrite data in a sparse fashion.
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
--out-format=FORMAT output updates using the specified FORMAT
--log-file=FILE log what we're doing to the specified FILE
--log-file-format=FMT log updates using the specified FMT
-@@ -1084,16 +1085,16 @@ This is a good way to backup data without using a super-user, and to store
+@@ -1090,16 +1091,16 @@ This is a good way to backup data without using a super-user, and to store
ACLs from incompatible systems.
The bf(--fake-super) option only affects the side where the option is used.
This option is overridden by both bf(--super) and bf(--no-super).
-@@ -1355,6 +1356,36 @@ machine for use with the bf(--relative) option. For instance:
+@@ -1361,6 +1362,36 @@ machine for use with the bf(--relative) option. For instance:
quote(tt( rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/))
dit(bf(-C, --cvs-exclude)) This is a useful shorthand for excluding a
broad range of files that you often don't want to transfer between
systems. It uses a similar algorithm to CVS to determine if
-@@ -1854,7 +1885,7 @@ option if you wish to override this.
+@@ -1860,7 +1891,7 @@ option if you wish to override this.
Here's a example command that requests the remote side to log what is
happening:
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
extern struct stats stats;
extern char *filesfrom_host;
-@@ -1670,6 +1671,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
+@@ -1671,6 +1672,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
}
send_file_name(f, flist, fbuf, NULL, flags, filter_level);
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
--- a/clientserver.c
+++ b/clientserver.c
@@ -1074,6 +1074,13 @@ int daemon_main(void)
- * address too. In fact, why not just do inet_ntop on the
+ * address too. In fact, why not just do getnameinfo on the
* local address??? */
+#ifdef HAVE_LIBSLP
enddit()
manpagesection(MODULE PARAMETERS)
-@@ -652,6 +665,7 @@ use chroot = yes
+@@ -658,6 +671,7 @@ use chroot = yes
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
diff --git a/socket.c b/socket.c
--- a/socket.c
+++ b/socket.c
-@@ -533,6 +533,16 @@ void start_accept_loop(int port, int (*fn)(int, int))
+@@ -544,6 +544,16 @@ void start_accept_loop(int port, int (*fn)(int, int))
{
fd_set deffds;
int *sp, maxfd, i;
#ifdef HAVE_SIGACTION
sigact.sa_flags = SA_NOCLDSTOP;
-@@ -561,14 +571,25 @@ void start_accept_loop(int port, int (*fn)(int, int))
+@@ -572,14 +582,25 @@ void start_accept_loop(int port, int (*fn)(int, int))
maxfd = sp[i];
}
/* close log file before the potentially very long select so
* file can be trimmed by another process instead of growing
-@@ -581,7 +602,18 @@ void start_accept_loop(int port, int (*fn)(int, int))
+@@ -592,7 +613,18 @@ void start_accept_loop(int port, int (*fn)(int, int))
fds = deffds;
#endif
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before transfer (default)
-@@ -1174,6 +1175,14 @@ dit(bf(--remove-source-files)) This tells rsync to remove from the sending
+@@ -1180,6 +1181,14 @@ dit(bf(--remove-source-files)) This tells rsync to remove from the sending
side the files (meaning non-directories) that are a part of the transfer
and have been successfully duplicated on the receiving side.
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
--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)
-@@ -2150,6 +2153,33 @@ file previously generated by bf(--write-batch).
+@@ -2156,6 +2159,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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (w/o delta-xfer algorithm)
-x, --one-file-system don't cross filesystem boundaries
-@@ -1103,6 +1104,15 @@ dit(bf(-S, --sparse)) Try to handle sparse files efficiently so they take
+@@ -1109,6 +1110,15 @@ dit(bf(-S, --sparse)) Try to handle sparse files efficiently so they take
up less space on the destination. Conflicts with bf(--inplace) because it's
not possible to overwrite data in a sparse fashion.
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/io.c b/io.c
--- a/io.c
+++ b/io.c
--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
-@@ -2124,6 +2126,19 @@ transfer was too fast, it will wait before sending the next data block. The
+@@ -2130,6 +2132,19 @@ transfer was too fast, it will wait before sending the next data block. The
result is an average transfer rate equaling the specified limit. A value
of zero specifies no limit.
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
--checksum-seed=NUM set block/file checksum seed (advanced)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
-@@ -2188,6 +2189,22 @@ daemon uses the charset specified in its "charset" configuration parameter
+@@ -2194,6 +2195,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: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
./configure (optional if already run)
make
-based-on: 93bdc6478e8d8a392b318f3986f9799ac3203d0e
+based-on: a5ef6969530e4616112999be9330cc442bcba7b7
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
gid = match_gid(gid, &gid_flags);
}
}
-@@ -2313,8 +2314,13 @@ struct file_list *recv_file_list(int f)
+@@ -2319,8 +2320,13 @@ struct file_list *recv_file_list(int f)
int64 start_read;
int save_verbose = verbose;
--timeout=SECONDS set I/O timeout in seconds
--contimeout=SECONDS set daemon connection timeout in seconds
-I, --ignore-times don't skip files that match size and time
-@@ -1710,6 +1713,57 @@ from the source system is used instead. See also the comments on the
+@@ -1716,6 +1719,57 @@ from the source system is used instead. See also the comments on the
the chroot setting affects rsync's ability to look up the names of the
users and groups and what you can do about it.