5254e6a9681ed4f79a25e0e380b4dc3e20d9e24c
[rsync.git] / NEWS.md
1 <a name="3.2.4"></a>
2
3 # NEWS for rsync 3.2.4 (UNRELEASED)
4
5 ## Changes in this version:
6
7 ### OUTPUT CHANGES:
8
9  - Added a parenthetic suffix to the "FILENAME exists" output of
10    `--ignore-existing --info=skip` (note that `-vv` implies `--info=skip`).
11    The skip message is now "FILENAME exists (INFO)" where the INFO is one of
12    uptodate, type differs, or differs.  The suffix may be omitted when using
13    `--checksum` unless `--info=skip2` was used (since we don't want to slow
14    down rsync with extra checksum operations unless the user really wants to
15    see the full difference info).
16
17 ### BUG FIXES:
18
19  - Fix a bug with `--mkpath` if a single-file copy specifies an existing
20    destination dir with a non-existing destination filename.
21
22  - Fix `--update -vv` to output "is uptodate" instead of "is newer" messages
23    for files that are being skipped due to an identical modify time.  (This
24    was a new output quirk in 3.2.3.)
25
26  - When doing an append transfer, the sending side's file must not get shorter
27    or it is skipped. Fixes a crash that could occur when the size changes to 0
28    in the middle of the send negotiations.
29
30  - When dealing with a special file in an alt-dest hierarchy, rsync now checks
31    the non-permissions mode bits to ensure that the 2 special files are really
32    the same.
33
34  - Avoid a weird failure if you run a local copy with a (useless) `--rsh`
35    option that contains a `V`.
36
37 ### ENHANCEMENTS:
38
39  - Use openssl's `-verify_hostname` option in the rsync-ssl script.
40
41  - Optimize the AVX2 checksum code a bit more.
42
43  - Some manpage improvements.
44
45 ### PACKAGING RELATED:
46
47  - When creating a package from a non-release version (w/o a git checkout), the
48    packager can elect to create git-version.h and define RSYNC_GITVER to the
49    string they want `--version` to output.  (The file is still auto-generated
50    using the output of `git describe` when building inside a non-shallow git
51    checkout, though.)
52
53  - Fixed configure to not fail at the SIMD check when cross-compiling.
54
55  - Added a SECURITY.md file.
56
57 ### DEVELOPER RELATED:
58
59  - Made it easier to write rsync tests that diff the output while also checking
60    the status code, and used the idiom to improve the existing tests.
61
62 ------------------------------------------------------------------------------
63 <a name="3.2.3"></a>
64
65 # NEWS for rsync 3.2.3 (6 Aug 2020)
66
67 ## Changes in this version:
68
69 ### BUG FIXES:
70
71  - Fixed a bug in the xattr code that was freeing the wrong object when trying
72    to cleanup the xattr list.
73
74  - Fixed a bug in the xattr code that was not leaving room for the "rsync."
75    prefix in some instances where it needed to be added.
76
77  - Restored the ability to use `--bwlimit=0` to specify no bandwidth limit.  (It
78    was accidentally broken in 3.2.2.)
79
80  - Fix a bug when combining `--delete-missing-args` with `--no-implied-dirs` &
81    `-R` where rsync might create the destination path of a missing arg.  The
82    code also avoids some superfluous warnings for nested paths of removed args.
83
84  - Fixed an issue where hard-linked devices could cause the rdev_major value to
85    get out of sync between the sender and the receiver, which could cause a
86    device to get created with the wrong major value in its major,minor pair.
87
88  - Rsync now complains about a missing `--temp-dir` before starting any file
89    transfers.
90
91  - A completely empty source arg is now a fatal error.  This doesn't change
92    the handling of implied dot-dir args such as "localhost:" and such.
93
94 ### ENHANCEMENTS:
95
96  - Allow `--max-alloc=0` to specify no limit to the alloc sanity check.
97
98  - Allow `--block-size=SIZE` to specify the size using units (e.g. "100K").
99
100  - The name of the id-0 user & group are now sent to the receiver along with
101    the other user/group names in the transfer (instead of assuming that both
102    sides have the same id-0 names).
103
104  - Added the `--stop-after=MINS` and `--stop-at=DATE_TIME` options (with the
105    `--time-limit=MINS` option accepted as an alias for `--stop-after`).  This
106    is an enhanced version of the time-limit patch from the patches repo.
107
108  - Added the `name converter` daemon parameter to make it easier to convert
109    user & group names inside a chrooted daemon module.  This is based on the
110    nameconverter patch with some improvements, including a tweak to the request
111    protocol (so if you used this patch in the past, be sure to update your
112    converter script to use newlines instead of null chars).
113
114  - Added `--crtimes` (`-N`) option for preserving the file's create time (I
115    believe that this is macOS only at the moment).
116
117  - Added `--mkpath` option to tell rsync that it should create a non-existing
118    path component of the destination arg.
119
120  - Added `--stderr=errors|all|client` to replace the `--msgs2stderr` and
121    `--no-msgs2stderr` options (which are still accepted).  The default use of
122    stderr was changed to be `--stderr=errors` where all the processes that have
123    stderr available output directly to stderr, which should help error messages
124    get to the user more quickly, especially when doing a push (which includes
125    local copying).  This also allows rsync to exit quickly when a receiver
126    failure occurs, since rsync doesn't need to try to keep the connection alive
127    long enough for the fatal error to go from the receiver to the generator to
128    the sender.  The old default can be requested via `--stderr=client`.  Also
129    changed is that a non-default stderr mode is conveyed to the remote rsync
130    (using the older option names) instead of requiring the user to use
131    `--remote-option` (`-M`) to tell the remote rsync what to do.
132
133  - Added the ability to specify "@netgroup" names to the `hosts allow` and
134    `hosts deny` daemon parameters.  This is a finalized version of the
135    netgroup-auth patch from the patches repo.
136
137  - Rsync can now hard-link symlinks on FreeBSD due to it making ues of the
138    linkat() function when it is available.
139
140  - Output file+line info on out-of-memory & overflow errors while also avoiding
141    the output of alternate build-dir path info that is not useful to the user.
142
143  - Change configure to know that Cygwin supports Linux xattrs.
144
145  - Improved the testsuite on FreeBSD & Cygwin.
146
147  - Added some compatibility code for HPE NonStop platforms.
148
149  - Improved the INSTALL.md info.
150
151  - Added a few more suffixes to the default skip-compress list.
152
153  - Improved configure's error handling to notify about several issues at once
154    instead of one by one (for the newest optional features).
155
156 ### INTERNAL:
157
158  - Use a simpler overflow check idiom in a few spots.
159
160  - Use a C99 Flexible Array for a trailing variable-size filename in a struct
161    (with a fallback to the old 1-char string kluge for older compilers).
162
163 ------------------------------------------------------------------------------
164 <a name="3.2.2"></a>
165
166 # NEWS for rsync 3.2.2 (4 Jul 2020)
167
168 ## Changes in this version:
169
170 ### BUG FIXES:
171
172  - Avoid a crash when a daemon module enables `transfer logging` without
173    setting a `log format` value.
174
175  - Fixed installing rsync-ssl script from an alternate build dir.
176
177  - Fixed the updating of configure.sh from an alternate build dir.
178
179  - Apple requires the asm function name to begin with an underscore.
180
181  - Avoid a test failure in the daemon test when `--atimes` is disabled.
182
183 ### ENHANCEMENTS:
184
185  - Allow the server side to restrict checksum & compression choices via the
186    same environment variables the client uses.  The env vars can be divided
187    into "client list & server list" by the "`&`" char or the same list can
188    apply to both.
189
190  - Simplify how the negotiation environment variables apply when interacting
191    with an older rsync and also when a list contains only invalid names.
192
193  - Do not allow a negotiated checksum or compression choice of "none" unless
194    the user authorized it via an environment variable or command-line option.
195
196  - Added the `--max-alloc=SIZE` option to be able to override the memory
197    allocator's sanity-check limit.  It defaults to 1G (as before) but the error
198    message when exceeding it specifically mentions the new option so that you
199    can differentiate an out-of-memory error from a failure of this limit.  It
200    also allows you to specify the value via the RSYNC_MAX_ALLOC environment
201    variable.
202
203  - Add the "open atime" daemon parameter to allow a daemon to always enable or
204    disable the use of O_NOATIME (the default is to let the user control it).
205
206  - The default systemd config was changed to remove the `ProtectHome=on`
207    setting since rsync is often used to serve files in /home and /root and this
208    seemed a bit too strict.  Feel free to use `systemctl edit rsync` to add
209    that restriction (or maybe `ProtectHome=read-only`), if you like.  See the
210    3.2.0 NEWS for the other restrictions that were added compared to 3.1.3.
211
212  - The memory allocation functions now automatically check for a failure and
213    die when out of memory.  This eliminated some caller-side check-and-die
214    code and added some missing sanity-checking of allocations.
215
216  - Put optimizations into their own list in the `--version` output.
217
218  - Improved the man page a bit more.
219
220 ### PACKAGING RELATED:
221
222  - Prepared the checksum code for an upcoming xxHash release that provides new
223    XXH3 (64-bit) & XXH128 (128-bit) checksum routines.  These will not be
224    compiled into rsync until the xxhash v0.8.0 include files are installed on
225    the build host, and that release is a few weeks away at the time this was
226    written.  So, if it's now the future and you have packaged and installed
227    xxhash-0.8.0-devel, a fresh rebuild of rsync 3.2.2 will give you the new
228    checksum routines.  Just make sure that the new rsync package depends on
229    xxhash >= 0.8.0.
230
231 ### DEVELOPER RELATED:
232
233  - Moved the version number out of configure.ac into its own version.h file so
234    that we don't need to reconfigure just because the version number changes.
235
236  - Moved the daemon parameter list into daemon-parm.txt so that an awk script
237    can create the interrelated structs and accessors that loadparm.c needs.
238
239 ------------------------------------------------------------------------------
240 <a name="3.2.1"></a>
241
242 # NEWS for rsync 3.2.1 (22 Jun 2020)
243
244 ## Changes in this version:
245
246 ### BUG FIXES:
247
248  - Fixed a potential build issue with the MD5 assembly-language code by
249    removing some non-portable directives.
250
251  - Use the preprocessor with the asm file to ensure that if the code is
252    unneeded, it doesn't get built.
253
254  - Avoid the stack getting set to executable when including the asm code.
255
256  - Some improvements in the SIMD configure testing to try to avoid build
257    issues, such as avoiding a clang++ core dump when `-g` is combined with
258    `-O2`.  Note that clang++ is quite buggy in this area, and it does still
259    crash for some folks, so just use `--disable-simd` if you need to avoid
260    their buggy compiler (since the configure test is apparently not finding
261    all the compilers that will to crash and burn).
262
263  - Fixed an issue in the md2man script when building from an alternate dir.
264
265  - Disable `--atimes` on macOS (it apparently just ignores the atime change).
266
267 ### ENHANCEMENTS:
268
269  - The use of `--backup-dir=STR` now implies `--backup`.
270
271  - Added `--zl=NUM` as a short-hand for `--compress-level=NUM`.
272
273  - Added `--early-input=FILE` option that allows the client to send some
274    data to a daemon's (optional) "early exec" script on its stdin.
275
276  - Mention atimes in the capabilities list that `--version` outputs.
277
278  - Mention either "default protect-args" or "optional protect-args" in the
279    `--version` capabilities depending on how rsync was configured.
280
281  - Some info on optimizations is now elided from the `--version` capabilities
282    since they aren't really user-facing capabilities.  You can still see the
283    info (plus the status of a couple extra optimizations) by repeating the
284    `--version` option (e.g. `-VV`).
285
286  - Updated various URLs to be https instead of http.
287
288  - Some documentation improvements.
289
290 ### PACKAGING RELATED:
291
292  - If you had to use `--disable-simd` for 3.2.0, you might want to try removing
293    that and see if it will succeed or auto-disable.  Some buggy clang++
294    compilers are still not auto disabled, though.
295
296  - The MD5 asm code is now under its own configure flag (not shared with the
297    SIMD setting), so if you have any issues compiling it, re-run configure with
298    `--disable-asm`.
299
300  - Merged the OLDNEWS.md file into NEWS.md.
301
302 ------------------------------------------------------------------------------
303 <a name="3.2.0"></a>
304
305 # NEWS for rsync 3.2.0 (19 Jun 2020)
306
307 ## Changes in this version:
308
309 ### BUG FIXES:
310
311  - Avoid a potential out-of-bounds read in daemon mode if argc can be made to
312    become 0.
313
314  - Fix the default list of skip-compress files for non-daemon transfers.
315
316  - Fix xattr filter rules losing an 'x' attribute in a non-local transfer.
317
318  - Avoid an error when a check for a potential fuzzy file happens to reference
319    a directory.
320
321  - Make the atomic-rsync helper script have a more consistent error-exit.
322
323  - Make sure that a signal handler's use of exit_cleanup() calls `_exit()`
324    instead of exit().
325
326  - Various zlib fixes, including security fixes for CVE-2016-9843,
327    CVE-2016-9842, CVE-2016-9841, and CVE-2016-9840.
328
329  - Fixed an issue with `--remove-source-files` not removing a source symlink
330    when combined with `--copy-links`.
331
332  - Fixed a bug where the daemon would fail to write early fatal error messages
333    to the client, such as refused or unknown command-line options.
334
335  - Fixed the block-size validation logic when dealing with older protocols.
336
337  - Some rrsync fixes and enhancements to handle the latest options.
338
339  - Fixed a problem with the `--link-dest`|`--copy-dest` code when `--xattrs`
340    was specified along with multiple alternate-destination directories (it
341    could possibly choose a bad file match while trying to find a better xattr
342    match).
343
344  - Fixed a couple bugs in the handling of files with the `--sparse` option.
345
346  - Fixed a bug in the writing of the batch.sh file (w/`--write-batch`) when the
347    source & destination args were not last on the command-line.
348
349  - Avoid a hang when an overabundance of messages clogs up all the I/O buffers.
350
351  - Fixed a mismatch in the RSYNC_PID values put into the environment of
352    `pre-xfer exec` and a `post-xfer exec`.
353
354  - Fixed a crash in the `--iconv` code.
355
356  - Fixed a rare crash in the popt_unalias() code.
357
358 ### ENHANCEMENTS:
359
360  - The default systemd config was made stricter by default.  For instance,
361    `ProtectHome=on` (which hides content in /root and /home/USER dirs),
362    `ProtectSystem=full` (which makes /usr, /boot, & /etc dirs read-only), and
363    `PrivateDevices=on` (which hides devices).  You can override any of these
364    using the standard `systemctl edit rsync` and add one or more directives
365    under a `[Service]` heading (and restart the rsync service).
366
367  - Various checksum enhancements, including the optional use of openssl's MD4 &
368    MD5 checksum algorithms, some x86-64 optimizations for the rolling checksum,
369    some x86-64 optimizations for the (non-openssl) MD5 checksum, the addition
370    of xxHash checksum support, and a negotiation heuristic that ensures that it
371    is easier to add new checksum algorithms in the future.  The environment
372    variable `RSYNC_CHECKSUM_LIST` can be used to customize the preference order
373    of the negotiation, or use `--checksum-choice` (`--cc`) to force a choice.
374
375  - Various compression enhancements, including the addition of zstd and lz4
376    compression algorithms and a negotiation heuristic that picks the best
377    compression option supported by both sides.  The environment variable
378    `RSYNC_COMPRESS_LIST` can be used to customize the preference order of the
379    negotiation, or use `--compress-choice` (`--zc`) to force a choice.
380
381  - Added a `--debug=NSTR` option that outputs details of the new negotiation
382    strings (for checksums and compression).  The first level just outputs the
383    result of each negotiation on the client, level 2 outputs the values of the
384    strings that were sent to and received from the server, and level 3 outputs
385    all those values on the server side too (when the server was given the debug
386    option).
387
388  - The `--debug=OPTS` command-line option is no longer auto-forwarded to the
389    remote rsync which allows for the client and server to have different levels
390    of debug specified. This also allows for newer debug options to be
391    specified, such as using `--debug=NSTR` to see the negotiated hash result,
392    without having the command fail if the server version is too old to handle
393    that debug item. Use `-M--debug=OPTS` to send the options to the remote side.
394
395  - Added the `--atimes` option based on the long-standing patch (just with some
396    fixes that the patch has been needing).
397
398  - Added `--open-noatime` option to open files using `O_NOATIME`.
399
400  - Added the `--write-devices` option based on the long-standing patch.
401
402  - Added openssl & preliminary gnutls support to the rsync-ssl script, which is
403    now installed by default.  This was unified with the old stunnel-rsync
404    helper script to simplify packaging.  Note that the script accepts the use
405    of `--type=gnutls` for gnutls testing, but does not look for gnutls-cli on
406    the path yet.  The use of `--type=gnutls` will not work right until
407    gnutls-cli no longer drops data.
408
409  - Rsync was enhanced to set the `RSYNC_PORT` environment variable when running
410    a daemon-over-rsh script. Its value is the user-specified port number (set
411    via `--port` or an rsync:// URL) or 0 if the user didn't override the port.
412
413  - Added the `proxy protocol` daemon parameter that allows your rsyncd to know
414    the real remote IP when it is setup behind a proxy.
415
416  - Added negated matching to the daemon's `refuse options` setting by using
417    match strings that start with a `!` (such as `!compress*`).  This lets you
418    refuse all options except for a particular approved list, for example.  It
419    also lets rsync refuse certain options by default (such as `write-devices`)
420    while allowing the config to override that, as desired.
421
422  - Added the `early exec` daemon parameter that runs a script before the
423    transfer parameters are known, allowing some early setup based on module
424    name.
425
426  - Added status output in response to a signal (via both SIGINFO & SIGVTALRM).
427
428  - Added `--copy-as=USER` option to give some extra security to root-run rsync
429    commands into/from untrusted directories (such as backups and restores).
430
431  - When resuming the transfer of a file in the `--partial-dir`, rsync will now
432    update that partial file in-place instead of creating yet another tmp file
433    copy.  This requires both sender & receiver to be at least v3.2.0.
434
435  - Added support for `RSYNC_SHELL` & `RSYNC_NO_XFER_EXEC` environment variables
436    that affect the early, pre-xfer, and post-xfer exec rsync daemon parameters.
437
438  - Optimize the `--fuzzy --fuzzy` heuristic to avoid the fuzzy directory scan
439    until all other basis-file options are exhausted (such as `--link-dest`).
440
441  - Have the daemon log include the normal-exit sent/received stats when the
442    transfer exited with an error when possible (i.e. if it is the sender).
443
444  - The daemon now locks its pid file (when configured to use one) so that it
445    will not fail to start when the file exists but no daemon is running.
446
447  - Various man page improvements, including some html representations (that
448    aren't installed by default).
449
450  - Made `-V` the short option for `--version` and improved its information.
451
452  - Pass the `-4` or `-6` option to the ssh command, making it easier to type
453    than `--rsh='ssh -4'` (or the `-6` equivalent).
454
455  - Added example config for rsyncd SSL proxy configs to rsyncd.conf.
456
457  - More errors messages now mention if the error is coming from the sender or
458    the receiver.
459
460 ### PACKAGING RELATED:
461
462  - Add installed bash script: /usr/bin/rsync-ssl
463
464  - Add installed man page: /usr/man/man1/rsync-ssl.1
465
466  - Tweak auxiliary doc file names, such as: README.md, INSTALL.md, & NEWS.md.
467
468  - The rsync-ssl script wants to run openssl or stunnel4, so consider adding a
469    dependency for one of those options (though it's probably fine to just let
470    it complain about being unable to find the program and let the user decide
471    if they want to install one or the other).
472
473  - If you packaged rsync + rsync-ssl + rsync-ssl-daemon as separate packages,
474    the rsync-ssl package is now gone (rsync-ssl should be considered to be
475    mainstream now that Samba requires SSL for its rsync daemon).
476
477  - Add _build_ dependency for liblz4-dev, libxxhash-dev, libzstd-dev, and
478    libssl-dev.  These development libraries will give rsync extra compression
479    algorithms, extra checksum algorithms, and allow use of openssl's crypto
480    lib for (potentially) faster MD4/MD5 checksums.
481
482  - Add _build_ dependency for g++ or clang++ on x86_64 systems to enable the
483    SIMD checksum optimizations.
484
485  - Add _build_ dependency for _either_ python3-cmarkcfm or python3-commonmark
486    to allow for patching of man pages or building a git release.  This is not
487    required for a release-tar build, since it comes with pre-built man pages.
488    Note that cmarkcfm is faster than commonmark, but they generate the same
489    data.  The commonmark dependency is easiest to install since it's native
490    python, and can even be installed via `pip3 install --user commonmark` if
491    you want to just install it for the build user.
492
493  - Remove yodl _build_ dependency (if it was even listed before).
494
495 ### DEVELOPER RELATED:
496
497  - Silenced some annoying warnings about major() & minor() by improving an
498    autoconf include-file check.
499
500  - Converted the man pages from yodl to markdown. They are now processed via a
501    simple python3 script using the cmarkgfm **or** commonmark library.  This
502    should make it easier to package rsync, since yodl is rather obscure.
503
504  - Improved some configure checks to work better with strict C99 compilers.
505
506  - Some perl building/packaging scripts were recoded into awk and python3.
507
508  - Some defines in byteorder.h were changed into static inline functions that
509    will help to ensure that the args don't get evaluated multiple times on
510    "careful alignment" hosts.
511
512  - Some code typos were fixed (as pointed out by a Fossies run).
513
514 ------------------------------------------------------------------------------
515 <a name="3.1.3"></a>
516
517 # NEWS for rsync 3.1.3 (28 Jan 2018)
518
519 ## Changes in this version:
520
521 ### SECURITY FIXES:
522
523  - Fixed a buffer overrun in the protocol's handling of xattr names and ensure
524    that the received name is null terminated.
525
526  - Fix an issue with `--protect-args` where the user could specify the arg in the
527    protected-arg list and short-circuit some of the arg-sanitizing code.
528
529 ### BUG FIXES:
530
531  - Don't output about a new backup dir without appropriate info verbosity.
532
533  - Fixed some issues with the sort functions in support/rsyncstats script.
534
535  - Added a way to specify daemon config lists (e.g. users, groups, etc) that
536    contain spaces (see `auth users` in the latest rsyncd.conf manpage).
537
538  - If a backup fails (e.g. full disk) rsync exits with an error.
539
540  - Fixed a problem with a doubled `--fuzzy` option combined with `--link-dest`.
541
542  - Avoid invalid output in the summary if either the start or end time had an
543    error.
544
545  - We don't allow a popt alias to affect the `--daemon` or `--server` options.
546
547  - Fix daemon exclude code to disallow attribute changes in addition to
548    disallowing transfers.
549
550  - Don't force nanoseconds to match if a non-transferred, non-checksummed file
551    only passed the quick-check w/o comparing nanoseconds.
552
553 ### ENHANCEMENTS:
554
555  - Added the ability for rsync to compare nanosecond times in its file-check
556    comparisons, and added support nanosecond times on Mac OS X.
557
558  - Added a short-option (`-@`) for `--modify-window`.
559
560  - Added the `--checksum-choice=NAME[,NAME]` option to choose the checksum
561    algorithms.
562
563  - Added hashing of xattr names (with using `-X`) to improve the handling of
564    files with large numbers of xattrs.
565
566  - Added a way to filter xattr names using include/exclude/filter rules (see
567    the `--xattrs` option in the manpage for details).
568
569  - Added `daemon chroot|uid|gid` to the daemon config (in addition to the old
570    chroot|uid|gid settings that affect the daemon's transfer process).
571
572  - Added `syslog tag` to the daemon configuration.
573
574  - Some manpage improvements.
575
576 ### DEVELOPER RELATED:
577
578  - Tweak the `make` output when yodl isn't around to create the man pages.
579
580  - Changed an obsolete autoconf compile macro.
581
582  - Support newer yodl versions when converting man pages.
583
584 ------------------------------------------------------------------------------
585 <a name="3.1.2"></a>
586
587 # NEWS for rsync 3.1.2 (21 Dec 2015)
588
589 ## Changes in this version:
590
591 ### SECURITY FIXES:
592
593  - Make sure that all transferred files use only path names from inside the
594    transfer. This makes it impossible for a malicious sender to try to make the
595    receiver use an unsafe destination path for a transferred file, such as a
596    just-sent symlink.
597
598 ### BUG FIXES:
599
600  - Change the checksum seed order in the per-block checksums. This prevents
601    someone from trying to create checksum blocks that match in sum but not
602    content.
603
604  - Fixed a with the per-dir filter files (using `-FF`) that could trigger an
605    assert failure.
606
607  - Only skip `set_modtime()` on a transferred file if the time is exactly
608    right.
609
610  - Don't create an empty backup dir for a transferred file that doesn't exist
611    yet.
612
613  - Fixed a bug where `--link-dest` and `--xattrs` could cause rsync to exit if
614    a filename had a matching dir of the same name in the alt-dest area.
615
616  - Allow more than 32 group IDs per user in the daemon's gid=LIST config.
617
618  - Fix the logging of %b & %c via `--log-file` (daemon logging was already
619    correct, as was `--out-format='%b/%c'`).
620
621  - Fix erroneous acceptance of `--info=5` & `--debug=5` (an empty flag name is
622    not valid).
623
624 ### ENHANCEMENTS:
625
626  - Added `(DRY RUN)` info to the `--debug=exit` output line.
627
628  - Use usleep() for our msleep() function if it is available.
629
630  - Added a few extra long-option names to rrsync script, which will make
631    BackupPC happier.
632
633  - Made configure choose to use Linux xattrs on NetBSD (rather than not
634    supporting xattrs).
635
636  - Added `-wo` (write-only) option to rrsync support script.
637
638  - Misc. manpage tweaks.
639
640 ### DEVELOPER RELATED:
641
642  - Fixed a bug with the Makefile's use of `INSTALL_STRIP`.
643
644  - Improve a test in the suite that could get an erroneous timestamp error.
645
646  - Tweaks for newer versions of git in the packaging tools.
647
648  - Improved the m4 generation rules and some autoconf idioms.
649
650 ------------------------------------------------------------------------------
651 <a name="3.1.1"></a>
652
653 # NEWS for rsync 3.1.1 (22 Jun 2014)
654
655 ## Changes in this version:
656
657 ### BUG FIXES:
658
659  - If the receiver gets bogus filenames from the sender (an unexpected leading
660    slash or a `..` infix dir), exit with an error. This prevents a malicious
661    sender from trying to inject filenames that would affect an area outside the
662    destination directories.
663
664  - Fixed a failure to remove the partial-transfer temp file when interrupted
665    (and rsync is not saving the partial files).
666
667  - Changed the chown/group/xattr-set order to avoid losing some security-
668    related xattr info (that would get cleared by a chown).
669
670  - Fixed a bug in the xattr-finding code that could make a non-root-run
671    receiver not able to find some xattr numbers.
672
673  - Fixed a bug in the early daemon protocol where a timeout failed to be
674    honored (e.g. if the remote side fails to send us the initial protocol
675    greeting).
676
677  - Fixed unintended inclusion of commas in file numbers in the daemon log.
678
679  - We once again send the 'f' sub-flag (of `-e`) to the server side so it knows
680    that we can handle incremental-recursion directory errors properly in older
681    protocols.
682
683  - Fixed an issue with too-aggressive keep-alive messages causing a problem for
684    older rsync versions early in the transfer.
685
686  - Fixed an incorrect message about backup-directory-creation when using
687    `--dry-run` and the backup dir is not an absolute path.
688
689  - Fixed a bug where a failed deletion and/or a failed sender-side removal
690    would not affect the exit code.
691
692  - Fixed a bug that caused a failure when combining `--delete-missing-args`
693    with `--xattrs` and/or `--acls`.
694
695  - Fixed a strange `dir_depth` assertion error that was caused by empty-dir
696    removals and/or duplicate files in the transfer.
697
698  - Fixed a problem with `--info=progress2`'s output stats where rsync would
699    only update the stats at the end of each file's transfer. It now uses the
700    data that is flowing for the current file, making the stats more accurate
701    and less jumpy.
702
703  - Fixed an itemize bug that affected the combo of `--link-dest`, `-X`, and
704    `-n`.
705
706  - Fixed a problem with delete messages not appearing in the log file when the
707    user didn't use `--verbose`.
708
709  - Improve chunked xattr reading for OS X.
710
711  - Removed an attempted hard-link xattr optimization that was causing a
712    transfer failure. This removal is flagged in the compatibility code, so if a
713    better fix can be discovered, we have a way to flip it on again.
714
715  - Fixed a bug when the receiver is not configured to be able to hard link
716    symlimks/devices/special-file items but the sender sent some of these items
717    flagged as hard-linked.
718
719  - We now generate a better error if the buffer overflows in `do_mknod()`.
720
721  - Fixed a problem reading more than 16 ACLs on some OSes.
722
723  - Fixed the reading of the secrets file to avoid an infinite wait when the
724    username is missing.
725
726  - Fixed a parsing problem in the `--usermap`/`--groupmap` options when using
727    MIN-MAX numbers.
728
729  - Switched Cygwin back to using socketpair `pipes` to try to speed it up.
730
731  - Added knowledge of a few new options to rrsync.
732
733 ### ENHANCEMENTS:
734
735  - Tweaked the temp-file naming when `--temp-dir=DIR` is used: the temp-file
736    names will not get a '.' prepended.
737
738  - Added support for a new-compression idiom that does not compress all the
739    matching data in a transfer. This can help rsync to use less cpu when a
740    transfer has a lot of matching data, and also makes rsync compatible with a
741    non-bundled zlib. See the `--new-compress` and `--old-compress` options in
742    the manpage.
743
744  - Added the support/rsync-no-vanished wrapper script.
745
746  - Made configure more prominently mention when we failed to find yodl (in case
747    the user wants to be able to generate manpages from `*.yo` files).
748
749  - Have manpage mention how a daemon's max-verbosity setting affects info and
750    debug options. Also added more clarification on backslash removals for
751    excludes that contain wildcards.
752
753  - Have configure check if for the attr lib (for getxattr) for those systems
754    that need to link against it explicitly.
755
756  - Change the early dir-creation logic to only use that idiom in an
757    inc-recursive copy that is preserving directory times. e.g. using
758    `--omit-dir-times` will avoid these early directories being created.
759
760  - Fix a bug in `cmp_time()` that would return a wrong result if the 2 times
761    differed by an amount greater than what a `time_t` can hold.
762
763 ### DEVELOPER RELATED:
764
765  - We now include an example systemd file (in packaging/systemd).
766
767  - Tweaked configure to make sure that any intended use of the included popt
768    and/or zlib code is put early in the CFLAGS.
769
770 ------------------------------------------------------------------------------
771 <a name="3.1.0"></a>
772
773 # NEWS for rsync 3.1.0 (28 Sep 2013)
774
775 ## Changes in this version:
776
777 ### PROTOCOL NUMBER:
778
779  - The protocol number was changed to 31.
780
781 ### OUTPUT CHANGES:
782
783  - Output numbers in 3-digit groups by default (e.g. 1,234,567). See the
784    `--human-readable` option for a way to turn it off. See also the daemon's
785    `log format` parameter and related command-line options (including
786    `--out-format`) for a modifier that can be used to request digit-grouping or
787    human-readable output in log escapes. (Note that log output is unchanged by
788    default.)
789
790  - The `--list-only` option is now affected by the `--human-readable` setting.
791    It will display digit groupings by default, and unit suffixes if higher
792    levels of readability are requested. Also, the column width for the size
793    output has increased from 11 to 14 characters when human readability is
794    enabled. Use `--no-h` to get the old-style output and column size.
795
796  - The output of the `--progress` option has changed: the string `xfer` was
797    shortened to `xfr`, and the string `to-check` was shortened to `to-chk`,
798    both designed to make room for the (by default) wider display of file size
799    numbers without making the total line-length longer. Also, when incremental
800    recursion is enabled, the string `ir-chk` will be used instead of `to-chk`
801    up until the incremental-recursion scan is done, letting you know that the
802    value to check and the total value will still be increasing as new files are
803    found.
804
805  - Enhanced the `--stats` output: 1) to mention how many files were created
806    (protocol >= 28), 2) to mention how many files were deleted (a new line for
807    protocol 31, but only output when `--delete` is in effect), and 3) to follow
808    the file-count, created-count, and deleted-count with a subcount list that
809    shows the counts by type. The wording of the transferred count has also
810    changed so that it is clearer that it is only a count of regular files.
811
812 ### BUG FIXES:
813
814  - Fixed a bug in the iconv code when EINVAL or EILSEQ is returned with a full
815    output buffer.
816
817  - Fixed some rare bugs in `--iconv` processing that might cause a multibyte
818    character to get translated incorrectly.
819
820  - Fixed a bogus `vanished file` error if some files were specified with `./`
821    prefixes and others were not.
822
823  - Fixed a bug in `--sparse` where an extra gap could get inserted after a
824    partial write.
825
826  - Changed the way `--progress` overwrites its prior output in order to make it
827    nearly impossible for the progress to get overwritten by an error.
828
829  - Improved the propagation of abnormal-exit error messages. This should help
830    the client side to receive errors from the server when it is exiting
831    abnormally, and should also avoid dying with an `connection unexpectedly
832    closed` exit when the closed connection is really expected.
833
834  - The sender now checks each file it plans to remove to ensure that it hasn't
835    changed from the first stat's info. This helps to avoid losing file data
836    when the user is not using the option in a safe manner.
837
838  - Fixed a data-duplication bug in the compress option that made compression
839    less efficient. This improves protocol 31 onward, while behaving in a
840    compatible (buggy) manner with older rsync protocols.
841
842  - When creating a temp-file, rsync is now a bit smarter about it dot-char
843    choices, which can fix a problem on OS X with names that start with `..`.
844
845  - Rsync now sets a cleanup flag for `--inplace` and `--append` transfers that
846    will flush the write buffer if the transfer aborts. This ensures that more
847    received data gets written out to the disk on an aborted transfer (which is
848    quite helpful on a slow, flaky connection).
849
850  - The reads that `map_ptr()` now does are aligned on 1K boundaries. This helps
851    some filesystems and/or files that don't like unaligned reads.
852
853  - Fix an issue in the msleep() function if time jumps backwards.
854
855  - Fix daemon-server module-name splitting bug where an arg would get split
856    even if `--protect-args` was used.
857
858 ### ENHANCEMENTS:
859
860  - Added the `--remote-option=OPT` (`-M OPT`) command-line option that is
861    useful for things like sending a remote `--log-file=FILE` or `--fake-super`
862    option.
863
864  - Added the `--info=FLAGS` and `--debug=FLAGS` options to allow finer-grained
865    control over what is output. Added an extra type of `--progress` output
866    using `--info=progress2`.
867
868  - The `--msgs2stderr` option can help with debugging rsync by allowing the
869    debug messages to get output to stderr rather than travel via the socket
870    protocol.
871
872  - Added the `--delete-missing-args` and `--ignore-missing-args` options to
873    either delete or ignore user-specified files on the receiver that are
874    missing on the sender (normally the absence of user-specified files
875    generates an error).
876
877  - Added a `T` (terabyte) category to the `--human-readable` size suffixes.
878
879  - Added the `--usermap`/`--groupmap`/`--chown` options for manipulating file
880    ownership during the copy.
881
882  - Added the `%C` escape to the log-output handling, which will output the MD5
883    checksum of any transferred file, or all files if `--checksum` was specified
884    (when protocol 30 or above is in effect).
885
886  - Added the `reverse lookup` parameter to the rsync daemon config file to
887    allow reverse-DNS lookups to be disabled.
888
889  - Added a forward-DNS lookup for the daemon's hosts allow/deny config. Can be
890    disabled via `forward lookup` parameter (defaults to enabled).
891
892  - Added a way for more than one group to be specified in the daemon's config
893    file, including a way to specify that you want all of the specified user's
894    groups without having to name them. Also changed the daemon to complain
895    about an inability to set explicitly-specified uid/gid values, even when not
896    run by a super-user.
897
898  - The daemon now tries to send the user the error messages from the pre-xfer
899    exec script when it fails.
900
901  - Improved the use of alt-dest options into an existing hierarchy of files: If
902    a match is found in an alt-dir, it takes precedence over an existing file.
903    (We'll need to wait for a future version before attribute-changes on
904    otherwise unchanged files are safe when using an existing hierarchy.)
905
906  - Added per-user authorization options and group-authorization support to the
907    daemon's `auth users` parameter.
908
909  - Added a way to reference environment variables in a daemon's config file
910    (using %VAR% references).
911
912  - When replacing a non-dir with a symlink/hard-link/device/special-file, the
913    update should now be done in an atomic manner.
914
915  - Avoid re-sending xattr info for hard-linked files w/the same xattrs
916    (protocol 31).
917
918  - The backup code was improved to use better logic maintaining the backup
919    directory hierarchy. Also, when a file is being backed up, rsync tries to
920    hard-link it into place so that the upcoming replacement of the destination
921    file will be atomic (for the normal, non-inplace logic).
922
923  - Added the ability to synchronize nano-second modified times.
924
925  - Added a few more default suffixes for the `dont compress` settings.
926
927  - Added the checking of the `RSYNC_PROTECT_ARGS` environment variable to allow
928    the default for the `--protect-args` command-line option to be overridden.
929
930  - Added the `--preallocate` command-line option.
931
932  - Allow `--password-file=-` to read the password from stdin (filename `-`).
933
934  - Rsync now comes packaged with an rsync-ssl helper script that can be used to
935    contact a remote rsync daemon using a piped-stunnel command.  It also
936    includes an stunnel config file to run the server side to support ssl daemon
937    connections. See the packaging/lsb/rsync.spec file for one way to package
938    the resulting files. (Suggestions for how to make this even easier to
939    install & use are welcomed.)
940
941  - Improved the speed of some `--inplace` updates when there are lots of
942    identical checksum blocks that end up being unusable.
943
944  - Added the `--outbuf=N|L|B` option for choosing the output buffering.
945
946  - Repeating the `--fuzzy` option now causes the code to look for fuzzy matches
947    inside alt-dest directories too.
948
949  - The `--chmod` option now supports numeric modes, e.g. `--chmod=644,D755`
950
951  - Added some Solaris xattr code.
952
953  - Made an rsync daemon (the listening process) exit with a 0 status when it
954    was signaled to die. This helps launchd.
955
956  - Improved the `RSYNC_*` environment variables for the pre-xfer exec script:
957    when a daemon is sent multiple request args, they are now joined into a
958    single return value (separated by spaces) so that the `RSYNC_REQUEST`
959    environment variable is accurate for any `pre-xfer exec`. The values in
960    `RSYNC_ARG#` vars are no longer truncated at the `.` arg (prior to the
961    request dirs/files), so that all the requested values are also listed
962    (separately) in `RSYNC_ARG#` variables.
963
964 ### EXTRAS:
965
966  - Added an `instant-rsyncd` script to the support directory, which makes it
967    easy to configure a simple rsync daemon in the current directory.
968
969  - Added the `mapfrom` and `mapto` scripts to the support directory, which
970    makes it easier to do user/group mapping in a local transfer based on
971    passwd/group files from another machine.
972
973  - There's a new, improved version of the lsh script in the support dir: it's
974    written in perl and supports `-u` without resorting to using sudo (when run
975    as root). The old shell version is now named lsh.sh.
976
977  - There is a helper script named rsync-slash-strip in the support directory
978    for anyone that wants to change the way rsync handles args with trailing
979    slashes. (e.g. arg/ would get stripped to arg while arg/. would turn into
980    arg/).
981
982 ### INTERNAL:
983
984  - The I/O code was rewritten to be simpler and do bigger buffered reads over
985    the socket. The I/O between the receiver and the generator was changed to be
986    standard multiplexed-I/O (like that over the socket).
987
988  - The sender tries to use any dead time while the generator is looking for
989    files to transfer in order to do sender-side directory scanning in a more
990    parallel manner.
991
992  - A daemon can now inform a client about a daemon-configured timeout value so
993    that the client can assist in the keep-alive activity (protocol 31).
994
995  - The filter code received some refactoring to make it more extendable, to
996    read better, and do better sanity checking.
997
998  - Really big numbers are now output using our own big-num routine rather than
999    casting them to a double and using a %.0f conversion.
1000
1001  - The `pool_alloc` library has received some minor improvements in alignment
1002    handling.
1003
1004  - Added `init_stat_x()` function to avoid duplication of acl/xattr init code.
1005
1006  - The included zlib was upgraded from 1.2.3 to 1.2.8.
1007
1008  - Rsync can now be compiled to use an unmodified zlib library instead of the
1009    tweaked one that is included with rsync. This will eventually become the
1010    default, at which point we'll start the countdown to removing the included
1011    zlib. Until then, feel free to configure using:
1012
1013    ./configure `--with-included-zlib=no`
1014
1015 ### DEVELOPER RELATED:
1016
1017  - Added more conditional debug output.
1018
1019  - Fixed some build issues for Android and Minix.
1020
1021 ------------------------------------------------------------------------------
1022 <a name="3.0.9"></a>
1023
1024 # NEWS for rsync 3.0.9 (23 Sep 2011)
1025
1026 ## Changes in this version:
1027
1028 ### BUG FIXES:
1029
1030  - Fix a crash bug in checksum scanning when `--inplace` is used.
1031
1032  - Fix a hang if a hard-linked file cannot be opened by the sender (e.g.  if it
1033    has no read permission).
1034
1035  - Fix preservation of a symlink's system xattrs (e.g. selinux) on Linux.
1036
1037  - Fix a memory leak in the xattr code.
1038
1039  - Fixed a bug with `--delete-excluded` when a filter merge file has a rule
1040    that specifies a receiver-only side restriction.
1041
1042  - Fix a bug with the modifying of unwritable directories.
1043
1044  - Fix `--fake-super`'s interaction with `--link-dest` same-file comparisons.
1045
1046  - Fix the updating of the `curr_dir` buffer to avoid a duplicate slash.
1047
1048  - Fix the directory permissions on an implied dot-dir when using `--relative`
1049    (e.g. /outside/path/././send/path).
1050
1051  - Fixed some too-long sleeping instances when using `--bwlimit`.
1052
1053  - Fixed when symlink ownership difference-checking gets compiled into
1054    `unchanged_attrs()`.
1055
1056  - Improved the socket-error reporting when multiple protocols fail.
1057
1058  - Fixed a case where a socket error could reference just-freed memory.
1059
1060  - Failing to use a password file that was specified on the command-line is now
1061    a fatal error.
1062
1063  - Fix the non-root updating of directories that don't have the read and/or
1064    execute permission.
1065
1066  - Make daemon-excluded file errors more error-like.
1067
1068  - Fix a compilation issue on older C compilers (due to a misplaced var
1069    declaration).
1070
1071  - Make configure avoid finding socketpair on Cygwin.
1072
1073  - Avoid trying to reference `SO_BROADCAST` if the OS doesn't support it.
1074
1075  - Fix some issues with the post-processing of the man pages.
1076
1077  - Fixed the user home-dir handling in the support/lsh script.
1078
1079  - Some minor manpage improvements.
1080
1081 ------------------------------------------------------------------------------
1082 <a name="3.0.8"></a>
1083
1084 # NEWS for rsync 3.0.8 (26 Mar 2011)
1085
1086 ## Changes in this version:
1087
1088 ### BUG FIXES:
1089
1090  - Fixed two buffer-overflow issues: one where a directory path that is exactly
1091    MAXPATHLEN was not handled correctly, and one handling a `--backup-dir` that
1092    is extra extra large.
1093
1094  - Fixed a data-corruption issue when preserving hard-links without preserving
1095    file ownership, and doing deletions either before or during the transfer
1096    (CVE-2011-1097). This fixes some assert errors in the hard-linking code, and
1097    some potential failed checksums (via `-c`) that should have matched.
1098
1099  - Fixed a potential crash when an rsync daemon has a filter/exclude list and
1100    the transfer is using ACLs or xattrs.
1101
1102  - Fixed a hang if a really large file is being processed by an rsync that
1103    can't handle 64-bit numbers. Rsync will now complain about the file being
1104    too big and skip it.
1105
1106  - For devices and special files, we now avoid gathering useless ACL and/or
1107    xattr information for files that aren't being copied. (The un-copied files
1108    are still put into the file list, but there's no need to gather data that is
1109    not going to be used.) This ensures that if the user uses `--no-D`, that
1110    rsync can't possibly complain about being unable to gather extended
1111    information from special files that are in the file list (but not in the
1112    transfer).
1113
1114  - Properly handle requesting remote filenames that start with a dash. This
1115    avoids a potential error where a filename could be interpreted as a (usually
1116    invalid) option.
1117
1118  - Fixed a bug in the comparing of upper-case letters in file suffixes for
1119    `--skip-compress`.
1120
1121  - If an rsync daemon has a module configured without a path setting, rsync
1122    will now disallow access to that module.
1123
1124  - If the destination arg is an empty string, it will be treated as a reference
1125    to the current directory (as 2.x used to do).
1126
1127  - If rsync was compiled with a newer time-setting function (such as lutimes),
1128    rsync will fall-back to an older function (such as utimes) on a system where
1129    the newer function is not around. This helps to make the rsync binary more
1130    portable in mixed-OS-release situations.
1131
1132  - Fixed a batch-file writing bug that would not write out the full set of
1133    compatibility flags that the transfer was using. This fixes a potential
1134    protocol problem for a batch file that contains a sender-side I/O error: it
1135    would have been sent in a way that the batch-reader wasn't expecting.
1136
1137  - Some improvements to the hard-linking code to ensure that device-number
1138    hashing is working right, and to supply more information if the hard-link
1139    code fails.
1140
1141  - The `--inplace` code was improved to not search for an impossible checksum
1142    position. The quadruple-verbose chunk[N] message will now mention when an
1143    inplace chunk was handled by a seek rather than a read+write.
1144
1145  - Improved ACL mask handling, e.g. for Solaris.
1146
1147  - Fixed a bug that prevented `--numeric-ids` from disabling the translation of
1148    user/group IDs for ACLs.
1149
1150  - Fixed an issue where an xattr and/or ACL transfer that used an alt-dest
1151    option (e.g. `--link-dest`) could output an error trying to itemize the
1152    changes against the alt-dest directory's xattr/ACL info but was instead
1153    trying to access the not-yet-existing new destination directory.
1154
1155  - Improved xattr system-error messages to mention the full path to the file.
1156
1157  - The `--link-dest` checking for identical symlinks now avoids considering
1158    attribute differences that cannot be changed on the receiver.
1159
1160  - Avoid trying to read/write xattrs on certain file types for certain OSes.
1161    Improved configure to set `NO_SYMLINK_XATTRS`, `NO_DEVICE_XATTRS`, and/or
1162    `NO_SPECIAL_XATTRS` defines in config.h.
1163
1164  - Improved the unsafe-symlink errors messages.
1165
1166  - Fixed a bug setting xattrs on new files that aren't user writable.
1167
1168  - Avoid re-setting xattrs on a hard-linked file w/the same xattrs.
1169
1170  - Fixed a bug with `--fake-super` when copying files and dirs that aren't user
1171    writable.
1172
1173  - Fixed a bug where a sparse file could have its last sparse block turned into
1174    a real block when rsync sets the file size (requires ftruncate).
1175
1176  - If a temp-file name is too long, rsync now avoids truncating the name in the
1177    middle of adjacent high-bit characters. This prevents a potential filename
1178    error if the filesystem doesn't allow a name to contain an invalid
1179    multi-byte sequence.
1180
1181  - If a muli-protocol socket connection fails (i.e., when contacting a daemon),
1182    we now report all the failures, not just the last one. This avoids losing a
1183    relevant error (e.g. an IPv4 connection-refused error) that happened before
1184    the final error (e.g. an IPv6 protocol-not-supported error).
1185
1186  - Generate a transfer error if we try to call chown with a `-1` for a uid or a
1187    gid (which is not settable).
1188
1189  - Fixed the working of `--force` when used with `--one-file-system`.
1190
1191  - Fix the popt arg parsing so that an option that doesn't take an arg will
1192    reject an attempt to supply one (can configure `--with-included-popt` if
1193    your system's popt library doesn't yet have this fix).
1194
1195  - A couple minor option tweaks to the support/rrsync script, and also some
1196    regex changes that make vim highlighting happier.
1197
1198  - Fixed some issues in the support/mnt-excl script.
1199
1200  - Various manpage improvements.
1201
1202 ### ENHANCEMENTS:
1203
1204  - Added `.hg/` to the default cvs excludes (see `-C` & `--cvs-exclude`).
1205
1206 ### DEVELOPER RELATED:
1207
1208  - Use lchmod() whenever it is available (not just on symlinks).
1209
1210  - A couple fixes to the `socketpair_tcp()` routine.
1211
1212  - Updated the helper scripts in the packaging subdirectory.
1213
1214  - Renamed configure.in to configure.ac.
1215
1216  - Fixed configure's checking for iconv routines for newer OS X versions.
1217
1218  - Fixed the testsuite/xattrs.test script on OS X.
1219
1220 ------------------------------------------------------------------------------
1221 <a name="3.0.7"></a>
1222
1223 # NEWS for rsync 3.0.7 (31 Dec 2009)
1224
1225 ## Changes in this version:
1226
1227 ### BUG FIXES:
1228
1229  - Fixed a bogus free when using `--xattrs` with `--backup`.
1230
1231  - Avoid an error when `--dry-run` was trying to stat a prior hard-link file
1232    that hasn't really been created.
1233
1234  - Fixed a problem with `--compress` (`-z`) where the receiving side could
1235    return the error "inflate (token) returned -5".
1236
1237  - Fixed a bug where `--delete-during` could delete in a directory before it
1238    noticed that the sending side sent an I/O error for that directory (both
1239    sides of the transfer must be at least 3.0.7).
1240
1241  - Improved `--skip-compress`'s error handling of bad character-sets and got
1242    rid of a lingering debug fprintf().
1243
1244  - Fixed the daemon's conveyance of `io_error` value from the sender.
1245
1246  - An rsync daemon use seteuid() (when available) if it used setuid().
1247
1248  - Get the permissions right on a `--fake-super` transferred directory that
1249    needs more owner permissions to emulate root behavior.
1250
1251  - An absolute-path filter rule (i.e. with a '/' modifier) no longer loses its
1252    modifier when sending the filter rules to the remote rsync.
1253
1254  - Improved the "--delete does not work without -r or -d" message.
1255
1256  - Improved rsync's handling of `--timeout` to avoid a weird timeout case where
1257    the sender could timeout even though it has recently written data to the
1258    socket (but hasn't read data recently, due to the writing).
1259
1260  - Some misc manpage improvements.
1261
1262  - Fixed the chmod-temp-dir testsuite on a system without /var/tmp.
1263
1264  - Make sure that a timeout specified in the daemon's config is used as a
1265    maximum timeout value when the user also specifies a timeout.
1266
1267  - Improved the error-exit reporting when rsync gets an error trying to cleanup
1268    after an error: the initial error is reported.
1269
1270  - Improved configure's detection of IPv6 for Solaris and Cygwin.
1271
1272  - The AIX sysacls routines will now return ENOSYS if ENOTSUP is missing.
1273
1274  - Made our (only used if missing) getaddrinfo() routine use `inet_pton()`
1275    (which we also provide) instead of `inet_aton()`.
1276
1277  - The exit-related debug messages now mention the program's role so it is
1278    clear who output what message.
1279
1280 ### DEVELOPER RELATED:
1281
1282  - Got rid of type-punned compiler warnings output by newer gcc versions.
1283
1284  - The Makefile now ensures that proto.h will be rebuilt if config.h changes.
1285
1286  - The testsuite no longer uses `id -u`, so it works better on Solaris.
1287
1288 ------------------------------------------------------------------------------
1289 <a name="3.0.6"></a>
1290
1291 # NEWS for rsync 3.0.6 (8 May 2009)
1292
1293 ## Changes in this version:
1294
1295 ### BUG FIXES:
1296
1297  - Fixed a `--read-batch` hang when rsync is reading a batch file that was
1298    created from an incremental-recursion transfer.
1299
1300  - Fixed the daemon's socket code to handle the simultaneous arrival of
1301    multiple connections.
1302
1303  - Fix `--safe-links`/`--copy-unsafe-links` to properly handle symlinks that
1304    have consecutive slashes in the value.
1305
1306  - Fixed the parsing of an `[IPv6_LITERAL_ADDR]` when a USER@ is prefixed.
1307
1308  - The sender now skips a (bogus) symlink that has a 0-length value, which
1309    avoids a transfer error in the receiver.
1310
1311  - Fixed a case where the sender could die with a tag-0 error if there was an
1312    I/O during the sending of the file list.
1313
1314  - Fixed the rrsync script to avoid a server-side problem when `-e` is at the
1315    start of the short options.
1316
1317  - Fixed a problem where a vanished directory could turn into an exit code 23
1318    instead of the proper exit code 24.
1319
1320  - Fixed the `--iconv` conversion of symlinks when doing a local copy.
1321
1322  - Fixed a problem where `--one-file-system` was not stopping deletions on the
1323    receiving side when a mount-point directory did not match a directory in the
1324    transfer.
1325
1326  - Fixed the dropping of an ACL mask when no named ACL values were present.
1327
1328  - Fixed an ACL/xattr corruption issue where the `--backup` option could cause
1329    rsync to associate the wrong ACL/xattr information with received files.
1330
1331  - Fixed the use of `--xattrs` with `--only-write-batch`.
1332
1333  - Fixed the use of `--dry-run` with `--read-batch`.
1334
1335  - Fixed configure's erroneous use of target.
1336
1337  - Fixed configure's `--disable-debug` option.
1338
1339  - Fixed a run-time issue for systems that can't find `iconv_open()` by adding
1340    the `--disable-iconv-open` configure option.
1341
1342  - Complain and die if the user tries to combine `--remove-source-files` (or
1343    the deprecated `--remove-sent-files`) with `--read-batch`.
1344
1345  - Fixed an failure transferring special files from Solaris to Linux.
1346
1347 ------------------------------------------------------------------------------
1348 <a name="3.0.5"></a>
1349
1350 # NEWS for rsync 3.0.5 (28 Dec 2008)
1351
1352 ## Changes in this version:
1353
1354 ### BUG FIXES:
1355
1356  - Initialize xattr data in a couple spots in the hlink code, which avoids a
1357    crash when the xattr pointer's memory happens to start out non-zero.  Also
1358    fixed the itemizing of an alt-dest file's xattrs when hard-linking.
1359
1360  - Don't send a bogus `-` option to an older server if there were no short
1361    options specified.
1362
1363  - Fixed skipping of unneeded updates in a batch file when incremental
1364    recursion is active. Added a test for this. Made batch-mode handle `redo`
1365    files properly (and without hanging).
1366
1367  - Fix the %P logfile escape when the daemon logs from inside a chroot.
1368
1369  - Fixed the use of `-s` (`--protect-args`) when used with a remote source or
1370    destination that had an empty path (e.g. `host:`). Also fixed a problem when
1371    `-s` was used when accessing a daemon via a remote-shell.
1372
1373  - Fixed the use of a dot-dir path (e.g. foo/./bar) inside a `--files-from`
1374    file when the root of the transfer isn't the current directory.
1375
1376  - Fixed a bug with `-K --delete` removing symlinks to directories when
1377    incremental recursion is active.
1378
1379  - Fixed a hard to trigger hang when using `--remove-source-files`.
1380
1381  - Got rid of an annoying delay when accessing a daemon via a remote-shell.
1382
1383  - Properly ignore (superfluous) source args on a `--read-batch` command.
1384
1385  - Improved the manpage's description of the `*` wildcard to remove the
1386    confusing `non-empty` qualifier.
1387
1388  - Fixed reverse lookups in the compatibility-library version of getnameinfo().
1389
1390  - Fixed a bug when using `--sparse` on a sparse file that has over 2GB of
1391    consecutive sparse data.
1392
1393  - Avoid a hang when using at least 3 `--verbose` options on a transfer with a
1394    client sender (which includes local copying).
1395
1396  - Fixed a problem with `--delete-delay` reporting an error when it was ready
1397    to remove a directory that was now gone.
1398
1399  - Got rid of a bunch of `warn_unused_result` compiler warnings.
1400
1401  - If an ftruncate() on a received file fails, it now causes a partial-
1402    transfer warning.
1403
1404  - Allow a path with a leading `//` to be preserved (CYGWIN only).
1405
1406 ### ENHANCEMENTS:
1407
1408  - Made the support/atomic-rsync script able to perform a fully atomic update
1409    of the copied hierarchy when the destination is setup using a particular
1410    symlink idiom.
1411
1412 ------------------------------------------------------------------------------
1413 <a name="3.0.4"></a>
1414
1415 # NEWS for rsync 3.0.4 (6 Sep 2008)
1416
1417 ## Changes in this version:
1418
1419 ### BUG FIXES:
1420
1421  - Fixed a bug in the hard-linking code where it would sometimes try to
1422    allocate 0 bytes of memory (which fails on some OSes, such as AIX).
1423
1424  - Fixed the hard-linking of files from a device that has a device number of 0
1425    (which seems to be a common device number on NetBSD).
1426
1427  - Fixed the handling of a `--partial-dir` that cannot be created. This
1428    particularly impacts the `--delay-updates` option (since the files cannot be
1429    delayed without a partial-dir), and was potentially destructive if the
1430    `--remove-source-files` was also specified.
1431
1432  - Fixed a couple issues in the `--fake-super` handling of xattrs when the
1433    destination files have root-level attributes (e.g. selinux values) that a
1434    non-root copy can't affect.
1435
1436  - Improved the keep-alive check in the generator to fire consistently in
1437    incremental-recursion mode when `--timeout` is enabled.
1438
1439  - The `--iconv` option now converts the content of a symlink too, instead of
1440    leaving it in the wrong character-set (requires 3.0.4 on both sides of the
1441    transfer).
1442
1443  - When using `--iconv`, if a filename fails to convert on the receiving side,
1444    this no longer makes deletions in the root-dir of the transfer fail silently
1445    (the user now gets a warning about deletions being disabled due to IO error
1446    as long as `--ignore-errors` was not specified).
1447
1448  - When using `--iconv`, if a server-side receiver can't convert a filename,
1449    the error message sent back to the client no longer mangles the name with
1450    the wrong charset conversion.
1451
1452  - Fixed a potential alignment issue in the IRIX ACL code when allocating the
1453    initial `struct acl` object. Also, cast mallocs to avoid warnings.
1454
1455  - Changed some errors that were going to stdout to go to stderr.
1456
1457  - Made `human_num()` and `human_dnum()` able to output a negative number
1458    (rather than outputting a cryptic string of punctuation).
1459
1460 ### ENHANCEMENTS:
1461
1462  - Rsync will avoid sending an `-e` option to the server if an older protocol
1463    is requested (and thus the option would not be useful). This lets the user
1464    specify the `--protocol=29` option to access an overly-restrictive server
1465    that is rejecting the protocol-30 use of `-e` to the server.
1466
1467  - Improved the message output for an `RERR_PARTIAL` exit.
1468
1469 ### DEVELOPER RELATED:
1470
1471  - The Makefile will not halt for just a timestamp change on the Makefile or
1472    the configure files, only for actual changes in content.
1473
1474  - Changed some commands in the testsuite's xattrs.test that called `rsync`
1475    instead of `$RSYNC`.
1476
1477  - Enhanced the release scripts to be able to handle a branch release and to do
1478    even more consistency checks on the files.
1479
1480 ------------------------------------------------------------------------------
1481 <a name="3.0.3"></a>
1482
1483 # NEWS for rsync 3.0.3 (29 Jun 2008)
1484
1485 ## Changes in this version:
1486
1487 ### BUG FIXES:
1488
1489  - Fixed a wildcard matching problem in the daemon when a module has `use
1490    chroot` enabled.
1491
1492  - Fixed a crash bug in the hard-link code.
1493
1494  - Fixed the sending of xattr directory information when the code finds a
1495    `--link-dest` or `--copy-dest` directory with unchanged xattrs -- the
1496    destination directory now gets these unchanged xattrs properly applied.
1497
1498  - Fixed an xattr-sending glitch that could cause an `Internal abbrev` error.
1499
1500  - Fixed the combination of `--xattrs` and `--backup`.
1501
1502  - The generator no longer allows a '.' dir to be excluded by a daemon-exclude
1503    rule.
1504
1505  - Fixed deletion handling when copying a single, empty directory (with no
1506    files) to a differently named, non-existent directory.
1507
1508  - Fixed the conversion of spaces into dashes in the %M log escape.
1509
1510  - Fixed several places in the code that were not returning the right errno
1511    when a function failed.
1512
1513  - Fixed the backing up of a device or special file into a backup dir.
1514
1515  - Moved the setting of the socket options prior to the connect().
1516
1517  - If rsync exits in the middle of a `--progress` output, it now outputs a
1518    newline to help prevent the progress line from being overwritten.
1519
1520  - Fixed a problem with how a destination path with a trailing slash or a
1521    trailing dot-dir was compared against the daemon excludes.
1522
1523  - Fixed the sending of large (size > 16GB) files when talking to an older
1524    rsync (protocols < 30): we now use a compatible block size limit.
1525
1526  - If a file's length is so huge that we overflow a checksum buffer count (i.e.
1527    several hundred TB), warn the user and avoid sending an invalid checksum
1528    struct over the wire.
1529
1530  - If a source arg is excluded, `--relative` no longer adds the excluded arg's
1531    implied dirs to the transfer. This fix also made the exclude check happen in
1532    the better place in the sending code.
1533
1534  - Use the `overflow_exit()` function for overflows, not `out_of_memory()`.
1535
1536  - Improved the code to better handle a system that has only 32-bit file
1537    offsets.
1538
1539 ### ENHANCEMENTS:
1540
1541  - The rsyncd.conf manpage now consistently refers to the parameters in the
1542    daemon config file as `parameters`.
1543
1544  - The description of the `--inplace` option was improved.
1545
1546 ### EXTRAS:
1547
1548  - Added a new script in the support directory, deny-rsync, which allows an
1549    admin to (temporarily) replace the rsync command with a script that sends an
1550    error message to the remote client via the rsync protocol.
1551
1552 ### DEVELOPER RELATED:
1553
1554  - Fixed a testcase failure if the tests are run as root and made some
1555    compatibility improvements.
1556
1557  - Improved the daemon tests, including checking module comments, the listing
1558    of files, and the ensuring that daemon excludes can't affect a dot-dir arg.
1559
1560  - Improved some build rules for those that build in a separate directory from
1561    the source, including better install rules for the man pages, and the fixing
1562    of a proto.h-tstamp rule that could make the binaries get rebuild without
1563    cause.
1564
1565  - Improved the testsuite to work around a problem with some utilities (e.g. cp
1566    -p & touch -r) rounding sub-second timestamps.
1567
1568  - Ensure that the early patches don't cause any generated-file hunks to
1569    bleed-over into patches that follow.
1570
1571 ------------------------------------------------------------------------------
1572 <a name="3.0.2"></a>
1573
1574 # NEWS for rsync 3.0.2 (8 Apr 2008)
1575
1576 ## Changes in this version:
1577
1578 ### BUG FIXES:
1579
1580  - Fixed a potential buffer overflow in the xattr code.
1581
1582 ### ENHANCEMENTS:
1583
1584  - None.
1585
1586 ### DEVELOPER RELATED:
1587
1588  - The RPM spec file was improved to install more useful files.
1589
1590  - A few developer-oriented scripts were moved from the support dir to the
1591    packaging dir.
1592
1593 ------------------------------------------------------------------------------
1594 <a name="3.0.1"></a>
1595
1596 # NEWS for rsync 3.0.1 (3 Apr 2008)
1597
1598 ## Changes in this version:
1599
1600 ### NOTABLE CHANGES IN BEHAVIOR:
1601
1602  - Added the 'c'-flag to the itemizing of non-regular files so that the
1603    itemized output doesn't get hidden if there were no attribute changes, and
1604    also so that the itemizing of a `--copy-links` run will distinguish between
1605    copying an identical non-regular file and the creation of a revised version
1606    with a new value (e.g. a changed symlink referent, a new device number,
1607    etc.).
1608
1609 ### BUG FIXES:
1610
1611  - Fixed a crash bug when a single-use rsync daemon (via remote shell) was run
1612    without specifying a `--config=FILE` option.
1613
1614  - Fixed a crash when backing up a directory that has a default ACL.
1615
1616  - Fixed a bug in the handling of xattr values that could cause rsync to not
1617    think that a file's extended attributes are up-to-date.
1618
1619  - Fixed the working of `--fake-super` with `--link-dest` and `--xattrs`.
1620
1621  - Fixed a hang when combining `--dry-run` with `--remove-source-files`.
1622
1623  - Fixed a bug with `--iconv`'s handling of files that cannot be converted: a
1624    failed name can no longer cause a transfer failure.
1625
1626  - Fixed the building of the rounding.h file on systems that need custom
1627    CPPFLAGS to be used. Also improved the error reporting if the building of
1628    rounding.h fails.
1629
1630  - Fixed the use of the `--protect-args` (`-s`) option when talking to a
1631    daemon.
1632
1633  - Fixed the `--ignore-existing` option's protection of files on the receiver
1634    that are non-regular files on the sender (e.g. if a symlink or a dir on the
1635    sender is trying to replace a file on the receiver). The reverse protection
1636    (protecting a dir/symlink/device from being replaced by a file) was already
1637    working.
1638
1639  - Fixed an assert failure if `--hard-links` is combined with an option that
1640    can skip a file in a set of hard-linked files (i.e. `--ignore-existing`,
1641    `--append`, etc.), without skipping all the files in the set.
1642
1643  - Avoid setting the modify time on a directory that already has the right
1644    modify time set. This avoids tweaking the dir's ctime.
1645
1646  - Improved the daemon-exclude handling to do a better job of applying the
1647    exclude rules to path entries. It also sends the user an error just as if
1648    the files were actually missing (instead of silently ignoring the user's
1649    args), and avoids sending the user the filter-action messages for these
1650    non-user-initiated rules.
1651
1652  - Fixed some glitches with the dry-run code's missing-directory handling,
1653    including a problem when combined with `--fuzzy`.
1654
1655  - Fixed some glitches with the skipped-directory handling.
1656
1657  - Fixed the 'T'-flag itemizing of symlinks when `--time` isn't preserved.
1658
1659  - Fixed a glitch in the itemizing of permissions with the `-E` option.
1660
1661  - The `--append` option's restricting of transfers to those that add data no
1662    longer prevents the updating of non-content changes to otherwise up-to-date
1663    files (i.e. those with the same content but differing permissions,
1664    ownership, xattrs, etc.).
1665
1666  - Don't allow `--fake-super` to be specified with `-XX` (double `--xattrs`)
1667    because the options conflict. If a daemon has `fake super` enabled, it
1668    automatically downgrades a `-XX` request to `-X`.
1669
1670  - Fixed a couple bugs in the parsing of daemon-config excludes that could make
1671    a floating exclude rule get treated as matching an absolute path.
1672
1673  - A daemon doesn't try to auto-refuse the `iconv` option if iconv-support
1674    wasn't compiled in to the daemon (avoiding a warning in the logs).
1675
1676  - Fixed the inclusion of per-dir merge files from implied dirs.
1677
1678  - Fixed the support/rrsync script to work with the latest options that rsync
1679    sends (including its flag-specifying use of `-e` to the server).
1680
1681 ### ENHANCEMENTS:
1682
1683  - Added the `--old-dirs` (`--old-d`) option to make it easier for a user to
1684    ask for file-listings with older rsync versions (this is easier than having
1685    to type `-r --exclude='/*/*'` manually).
1686
1687  - When getting an error while asking an older rsync daemon for a file listing,
1688    rsync will try to notice if the error is a rejection of the `--dirs` (`-d`)
1689    option and let the user know how to work around the issue.
1690
1691  - Added a few more `--no-OPTION` overrides.
1692
1693  - Improved the documentation of the `--append` option.
1694
1695  - Improved the documentation of the filter/exclude/include daemon parameters.
1696
1697 ### INTERNAL:
1698
1699  - Fixed a couple minor bugs in the included popt library (ones which I sent to
1700    the official popt project for inclusion in the 1.14 release).
1701
1702  - Fixed a stat() call that should have been `do_stat()` so that the proper
1703    normal/64-bit stat() function gets called. (Was in an area that should not
1704    have caused problems, though.)
1705
1706  - Changed the file-glob code to do a directory scan without using the `glob`
1707    and `glob.h`. This lets us do the globbing with less memory churn, and also
1708    avoid adding daemon-excluded items to the returned args.
1709
1710 ### DEVELOPER RELATED:
1711
1712  - The configure script tries to get the user's compiler to not warn about
1713    unused function parameters if the build is not including one or more of the
1714    ACL/xattrs/iconv features.
1715
1716  - The configure script now has better checks for figuring out if the included
1717    popt code should be used or not.
1718
1719  - Fixed two testsuite glitches: avoid a failure if someone's `cd` command
1720    outputs the current directory when cd-ing to a relative path, and made the
1721    itemized test query how rsync was built to determine if it should expect
1722    hard-linked symlinks or not.
1723
1724  - Updated the testsuite to verify that various bug fixes remain fixed.
1725
1726  - The RPM spec file was updated to have: (1) comments for how to use the
1727    rsync-patch tar file, and (2) an /etc/xinetd.d/rsync file.
1728
1729  - Updated the build scripts to work with a revised FTP directory structure.
1730
1731 ------------------------------------------------------------------------------
1732 <a name="3.0.0"></a>
1733
1734 # NEWS for rsync 3.0.0 (1 Mar 2008)
1735
1736 ## Changes in this version:
1737
1738 ### PROTOCOL NUMBER:
1739
1740  - The protocol number was changed to 30.
1741
1742 ### NOTABLE CHANGES IN BEHAVIOR:
1743
1744  - The handling of implied directories when using `--relative` has changed to
1745    send them as directories (e.g. no implied dir is ever sent as a symlink).
1746    This avoids unexpected behavior and should not adversely affect most people.
1747    If you're one of those rare individuals who relied upon having an implied
1748    dir be duplicated as a symlink, you should specify the transfer of the
1749    symlink and the transfer of the referent directory as separate args. (See
1750    also `--keep-dirlinks` and `--no-implied-dirs`.) Also, exclude rules no
1751    longer have a partial effect on implied dirs.
1752
1753  - Requesting a remote file-listing without specifying `-r` (`--recursive`) now
1754    sends the `-d` (`--dirs`) option to the remote rsync rather than sending
1755    `-r` along with an extra exclude of `/*/*`. If the remote rsync does not
1756    understand the `-d` option (i.e. it is 2.6.3 or older), you will need to
1757    either turn off `-d` (`--no-d`), or specify `-r --exclude='/*/*'` manually.
1758
1759  - In `--dry-run` mode, the last line of the verbose summary text is output
1760    with a "(DRY RUN)" suffix to help remind you that no updates were made.
1761    Similarly, `--only-write-batch` outputs `(BATCH ONLY)`.
1762
1763  - A writable rsync daemon with `use chroot` disabled now defaults to a
1764    symlink-munging behavior designed to make symlinks safer while also allowing
1765    absolute symlinks to be stored and retrieved. This also has the effect of
1766    making symlinks unusable while they're in the daemon's hierarchy. See the
1767    daemon's `munge symlinks` parameter for details.
1768
1769  - Starting up an extra copy of an rsync daemon will not clobber the pidfile
1770    for the running daemon -- if the pidfile exists, the new daemon will exit
1771    with an error. This means that your wrapper script that starts the rsync
1772    daemon should be made to handle lock-breaking (if you want any automatic
1773    breaking of locks to be done).
1774
1775 ### BUG FIXES:
1776
1777  - A daemon with `use chroot = no` and excluded items listed in the daemon
1778    config file now properly checks an absolute-path arg specified for these
1779    options: `--compare-dest`, `--link-dest`, `--copy-dest`, `--partial-dir`,
1780    `--backup-dir`, `--temp-dir`, and `--files-from`.
1781
1782  - A daemon can now be told to disable all user- and group-name translation on
1783    a per-module basis. This avoids a potential problem with a writable daemon
1784    module that has `use chroot` enabled -- if precautions weren't taken, a user
1785    could try to add a missing library and get rsync to use it. This makes rsync
1786    safer by default, and more configurable when id-translation is not desired.
1787    See the daemon's `numeric ids` parameter for full details.
1788
1789  - A chroot daemon can now indicate which part of its path should affect the
1790    chroot call, and which part should become an inside-chroot path for the
1791    module. This allows you to have outside-the-transfer paths (such as for
1792    libraries) even when you enable chroot protection. The idiom used in the
1793    rsyncd.conf file is: `path = /chroot/dirs/./dirs/inside`
1794
1795  - If a file's data arrived successfully on the receiving side but the rename
1796    of the temporary file to the destination file failed AND the
1797    `--remove-source-files` (or the deprecated `--remove-sent-files`) option was
1798    specified, rsync no longer erroneously removes the associated source file.
1799
1800  - Fixed the output of `-ii` when combined with one of the `--*-dest` options:
1801    it now itemizes all the items, not just the changed ones.
1802
1803  - Made the output of all file types consistent when using a `--*-dest` option.
1804    Prior versions would output too many creation events for matching items.
1805
1806  - The code that waits for a child pid now handles being interrupted by a
1807    signal. This fixes a problem with the pre-xfer exec function not being able
1808    to get the exit status from the script.
1809
1810  - A negated filter rule (i.e. with a '!' modifier) no longer loses the
1811    negation when sending the filter rules to the remote rsync.
1812
1813  - Fixed a problem with the `--out-format` (aka `--log-format`) option %f: it
1814    no longer outputs superfluous directory info for a non-daemon rsync.
1815
1816  - Fixed a problem with `-vv` (double `--verbose`) and `--stats` when `pushing`
1817    files (which includes local copies). Version 2.6.9 would complete the copy,
1818    but exit with an error when the receiver output its memory stats.
1819
1820  - If `--password-file` is used on a non-daemon transfer, rsync now complains
1821    and exits. This should help users figure out that they can't use this option
1822    to control a remote shell's password prompt.
1823
1824  - Make sure that directory permissions of a newly-created destination
1825    directory are handled right when `--perms` is left off.
1826
1827  - The itemized output of a newly-created destination directory is now output
1828    as a creation event, not a change event.
1829
1830  - Improved `--hard-link` so that more corner cases are handled correctly when
1831    combined with options such as `--link-dest` and/or `--ignore-existing`.
1832
1833  - The `--append` option no longer updates a file that has the same size.
1834
1835  - Fixed a bug when combining `--backup` and `--backup-dir` with `--inplace`:
1836    any missing backup directories are now created.
1837
1838  - Fixed a bug when using `--backup` and `--inplace` with `--whole-file` or
1839    `--read-batch`: backup files are actually created now.
1840
1841  - The daemon pidfile is checked and created sooner in the startup sequence.
1842
1843  - If a daemon module's `path` value is not an absolute pathname, the code now
1844    makes it absolute internally (making it work properly).
1845
1846  - Ensure that a temporary file always has owner-write permission while we are
1847    writing to it. This avoids problems with some network filesystems when
1848    transferring read-only files.
1849
1850  - Any errors output about password-file reading no longer cause an error at
1851    the end of the run about a partial transfer.
1852
1853  - The `--read-batch` option for protocol 30 now ensures that several more
1854    options are set correctly for the current batch file: `--iconv`, `--acls`,
1855    `--xattrs`, `--inplace`, `--append`, and `--append-verify`.
1856
1857  - Using `--only-write-batch` to a daemon receiver now works properly (older
1858    versions would update some files while writing the batch).
1859
1860  - Avoid outputting a "file has vanished" message when the file is a broken
1861    symlink and `--copy-unsafe-links` or `--copy-dirlinks` is used (the code
1862    already handled this for `--copy-links`).
1863
1864  - Fixed the combination of `--only-write-batch` and `--dry-run`.
1865
1866  - Fixed rsync's ability to remove files that are not writable by the file's
1867    owner when rsync is running as the same user.
1868
1869  - When transferring large files, the sender's hashtable of checksums is kept
1870    at a more reasonable state of fullness (no more than 80% full) so that the
1871    scanning of the hashtable will not bog down as the number of blocks
1872    increases.
1873
1874 ### ENHANCEMENTS:
1875
1876  - A new incremental-recursion algorithm is now used when rsync is talking to
1877    another 3.x version. This starts the transfer going more quickly (before all
1878    the files have been found), and requires much less memory.  See the
1879    `--recursive` option in the manpage for some restrictions.
1880
1881  - Lowered memory use in the non-incremental-recursion algorithm for typical
1882    option values (usually saving from 21-29 bytes per file).
1883
1884  - The default `--delete` algorithm is now `--delete-during` when talking to a
1885    3.x rsync. This is a faster scan than using `--delete-before` (which is the
1886    default when talking to older rsync versions), and is compatible with the
1887    new incremental recursion mode.
1888
1889  - Rsync now allows multiple remote-source args to be specified rather than
1890    having to rely on a special space-splitting side-effect of the remote-
1891    shell. Additional remote args must specify the same host or an empty one
1892    (e.g. empty: `:file1` or `::module/file2`). For example, this means that
1893    local use of brace expansion now works: `rsync -av host:dir/{f1,f2} .`
1894
1895  - Added the `--protect-args` (`-s`) option, that tells rsync to send most of
1896    the command-line args at the start of the transfer rather than as args to
1897    the remote-shell command. This protects them from space-splitting, and only
1898    interprets basic wildcard special shell characters (`*?[`).
1899
1900  - Added the `--delete-delay` option, which is a more efficient way to delete
1901    files at the end of the transfer without needing a separate delete pass.
1902
1903  - Added the `--acls` (`-A`) option to preserve Access Control Lists. This is
1904    an improved version of the prior patch that was available, and it even
1905    supports OS X ACLs. If you need to have backward compatibility with old,
1906    ACL-patched versions of rsync, apply the acls.diff file from the patches
1907    dir.
1908
1909  - Added the `--xattrs` (`-X`) option to preserve extended attributes. This is
1910    an improved version of the prior patch that was available, and it even
1911    supports OS X xattrs (which includes their resource fork data). If you need
1912    to have backward compatibility with old, xattr-patched versions of rsync,
1913    apply the xattrs.diff file from the patches dir.
1914
1915  - Added the `--fake-super` option that allows a non-super user to preserve all
1916    attributes of a file by using a special extended-attribute idiom.  It even
1917    supports the storing of foreign ACL data on your backup server.  There is
1918    also an analogous `fake super` parameter for an rsync daemon.
1919
1920  - Added the `--iconv` option, which allows rsync to convert filenames from one
1921    character-set to another during the transfer. The default is to make this
1922    feature available as long as your system has `iconv_open()`.  If compilation
1923    fails, specify `--disable-iconv` to configure, and then rebuild. If you want
1924    rsync to perform character-set conversions by default, you can specify
1925    `--enable-iconv=CONVERT_STRING` with the default value for the `--iconv`
1926    option that you wish to use. For example, `--enable-iconv=.` is a good
1927    choice. See the rsync manpage for an explanation of the `--iconv` option's
1928    settings.
1929
1930  - A new daemon config parameter, `charset`, lets you control the character-
1931    set that is used during an `--iconv` transfer to/from a daemon module. You
1932    can also set your daemon to refuse `no-iconv` if you want to force the
1933    client to use an `--iconv` transfer (requiring an rsync 3.x client).
1934
1935  - Added the `--skip-compress=LIST` option to override the default list of file
1936    suffixes that will not be compressed when using `--compress` (`-z`).
1937
1938  - The daemon's default for `dont compress` was extended to include: `*.7z`
1939    `*.mp[34]` `*.mov` `*.avi` `*.ogg` `*.jpg` `*.jpeg` and the name-matching routine was also
1940    optimized to run more quickly.
1941
1942  - The `--max-delete` option now outputs a warning if it skipped any file
1943    deletions, including a count of how many deletions were skipped. (Older
1944    versions just silently stopped deleting things.)
1945
1946  - You may specify `--max-delete=0` to a 3.0.0 client to request that it warn
1947    about extraneous files without deleting anything. If you're not sure what
1948    version the client is, you can use the less-obvious `--max-delete=-1`, as
1949    both old and new versions will treat that as the same request (though older
1950    versions don't warn).
1951
1952  - The `--hard-link` option now uses less memory on both the sending and
1953    receiving side for all protocol versions. For protocol 30, the use of a
1954    hashtable on the sending side allows us to more efficiently convey to the
1955    receiver what files are linked together. This reduces the amount of data
1956    sent over the socket by a considerable margin (rather than adding more
1957    data), and limits the in-memory storage of the device+inode information to
1958    just the sending side for the new protocol 30, or to the receiving side when
1959    speaking an older protocol (note that older rsync versions kept the
1960    device+inode information on both sides).
1961
1962  - The filter rules now support a perishable (`p`) modifier that marks rules
1963    that should not have an effect in a directory that is being deleted. e.g.
1964    `-f '-p .svn/'` would only affect `live` .svn directories.
1965
1966  - Rsync checks all the alternate-destination args for validity (e.g.
1967    `--link-dest`). This lets the user know when they specified a directory that
1968    does not exist.
1969
1970  - If we get an ENOSYS error setting the time on a symlink, we don't complain
1971    about it anymore (for those systems that even support the setting of the
1972    modify-time on a symlink).
1973
1974  - Protocol 30 now uses MD5 checksums instead of MD4.
1975
1976  - Changed the `--append` option to not checksum the existing data in the
1977    destination file, which speeds up file appending.
1978
1979  - Added the `--append-verify` option, which works like the older `--append`
1980    option (verifying the existing data in the destination file). For
1981    compatibility with older rsync versions, any use of `--append` that is
1982    talking protocol 29 or older will revert to the `--append-verify` method.
1983
1984  - Added the `--contimeout=SECONDS` option that lets the user specify a
1985    connection timeout for rsync daemon access.
1986
1987  - Documented and extended the support for the `RSYNC_CONNECT_PROG` variable
1988    that can be used to enhance the client side of a daemon connection.
1989
1990  - Improved the dashes and double-quotes in the nroff manpage output.
1991
1992  - Rsync now supports a lot more `--no-OPTION` override options.
1993
1994 ### INTERNAL:
1995
1996  - The file-list sorting algorithm now uses a sort that keeps any same-named
1997    items in the same order as they were specified. This allows rsync to always
1998    ensure that the first of the duplicates is the one that will be included in
1999    the copy. The new sort is also faster than the glibc version of qsort() and
2000    mergesort().
2001
2002  - Rsync now supports the transfer of 64-bit timestamps (`time_t` values).
2003
2004  - Made the file-deletion code use a little less stack when recursing through a
2005    directory hierarchy of extraneous files.
2006
2007  - Fixed a build problem with older (2.x) versions of gcc.
2008
2009  - Added some isType() functions that make dealing with signed characters
2010    easier without forcing variables via casts.
2011
2012  - Changed strcat/strcpy/sprintf function calls to use safer versions.
2013
2014  - Upgraded the included popt version to 1.10.2 and improved its use of
2015    string-handling functions.
2016
2017  - Added missing prototypes for compatibility functions from the lib dir.
2018
2019  - Configure determines if iconv() has a const arg, allowing us to avoid a
2020    compiler warning.
2021
2022  - Made the sending of some numbers more efficient for protocol 30.
2023
2024  - Make sure that a daemon process doesn't mind if the client was weird and
2025    omitted the `--server` option.
2026
2027  - There are more internal logging categories available in protocol 30 than the
2028    age-old FINFO and FERROR, including `FERROR_XFER` and FWARN. These new
2029    categories allow some errors and warnings to go to stderr without causing an
2030    erroneous end-of-run warning about some files not being able to be
2031    transferred.
2032
2033  - Improved the use of `const` on pointers.
2034
2035  - Improved J.W.'s `pool_alloc` routines to add a way of incrementally freeing
2036    older sections of a pool's memory.
2037
2038  - The getaddrinfo.c compatibility code in the `lib` dir was replaced with some
2039    new code (derived from samba, derived from PostgreSQL) that has a better
2040    license than the old code.
2041
2042 ### DEVELOPER RELATED:
2043
2044  - Rsync is now licensed under the GPLv3 or later.
2045
2046  - Rsync is now being maintained in a `git` repository instead of CVS (though
2047    the old CVS repository still exists for historical access).  Several
2048    maintenance scripts were updated to work with git.
2049
2050  - Generated files are no longer committed into the source repository. The
2051    autoconf and autoheader commands are now automatically run during the normal
2052    use of `configure` and `make`. The latest dev versions of all generated
2053    files can also be copied from the samba.org web site (see the prepare-source
2054    script's fetch option).
2055
2056  - The `patches` directory of diff files is now built from branches in the
2057    rsync git repository (branch patch/FOO creates file patches/FOO.diff).  This
2058    directory is now distributed in a separate separate tar file named
2059    rsync-patches-VERSION.tar.gz instead of the main rsync-VERSION.tar.gz.
2060
2061  - The proto.h file is now built using a simple perl script rather than a
2062    complex awk script, which proved to be more widely compatible.
2063
2064  - When running the tests, we now put our per-test temp dirs into a sub-
2065    directory named testtmp (which is created, if missing). This allows someone
2066    to symlink the testtmp directory to another filesystem (which is useful if
2067    the build dir's filesystem does not support ACLs and xattrs, but another
2068    filesystem does).
2069
2070  - Rsync now has a way of handling protocol-version changes during the
2071    development of a new protocol version. This causes any out-of-sync versions
2072    to speak an older protocol rather than fail in a cryptic manner.  This
2073    addition makes it safer to deploy a pre-release version that may interact
2074    with the public. This new exchange of sub-version info does not interfere
2075    with the `{MIN,MAX}_PROTOCOL_VERSION` checking algorithm (which does not
2076    have enough range to allow the main protocol number to be incremented for
2077    every minor tweak in that happens during development).
2078
2079  - The csprotocol.txt file was updated to mention the daemon protocol change in
2080    the 3.0.0 release.
2081
2082 ------------------------------------------------------------------------------
2083 <a name="2.6.9"></a>
2084
2085 # NEWS for rsync 2.6.9 (6 Nov 2006)
2086
2087 ## Changes in this version:
2088
2089 ### BUG FIXES:
2090
2091  - If rsync is interrupted via a handled signal (such as SIGINT), it will once
2092    again clean-up its temp file from the destination dir.
2093
2094  - Fixed an overzealous sanitizing bug in the handling of the `--link-dest`,
2095    `--copy-dest`, and `--compare-dest` options to a daemon without chroot: if
2096    the copy's destination dir is deeper than the top of the module's path,
2097    these options now accept a safe number of parent-dir (../) references (since
2098    these options are relative to the destination dir). The old code incorrectly
2099    chopped off all `../` prefixes for these options, no matter how deep the
2100    destination directory was in the module's hierarchy.
2101
2102  - Fixed a bug where a deferred info/error/log message could get sent directly
2103    to the sender instead of being handled by rwrite() in the generator. This
2104    fixes an `unexpected tag 3` fatal error, and should also fix a potential
2105    problem where a deferred info/error message from the receiver might bypass
2106    the log file and get sent only to the client process. (These problems could
2107    only affect an rsync daemon that was receiving files.)
2108
2109  - Fixed a bug when `--inplace` was combined with a `--*-dest` option and we
2110    update a file's data using an alternate basis file. The code now notices
2111    that it needs to copy the matching data from the basis file instead of
2112    (wrongly) assuming that it was already present in the file.
2113
2114  - Fixed a bug where using `--dry-run` with a `--*-dest` option with a path
2115    relative to a directory that does not yet exist: the affected option gets
2116    its proper path value so that the output of the dry-run is right.
2117
2118  - Fixed a bug in the %f logfile escape when receiving files: the destination
2119    path is now included in the output (e.g. you can now tell when a user
2120    specifies a subdir inside a module).
2121
2122  - If the receiving side fails to create a directory, it will now skip trying
2123    to update everything that is inside that directory.
2124
2125  - If `--link-dest` is specified with `--checksum` but without `--times`, rsync
2126    will now allow a hard-link to be created to a matching link-dest file even
2127    when the file's modify-time doesn't match the server's file.
2128
2129  - The daemon now calls more timezone-using functions prior to doing a chroot.
2130    This should help some C libraries to generate proper timestamps from inside
2131    a chrooted daemon (and to not try to access /etc/timezone over and over
2132    again).
2133
2134  - Fixed a bug in the handling of an absolute `--partial-dir=ABS_PATH` option:
2135    it now deletes an alternate basis file from the partial-dir that was used to
2136    successfully update a destination file.
2137
2138  - Fixed a bug in the handling of `--delete-excluded` when using a per-dir
2139    merge file: the merge file is now honored on the receiving side, and only
2140    its unqualified include/exclude commands are ignored (just as is done for
2141    global include/excludes).
2142
2143  - Fixed a recent bug where `--delete` was not working when transferring from
2144    the root (/) of the filesystem with `--relative` enabled.
2145
2146  - Fixed a recent bug where an `--exclude='*'` could affect the root (/) of the
2147    filesystem with `--relative` enabled.
2148
2149  - When `--inplace` creates a file, it is now created with owner read/write
2150    permissions (0600) instead of no permissions at all. This avoids a problem
2151    continuing a transfer that was interrupted (since `--inplace` will not
2152    update a file that has no write permissions).
2153
2154  - If either `--remove-source-files` or `--remove-sent-files` is enabled and we
2155    are unable to remove the source file, rsync now outputs an error.
2156
2157  - Fixed a bug in the daemon's `incoming chmod` rule: newly-created directories
2158    no longer get the 'F' (file) rules applied to them.
2159
2160  - Fixed an infinite loop bug when a filter rule was rejected due to being
2161    overly long.
2162
2163  - When the server receives a `--partial-dir` option from the client, it no
2164    longer runs the client-side code that adds an assumed filter rule (since the
2165    client will be sending us the rules in the usual manner, and they may have
2166    chosen to override the auto-added rule).
2167
2168 ### ENHANCEMENTS:
2169
2170  - Added the `--log-file=FILE` and `--log-file-format=FORMAT` options. These
2171    can be used to tell any rsync to output what it is doing to a log file.
2172    They work with a client rsync, a non-daemon server rsync (see the man page
2173    for instructions), and also allows the overriding of rsyncd.conf settings
2174    when starting a daemon.
2175
2176  - The `--log-format` option was renamed to be `--out-format` to avoid
2177    confusing it with affecting the log-file output. (The old option remains as
2178    an alias for the new to preserve backward compatibility.)
2179
2180  - Made `log file` and `syslog facility` settable on a per-module basis in the
2181    daemon's config file.
2182
2183  - Added the `--remove-source-files` option as a replacement for the (now
2184    deprecated) `--remove-sent-files` option. This new option removes all
2185    non-dirs from the source directories, even if the file was already
2186    up-to-date. This fixes a problem where interrupting an rsync that was using
2187    `--remove-sent-files` and restarting it could leave behind a file that the
2188    earlier rsync synchronized, but didn't get to remove.  (The deprecated
2189    `--remove-sent-files` is still understood for now, and still behaves in the
2190    same way as before.)
2191
2192  - Added the option `--no-motd` to suppress the message-of-the-day output from
2193    a daemon when doing a copy. (See the manpage for a caveat.)
2194
2195  - Added a new environment variable to the pre-/post-xfer exec commands (in the
2196    daemon's config file): `RSYNC_PID`. This value will be the same in both the
2197    pre- and post-xfer commands, so it can be used as a unique ID if the
2198    pre-xfer command wants to cache some arg/request info for the post-xfer
2199    command.
2200
2201 ### INTERNAL:
2202
2203  - Did a code audit using IBM's code-checker program and made several changes,
2204    including: replacing most of the strcpy() and sprintf() calls with
2205    strlcpy(), snprintf(), and memcpy(), adding a 0-value to an enum that had
2206    been intermingling a literal 0 with the defined enum values, silencing some
2207    uninitialized memory checks, marking some functions with a `noreturn`
2208    attribute, and changing an `if` that could never succeed on some platforms
2209    into a pre-processor directive that conditionally compiles the code.
2210
2211  - Fixed a potential bug in `f_name_cmp()` when both the args are a top-level
2212    `.` dir (which doesn't happen in normal operations).
2213
2214  - Changed `exit_cleanup()` so that it can never return instead of exit.  The
2215    old code might return if it found the `exit_cleanup()` function was being
2216    called recursively. The new code is segmented so that any recursive calls
2217    move on to the next step of the exit-processing.
2218
2219  - The macro WIFEXITED(stat) will now be defined if the OS didn't already
2220    define it.
2221
2222 ### DEVELOPER RELATED:
2223
2224  - The acls.diff and xattrs.diff patches have received a bunch of work to make
2225    them much closer to being acceptable in the main distribution.  The xattrs
2226    patch also has some preliminary Mac OS X and FreeBSD compatibility code that
2227    various system types to exchange extended file-attributes.
2228
2229  - A new diff in the patches dir, fake-root.diff, allows rsync to maintain a
2230    backup hierarchy with full owner, group, and device info without actually
2231    running as root. It does this using a special extended attribute, so it
2232    depends on xattrs.diff (which depends on acls.diff).
2233
2234  - The rsync.yo and rsyncd.conf.yo files have been updated to work better with
2235    the latest yodl 2.x releases.
2236
2237  - Updated config.guess and config.sub to their 2006-07-02 versions.
2238
2239  - Updated various files to include the latest FSF address and to have
2240    consistent opening comments.
2241
2242 ------------------------------------------------------------------------------
2243 <a name="2.6.8"></a>
2244
2245 # NEWS for rsync 2.6.8 (22 Apr 2006)
2246
2247 ## Changes in this version:
2248
2249 ### BUG FIXES:
2250
2251  - Fixed a bug in the exclude code where an anchored exclude without any
2252    wildcards fails to match an absolute source arg, but only when `--relative`
2253    is in effect.
2254
2255  - Improved the I/O code for the generator to fix a potential hang when the
2256    receiver gets an EOF on the socket but the generator's select() call never
2257    indicates that the socket is writable for it to be notified about the EOF.
2258    (This can happen when using stunnel).
2259
2260  - Fixed a problem with the file-reading code where a failed read (such as that
2261    caused by a bad sector) would not advance the file's read-position beyond
2262    the failed read's data.
2263
2264  - Fixed a logging bug where the `log file` directive was not being honored in
2265    a single-use daemon (one spawned by a remote-shell connection or by init).
2266
2267  - If rsync cannot honor the `--delete` option, we output an error and exit
2268    instead of silently ignoring the option.
2269
2270  - Fixed a bug in the `--link-dest` code that prevented special files (such as
2271    fifos) from being linked.
2272
2273  - The ability to hard-link symlinks and special files is now determined at
2274    configure time instead of at runtime. This fixes a bug with `--link-dest`
2275    creating a hard-link to a symlink's referent on a BSD system.
2276
2277 ### ENHANCEMENTS:
2278
2279  - In daemon mode, if rsync fails to bind to the requested port, the error(s)
2280    returned by socket() and/or bind() are now logged.
2281
2282  - When we output a fatal error, we now output the version of rsync in the
2283    message.
2284
2285  - Improved the documentation for the `--owner` and `--group` options.
2286
2287  - The rsyncstats script in `support` has an improved line-parsing regex that
2288    is easier to read and also makes it to parse syslog-generated lines.
2289
2290  - A new script in `support`: file-attr-restore, can be used to restore the
2291    attributes of a file-set (the permissions, ownership, and group info) taken
2292    from the cached output of a `find ARG... -ls` command.
2293
2294 ### DEVELOPER RELATED:
2295
2296  - Removed the unused function `write_int_named()`, the unused variable
2297    `io_read_phase`, and the rarely used variable `io_write_phase`. This also
2298    elides the confusing 'phase "unknown"' part of one error message.
2299
2300  - Removed two unused configure checks and two related (also unused)
2301    compatibility functions.
2302
2303  - The xattrs.diff patch received a security fix that prevents a potential
2304    buffer overflow in the `receive_xattr()` code.
2305
2306  - The acls.diff patch has been improved quite a bit, with more to come.
2307
2308  - A new patch was added: log-file.diff. This contains an early version of a
2309    future option, `--log-file=FILE`, that will allow any rsync to log its
2310    actions to a file (something that only a daemon supports at present).
2311
2312 ------------------------------------------------------------------------------
2313 <a name="2.6.7"></a>
2314
2315 # NEWS for rsync 2.6.7 (11 Mar 2006)
2316
2317 ## Changes in this version:
2318
2319 ### OUTPUT CHANGES:
2320
2321  - The letter 'D' in the itemized output was being used for both devices
2322    (character or block) as well as other special files (such as fifos and named
2323    sockets). This has changed to separate non-device special files under the
2324    'S' designation (e.g. `cS+++++++ path/fifo`). See also the `--specials`
2325    option, below.
2326
2327  - The way rsync escapes unreadable characters has changed. First, rsync now
2328    has support for recognizing valid multibyte character sequences in your
2329    current locale, allowing it to escape fewer characters than before for a
2330    locale such as UTF-8. Second, it now uses an escape idiom of `\#123`, which
2331    is the literal string `\#` followed by exactly 3 octal digits. Rsync no
2332    longer doubles a backslash character in a filename (e.g. it used to output
2333    `foo\\bar` when copying `foo\bar`) -- now it only escapes a backslash that
2334    is followed by a hash-sign and 3 digits (0-9) (e.g. it will output
2335    `foo\#134#789` when copying `foo\#789`). See also the `--8-bit-output`
2336    (`-8`) option, mentioned below.
2337
2338    Script writers: the local rsync is the one that outputs escaped names, so if
2339    you need to support unescaping of filenames for older rsyncs, I'd suggest
2340    that you parse the output of `rsync --version` and only use the old
2341    unescaping rules for 2.6.5 and 2.6.6.
2342
2343 ### BUG FIXES:
2344
2345  - Fixed a really old bug that caused `--checksum` (`-c`) to checksum all the
2346    files encountered during the delete scan (ouch).
2347
2348  - Fixed a potential hang in a remote generator: when the receiver gets a
2349    read-error on the socket, it now signals the generator about this so that
2350    the generator does not try to send any of the terminating error messages to
2351    the client (avoiding a potential hang in some setups).
2352
2353  - Made hard-links work with symlinks and devices again.
2354
2355  - If the sender gets an early EOF reading a source file, we propagate this
2356    error to the receiver so that it can discard the file and try requesting it
2357    again (which is the existing behavior for other kinds of read errors).
2358
2359  - If a device-file/special-file changes permissions, rsync now updates the
2360    permissions without recreating the file.
2361
2362  - If the user specifies a remote-host for both the source and destination, we
2363    now output a syntax error rather than trying to open the destination
2364    hostspec as a filename.
2365
2366  - When `--inplace` creates a new destination file, rsync now creates it with
2367    permissions 0600 instead of 0000 -- this makes restarting possible when the
2368    transfer gets interrupted in the middle of sending a new file.
2369
2370  - Reject the combination of `--inplace` and `--sparse` since the sparse-output
2371    algorithm doesn't work when overwriting existing data.
2372
2373  - Fixed the directory name in the error that is output when `pop_dir()` fails.
2374
2375  - Really fixed the parsing of a `!` entry in .cvsignore files this time.
2376
2377  - If the generator gets a stat() error on a file, output it (this used to
2378    require at least `-vv` for the error to be seen).
2379
2380  - If waitpid() fails or the child rsync didn't exit cleanly, we now handle the
2381    exit status properly and generate a better error.
2382
2383  - Fixed some glitches in the double-verbose output when using `--copy-dest`,
2384    `--link-dest`, or `--compare-dest`. Also improved how the verbose output
2385    handles hard-links (within the transfer) that had an up-to-date alternate
2386    `dest` file, and copied files (via `--copy-dest`).
2387
2388  - Fixed the matching of the dont-compress items (e.g. `*.gz`) against files
2389    that have a path component containing a slash.
2390
2391  - If the code reading a filter/exclude file gets an EINTR error, rsync now
2392    clears the error flag on the file handle so it can keep on reading.
2393
2394  - If `--relative` is active, the sending side cleans up trailing `/` or `/.`
2395    suffixes to avoid triggering a bug in older rsync versions. Also, we now
2396    reject a `..` dir if it would be sent as a relative dir.
2397
2398  - If a non-directory is in the way of a directory and rsync is run with
2399    `--dry-run` and `--delete`, rsync no longer complains about not being able
2400    to opendir() the not-yet present directory.
2401
2402  - When `--list-only` is used and a non-existent local destination dir was also
2403    specified as a destination, rsync no longer generates a warning about being
2404    unable to create the missing directory.
2405
2406  - Fixed some problems with `--relative --no-implied-dirs` when the destination
2407    directory did not yet exist: we can now create a symlink or device when it
2408    is the first thing in the missing dir, and `--fuzzy` no longer complains
2409    about being unable to open the missing dir.
2410
2411  - Fixed a bug where the `--copy-links` option would not affect implied
2412    directories without `--copy-unsafe-links` (see `--relative`).
2413
2414  - Got rid of the need for `--force` to be used in some circumstances with
2415    `--delete-after` (making it consistent with
2416    `--delete-before`/`--delete-during`).
2417
2418  - Rsync now ignores the SIGXFSZ signal, just in case your OS sends this when a
2419    file is too large (rsync handles the write error).
2420
2421  - Fixed a bug in the Proxy-Authorization header's base64-encoded value: it was
2422    not properly padded with trailing '=' chars. This only affects a user that
2423    need to use a password-authenticated proxy for an outgoing daemon-rsync
2424    connection.
2425
2426  - If we're transferring an empty directory to a new name, rsync no longer
2427    forces `S_IWUSR` if it wasn't already set, nor does it accidentally leave it
2428    set.
2429
2430  - Fixed a bug in the debug output (`-vvvvv`) that could mention the wrong
2431    checksum for the current file offset.
2432
2433  - Rsync no longer allows a single directory to be copied over a non-directory
2434    destination arg.
2435
2436 ### ENHANCEMENTS:
2437
2438  - Added the `--append` option that makes rsync append data onto files that are
2439    longer on the source than the destination (this includes new files).
2440
2441  - Added the `--min-size=SIZE` option to exclude small files from the transfer.
2442
2443  - Added the `--compress-level` option to allow you to set how aggressive
2444    rsync's compression should be (this option implies `--compress`).
2445
2446  - Enhanced the parsing of the SIZE value for `--min-size` and `--max-size` to
2447    allow easy entry of multiples of 1000 (instead of just multiples of 1024)
2448    and off-by-one values too (e.g. `--max-size=8mb-1`).
2449
2450  - Added the `--8-bit-output` (`-8`) option, which tells rsync to avoid
2451    escaping high-bit characters that it thinks are unreadable in the current
2452    locale.
2453
2454  - The new option `--human-readable` (`-h`) changes the output of `--progress`,
2455    `--stats`, and the end-of-run summary to be easier to read. If repeated, the
2456    units become powers of 1024 instead of powers of 1000. (The old meaning of
2457    `-h`, as a shorthand for `--help`, still works as long as you just use it on
2458    its own, as in `rsync -h`.)
2459
2460  - If lutimes() and/or lchmod() are around, use them to allow the preservation
2461    of attributes on symlinks.
2462
2463  - The `--link-dest` option now affects symlinks and devices (when possible).
2464
2465  - Added two config items to the rsyncd.conf parsing: `pre-xfer exec` and
2466    `post-xfer exec`. These allow a command to be specified on a per-module
2467    basis that will be run before and/or after a daemon-mode transfer. (See the
2468    man page for a list of the environment variables that are set with
2469    information about the transfer.)
2470
2471  - When using the `--relative` option, you can now insert a dot dir in the
2472    source path to indicate where the replication of the source dirs should
2473    start. For example, if you specify a source path of
2474    rsync://host/module/foo/bar/./baz/dir with `-R`, rsync will now only
2475    replicate the `baz/dir` part of the source path (note: a trailing dot dir is
2476    unaffected unless it also has a trailing slash).
2477
2478  - Added some new `--no-FOO` options that make it easier to override unwanted
2479    implied or default options. For example, `-a --no-o` (aka `--archive
2480    --no-owner`) can be used to turn off the preservation of file ownership that
2481    is implied by `-a`.
2482
2483  - Added the `--chmod=MODE` option that allows the destination permissions to
2484    be changed from the source permissions. E.g. `--chmod=g+w,o-rwx`
2485
2486  - Added the `incoming chmod` and `outgoing chmod` daemon options that allow a
2487    module to specify what permissions changes should be applied to all files
2488    copied to and from the daemon.
2489
2490  - Allow the `--temp-dir` option to be specified when starting a daemon, which
2491    sets the default temporary directory for incoming files.
2492
2493  - If `--delete` is combined with `--dirs` without `--recursive`, rsync will
2494    now delete in any directory whose content is being synchronized.
2495
2496  - If `--backup` is combined with `--delete` without `--backup-dir` (and
2497    without `--delete-excluded`), we add a `protect` filter-rule to ensure that
2498    files with the backup suffix are not deleted.
2499
2500  - The file-count stats that are output by `--progress` were improved to better
2501    indicate what the numbers mean. For instance, the output: `(xfer#5,
2502    to-check=8383/9999)` indicates that this was the fifth file to be
2503    transferred, and we still need to check 8383 more files out of a total of
2504    9999.
2505
2506  - The include/exclude code now allows a `dir/***` directive (with 3 trailing
2507    stars) to match both the dir itself as well as all the content below the dir
2508    (`dir/**` would not match the dir).
2509
2510  - Added the `--prune-empty-dirs` (`-m`) option that makes the receiving rsync
2511    discard empty chains of directories from the file-list. This makes it easier
2512    to selectively copy files from a source hierarchy and end up with just the
2513    directories needed to hold the resulting files.
2514
2515  - If the `--itemize-changes` (`-i`) option is repeated, rsync now includes
2516    unchanged files in the itemized output (similar to `-vv`, but without all
2517    the other verbose messages that can get in the way). Of course, the client
2518    must be version 2.6.7 for this to work, but the remote rsync only needs to
2519    be 2.6.7 if you're pushing files.
2520
2521  - Added the `--specials` option to tell rsync to copy non-device special files
2522    (which rsync now attempts even as a normal user). The `--devices` option now
2523    requests the copying of just devices (character and block).  The `-D` option
2524    still requests both (e.g. `--devices` and `--specials`), `-a` still implies
2525    `-D`, and non-root users still get a silent downgrade that omits device
2526    copying.
2527
2528  - Added the `--super` option to make the receiver always attempt super-user
2529    activities. This is useful for systems that allow things such as devices to
2530    be created or ownership to be set without being UID 0, and is also useful
2531    for someone who wants to ensure that errors will be output if the receiving
2532    rsync isn't being run as root.
2533
2534  - Added the `--sockopts` option for those few who want to customize the TCP
2535    options used to contact a daemon rsync.
2536
2537  - Added a way for the `--temp-dir` option to be combined with a partial-dir
2538    setting that lets rsync avoid non-atomic updates (for those times when
2539    `--temp-dir` is not being used because space is tight).
2540
2541  - A new support script, files-to-excludes, will transform a list of files into
2542    a set of include/exclude directives that will copy those files.
2543
2544  - A new option, `--executability` (`-E`) can be used to preserve just the
2545    execute bit on files, for those times when using the `--perms` option is not
2546    desired.
2547
2548  - The daemon now logs each connection and also each module-list request that
2549    it receives.
2550
2551  - New log-format options: %M (modtime), %U (uid), %G (gid), and %B (permission
2552    bits, e.g. `rwxr-xrwt`).
2553
2554  - The `--dry-run` option no longer forces the enabling of `--verbose`.
2555
2556  - The `--remove-sent-files` option now does a better job of incrementally
2557    removing the sent files on the sending side (older versions tended to clump
2558    up all the removals at the end).
2559
2560  - A daemon now supersedes its minimal SIGCHLD handler with the standard
2561    PID-remembering version after forking. This ensures that the generator can
2562    get the child-exit status from the receiver.
2563
2564  - Use of the `--bwlimit` option no longer interferes with the remote rsync
2565    sending error messages about invalid/refused options.
2566
2567  - Rsync no longer returns a usage error when used with one local source arg
2568    and no destination: this now implies the `--list-only` option, just like the
2569    comparable situation with a remote source arg.
2570
2571  - Added the `--copy-dirlinks` option, a more limited version of
2572    `--copy-links`.
2573
2574  - Various documentation improvements, including: a better synopsis, some
2575    improved examples, a better discussion of the presence and absence of
2576    `--perms` (including how it interacts with the new `--executability` and
2577    `--chmod` options), an extended discussion of `--temp-dir`, an improved
2578    discussion of `--partial-dir`, a better description of rsync's pattern
2579    matching characters, an improved `--no-implied-dirs` section, and the
2580    documenting of what the `--stats` option outputs.
2581
2582  - Various new and updated diffs in the patches dir, including: acls.diff,
2583    xattrs.diff, atimes.diff, detect-renamed.diff, and slp.diff.
2584
2585 ### INTERNAL:
2586
2587  - We now use sigaction() and sigprocmask() if possible, and fall back on
2588    signal() if not. Using sigprocmask() ensures that rsync enables all the
2589    signals that it needs, just in case it was started in a masked state.
2590
2591  - Some buffer sizes were expanded a bit, particularly on systems where
2592    MAXPATHLEN is overly small (e.g. Cygwin).
2593
2594  - If `io_printf()` tries to format more data than fits in the buffer, exit
2595    with an error instead of transmitting a truncated buffer.
2596
2597  - If a `va_copy` macro is defined, lib/snprintf.c will use it when defining
2598    the `VA_COPY` macro.
2599
2600  - Reduced the amount of stack memory needed for each level of directory
2601    recursion by nearly MAXPATHLEN bytes.
2602
2603  - The wildmatch function was extended to allow an array of strings to be
2604    supplied as the string to match. This allows the exclude code to do less
2605    string copying.
2606
2607  - Got rid of the `safe_fname()` function (and all the myriad calls) and
2608    replaced it with a new function in the log.c code that filters all the
2609    output going to the terminal.
2610
2611  - Unified the `f_name()` and the `f_name_to()` functions.
2612
2613  - Improved the hash-table code the sender uses to handle checksums to make it
2614    use slightly less memory and run just a little faster.
2615
2616 ### DEVELOPER RELATED:
2617
2618  - The diffs in the patches dir now require `patch -p1 <DIFF` instead of the
2619    previous `-p0`. Also, the version included in the release tar now affect
2620    generated files (e.g. configure, rsync.1, proto.h, etc.), so it is no longer
2621    necessary to run autoconf and/or yodl unless you're applying a patch that
2622    was checked out from CVS.
2623
2624  - Several diffs in the patches dir now use the proper `--enable-FOO` configure
2625    option instead of `--with-FOO` to turn on the inclusion of the newly patched
2626    feature.
2627
2628  - There is a new script, `prepare-source` than can be used to update the
2629    various generated files (proto.h, configure, etc.) even before configure has
2630    created the Makefile (this is mainly useful when patching the source with a
2631    patch that doesn't affect generated files).
2632
2633  - The testsuite now sets HOME so that it won't be affected by a file such as
2634    ~/.popt.
2635
2636 ------------------------------------------------------------------------------
2637 <a name="2.6.6"></a>
2638
2639 # NEWS for rsync 2.6.6 (28 Jul 2005)
2640
2641 ## Changes in this version:
2642
2643 ### SECURITY FIXES:
2644
2645  - The zlib code was upgraded to version 1.2.3 in order to make it more secure.
2646    While the widely-publicized security problem in zlib 1.2.2 did not affect
2647    rsync, another security problem surfaced that affects rsync's zlib 1.1.4.
2648
2649 ### BUG FIXES:
2650
2651  - The setting of `flist->high` in `clean_flist()` was wrong for an empty list.
2652    This could cause `flist_find()` to crash in certain rare circumstances (e.g.
2653    if just the right directory setup was around when `--fuzzy` was combined
2654    with `--link-dest`).
2655
2656  - The outputting of hard-linked files when verbosity was > 1 was not right:
2657    (1) Without `-i` it would output the name of each hard-linked file as though
2658    it had been changed; it now outputs a `is hard linked` message for the file.
2659    (2) With `-i` it would output all dots for the unchanged attributes of a
2660    hard-link; it now changes those dots to spaces, as is done for other totally
2661    unchanged items.
2662
2663  - When backing up a changed symlink or device, get rid of any old backup item
2664    so that we don't get an `already exists` error.
2665
2666  - A couple places that were comparing a local and a remote modification-time
2667    were not honoring the `--modify-window` option.
2668
2669  - Fixed a bug where the 'p' (permissions) itemized-changes flag might get set
2670    too often (if some non-significant mode bits differed).
2671
2672  - Fixed a really old, minor bug that could cause rsync to warn about being
2673    unable to mkdir() a path that ends in `/.` because it just created the
2674    directory (required `--relative`, `--no-implied-dirs`, a source path that
2675    ended in either a trailing slash or a trailing `/.`, and a non-existing
2676    destination dir to tickle the bug in a recent version).
2677
2678 ### ENHANCEMENTS:
2679
2680  - Made the `max verbosity` setting in the rsyncd.conf file settable on a
2681    per-module basis (which now matches the documentation).
2682
2683  - The support/rrsync script has been upgraded to verify the args of options
2684    that take args (instead of rejecting any such options). The script was also
2685    changed to try to be more secure and to fix a problem in the parsing of a
2686    pull operation that has multiple sources.
2687
2688  - Improved the documentation that explains the difference between a normal
2689    daemon transfer and a daemon-over remote-shell transfer.
2690
2691  - Some of the diffs supplied in the patches dir were fixed and/or improved.
2692
2693 ### BUILD CHANGES:
2694
2695  - Made configure define `NOBODY_USER` (currently hard-wired to `nobody`) and
2696    `NOBODY_GROUP` (set to either `nobody` or `nogroup` depending on what we
2697    find in the /etc/group file).
2698
2699  - Added a test to the test suite, itemized.test, that tests the output of `-i`
2700    (log-format w/%i) and some double-verbose messages.
2701
2702 ------------------------------------------------------------------------------
2703 <a name="2.6.5"></a>
2704
2705 # NEWS for rsync 2.6.5 (1 Jun 2005)
2706
2707 ## Changes in this version:
2708
2709 ### OUTPUT CHANGES:
2710
2711  - Non-printable chars in filenames are now output using backslash-escaped
2712    characters rather than '?'s. Any non-printable character is output using 3
2713    digits of octal (e.g. `\n` -> `\012`), and a backslash is now output as
2714    `\\`. Rsync also uses your locale setting, which can make it treat fewer
2715    high-bit characters as non-printable.
2716
2717  - If rsync received an empty file-list when pulling files, it would output a
2718    `nothing to do` message and exit with a 0 (success) exit status, even if the
2719    remote rsync returned an error (it did not do this under the same conditions
2720    when pushing files). This was changed to make the pulling behavior the same
2721    as the pushing behavior: we now do the normal end-of-run outputting
2722    (depending on options) and exit with the appropriate exit status.
2723
2724 ### BUG FIXES:
2725
2726  - A crash bug was fixed when a daemon had its `path` set to `/`, did not have
2727    chroot enabled, and used some anchored excludes in the rsyncd.conf file.
2728
2729  - Fixed a bug in the transfer of a single file when `-H` is specified (rsync
2730    would either infinite loop or perhaps crash).
2731
2732  - Fixed a case where the generator might try (and fail) to tweak the
2733    write-permissions of a read-only directory in list-only mode (this only
2734    caused an annoying warning message).
2735
2736  - If `--compare-dest` or `--link-dest` uses a locally-copied file as the basis
2737    for an updated version, log this better when `--verbose` or `-i` is in
2738    effect.
2739
2740  - Fixed the accidental disabling of `--backup` during the `--delete-after`
2741    processing.
2742
2743  - Restored the ability to use the `--address` option in client mode (in
2744    addition to its use in daemon mode).
2745
2746  - Make sure that some temporary progress information from the delete
2747    processing does not get left on the screen when it is followed by a newline.
2748
2749  - When `--existing` skips a directory with extra verbosity, refer to it as a
2750    `directory`, not a `file`.
2751
2752  - When transferring a single file to a different-named file, any generator
2753    messages that are source-file related no longer refer to the file by the
2754    destination filename.
2755
2756  - Fixed a bug where hard-linking a group of files might fail if the generator
2757    hasn't created a needed destination directory yet.
2758
2759  - Fixed a bug where a hard-linked group of files that is newly-linked to a
2760    file in a `--link-dest` dir doesn't link the files from the rest of the
2761    cluster.
2762
2763  - When deleting files with the `--one-file-system` (`-x`) option set, rsync no
2764    longer tries to remove files from inside a mount-point on the receiving
2765    side. Also, we don't complain about being unable to remove the mount-point
2766    dir.
2767
2768  - Fixed a compatibility problem when using `--cvs-ignore` (`-C`) and sending
2769    files to an older rsync without using `--delete`.
2770
2771  - Make sure that a `- !` or `+ !` include/exclude pattern does not trigger the
2772    list-clearing action that is reserved for `!`.
2773
2774  - Avoid a timeout in the generator when the sender/receiver aren't handling
2775    the generator's checksum output quickly enough.
2776
2777  - Fixed the omission of some directories in the delete processing when
2778    `--relative` (`-R`) was combined with a source path that had a trailing
2779    slash.
2780
2781  - Fixed a case where rsync would erroneously delete some files and then
2782    re-transfer them when the options `--relative` (`-R`) and `--recursive`
2783    (`-r`) were both enabled (along with `--delete`) and a source path had a
2784    trailing slash.
2785
2786  - Make sure that `--max-size` doesn't affect a device or a symlink.
2787
2788  - Make sure that a system with a really small MAXPATHLEN does not cause the
2789    buffers in `readfd_unbuffered()` to be too small to receive normal messages.
2790    (This mainly affected Cygwin.)
2791
2792  - If a source pathname ends with a filename of `..`, treat it as if `../` had
2793    been specified (so that we don't copy files to the parent dir of the
2794    destination).
2795
2796  - If `--delete` is combined with a file-listing rsync command (i.e. no
2797    transfer is happening), avoid outputting a warning that we couldn't delete
2798    anything.
2799
2800  - If `--stats` is specified with `--delete-after`, ensure that all the
2801    `deleting` messages are output before the statistics.
2802
2803  - Improved one `if` in the deletion code that was only checking errno for
2804    ENOTEMPTY when it should have also been checking for EEXIST (for
2805    compatibility with OS variations).
2806
2807 ### ENHANCEMENTS:
2808
2809  - Added the `--only-write-batch=FILE` option that may be used (instead of
2810    `--write-batch=FILE`) to create a batch file without doing any actual
2811    updating of the destination. This allows you to divert all the file-updating
2812    data away from a slow data link (as long as you are pushing the data to the
2813    remote server when creating the batch).
2814
2815  - When the generator is taking a long time to fill up its output buffer (e.g.
2816    if the transferred files are few, small, or missing), it now periodically
2817    flushes the output buffer so that the sender/receiver can get started on the
2818    files sooner rather than later.
2819
2820  - Improved the keep-alive code to handle a long silence between the sender and
2821    the receiver that can occur when the sender is receiving the checksum data
2822    for a large file.
2823
2824  - Improved the auth-errors that are logged by the daemon to include some
2825    information on why the authorization failed: wrong user, password mismatch,
2826    etc. (The client-visible message is unchanged!)
2827
2828  - Improved the client's handling of an `@ERROR` from a daemon so that it does
2829    not complain about an unexpectedly closed socket (since we really did expect
2830    the socket to close).
2831
2832  - If the daemon can't open the log-file specified in rsyncd.conf, fall back to
2833    using syslog and log an appropriate warning. This is better than what was
2834    typically a totally silent (and fatal) failure (since a daemon is not
2835    usually run with the `--no-detach` option that was necessary to see the
2836    error on stderr).
2837
2838  - The man pages now consistently refer to an rsync daemon as a `daemon`
2839    instead of a `server` (to distinguish it from the server process in a
2840    non-daemon transfer).
2841
2842  - Made a small change to the rrsync script (restricted rsync -- in the support
2843    dir) to make a read-only server reject all `--remove-*` options when sending
2844    files (to future-proof it against the possibility of other similar options
2845    being added at some point).
2846
2847 ### INTERNAL:
2848
2849  - Rsync now calls `setlocale(LC_CTYPE, "")`. This enables isprint() to better
2850    discern which filename characters need to be escaped in messages (which
2851    should result in fewer escaped characters in some locales).
2852
2853  - Improved the naming of the log-file open/reopen/close functions.
2854
2855  - Removed some protocol-compatibility code that was only needed to help
2856    someone running a pre-release of 2.6.4.
2857
2858 ### BUILD CHANGES:
2859
2860  - Added configure option `--disable-locale` to disable any use of setlocale()
2861    in the binary.
2862
2863  - Fixed a bug in the `SUPPORT{,_HARD}_LINKS` #defines which prevented rsync
2864    from being built without symlink or hard-link support.
2865
2866  - Only #define `HAVE_REMSH` if it is going to be set to 1.
2867
2868  - Configure now disables the use of mkstemp() under HP-UX (since they refuse
2869    to fix its broken handling of large files).
2870
2871  - Configure now explicitly checks for the lseek64() function so that the code
2872    can use `HAVE_LSEEK64` instead of inferring lseek64()'s presence based on
2873    the presence of the `off64_t` type.
2874
2875  - Configure no longer mentions the change in the default remote-shell (from
2876    rsh to ssh) that occurred for the 2.6.0 release.
2877
2878  - Some minor enhancements to the test scripts.
2879
2880  - Added a few new `*.diff` files to the patches dir, including a patch that
2881    enables the optional copying of extended attributes.
2882
2883 ------------------------------------------------------------------------------
2884 <a name="2.6.4"></a>
2885
2886 # NEWS for rsync 2.6.4 (30 March 2005)
2887
2888 ## Changes in this version:
2889
2890 ### PROTOCOL NUMBER:
2891
2892  - The protocol number was changed to 29.
2893
2894 ### OUTPUT CHANGES:
2895
2896  - When rsync deletes a directory and outputs a verbose message about it, it
2897    now appends a trailing slash to the name instead of (only sometimes)
2898    outputting a preceding "directory " string.
2899
2900  - The `--stats` output will contain file-list time-statistics if both sides
2901    are 2.6.4, or if the local side is 2.6.4 and the files are being pushed
2902    (since the stats come from the sending side).  (Requires protocol 29 for a
2903    pull.)
2904
2905  - The `%o` (operation) log-format escape now has a third value (besides `send`
2906    and `recv`): `del.` (with trailing dot to make it 4 chars).  This changes
2907    the way deletions are logged in the daemon's log file.
2908
2909  - When the `--log-format` option is combined with `--verbose`, rsync now
2910    avoids outputting the name of the file twice in most circumstances.  As long
2911    as the `--log-format` item does not refer to any post-transfer items (such
2912    as %b or %c), the `--log-format` message is output prior to the transfer, so
2913    `--verbose` is now the equivalent of a `--log-format` of '%n%L' (which
2914    outputs the name and any link info). If the log output must occur after the
2915    transfer to be complete, the only time the name is also output prior to the
2916    transfer is when `--progress` was specified (so that the name will precede
2917    the progress stats, and the full `--log-format` output will come after).
2918
2919  - Non-printable characters in filenames are replaced with a '?' to avoid
2920    corrupting the screen or generating empty lines in the output.
2921
2922 ### BUG FIXES:
2923
2924  - Restore the list-clearing behavior of `!` in a .cvsignore file (2.6.3 was
2925    only treating it as a special token in an rsync include/exclude file).
2926
2927  - The combination of `--verbose` and `--dry-run` now mentions the full list of
2928    changes that would be output without `--dry-run`.
2929
2930  - Avoid a mkdir warning when removing a directory in the destination that
2931    already exists in the `--backup-dir`.
2932
2933  - An OS that has a binary mode for its files (such as Cygwin) needed
2934    `setmode(fd, O_BINARY)` called on the temp-file we opened with mkstemp().
2935    (Fix derived from Cygwin's 2.6.3 rsync package.)
2936
2937  - Fixed a potential hang when verbosity is high, the client side is the
2938    sender, and the file-list is large.
2939
2940  - Fixed a potential protocol-corrupting bug where the generator could merge a
2941    message from the receiver into the middle of a multiplexed packet of data if
2942    only part of that data had been written out to the socket when the message
2943    from the generator arrived.
2944
2945  - We now check if the OS doesn't support using mknod() for creating FIFOs and
2946    sockets, and compile-in some compatibility code using mkfifo() and socket()
2947    when necessary.
2948
2949  - Fixed an off-by-one error in the handling of `--max-delete=N`. Also, if the
2950    `--max-delete` limit is exceeded during a run, we now output a warning about
2951    this at the end of the run and exit with a new error code (25).
2952
2953  - One place in the code wasn't checking if fork() failed.
2954
2955  - The `ignore nonreadable` daemon parameter used to erroneously affect
2956    readable symlinks that pointed to a non-existent file.
2957
2958  - If the OS does not have lchown() and a chown() of a symlink will affect the
2959    referent of a symlink (as it should), we no longer try to set the user and
2960    group of a symlink.
2961
2962  - The generator now properly runs the hard-link loop and the dir-time
2963    rewriting loop after we're sure that the redo phase is complete.
2964
2965  - When `--backup` was specified with `--partial-dir=DIR`, where DIR is a
2966    relative path, the backup code was erroneously trying to backup a file that
2967    was put into the partial-dir.
2968
2969  - If a file gets resent in a single transfer and the `--backup` option is
2970    enabled along with `--inplace`, rsync no longer performs a duplicate backup
2971    (it used to overwrite the first backup with the failed file).
2972
2973  - One call to `flush_write_file()` was not being checked for an error.
2974
2975  - The `--no-relative` option was not being sent from the client to a server
2976    sender.
2977
2978  - If an rsync daemon specified `dont compress = ...` for a file and the client
2979    tried to specify `--compress`, the libz code was not handling a compression
2980    level of 0 properly. This could cause a transfer failure if the block-size
2981    for a file was large enough (e.g. rsync might have exited with an error for
2982    large files).
2983
2984  - Fixed a bug that would sometimes surface when using `--compress` and sending
2985    a file with a block-size larger than 64K (either manually specified, or
2986    computed due to the file being really large). Prior versions of rsync would
2987    sometimes fail to decompress the data properly, and thus the transferred
2988    file would fail its verification.
2989
2990  - If a daemon can't open the specified log file (i.e. syslog is not being
2991    used), die without crashing. We also output an error about the failure on
2992    stderr (which will only be seen if `--no-detach` was specified) and exit
2993    with a new error code (6).
2994
2995  - A local transfer no longer duplicates all its include/exclude options (since
2996    the forked process already has a copy of the exclude list, there's no need
2997    to send them a set of duplicates).
2998
2999  - The output of the items that are being updated by the generator (dirs,
3000    symlinks, devices) is now intermingled in the proper order with the output
3001    from the items that the receiver is updating (regular files) when pulling.
3002    This misordering was particularly bad when `--progress` was specified.
3003    (Requires protocol 29.)
3004
3005  - When `--timeout` is specified, lulls that occur in the transfer while the
3006    generator is doing work that does not generate socket traffic (looking for
3007    changed files, deleting files, doing directory-time touch-ups, etc.) will
3008    cause a new keep-alive packet to be sent that should keep the transfer going
3009    as long as the generator continues to make progress. (Requires protocol 29.)
3010
3011  - The stat size of a device is not added to the total file size of the items
3012    in the transfer (the size might be undefined on some OSes).
3013
3014  - Fixed a problem with refused-option messages sometimes not making it back to
3015    the client side when a remote `--files-from` was in effect and the daemon
3016    was the receiver.
3017
3018  - The `--compare-dest` option was not updating a file that differed in (the
3019    preserved) attributes from the version in the compare-dest DIR.
3020
3021  - When rsync is copying files into a write-protected directory, fixed the
3022    change-report output for the directory so that we don't report an identical
3023    directory as changed.
3024
3025 ### ENHANCEMENTS:
3026
3027  - Rsync now supports popt's option aliases, which means that you can use
3028    /etc/popt and/or ~/.popt to create your own option aliases.
3029
3030  - Added the `--delete-during` (`--del`) option which will delete files from
3031    the receiving side incrementally as each directory in the transfer is being
3032    processed. This makes it more efficient than the default,
3033    before-the-transfer behavior, which is now also available as
3034    `--delete-before` (and is still the default `--delete-WHEN` option that will
3035    be chosen if `--delete` or `--delete-excluded` is specified without a
3036    `--delete-WHEN` choice). All the `--del*` options infer `--delete`, so an
3037    rsync daemon that refuses `delete` will still refuse to allow any
3038    file-deleting options (including the new `--remove-sent-files` option).
3039
3040  - All the `--delete-WHEN` options are now more memory efficient: Previously an
3041    duplicate set of file-list objects was created on the receiving side for the
3042    entire destination hierarchy. The new algorithm only creates one directory
3043    of objects at a time (for files inside the transfer).
3044
3045  - Added the `--copy-dest` option, which works like `--link-dest` except that
3046    it locally copies identical files instead of hard-linking them.
3047
3048  - Added support for specifying multiple `--compare-dest`, `--copy-dest`, or
3049    `--link-dest` options, but only of a single type. (Promoted from the patches
3050    dir and enhanced.) (Requires protocol 29.)
3051
3052  - Added the `--max-size` option. (Promoted from the patches dir.)
3053
3054  - The daemon-mode options are now separated from the normal rsync options so
3055    that they can't be mixed together. This makes it impossible to start a
3056    daemon that has improper default option values (which could cause problems
3057    when a client connects, such as hanging or crashing).
3058
3059  - The `--bwlimit` option may now be used in combination with `--daemon` to
3060    specify both a default value for the daemon side and a value that cannot be
3061    exceeded by a user-specified `--bwlimit` option.
3062
3063  - Added the `port` parameter to the rsyncd.conf file. (Promoted from the
3064    patches dir.) Also added `address`. The command-line options take precedence
3065    over a config-file option, as expected.
3066
3067  - In `_exit_cleanup()`: when we are exiting with a partially-received file, we
3068    now flush any data in the write-cache before closing the partial file.
3069
3070  - The `--inplace` support was enhanced to work with `--compare-dest`,
3071    `--link-dest`, and (the new) `--copy-dest` options. (Requires protocol 29.)
3072
3073  - Added the `--dirs` (`-d`) option for an easier way to copy directories
3074    without recursion. Any directories that are encountered are created on the
3075    destination. Specifying a directory with a trailing slash copies its
3076    immediate contents to the destination.
3077
3078  - The `--files-from` option now implies `--dirs` (`-d`).
3079
3080  - Added the `--list-only` option, which is mainly a way for the client to put
3081    the server into listing mode without needing to resort to any internal
3082    option kluges (e.g. the age-old use of `-r --exclude='/*/*'` for a
3083    non-recursive listing). This option is used automatically (behind the
3084    scenes) when a modern rsync speaks to a modern daemon, but may also be
3085    specified manually if you want to force the use of the `--list-only` option
3086    over a remote-shell connection.
3087
3088  - Added the `--omit-dir-times` (`-O`) option, which will avoid updating the
3089    modified time for directories when `--times` was specified. This option will
3090    avoid an extra pass through the file-list at the end of the transfer (to
3091    tweak all the directory times), which may provide an appreciable speedup for
3092    a really large transfer. (Promoted from the patches dir.)
3093
3094  - Added the `--filter` (`-f`) option and its helper option, `-F`. Filter rules
3095    are an extension to the existing include/exclude handling that also supports
3096    nested filter files as well as per-directory filter files (like .cvsignore,
3097    but with full filter-rule parsing).  This new option was chosen in order to
3098    ensure that all existing include/exclude processing remained 100% compatible
3099    with older versions. Protocol 29 is needed for full filter-rule support, but
3100    backward-compatible rules work with earlier protocol versions.  (Promoted
3101    from the patches dir and enhanced.)
3102
3103  - Added the `--delay-updates` option that puts all updated files into a
3104    temporary directory (by default `.~tmp~`, but settable via the
3105    `--partial-dir=DIR` option) until the end of the transfer. This makes the
3106    updates a little more atomic for a large transfer.
3107
3108  - If rsync is put into the background, any output from `--progress` is
3109    reduced.
3110
3111  - Documented the `max verbosity` setting for rsyncd.conf. (This setting was
3112    added a couple releases ago, but left undocumented.)
3113
3114  - The sender and the generator now double-check the file-list index they are
3115    given, and refuse to try to do a file transfer on a non-file index (since
3116    that would indicate that something had gone very wrong).
3117
3118  - Added the `--itemize-changes` (`-i`) option, which is a way to output a more
3119    detailed list of what files changed and in what way. The effect is the same
3120    as specifying a `--log-format` of `%i %n%L` (see both the rsync and
3121    rsyncd.conf manpages). Works with `--dry-run` too.
3122
3123  - Added the `--fuzzy` (`-y`) option, which attempts to find a basis file for a
3124    file that is being created from scratch. The current algorithm only looks in
3125    the destination directory for the created file, but it does attempt to find
3126    a match based on size/mod-time (in case the file was renamed with no other
3127    changes) as well as based on a fuzzy name-matching algorithm. This option
3128    requires protocol 29 because it needs the new file-sorting order. (Promoted
3129    from patches dir and enhanced.) (Requires protocol 29.)
3130
3131  - Added the `--remove-sent-files` option, which lets you move files between
3132    systems.
3133
3134  - The hostname in HOST:PATH or HOST::PATH may now be an IPv6 literal enclosed
3135    in '[' and ']' (e.g. `[::1]`). (We already allowed IPv6 literals in the
3136    rsync://HOST:PORT/PATH format.)
3137
3138  - When rsync recurses to build the file list, it no longer keeps open one or
3139    more directory handles from the dir's parent dirs.
3140
3141  - When building under windows, the default for `--daemon` is now to avoid
3142    detaching, requiring the new `--detach` option to force rsync to detach.
3143
3144  - The `--dry-run` option can now be combined with either `--write-batch` or
3145    `--read-batch`, allowing you to run a do-nothing test command to see what
3146    would happen without `--dry-run`.
3147
3148  - The daemon's `read only` config item now sets an internal `read_only`
3149    variable that makes extra sure that no write/delete calls on the read-only
3150    side can succeed.
3151
3152  - The log-format % escapes can now have a numeric field width in between the %
3153    and the escape letter (e.g. `%-40n %08p`).
3154
3155  - Improved the option descriptions in the `--help` text.
3156
3157 ### SUPPORT FILES:
3158
3159  - Added atomic-rsync to the support dir: a perl script that will transfer some
3160    files using rsync, and then move the updated files into place all at once at
3161    the end of the transfer. Only works when pulling, and uses `--link-dest` and
3162    a parallel hierarchy of files to effect its update.
3163
3164  - Added mnt-excl to the support dir: a perl script that takes the /proc/mounts
3165    file and translates it into a set of excludes that will exclude all mount
3166    points (even mapped mounts to the same disk). The excludes are made relative
3167    to the specified source dir and properly anchored.
3168
3169  - Added savetransfer.c to the support dir: a C program that can make a copy of
3170    all the data that flows over the wire. This lets you test for data
3171    corruption (by saving the data on both the sending side and the receiving
3172    side) and provides one way to debug a protocol error.
3173
3174  - Added rrsync to the support dir: this is an updated version of Joe Smith's
3175    restricted rsync perl script. This helps to ensure that only certain rsync
3176    commands can be run by an ssh invocation.
3177
3178 ### INTERNAL:
3179
3180  - Added better checking of the checksum-header values that come over the
3181    socket.
3182
3183  - Merged a variety of file-deleting functions into a single function so that
3184    it is easier to maintain.
3185
3186  - Improved the type of some variables (particularly blocksize vars) for
3187    consistency and proper size.
3188
3189  - Got rid of the uint64 type (which we didn't need).
3190
3191  - Use a slightly more compatible set of core #include directives.
3192
3193  - Defined int32 in a way that ensures that the build dies if we can't find a
3194    variable with at least 32 bits.
3195
3196 ### PROTOCOL DIFFERENCES FOR VERSION 29:
3197
3198  - A 16-bit flag-word is transmitted after every file-list index. This
3199    indicates what is changing between the sender and the receiver. The
3200    generator now transmits an index and a flag-word to indicate when dirs and
3201    symlinks have changed (instead of producing a message), which makes the
3202    outputting of the information more consistent and less prone to screen
3203    corruption (because the local receiver/sender is now outputting all the
3204    file-change info messages).
3205
3206  - If a file is being hard-linked, the `ITEM_XNAME_FOLLOWS` bit is enabled in
3207    the flag-word and the name of the file that was linked immediately follows
3208    in vstring format (see below).
3209
3210  - If a file is being transferred with an alternate-basis file, the
3211    `ITEM_BASIS_TYPE_FOLLOWS` bit is enabled in the flag-word and a single byte
3212    follows, indicating what type of basis file was chosen. If that indicates
3213    that a fuzzy-match was selected, the `ITEM_XNAME_FOLLOWS` bit is set in the
3214    flag-word and the name of the match in vstring format follows the basis
3215    byte. A vstring is a variable length string that has its size written prior
3216    to the string, and no terminating null.  If the string is from 1-127 bytes,
3217    the length is a single byte. If it is from 128-32767 bytes, the length is
3218    written as ((len >> 8) | 0x80) followed by (len % 0x100).
3219
3220  - The sending of exclude names is done using filter-rule syntax. This means
3221    that all names have a prefixed rule indicator, even excludes (which used to
3222    be sent as a bare pattern, when possible). The `-C` option will include the
3223    per-dir .cvsignore merge file in the list of filter rules so it is
3224    positioned correctly (unlike in some older transfer scenarios).
3225
3226  - Rsync sorts the filename list in a different way: it sorts the subdir names
3227    after the non-subdir names for each dir's contents, and it always puts a
3228    dir's contents immediately after the dir's name in the list. (Previously an
3229    item named `foo.txt` would sort in between directory `foo/` and `foo/bar`.)
3230
3231  - When talking to a protocol 29 rsync daemon, a list-only request is able to
3232    note this before the options are sent over the wire and the new
3233    `--list-only` option is included in the options.
3234
3235  - When the `--stats` bytes are sent over the wire (or stored in a batch), they
3236    now include two elapsed-time values: one for how long it took to build the
3237    file-list, and one for how long it took to send it over the wire (each
3238    expressed in thousandths of a second).
3239
3240  - When `--delete-excluded` is specified with some filter rules (AKA excludes),
3241    a client sender will now initiate a send of the rules to the receiver (older
3242    protocols used to omit the sending of excludes in this situation since there
3243    were no receiver-specific rules that survived `--delete-excluded` back
3244    then). Note that, as with all the filter-list sending, only items that are
3245    significant to the other side will actually be sent over the wire, so the
3246    filter-rule list that is sent in this scenario is often empty.
3247
3248  - An index equal to the file-list count is sent as a keep-alive packet from
3249    the generator to the sender, which then forwards it on to the receiver. This
3250    normally invalid index is only a valid keep-alive packet if the 16-bit
3251    flag-word that follows it contains a single bit (`ITEM_IS_NEW`, which is
3252    normally an illegal flag to appear alone).
3253
3254  - A protocol-29 batch file includes a bit for the setting of the `--dirs`
3255    option and for the setting of the `--compress` option. Also, the shell
3256    script created by `--write-batch` will use the `--filter` option instead of
3257    `--exclude-from` to capture any filter rules.
3258
3259 ### BUILD CHANGES:
3260
3261  - Handle an operating system that use mkdev() in place of makedev().
3262
3263  - Improved configure to better handle cross-compiling.
3264
3265 ------------------------------------------------------------------------------
3266 <a name="2.6.3"></a>
3267
3268 # NEWS for rsync 2.6.3 (30 Sep 2004)
3269
3270 ## Changes in this version:
3271
3272 ### SECURITY FIXES:
3273
3274  - A bug in the `sanitize_path` routine (which affects a non-chrooted rsync
3275    daemon) could allow a user to craft a pathname that would get transformed
3276    into an absolute path for certain options (but not for file-transfer names).
3277    If you're running an rsync daemon with chroot disabled, **please upgrade**,
3278    ESPECIALLY if the user privs you run rsync under is anything above `nobody`.
3279
3280    OUTPUT CHANGES (ATTN: those using a script to parse the verbose output):
3281
3282  - Please note that the 2-line footer (output when verbose) now uses the term
3283    `sent` instead of `wrote` and `received` instead of `read`. If you are not
3284    parsing the numeric values out of this footer, a script would be better off
3285    using the empty line prior to the footer as the indicator that the verbose
3286    output is over.
3287
3288  - The output from the `--stats` option was similarly affected to change
3289    `written` to `sent` and `read` to `received`.
3290
3291  - Rsync ensures that a filename that contains a newline gets mentioned with
3292    each newline transformed into a question mark (which prevents a filename
3293    from causing an empty line to be output).
3294
3295  - The `backed up ...` message that is output when at least 2 `--verbose`
3296    options are specified is now the same both with and without the
3297    `--backup-dir` option.
3298
3299 ### BUG FIXES:
3300
3301  - Fixed a crash bug that might appear when `--delete` was used and multiple
3302    source directories were specified.
3303
3304  - Fixed a 32-bit truncation of the file length when generating the checksums.
3305
3306  - The `--backup` code no longer attempts to create some directories over and
3307    over again (generating warnings along the way).
3308
3309  - Fixed a bug in the reading of the secrets file (by the daemon) and the
3310    password file (by the client): the files no longer need to be terminated by
3311    a newline for their content to be read in.
3312
3313  - If a file has a read error on the sending side or the reconstructed data
3314    doesn't match the expected checksum (perhaps due to the basis file changing
3315    during the transfer), the receiver will no longer retain the resulting file
3316    unless the `--partial` option was specified.  (Note: for the read-error
3317    detection to work, neither side can be older than 2.6.3 -- older receivers
3318    will always retain the file, and older senders don't tell the receiver that
3319    the file had a read error.)
3320
3321  - If a file gets resent in a single transfer and the `--backup` option is
3322    enabled, rsync no longer performs a duplicate backup (it used to overwrite
3323    the original file in the backup area).
3324
3325  - Files specified in the daemon's `exclude` or `exclude from` config items are
3326    now excluded from being uploaded (assuming that the module allows uploading
3327    at all) in addition to the old download exclusion.
3328
3329  - Got rid of a potential hang in the receiver when near the end of a phase.
3330
3331  - When using `--backup` without a `--backup-dir`, rsync no longer preserves
3332    the modify time on directories. This avoids confusing NFS.
3333
3334  - When `--copy-links` (`-L`) is specified, we now output a separate error for
3335    a symlink that has no referent instead of claiming that a file `vanished`.
3336
3337  - The `--copy-links` (`-L`) option no longer has the side-effect of telling
3338    the receiving side to follow symlinks. See the `--keep-dirlinks` option
3339    (mentioned below) for a way to specify that behavior.
3340
3341  - Error messages from the daemon server's option-parsing (such as refused
3342    options) are now successfully transferred back to the client (the server
3343    used to fail to send the message because the socket wasn't in the right
3344    state for the message to get through).
3345
3346  - Most transfer errors that occur during a daemon transfer are now returned to
3347    the user in addition to being logged (some messages are intended to be
3348    daemon-only and are not affected by this).
3349
3350  - Fixed a bug in the daemon authentication code when using one of the
3351    batch-processing options.
3352
3353  - We try to work around some buggy IPv6 implementations that fail to implement
3354    `IPV6_V6ONLY`. This should fix the `address in use` error that some daemons
3355    get when running on an OS with a buggy IPv6 implementation. Also, if the new
3356    code gets this error, we might suggest that the user specify `--ipv4` or
3357    `--ipv6` (if we think it will help).
3358
3359  - When the remote rsync dies, make a better effort to recover any error
3360    messages it may have sent before dying (the local rsync used to just die
3361    with a socket-write error).
3362
3363  - When using `--delete` and a `--backup-dir` that contains files that are
3364    hard-linked to their destination equivalents, rsync now makes sure that
3365    removed files really get removed (avoids a really weird rename() behavior).
3366
3367  - Avoid a bogus run-time complaint about a lack of 64-bit integers when the
3368    int64 type is defined as an `off_t` and it actually has 64-bits.
3369
3370  - Added a configure check for open64() without mkstemp64() so that we can
3371    avoid using mkstemp() when such a combination is encountered.  This bypasses
3372    a problem writing out large temp files on OSes such as AIX and HP-UX.
3373
3374  - Fixed an age-old crash problem with `--read-batch` on a local copy (rsync
3375    was improperly assuming `--whole-file` for the local copy).
3376
3377  - When `--dry-run` (`-n`) is used and the destination directory does not
3378    exist, rsync now produces a correct report of files that would be sent
3379    instead of dying with a chdir() error.
3380
3381  - Fixed a bug that could cause a slow-to-connect rsync daemon to die with an
3382    error instead of waiting for the connection to finish.
3383
3384  - Fixed an ssh interaction that could cause output to be lost when the user
3385    chose to combine the output of rsync's stdout and stderr (e.g.  using the
3386    `2>&1`).
3387
3388  - Fixed an option-parsing bug when `--files-from` got passed to a daemon.
3389
3390 ### ENHANCEMENTS:
3391
3392  - Added the `--partial-dir=DIR` option that lets you specify where to
3393    (temporarily) put a partially transferred file (instead of overwriting the
3394    destination file). E.g. `--partial-dir=.rsync-partial` Also added support
3395    for the `RSYNC_PARTIAL_DIR` environment variable that, when found,
3396    transforms a regular `--partial` option (such as the convenient `-P` option)
3397    into one that also specifies a directory.
3398
3399  - Added `--keep-dirlinks` (`-K`), which allows you to symlink a directory onto
3400    another partition on the receiving side and have rsync treat it as matching
3401    a normal directory from the sender.
3402
3403  - Added the `--inplace` option that tells rsync to write each destination file
3404    without using a temporary file. The matching of existing data in the
3405    destination file can be severely limited by this, but there are also cases
3406    where this is more efficient (such as appending data).  Use only when needed
3407    (see the man page for more details).
3408
3409  - Added the `write only` option for the daemon's config file.
3410
3411  - Added long-option names for `-4` and `-6` (namely `--ipv4` and `--ipv6`) and
3412    documented all these options in the man page.
3413
3414  - Improved the handling of the `--bwlimit` option so that it's less bursty,
3415    more accurate, and works properly over a larger range of values.
3416
3417  - The rsync daemon-over-ssh code now looks for `SSH_CONNECTION` and
3418    `SSH2_CLIENT` in addition to `SSH_CLIENT` to figure out the IP address.
3419
3420  - Added the `--checksum-seed=N` option for advanced users.
3421
3422  - Batch writing/reading has a brand-new implementation that is simpler, fixes
3423    a few weird problems with the old code (such as no longer sprinkling the
3424    batch files into different dirs or even onto different systems), and is much
3425    less intrusive into the code (making it easier to maintain for the future).
3426    The new code generates just one data file instead of three, which makes it
3427    possible to read the batch on stdin via a remote shell. Also, the old
3428    requirement of forcing the same fixed checksum-seed for all batch processing
3429    has been removed.
3430
3431  - If an rsync daemon has a module set with `list = no` (which hides its
3432    presence in the list of available modules), a user that fails to
3433    authenticate gets the same `unknown module` error that they would get if the
3434    module were actually unknown (while still logging the real error to the
3435    daemon's log file). This prevents fishing for module names.
3436
3437  - The daemon's `refuse options` config item now allows you to match option
3438    names using wildcards and/or the single-letter option names.
3439
3440  - Each transferred file now gets its permissions and modified-time updated
3441    before the temp-file gets moved into place. Previously, the finished file
3442    would have a very brief window where its permissions disallowed all group
3443    and world access.
3444
3445  - Added the ability to parse a literal IPv6 address in an `rsync:` URL (e.g.
3446    rsync://[2001:638:500:101::21]:873/module/dir).
3447
3448  - The daemon's wildcard expanding code can now handle more than 1000 filenames
3449    (it's now limited by memory instead of having a hard-wired limit).
3450
3451 ### INTERNAL:
3452
3453  - Some cleanup in the exclude code has saved some per-exclude memory and made
3454    the code easier to maintain.
3455
3456  - Improved the argv-overflow checking for a remote command that has a lot of
3457    args.
3458
3459  - Use rsyserr() in the various places that were still calling rprintf() with
3460    strerror() as an arg.
3461
3462  - If an rsync daemon is listening on multiple sockets (to handle both IPv4 and
3463    IPv6 to a single port), we now close all the unneeded file handles after we
3464    accept a connection (we used to close just one of them).
3465
3466  - Optimized the handling of larger block sizes (rsync used to slow to a crawl
3467    if the block size got too large).
3468
3469  - Optimized away a loop in `hash_search()`.
3470
3471  - Some improvements to the `sanitize_path()` and `clean_fname()` functions
3472    makes them more efficient and produce better results (while still being
3473    compatible with the file-name cleaning that gets done on both sides when
3474    sending the file-list).
3475
3476  - Got rid of `alloc_sanitize_path()` after adding a destination-buffer arg to
3477    `sanitize_path()` made it possible to put all the former's functionality
3478    into the latter.
3479
3480  - The file-list that is output when at least 4 verbose options are specified
3481    reports the uid value on the sender even when rsync is not running as root
3482    (since we might be sending to a root receiver).
3483
3484 ### BUILD CHANGES:
3485
3486  - Added a `gen` target to rebuild most of the generated files, including
3487    configure, config.h.in, the man pages, and proto.h.
3488
3489  - If `make proto` doesn't find some changes in the prototypes, the proto.h
3490    file is left untouched (its time-stamp used to always be updated).
3491
3492  - The variable `$STRIP` (that is optionally set by the install-strip target's
3493    rule) was changed to `$INSTALL_STRIP` because some systems have `$STRIP`
3494    already set in the environment.
3495
3496  - Fixed a build problem when `SUPPORT_HARD_LINKS` isn't defined.
3497
3498  - When cross-compiling, the gettimeofday() function is now assumed to be a
3499    modern version that takes two-args (since we can't test it).
3500
3501 ### DEVELOPER RELATED:
3502
3503  - The scripts in the testsuite dir were cleaned up a bit and a few new tests
3504    added.
3505
3506  - Some new diffs were added to the patches dir, and some accepted ones were
3507    removed.
3508
3509 ------------------------------------------------------------------------------
3510 <a name="2.6.2"></a>
3511
3512 # NEWS for rsync 2.6.2 (30 Apr 2004)
3513
3514 ## Changes in this version:
3515
3516 ### BUG FIXES:
3517
3518  - Fixed a major bug in the sorting of the filenames when `--relative` is used
3519    for some sources (just sources such as `/` and `/*` were affected). This fix
3520    ensures that we ask for the right file-list item when requesting changes
3521    from the sender.
3522
3523  - Rsync now checks the return value of the close() function to better report
3524    disk-full problems on an NFS file system.
3525
3526  - Restored the old daemon-server behavior of logging error messages rather
3527    than returning them to the user. (A better long-term fix will be sought in
3528    the future.)
3529
3530  - An obscure uninitialized-variable bug was fixed in the uid/gid code. (This
3531    bug probably had no ill effects.)
3532
3533 ### BUILD CHANGES:
3534
3535  - Got rid of the configure check for sys/sysctl.h (it wasn't used and was
3536    causing a problem on some systems). Also improved the
3537    broken-largefile-locking test to try to avoid failure due to an NFS
3538    build-dir.
3539
3540  - Fixed a compile problem on systems that don't define `AI_NUMERICHOST`.
3541
3542  - Fixed a compile problem in the popt source for compilers that don't support
3543    `__attribute__`.
3544
3545 ### DEVELOPER RELATED:
3546
3547  - Improved the testsuite's `merge` test to work on OSF1.
3548
3549  - Two new diffs were added to the patches dir.
3550
3551 ------------------------------------------------------------------------------
3552 <a name="2.6.1"></a>
3553
3554 # NEWS for rsync 2.6.1 (26 Apr 2004)
3555
3556 ## Changes in this version:
3557
3558 ### PROTOCOL NUMBER:
3559
3560  - The protocol number was changed to 28.
3561
3562 ### SECURITY FIXES:
3563
3564  - Paths sent to an rsync daemon are more thoroughly sanitized when chroot is
3565    not used. If you're running a non-read-only rsync daemon with chroot
3566    disabled, **please upgrade**, ESPECIALLY if the user privs you run rsync
3567    under is anything above `nobody`.
3568
3569 ### ENHANCEMENTS:
3570
3571  - Lower memory use, more optimal transfer of data over the socket, and lower
3572    CPU usage (see the INTERNAL section for details).
3573
3574  - The `RSYNC_PROXY` environment variable can now contain a `USER:PASS@` prefix
3575    before the `HOST:PORT` information.  (Bardur Arantsson)
3576
3577  - The `--progress` output now mentions how far along in the transfer we are,
3578    including both a count of files transferred and a percentage of the total
3579    file-count that we've processed. It also shows better
3580    current-rate-of-transfer and remaining-transfer-time values.
3581
3582  - Documentation changes now attempt to describe some often misunderstood
3583    features more clearly.
3584
3585 ### BUG FIXES:
3586
3587  - When `-x` (`--one-file-system`) is combined with `-L` (`--copy-links`) or
3588    `--copy-unsafe-links,` no symlinked files are skipped, even if the referent
3589    file is on a different filesystem.
3590
3591  - The `--link-dest` code now works properly for a non-root user when (1) the
3592    UIDs of the source and destination differ and `-o` was specified, or (2)
3593    when the group of the source can't be used on the destination and `-g` was
3594    specified.
3595
3596  - Fixed a bug in the handling of `-H` (hard-links) that might cause the
3597    expanded PATH/NAME value of the current item to get overwritten (due to an
3598    expanded-name caching bug).
3599
3600  - We now reset the `new data has been sent` flag at the start of each file we
3601    send. This makes sure that an interrupted transfer with the `--partial`
3602    option set doesn't keep a shorter temp file than the current basis file when
3603    no new data has been transferred over the wire for that file.
3604
3605  - Fixed a byte-order problem in `--batch-mode` on big-endian machines.  (Jay
3606    Fenlason)
3607
3608  - When using `--cvs-exclude`, the exclude items we get from a per-directory's
3609    .cvsignore file once again only affect that one directory (not all following
3610    directories too). The items are also now properly word-split and parsed
3611    without any +/- prefix parsing.
3612
3613  - When specifying the USER@HOST: prefix for a file, the USER part can now
3614    contain an '@', if needed (i.e. the last '@' is used to find the HOST, not
3615    the first).
3616
3617  - Fixed some bugs in the handling of group IDs for non-root users: (1) It
3618    properly handles a group that the sender didn't have a name for (it would
3619    previously skip changing the group on any files in that group). (2) If
3620    `--numeric-ids` is used, rsync no longer attempts to set groups that the
3621    user doesn't have the permission to set.
3622
3623  - Fixed the `refuse options` setting in the rsyncd.conf file.
3624
3625  - Improved the `-x` (`--one-file-system`) flag's handling of any mount-point
3626    directories we encounter. It is both more optimal (in that it no longer does
3627    a useless scan of the contents of the mount-point dirs) and also fixes a
3628    bug where a remapped mount of the original filesystem could get discovered
3629    in a subdir we should be ignoring.
3630
3631  - Rsync no longer discards a double-slash at the start of a filename when
3632    trying to open the file. It also no longer constructs names that start with
3633    a double slash (unless the user supplied them).
3634
3635  - Path-specifying options to a daemon should now work the same with or without
3636    chroot turned on. Previously, such a option (such as `--link-dest`) would
3637    get its absolute path munged into a relative one if chroot was not on,
3638    making that setting fairly useless.  Rsync now transforms the path into one
3639    that is based on the module's base dir when chroot is not enabled.
3640
3641  - Fixed a compatibility problem interacting with older rsync versions that
3642    might send us an empty `--suffix` value without telling us that
3643    `--backup-dir` was specified.
3644
3645  - The `hosts allow` option for a daemon-over-remote-shell process now has
3646    improved support for IPv6 addresses and a fix for systems that have a length
3647    field in their socket structs.
3648
3649  - Fixed the ability to request an empty backup `--suffix` when sending files
3650    to an rsync daemon.
3651
3652  - Fixed an option-parsing bug when `--files-from` was sent to a server sender.
3653
3654 ### INTERNAL:
3655
3656  - Most of the I/O is now buffered, which results in a pretty large speedup
3657    when running under MS Windows. (Craig Barratt)
3658
3659  - Optimizations to the name-handling/comparing code have made some significant
3660    reductions in user-CPU time for large file sets.
3661
3662  - Some cleanup of the variable types make the code more consistent.
3663
3664  - Reduced memory requirements of hard link preservation.  (J.W. Schultz)
3665
3666  - Implemented a new algorithm for hard-link handling that speeds up the code
3667    significantly. (J.W. Schultz and Wayne Davison)
3668
3669  - The `--hard-link` option now uses the first existing file in the group of
3670    linked files as the basis for the transfer. This prevents the sub-optimal
3671    transfer of a file's data when a new hardlink is added on the sending side
3672    and it sorts alphabetically earlier in the list than the files that are
3673    already present on the receiving side.
3674
3675  - Dropped support for protocol versions less than 20 (2.3.0 released 15 Mar
3676    1999) and activated warnings for protocols less than 25 (2.5.0 released 23
3677    Aug 2001). (Wayne Davison and J.W. Schultz, severally)
3678
3679  - More optimal data transmission for `--hard-links` (protocol 28).
3680
3681  - More optimal data transmission for `--checksum` (protocol 28).
3682
3683  - Less memory is used when `--checksum` is specified.
3684
3685  - Less memory is used in the file list (a per-file savings).
3686
3687  - The generator is now better about not modifying the file list during the
3688    transfer in order to avoid a copy-on-write memory bifurcation (on systems
3689    where fork() uses shared memory).  Previously, rsync's shared memory would
3690    slowly become unshared, resulting in real memory usage nearly doubling on
3691    the receiving side by the end of the transfer. Now, as long as permissions
3692    are being preserved, the shared memory should remain that way for the entire
3693    transfer.
3694
3695  - Changed hardlink info and `file_struct` + strings to use allocation pools.
3696    This reduces memory use for large file-sets and permits freeing memory to
3697    the OS. (J.W. Schultz)
3698
3699  - The 2 pipes used between the receiver and generator processes (which are
3700    forked on the same machine) were reduced to 1 pipe and the protocol improved
3701    so that (1) it is now impossible to have the `redo` pipe fill up and hang
3702    rsync, and (2) trailing messages from the receiver don't get lost on their
3703    way through the generator over to the sender (which mainly affected
3704    hard-link messages and verbose `--stats` output).
3705
3706  - Improved the internal uid/gid code to be more portable and a little more
3707    optimized.
3708
3709  - The device numbers sent when using `--devices` are now sent as separate
3710    major/minor values with 32-bit accuracy (protocol 28).  Previously, the
3711    copied devices were sent as a single 32-bit number. This will make
3712    inter-operation of 64-bit binaries more compatible with their 32-bit
3713    brethren (with both ends of the connection are using protocol 28). Note that
3714    optimizations in the binary protocol for sending the device numbers often
3715    results in fewer bytes being used than before, even though more precision is
3716    now available.
3717
3718  - Some cleanup of the exclude/include structures and its code made things
3719    clearer (internally), simpler, and more efficient.
3720
3721  - The reading & writing of the file-list in batch-mode is now handled by the
3722    same code that sends & receives the list over the wire. This makes it much
3723    easier to maintain. (Note that the batch code is still considered to be
3724    experimental.)
3725
3726 ### BUILD CHANGES:
3727
3728  - The configure script now accepts `--with-rsyncd-conf=PATH` to override the
3729    default value of the /etc/rsyncd.conf file.
3730
3731  - Fixed configure bug when running `./configure --disable-ipv6`.
3732
3733  - Fixed compilation problem on Tru64 Unix (having to do with `sockaddr.sa_len`
3734    and `sockaddr.sin_len`).
3735
3736 ### DEVELOPER RELATED:
3737
3738  - Fixed `make test` bug when build dir is not the source dir.
3739
3740  - Added a couple extra diffs in the `patches` dir, removed the ones that got
3741    applied, and rebuilt the rest.
3742
3743 ------------------------------------------------------------------------------
3744 <a name="2.6.0"></a>
3745
3746 # NEWS for rsync 2.6.0 (1 Jan 2004)
3747
3748 ## Changes in this version:
3749
3750 ### PROTOCOL NUMBER:
3751
3752  - The protocol number was changed to 27.  The maximum accepted protocol number
3753    was increased from 30 to 40.
3754
3755 ### ENHANCEMENTS:
3756
3757  - `ssh` is now the default remote shell for rsync. If you want to change this,
3758    configure like this: `./configure --with-rsh=rsh`.
3759
3760  - Added `--files-from`, `--no-relative`, `--no-implied-dirs`, and `--from0`.
3761    Note that `--from0` affects the line-ending character for all the files read
3762    by the `--*-from` options. (Wayne Davison)
3763
3764  - Length of csum2 is now per-file starting with protocol version
3765    27. (J.W. Schultz)
3766
3767  - Per-file dynamic block size is now sqrt(file length). The per-file checksum
3768    size is determined according to an algorithm provided by Donovan Baarda
3769    which reduces the probability of rsync algorithm corrupting data and falling
3770    back using the whole md4 checksums. (J.W. Schultz, Donovan Baarda)
3771
3772  - The `--stats` option no longer includes the (debug) malloc summary unless
3773    the verbose option was specified at least twice.
3774
3775  - Added a new error/warning code for when files vanish from the sending side.
3776    Made vanished source files not interfere with the file-deletion pass when
3777    `--delete-after` was specified.
3778
3779  - Various trailing-info sections are now preceded by a newline.
3780
3781 ### BUG FIXES:
3782
3783  - Fixed several exclude/include matching bugs when using wild-cards.  This has
3784    a several user-visible effects, all of which make the matching more
3785    consistent and intuitive. This should hopefully not cause anyone problems
3786    since it makes the matching work more like what people are expecting. (Wayne
3787    Davison)
3788
3789  - A pattern with a `**` no longer causes a `*` to match slashes.  For example,
3790    with `/*/foo/**`, `foo` must be 2 levels deep.  [If your string has BOTH `*`
3791    and `**` wildcards, changing the `*` wildcards to `**` will provide the old
3792    behavior in all versions.]
3793
3794  - `**/foo` now matches at the base of the transfer (like /foo does). [Use
3795    `/**/foo` to get the old behavior in all versions.]
3796
3797  - A non-anchored wildcard term floats to match beyond the base of the
3798    transfer. E.g. `CVS/R*` matches at the end of the path, just like the
3799    non-wildcard term `CVS/Root` does. [Use `/CVS/R*` to get the old behavior in
3800    all versions.]
3801
3802  - Including a `**` in the match term causes it to be matched against the
3803    entire path, not just the name portion, even if there aren't any interior
3804    slashes in the term. E.g. `foo**bar` would exclude `/path/foo-bar` (just
3805    like before) as well as `/foo-path/baz-bar` (unlike before). [Use `foo*bar`
3806    to get the old behavior in all versions.]
3807
3808  - The exclude list specified in the daemon's config file is now properly
3809    applied to the pulled items no matter how deep the user's file-args are in
3810    the source tree. (Wayne Davison)
3811
3812  - For protocol version >= 27, `mdfour_tail()` is called when the block size
3813    (including `checksum_seed`) is a multiple of 64.  Previously it was not
3814    called, giving the wrong MD4 checksum.  (Craig Barratt)
3815
3816  - For protocol version >= 27, a 64 bit bit counter is used in mdfour.c as
3817    required by the RFC. Previously only a 32 bit bit counter was used, causing
3818    incorrect MD4 file checksums for file sizes >= 512MB - 4. (Craig Barratt)
3819
3820  - Fixed a crash bug when interacting with older rsync versions and multiple
3821    files of the same name are destined for the same dir.  (Wayne Davison)
3822
3823  - Keep tmp names from overflowing MAXPATHLEN.
3824
3825  - Make `--link-dest` honor the absence of `-p`, `-o`, and `-g`.
3826
3827  - Made rsync treat a trailing slash in the destination in a more consistent
3828    manner.
3829
3830  - Fixed file I/O error detection. (John Van Essen)
3831
3832  - Fixed bogus `malformed address {hostname}` message in rsyncd log when
3833    checking IP address against hostnames from `hosts allow` and `hosts deny`
3834    parameters in config file.
3835
3836  - Print heap statistics when verbose >= 2 instead of when >= 1.
3837
3838  - Fixed a compression (`-z`) bug when syncing a mostly-matching file that
3839    contains already-compressed data. (Yasuoka Masahiko and Wayne Davison)
3840
3841  - Fixed a bug in the `--backup` code that could cause deleted files to not get
3842    backed up.
3843
3844  - When the backup code makes new directories, create them with mode 0700
3845    instead of 0755 (since the directory permissions in the backup tree are not
3846    yet copied from the main tree).
3847
3848  - Call setgroups() in a more portable manner.
3849
3850  - Improved file-related error messages to better indicate exactly what
3851    pathname failed. (Wayne Davison)
3852
3853  - Fixed some bugs in the handling of `--delete` and `--exclude` when using the
3854    `--relative` (`-R`) option. (Wayne Davison)
3855
3856  - Fixed bug that prevented regular files from replacing special files and
3857    caused a directory in `--link-dest` or `--compare-dest` to block the
3858    creation of a file with the same path. A directory still cannot be replaced
3859    by a regular file unless `--delete` specified. (J.W. Schultz)
3860
3861  - Detect and report when open or opendir succeed but read and readdir fail
3862    caused by network filesystem issues and truncated files. (David Norwood,
3863    Michael Brown, J.W. Schultz)
3864
3865  - Added a fix that should give ssh time to restore the tty settings if the
3866    user presses Ctrl-C at an ssh password prompt.
3867
3868 ### INTERNAL:
3869
3870  - Eliminated vestigial support for old versions that we stopped supporting.
3871    (J.W. Schultz)
3872
3873  - Simplified some of the option-parsing code. (Wayne Davison)
3874
3875  - Some cleanup made to the exclude code, as well as some new defines added to
3876    enhance readability. (Wayne Davison)
3877
3878  - Changed the protocol-version code so that it can interact at a lower
3879    protocol level than the maximum supported by both sides.  Added an
3880    undocumented option, `--protocol=N`, to force the value we advertise to the
3881    other side (primarily for testing purposes).  (Wayne Davison)
3882
3883 ------------------------------------------------------------------------------
3884 <a name="2.5.7"></a>
3885
3886 # NEWS for rsync 2.5.7 (4 Dec 2003)
3887
3888 ## Changes in this version:
3889
3890 ### SECURITY FIXES:
3891
3892  - Fix buffer handling bugs. (Andrew Tridgell, Martin Pool, Paul Russell,
3893    Andrea Barisani)
3894
3895 ------------------------------------------------------------------------------
3896 <a name="2.5.6"></a>
3897
3898 # NEWS for rsync 2.5.6, aka "the dwd-between-jobs release" (26 Jan 2003)
3899
3900 ## Changes in this version:
3901
3902 ### ENHANCEMENTS:
3903
3904  - The `--delete-after` option now implies `--delete`. (Wayne Davison)
3905
3906  - The `--suffix` option can now be used with `--backup-dir`. (Michael
3907    Zimmerman)
3908
3909  - Combining `::` syntax with the `--rsh`/`-e` option now uses the specified
3910    remote-shell as a transport to talk to a (newly-spawned) server-daemon. This
3911    allows someone to use daemon features, such as modules, over a secure
3912    protocol, such as ssh. (JD Paul)
3913
3914  - The rsync:// syntax for daemon connections is now accepted in the
3915    destination field.
3916
3917  - If the file name given to `--include-from` or `--exclude-from` is `-`, rsync
3918    will read from standard input. (J.W. Schultz)
3919
3920  - New option `--link-dest` which is like `--compare-dest` except that
3921    unchanged files are hard-linked in to the destination directory.  (J.W.
3922    Schultz)
3923
3924  - Don't report an error if an excluded file disappears during an rsync run.
3925    (Eugene Chupriyanov and Bo Kersey)
3926
3927  - Added .svn to `--cvs-exclude` list to support subversion. (Jon Middleton)
3928
3929  - Properly support IPv6 addresses in the rsyncd.conf `hosts allow` and `hosts
3930    deny` fields. (Hideaki Yoshifuji)
3931
3932  - Changed exclude file handling to permit DOS or MAC style line terminations.
3933    (J.W. Schultz)
3934
3935  - Ignore errors from chmod when `-p`/`-a`/`--preserve-perms` is not set.
3936    (Dave Dykstra)
3937
3938 ### BUG FIXES:
3939
3940  - Fix `forward name lookup failed` errors on AIX 4.3.3. (John L. Allen, Martin
3941    Pool)
3942
3943  - Generate each file's rolling-checksum data as we send it, not in a separate
3944    (memory-eating) pass before hand. This prevents timeout errors on really
3945    large files. (Stefan Nehlsen)
3946
3947  - Fix compilation on Tru64. (Albert Chin, Zoong Pham)
3948
3949  - Better handling of some client-server errors. (Martin Pool)
3950
3951  - Fixed a crash that would occur when sending a list of files that contains a
3952    duplicate name (if it sorts to the end of the file list) and using
3953    `--delete`. (Wayne Davison)
3954
3955  - Fixed the file-name duplicate-removal code when dealing with multiple dups
3956    in a row. (Wayne Davison)
3957
3958  - Fixed a bug that caused rsync to lose the exit status of its child processes
3959    and sometimes return an exit code of 0 instead of showing an error. (David
3960    R. Staples, Dave Dykstra)
3961
3962  - Fixed bug in `--copy-unsafe-links` that caused it to be completely broken.
3963    (Dave Dykstra)
3964
3965  - Prevent infinite recursion in cleanup code under certain circumstances.
3966    (Sviatoslav Sviridov and Marc Espie)
3967
3968  - Fixed a bug that prevented rsync from creating intervening directories when
3969    `--relative-paths`/`-R` is set. (Craig Barratt)
3970
3971  - Prevent `Connection reset by peer` messages from Cygwin. (Randy O'Meara)
3972
3973 ### INTERNAL:
3974
3975  - Many code cleanups and improved internal documentation. (Martin Pool, Nelson
3976    Beebe)
3977
3978  - Portability fixes. (Dave Dykstra and Wayne Davison)
3979
3980  - More test cases. (Martin Pool)
3981
3982  - Some test-case fixes. (Brian Poole, Wayne Davison)
3983
3984  - Updated included popt to the latest vendor drop, version 1.6.4.  (Jos
3985    Backus)
3986
3987  - Updated config.guess and config.sub to latest versions; this means rsync
3988    should build on more platforms. (Paul Green)
3989
3990 ------------------------------------------------------------------------------
3991 <a name="2.5.5"></a>
3992
3993 # NEWS for rsync 2.5.5, aka Snowy River (2 Apr 2002)
3994
3995 ## Changes in this version:
3996
3997 ### ENHANCEMENTS:
3998
3999  - With `--progress`, when a transfer is complete show the time taken;
4000    otherwise show expected time to complete. (Cameron Simpson)
4001
4002  - Make `make install-strip` works properly, and `make install` accepts a
4003    DESTDIR variable for help in building binary packages.  (Peter
4004    Breitenlohner, Greg Louis)
4005
4006  - If configured with `--enable-maintainer-mode`, then on receipt of a fatal
4007    signal rsync will try to open an xterm running gdb, similarly to Samba's
4008    `panic action` or GNOME's bug-buddy.  (Martin Pool)
4009
4010 ### BUG FIXES:
4011
4012  - Fix situation where failure to fork (e.g. because out of process slots)
4013    would cause rsync to kill all processes owned by the current user. Yes,
4014    really! (Paul Haas, Martin Pool)
4015
4016  - Fix test suite on Solaris. (Jos Backus, Martin Pool)
4017
4018  - Fix minor memory leak in socket code. (Dave Dykstra, Martin Pool.)
4019
4020  - Fix `--whole-file` problem that caused it to be the default even for remote
4021    connections. (Martin Pool, Frank Schulz)
4022
4023  - Work around bug in Mac OS X mkdir(2), which cannot handle trailing slashes.
4024    <http://www.opensource.apple.com/bugs/X/BSD%20Kernel/2734739.html> (Martin
4025    Pool)
4026
4027  - Improved network error handling. (Greg A. Woods)
4028
4029 ------------------------------------------------------------------------------
4030 <a name="2.5.4"></a>
4031
4032 # NEWS for rsync 2.5.4, aka "Imitation lizard skin" (13 Mar 2002)
4033
4034 ## Changes in this version:
4035
4036 ### BUG FIXES:
4037
4038  - Additional fix for zlib double-free bug. (Martin Pool, Andrew Tridgell) (CVE
4039    CAN-2002-0059)
4040
4041 ### ENHANCEMENTS:
4042
4043  - Merge in changes from zlib 1.1.3 to zlib 1.1.4. (Jos Backus) (Note that
4044    rsync still uses a custom version of zlib; you can not just link against a
4045    system library. See zlib/README.rsync)
4046
4047  - Additional test cases for `--compress`. (Martin Pool)
4048
4049 ------------------------------------------------------------------------------
4050 <a name="2.5.3"></a>
4051
4052 # NEWS for rsync 2.5.3, aka "Happy 26" (11 Mar 2002)
4053
4054 ## Changes in this version:
4055
4056 ### SECURITY FIXES:
4057
4058  - Make sure that supplementary groups are removed from a server
4059    process after changing uid and gid. (Ethan Benson) (Debian bug
4060    #132272, CVE CAN-2002-0080)
4061
4062 ### BUG FIXES:
4063
4064  - Fix zlib double-free bug. (Owen Taylor, Mark J Cox) (CVE CAN-2002-0059)
4065
4066  - Fixed problem that in many cases caused the error message unexpected read
4067    size of 0 in `map_ptr` and resulted in the wrong data being copied.
4068
4069  - Fixed compilation errors on some systems caused by the use of `unsigned
4070    int64` in rsync.h.
4071
4072  - Fixed problem on systems such as Sunos4 that do not support realloc on a
4073    NULL pointer; error was 'out of memory in "flist_expand"'.
4074
4075  - Fix for rsync server processes hanging around after the client unexpectedly
4076    disconnects. (Colin Walters) (Debian bug #128632)
4077
4078  - Cope with BSD systems on which mkdir() will not accept a trailing slash.
4079
4080 ### ENHANCEMENTS:
4081
4082  - Merge in changes from zlib 1.1.2 to zlib 1.1.3. (Note that rsync still uses
4083    a custom version of zlib; you can not just link against a system library.
4084    See zlib/README.rsync)
4085
4086  - Command to initiate connections is only shown with `-vv`, rather than `-v`
4087    as in 2.5.2. Output from plain `-v` is more similar to what was historically
4088    used so as not to break scripts that try to parse the output.
4089
4090  - Added `--no-whole-file` and `--no-blocking-io` options (Dave Dykstra)
4091
4092  - Made the `--write-batch` and `--read-batch` options actually work and added
4093    documentation in the man page (Jos Backus)
4094
4095  - If the daemon is unable to fork a child to accept a connection, print an
4096    error message. (Colin Walters)
4097
4098 ------------------------------------------------------------------------------
4099 <a name="2.5.2"></a>
4100
4101 # NEWS for rsync 2.5.2 (26 Jan 2002)
4102
4103 ## Changes in this version:
4104
4105 ### SECURITY FIXES:
4106
4107  - Signedness security patch from Sebastian Krahmer <krahmer@suse.de> -- in
4108    some cases we were not sufficiently careful about reading integers from the
4109    network.
4110
4111 ### PROTOCOL NUMBER:
4112
4113  - The protocol number was changed to 26.
4114
4115 ### BUG FIXES:
4116
4117  - Fix possible string mangling in log files.
4118
4119  - Fix for setting local address of outgoing sockets.
4120
4121  - Better handling of hardlinks and devices on platforms with 64-bit `dev_t` or
4122    `ino_t`.
4123
4124  - Name resolution on machines supporting IPv6 is improved.
4125
4126  - Fix for device nodes. (dann frazier) (Debian #129135)
4127
4128 ### ENHANCEMENTS:
4129
4130  - With `-v`, rsync now shows the command used to initiate an ssh/rsh
4131    connection.
4132
4133  - `--statistics` now shows memory heap usage on platforms that support
4134    mallinfo().
4135
4136  - "The Ted T'so school of program optimization": make progress visible and
4137    people will think it's faster. (With `--progress`, rsync will show you how
4138    many files it has seen as it builds the `file_list`, giving some indication
4139    that it has not hung.)
4140
4141  - Improvements to batch mode support. This is still experimental but testing
4142    would be welcome. (Jos Backus)
4143
4144  - New `--ignore-existing` option, patch previously distributed with Vipul's
4145    Razor. (Debian #124286)
4146
4147 ------------------------------------------------------------------------------
4148 <a name="2.5.1"></a>
4149
4150 # NEWS for rsync 2.5.1 (3 Jan 2002)
4151
4152 ## Changes in this version:
4153
4154 ### BUG FIXES:
4155
4156  - Fix for segfault in `--daemon` mode configuration parser. (Paul Mackerras)
4157
4158  - Correct `string<->address` parsing for both IPv4 and 6.  (YOSHIFUJI Hideaki,
4159    SUMIKAWA Munechika and Jun-ichiro `itojun` Hagino)
4160
4161  - Various fixes for IPv6 support. (Dave Dykstra)
4162
4163  - rsync.1 typo fix. (Matt Kraai)
4164
4165  - Test suite typo fixes. (Tom Schmidt)
4166
4167  - rsync.1 grammar and clarity improvements. (Edward Welbourne)
4168
4169  - Correction to ./configure tests for `inet_ntop`. (Jeff Garzik)
4170
4171 ### ENHANCEMENTS:
4172
4173  - `--progress` and `-P` now show estimated data transfer rate (in a multiple
4174    of bytes/s) and estimated time to completion. (Rik Faith)
4175
4176  - `--no-detach` option, required to run as a W32 service and also useful when
4177    running on Unix under daemontools, AIX's SRC, or a debugger. (Max Bowsher,
4178    Jos Backus)
4179
4180  - Clearer error messages for some conditions.
4181
4182 ------------------------------------------------------------------------------
4183 <a name="2.5.0"></a>
4184
4185 # NEWS for rsync 2.5.0 (30 Nov 2001)
4186
4187 ## Changes in this version:
4188
4189 ### PROTOCOL NUMBER:
4190
4191  - The protocol number was changed to 25.
4192
4193 ### ANNOUNCEMENTS:
4194
4195  - Martin Pool <mbp@samba.org> is now a co-maintainer.
4196
4197 ### NEW FEATURES:
4198
4199  - Support for LSB-compliant packaging <http://www.linuxbase.org/>
4200
4201  - Shell wildcards are allowed in `auth users` lines.
4202
4203  - Merged UNC rsync+ patch to support creation of standalone patch sets. By
4204    Bert J. Dempsey and Debra Weiss, updated by Jos Backus.
4205    <http://www.ils.unc.edu/i2dsi/unc_rsync+.html>
4206
4207  - IPv6 support based on a patch from KAME.net, on systems including modern
4208    versions of Linux, Solaris, and HP-UX. Also includes IPv6 compatibility
4209    functions for old OSs by the Internet Software Consortium, Paul Vixie, the
4210    OpenSSH portability project, and OpenBSD.
4211
4212 ### ENHANCEMENTS:
4213
4214  - Include/exclude cluestick: with `-vv`, print out whether files are included
4215    or excluded and why.
4216
4217  - Many error messages have more friendly explanations and more details.
4218
4219  - Manual page improvements plus scanty protocol documentation.
4220
4221  - When running as `--daemon` in the background and using a `log file`
4222    rsyncd.conf directive, close the log file every time it is open when going
4223    to sleep on the socket. This allows the log file to get cleaned out by
4224    another process.
4225
4226  - Change to using libpopt rather than getopt for processing options. This
4227    makes the code cleaner and the behaviour more consistent across platforms.
4228    popt is included and built if not installed on the platform.
4229
4230  - More details in `--version`, including note about whether 64-bit files,
4231    symlinks and hardlinks are supported.
4232
4233  - MD4 code may use less CPU cycles.
4234
4235  - Use mkstemp on systems where it is secure. If we use mktemp, explain that we
4236    do it in a secure way.
4237
4238  - `--whole-file` is the default when source and target are on the local
4239    machine.
4240
4241 ### BUG FIXES:
4242
4243  - Fix for various bugs causing rsync to hang.
4244
4245  - Attempt to fix Large File Summit support on AIX.
4246
4247  - Attempt to fix error handling lockup bug.
4248
4249  - Give a non-0 exit code if **any** of the files we have been asked to
4250    transfer fail to transfer.
4251
4252  - For log messages containing ridiculously long strings that might overflow a
4253    buffer rsync no longer aborts, but rather prints an ellipsis at the end of
4254    the string. (Patch from Ed Santiago.)
4255
4256 ### PLATFORMS:
4257
4258  - Improved support for UNICOS (tested on Cray T3E and Cray SV1)
4259
4260  - autoconf2.52 (or later) is now required to rebuild the autoconf scripts. It
4261    is not required to simply build rsync.
4262
4263  - Platforms thought to work in this release:
4264
4265    - Cray SV1 UNICOS 10.0.0.8 cc
4266    - Debian Linux 2.2 UltraSparc gcc
4267    - Debian Linux testing/unstable ARM gcc
4268    - FreeBSD 3.3-RELEASE i386 cc
4269    - FreeBSD 4.1.1-RELEASE i386 cc
4270    - FreeBSD 4.3-STABLE i386 cc
4271    - HP PA-RISC HP-UX 10.20 gcc
4272    - HP PA-RISC HP-UX 11.11 cc
4273    - IRIX 6.5 MIPS cc
4274    - IRIX 6.5 MIPS gcc
4275    - Mac OS X PPC (--disable-ipv6) cc
4276    - NetBSD 1.5 i386 gcc
4277    - NetBSD Current i386 cc
4278    - OpenBSD 2.5 Sparc gcc
4279    - OpenBSD 2.9 i386 cc
4280    - OpenBSD Current i386 cc
4281    - RedHat 6.2 i386 gcc
4282    - RedHat 6.2 i386 insure++
4283    - RedHat 7.0 i386 gcc
4284    - RedHat 7.1 i386 (Kernel 2.4.10) gcc
4285    - Slackware 8.0 i686 (Kernel 2.4.10)
4286    - Solaris 8 UltraSparc cc
4287    - Solaris 8 UltraSparc gcc
4288    - Solaris 8 i386 gcc
4289    - SuSE 7.1 i386 gcc2.95.2
4290    - SuSE 7.1 ppc gcc2.95.2
4291    - i386-pc-sco3.2v5.0.5 cc
4292    - i386-pc-sco3.2v5.0.5 gcc
4293    - powerpc-ibm-aix4.3.3.0 cc
4294    - i686-unknown-sysv5UnixWare7.1.0 gcc
4295    - i686-unknown-sysv5UnixWare7.1.0 cc
4296
4297 ### TESTING:
4298
4299  - The existing test.sh script by Phil Hands has been merged into a
4300    test framework that works from both `make check` and the Samba
4301    build farm.
4302
4303 ------------------------------------------------------------------------------
4304
4305 ## Partial Protocol History
4306
4307 | RELEASE DATE | VER.   | DATE OF COMMIT\* | PROTOCOL    |
4308 |--------------|--------|------------------|-------------|
4309 | ?? Sep 2020  | 3.2.4  |                  | 31          |
4310 | 06 Aug 2020  | 3.2.3  |                  | 31          |
4311 | 04 Jul 2020  | 3.2.2  |                  | 31          |
4312 | 22 Jun 2020  | 3.2.1  |                  | 31          |
4313 | 19 Jun 2020  | 3.2.0  |                  | 31          |
4314 | 28 Jan 2018  | 3.1.3  |                  | 31          |
4315 | 21 Dec 2015  | 3.1.2  |                  | 31          |
4316 | 22 Jun 2014  | 3.1.1  |                  | 31          |
4317 | 28 Sep 2013  | 3.1.0  | 31 Aug 2008      | 31          |
4318 | 23 Sep 2011  | 3.0.9  |                  | 30          |
4319 | 26 Mar 2011  | 3.0.8  |                  | 30          |
4320 | 31 Dec 2009  | 3.0.7  |                  | 30          |
4321 | 08 May 2009  | 3.0.6  |                  | 30          |
4322 | 28 Dec 2008  | 3.0.5  |                  | 30          |
4323 | 06 Sep 2008  | 3.0.4  |                  | 30          |
4324 | 29 Jun 2008  | 3.0.3  |                  | 30          |
4325 | 08 Apr 2008  | 3.0.2  |                  | 30          |
4326 | 03 Apr 2008  | 3.0.1  |                  | 30          |
4327 | 01 Mar 2008  | 3.0.0  | 11 Nov 2006      | 30          |
4328 | 06 Nov 2006  | 2.6.9  |                  | 29          |
4329 | 22 Apr 2006  | 2.6.8  |                  | 29          |
4330 | 11 Mar 2006  | 2.6.7  |                  | 29          |
4331 | 28 Jul 2005  | 2.6.6  |                  | 29          |
4332 | 01 Jun 2005  | 2.6.5  |                  | 29          |
4333 | 30 Mar 2005  | 2.6.4  | 17 Jan 2005      | 29          |
4334 | 30 Sep 2004  | 2.6.3  |                  | 28          |
4335 | 30 Apr 2004  | 2.6.2  |                  | 28          |
4336 | 26 Apr 2004  | 2.6.1  | 08 Jan 2004      | 28          |
4337 | 01 Jan 2004  | 2.6.0  | 10 Apr 2003      | 27 (MAX=40) |
4338 | 04 Dec 2003  | 2.5.7  |                  | 26          |
4339 | 26 Jan 2003  | 2.5.6  |                  | 26          |
4340 | 02 Apr 2002  | 2.5.5  |                  | 26          |
4341 | 13 Mar 2002  | 2.5.4  |                  | 26          |
4342 | 11 Mar 2002  | 2.5.3  |                  | 26          |
4343 | 26 Jan 2002  | 2.5.2  | 11 Jan 2002      | 26          |
4344 | 03 Jan 2002  | 2.5.1  |                  | 25          |
4345 | 30 Nov 2001  | 2.5.0  | 23 Aug 2001      | 25          |
4346 | 06 Sep 2000  | 2.4.6  |                  | 24          |
4347 | 19 Aug 2000  | 2.4.5  |                  | 24          |
4348 | 29 Jul 2000  | 2.4.4  |                  | 24          |
4349 | 09 Apr 2000  | 2.4.3  |                  | 24          |
4350 | 30 Mar 2000  | 2.4.2  |                  | 24          |
4351 | 30 Jan 2000  | 2.4.1  | 29 Jan 2000      | 24          |
4352 | 29 Jan 2000  | 2.4.0  | 28 Jan 2000      | 23          |
4353 | 25 Jan 2000  | 2.3.3  | 23 Jan 2000      | 22          |
4354 | 08 Nov 1999  | 2.3.2  | 26 Jun 1999      | 21          |
4355 | 06 Apr 1999  | 2.3.1  |                  | 20          |
4356 | 15 Mar 1999  | 2.3.0  | 15 Mar 1999      | 20          |
4357 | 25 Nov 1998  | 2.2.1  |                  | 19          |
4358 | 03 Nov 1998  | 2.2.0  |                  | 19          |
4359 | 09 Sep 1998  | 2.1.1  |                  | 19          |
4360 | 20 Jul 1998  | 2.1.0  |                  | 19          |
4361 | 17 Jul 1998  | 2.0.19 |                  | 19          |
4362 | 18 Jun 1998  | 2.0.17 |                  | 19          |
4363 | 01 Jun 1998  | 2.0.16 |                  | 19          |
4364 | 27 May 1998  | 2.0.13 | 27 May 1998      | 19          |
4365 | 26 May 1998  | 2.0.12 |                  | 18          |
4366 | 22 May 1998  | 2.0.11 |                  | 18          |
4367 | 18 May 1998  | 2.0.9  | 18 May 1998      | 18          |
4368 | 17 May 1998  | 2.0.8  |                  | 17          |
4369 | 15 May 1998  | 2.0.1  |                  | 17          |
4370 | 14 May 1998  | 2.0.0  |                  | 17          |
4371 | 17 Apr 1998  | 1.7.4  |                  | 17          |
4372 | 13 Apr 1998  | 1.7.3  |                  | 17          |
4373 | 05 Apr 1998  | 1.7.2  |                  | 17          |
4374 | 26 Mar 1998  | 1.7.1  |                  | 17          |
4375 | 26 Mar 1998  | 1.7.0  | 26 Mar 1998      | 17 (MAX=30) |
4376 | 13 Jan 1998  | 1.6.9  | 13 Jan 1998      | 15 (MAX=20) |
4377
4378 \* DATE OF COMMIT is the date the protocol change was committed to version
4379 control.