Add preliminary gnutls support.
[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 problem with the `--link-dest`|`--copy-dest` code when `--xattrs`
37    was specified along with multiple alternate-destination directories (it
38    could possibly choose a bad file match while trying to find a better xattr
39    match).
40
41  - Fixed a couple bugs in the handling of files with the `--sparse` option.
42
43  - Fixed a bug in the writing of the batch.sh file (w/--write-batch) when the
44    source & destination args were not last on the command-line.
45
46  - Avoid a hang when an overabundance of messages clogs up all the I/O buffers.
47
48  - Fixed a mismatch in the RSYNC_PID values put into the environment of
49    `pre-xfer exec` and a `post-xfer exec`.
50
51  - Fixed a crash in the `--iconv` code.
52
53  - Fixed a rare crash in the popt_unalias() code.
54
55 ### ENHANCEMENTS:
56
57  - Various checksum enhancements, including the optional use of openssl's MD4 &
58    MD5 checksum algorithms, some x86-64 optimizations for the rolling checksum,
59    some x86-64 optimizations for the (non-openssl) MD5 checksum, the addition
60    of xxhash checksum support, and a negotiation heuristic that ensures that it
61    is easier to add new checksum algorithms in the future.  The environment
62    variable `RSYNC_CHECKSUM_LIST` can be used to customize the preference order
63    of the negotiation, or use `--checksum-choice` (`--cc`) to force a choice.
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    negotiation, or use `--compress-choice` (`--zc`) to force a choice.
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 (when given the debug option).
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 & preliminary gnutls support to the rsync-ssl script, which is
92    now installed by default.  This was unified with the old stunnel-rsync
93    helper script to simplify packaging.  Note that the script accepts the use
94    of --type=gnutls for gnutls testing, but does not look for gnutls-cli on the
95    path yet.  The use of type=gnutls will not work right until gnutls-cli no
96    longer drops data.
97
98  - Rsync was enhanced to set the `RSYNC_PORT` environment variable when running
99    a daemon-over-rsh script. Its value is the user-specified port number (set
100    via `--port` or an rsync:// URL) or 0 if the user didn't override the port.
101
102  - Added the `haproxy header` daemon parameter that allows your rsyncd to know
103    the real remote IP when it is setup behind a proxy.
104
105  - Added negated matching to the daemon's `refuse options` setting by using
106    match strings that start with a `!` (such as `!compress*`).  This lets you
107    refuse all options except for a particular approved list, for example.
108
109  - Added the `early exec` daemon parameter that runs a script before the
110    transfer parameters are known, allowing some early setup based on module
111    name.
112
113  - Added status output in response to a signal (via both SIGINFO & SIGVTALRM).
114
115  - Added `--copy-as=USER` option to give some extra security to root-run rsync
116    commands into/from untrusted directories (such as backups and restores).
117
118  - When resuming the transfer of a file in the `--partial-dir`, rsync will now
119    update that partial file in-place instead of creating yet another tmp file
120    copy.  This requires both sender & receiver to be at least v3.2.0.
121
122  - Added support for `RSYNC_SHELL` & `RSYNC_NO_XFER_EXEC` environment variables
123    that affect the pre-xfer exec and post-xfer exec rsync daemon options.
124
125  - Optimize the `--fuzzy --fuzzy` heuristic to avoid the fuzzy directory scan
126    until all other basis-file options are exhausted (such as `--link-dest`).
127
128  - Have the daemon log include the normal-exit sent/received stats when the
129    transfer exited with an error when possible (i.e. if it is the sender).
130
131  - The daemon now locks its pid file (when configured to use one) so that it
132    will not fail to start when the file exists and it is unlocked.
133
134  - Various man page improvements, including some html representations (that
135    aren't installed by default).
136
137  - Made -V the short option for --version and improved its information.
138
139  - Forward -4 or -6 to the ssh command, making it easier to type than
140    `--rsh='ssh -4'` (or -6).
141
142 ### PACKAGING RELATED:
143
144  - Add installed binary: /usr/bin/rsync-sll
145
146  - Add installed man page: /usr/man/man1/rsync-ssl.1
147
148  - Tweak auxilliary doc file names, such as: README.md, INSTALL.md, NEWS.md, &
149    OLDNEWS.md.
150
151  - The rsync-ssl script wants to run openssl or stunnel4, so consider adding a
152    dependency for one of those options (though it's probably fine to just let
153    it complain about being unable to find the program and let the user decide
154    if they want to install one or the other).
155
156  - If you packaged rsync + rsync-ssl + rsync-ssl-daemon as separate packages,
157    the rsync-ssl package is now gone (rsync-ssl should be considered to be
158    mainstream now that Samba requires SSL for its rsync daemon).
159
160  - Add _build_ dependency for liblz4-dev, libxxhash-dev, libzstd-dev, and
161    libssl-dev.  These development libraries will give rsync extra compression
162    algorithms, extra checksum algorithms, and allow use of openssl's crypto
163    lib for (potentially) faster MD4/MD5 checksums.
164
165  - Add _build_ dependency for g++ to enable the SIMD checksum optimizations.
166
167  - Add _build_ dependency for _either_ python3-cmarkcfm or python3-commonmark
168    to allow for patching of man pages or building a git release.  Note that
169    cmarkcfm is faster than commonmark, but they generate the same data.
170
171  - Remove yodl _build_ dependency (if it was even listed before).
172
173 ### DEVELOPER RELATED:
174
175  - Silenced some annoying warnings about major() & minor() by improving an
176    autoconf include-file check.
177
178  - Converted the man pages from yodl to markdown. They are now processed via a
179    simple python3 script using the cmarkgfm **or** commonmark library.  This
180    should make it easier to package rsync, since yodl has gotten obscure.
181
182  - Improved some configure checks to work better with strict C99 compilers.
183
184  - Some perl building/packaging scripts were recoded into awk and python3.
185
186  - Some defines in byteorder.h were changed into static inline functions that
187    will help to ensure that the args don't get evaluated multiple times on
188    "careful alignment" hosts.
189
190  - Some code typos were fixed (as pointed out by a Fossies run).
191
192 ------------------------------------------------------------------------------