Add `haproxy header` parameter to rsync daemon
[rsync.git] / NEWS.md
1 # NEWS for rsync 3.2.0 (UNRELEASED)
2
3 Protocol: 31 (unchanged)
4
5 ## Changes since 3.1.3:
6
7 ### BUG FIXES:
8
9  - Avoid a potential out-of-bounds read in daemon mode if argc can be made to
10    become 0.
11
12  - Fix the default list of skip-compress files for non-daemon transfers.
13
14  - Fix xattr filter rules losing an 'x' attribute in a non-local transfer.
15
16  - Avoid an error when a check for a potential fuzzy file happens to reference
17    a directory.
18
19  - Make the atomic-rsync helper script have a more consistent error-exit.
20
21  - Make sure that a signal handler calls `_exit()` instead of exit().
22
23  - Various zlib fixes, including security fixes for CVE-2016-9843,
24    CVE-2016-9842, CVE-2016-9841, and CVE-2016-9840.
25
26  - Fixed an issue with `--remove-source-files` not removing a source symlink
27    when combined with `--copy-links`.
28
29  - Fixed a bug where the daemon would fail to write early fatal error messages
30    to the client, such as refused or unknown command-line options.
31
32  - Fixed the block-size validation logic when dealing with older protocols.
33
34  - Some rrsync fixes and enhancements to handle the latest options.
35
36  - Fixed a crash in the `--iconv` code.
37
38  - Fixed a problem with the `--link-dest`|`--copy-dest` code when `--xattrs`
39    was specified along with multiple alternate-destination directories (it
40    could possibly choose a bad file match while trying to find a better xattr
41    match).
42
43  - Fixed a couple bugs in the handling of files with the `--sparse` option.
44
45  - Fixed a bug in the writing of the batch.sh file (w/--write-batch) when the
46    source & destination args were not last on the command-line.
47
48  - Avoid a hang when an overabundance of messages clogs up all the I/O buffers.
49
50  - Fixed a mismatch in the RSYNC_PID values when running both a `pre-xfer exec`
51    and a `post-xfer exec`.
52
53 ### ENHANCEMENTS:
54
55  - Various checksum enhancements, including the optional use of openssl's MD4 &
56    MD5 checksum algorithms, some x86-64 optimizations for the rolling checksum,
57    some x86-64 optimizations for the (non-openssl) MD5 checksum, the addition
58    of xxhash checksum support, and a negotiation heuristic that ensures that it
59    is easier to add new checksum algorithms in the future.  Currently the
60    x86-64 optimizations require the use of the `--enable-simd` flag to
61    configure, but they will probably be enabled by default in the near future.
62    The environment variable `RSYNC_CHECKSUM_LIST` can be used to customize the
63    preference order of the negotiation.
64
65  - Various compression enhancements, including the addition of zstd and lz4
66    compression algorithms and a negotiation heuristic that picks the best
67    compression option supported by both sides.  The environment variable
68    `RSYNC_COMPRESS_LIST` can be used to customize the preference order of the
69    heuristic when speaking to another rsync 3.2.0 version.
70
71  - Added a --debug=NSTR option that outputs details of the new negotiation
72    strings (for checksums and compression).  The first level just outputs the
73    result of each negotiation on the client, level 2 outputs the values of the
74    strings that were sent to and received from the server, and level 3 outputs
75    all those values on the server side too.
76
77  - The --debug=OPTS command-line option is no longer auto-forwarded to the
78    remote rsync which allows for the client and server to have different levels
79    of debug specified. This also allows for newer debug options to be
80    specified, such as using --debug=NSTR to see the negotiated hash result,
81    without having the command fail if the server version is too old to handle
82    that debug item. Use -M--debug=OPTS to send the options to the remote side.
83
84  - Added the `--atimes` option based on the long-standing patch (just with some
85    fixes that the patch has been needing).
86
87  - Added `--open-noatime` option to open files using `O_NOATIME`.
88
89  - Added the `--write-devices` option based on the long-standing patch.
90
91  - Added openssl support to the rsync-ssl script via a (lib installed) helper
92    script, ssl-rsh.  Both bash scripts are now installed by default, removing
93    the install-ssl-client make target.  Rsync was also enhanced to set the
94    `RSYNC_PORT` environment variable when running a daemon-over-rsh script. Its
95    value is the user-specified port number (set via `--port` or an rsync://
96    URL) or 0 if the user didn't override the port.
97
98  - Added the `haproxy header` daemon parameter that allows your rsyncd to know
99    the real remote IP when it is being proxied.
100
101  - Added negated matching to the daemon's `refuse options` setting by using
102    match strings that start with a `!` (such as `!compress*`).
103
104  - Added the `early exec` daemon parameter that runs a script before the
105    transfer parameters are known, allowing some early setup based on module
106    name.
107
108  - Added status output in response to a signal (via both SIGINFO & SIGVTALRM).
109
110  - Added a `--copy-as=USER` option to give some extra security to root-run
111    rsync commands into/from untrusted directories (such as backups and
112    restores).
113
114  - When resuming the transfer of a file in the `--partial-dir`, rsync will now
115    update that partial file in-place instead of creating yet another tmp file
116    copy.  This requires both sender & receiver to be at least v3.2.0.
117
118  - Added support for `RSYNC_SHELL` & `RSYNC_NO_XFER_EXEC` environment variables
119    that affect the pre-xfer exec and post-xfer exec rsync daemon options.
120
121  - Optimize the `--fuzzy` `--fuzzy` heuristic to avoid the fuzzy directory scan
122    until all other basis-file options are exhausted (such as `--link-dest`).
123
124  - Have a daemon that is logging include the normal-exit sent/received stats
125    even when the transfer exited with an error.
126
127  - The daemon now locks its pid file (when configured to use one) so that it
128    will not fail to start when the file exists and it is unlocked.
129
130  - Various man page improvements.
131
132  - Made -V the short option for --version.
133
134 ### DEVELOPER RELATED:
135
136  - Silenced some annoying warnings about major()|minor() due to the autoconf
137    include-file check not being smart enough.
138
139  - Converted the man pages from yodl to markdown. They are now processed via a
140    simple python3 script using the cmarkgfm OR commonmark library.  This should
141    make it easier for packaging rsync, since yodl has gotten obscure.
142
143  - Improved some configure checks to work better with strict C99 compilers.
144
145  - The `--debug=FOO` options are no longer auto-forwarded to the server side,
146    allowing more control over what is output & the ability to request debug
147    data from divergent rsync versions.
148
149  - Some perl scripts were recoded into awk and python3.
150
151  - Some defines in byteorder.h were changed into static inline functions that
152    will help to ensure that the args don't get evaluated multiple times on
153    `careful alignment` hosts.
154
155  - Some code typos were fixed (as pointed out by a Fossies run).
156
157 ------------------------------------------------------------------------------