mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-05-24 23:05:52 -04:00
Compare commits
35 Commits
v3.1.0
...
v3.1.1pre1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8946cfc6f8 | ||
|
|
dfa5b49110 | ||
|
|
1bf6203616 | ||
|
|
a3f852bd78 | ||
|
|
72e7fb5b92 | ||
|
|
740551d657 | ||
|
|
a106ed78d5 | ||
|
|
bba31ddf12 | ||
|
|
31825a94b3 | ||
|
|
5dcef7c6dd | ||
|
|
72e0c45078 | ||
|
|
0593471e99 | ||
|
|
1b29458ea4 | ||
|
|
d3414a7d23 | ||
|
|
9e2e7a1b2d | ||
|
|
d34eaa8183 | ||
|
|
b4ea93c676 | ||
|
|
6df5d81ce2 | ||
|
|
0e3152febd | ||
|
|
e9398b1dc5 | ||
|
|
83792c1cbf | ||
|
|
32540aa091 | ||
|
|
836e0c5df4 | ||
|
|
2cd87086f0 | ||
|
|
eaa4e2d1ee | ||
|
|
e461cefbab | ||
|
|
18217a94c4 | ||
|
|
090ef59b29 | ||
|
|
708db6f772 | ||
|
|
63f9197611 | ||
|
|
f643330eb1 | ||
|
|
bc0d094d2a | ||
|
|
64dff88db9 | ||
|
|
637ebad048 | ||
|
|
487bf9290c |
263
NEWS
263
NEWS
@@ -1,243 +1,58 @@
|
||||
NEWS for rsync 3.1.0 (28 Sep 2013)
|
||||
Protocol: 31 (changed)
|
||||
Changes since 3.0.9:
|
||||
|
||||
OUTPUT CHANGES:
|
||||
|
||||
- Output numbers in 3-digit groups by default (e.g. 1,234,567). See the
|
||||
--human-readable option for a way to turn it off. See also the daemon's
|
||||
"log format" parameter and related command-line options (including
|
||||
--out-format) for a modifier that can be used to request digit-grouping
|
||||
or human-readable output in log escapes. (Note that log output is
|
||||
unchanged by default.)
|
||||
|
||||
- The --list-only option is now affected by the --human-readable setting.
|
||||
It will display digit groupings by default, and unit suffixes if higher
|
||||
levels of readability are requested. Also, the column width for the size
|
||||
output has increased from 11 to 14 characters when human readability is
|
||||
enabled. Use --no-h to get the old-style output and column size.
|
||||
|
||||
- The output of the --progress option has changed: the string "xfer" was
|
||||
shortened to "xfr", and the string "to-check" was shortened to "to-chk",
|
||||
both designed to make room for the (by default) wider display of file
|
||||
size numbers without making the total line-length longer. Also, when
|
||||
incremental recursion is enabled, the string "ir-chk" will be used
|
||||
instead of "to-chk" up until the incremental-recursion scan is done,
|
||||
letting you know that the value to check and the total value will still
|
||||
be increasing as new files are found.
|
||||
|
||||
- Enhanced the --stats output: 1) to mention how many files were created
|
||||
(protocol >= 28), 2) to mention how many files were deleted (a new line
|
||||
for protocol 31, but only output when --delete is in effect), and 3) to
|
||||
follow the file-count, created-count, and deleted-count with a subcount
|
||||
list that shows the counts by type. The wording of the transferred count
|
||||
has also changed so that it is clearer that it is only a count of regular
|
||||
files.
|
||||
NEWS for rsync 3.1.1 (UNRELEASED)
|
||||
Protocol: 31 (unchanged)
|
||||
Changes since 3.1.0:
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
- Fixed a bug in the iconv code when EINVAL or EILSEQ is returned with a
|
||||
full output buffer.
|
||||
- Fixed a failure to remove the partial-transfer temp file when interrupted
|
||||
(and rsync is not saving the partial files).
|
||||
|
||||
- Fixed some rare bugs in --iconv processing that might cause a multibyte
|
||||
character to get translated incorrectly.
|
||||
- Changed the chown/group/xattr-set order to avoid losing some security-
|
||||
related xattr info (that would get cleared by a chown).
|
||||
|
||||
- Fixed a bogus "vanished file" error if some files were specified with
|
||||
"./" prefixes and others were not.
|
||||
- Fixed a bug in the early daemon protocol where a timeout failed to be
|
||||
honored (e.g. if the remote side fails to send us the initial protocol
|
||||
greeting).
|
||||
|
||||
- Fixed a bug in --sparse where an extra gap could get inserted after a
|
||||
partial write.
|
||||
- Fixed unintended inclusion of commas in file numbers in the daemon log.
|
||||
|
||||
- Changed the way --progress overwrites its prior output in order to make
|
||||
it nearly impossible for the progress to get overwritten by an error.
|
||||
- We once again send the 'f' sub-flag (of -e) to the server side so it
|
||||
knows that we can handle incremental-recursion directory errors properly
|
||||
in older protocols.
|
||||
|
||||
- Improved the propagation of abnormal-exit error messages. This should
|
||||
help the client side to receive errors from the server when it is exiting
|
||||
abnormally, and should also avoid dying with an "connection unexpectedly
|
||||
closed" exit when the closed connection is really expected.
|
||||
- Fixed an issue with too-aggressive keep-alive messages causing a problem
|
||||
for older rsync versions early in the transfer.
|
||||
|
||||
- The sender now checks each file it plans to remove to ensure that it
|
||||
hasn't changed from the first stat's info. This helps to avoid losing
|
||||
file data when the user is not using the option in a safe manner.
|
||||
- Fixed an incorrect message about backup-directory-creation when using
|
||||
--dry-run and the backup dir is not an absolute path.
|
||||
|
||||
- Fixed a data-duplication bug in the compress option that made compression
|
||||
less efficient. This improves protocol 31 onward, while behaving in a
|
||||
compatible (buggy) manner with older rsync protocols.
|
||||
- Fixed a bug where a failed deletion might not affect the exit code.
|
||||
|
||||
- When creating a temp-file, rsync is now a bit smarter about it dot-char
|
||||
choices, which can fix a problem on OS X with names that start with "..".
|
||||
- Fixed a bug that caused a failure when combining --delete-missing-args
|
||||
with --xattrs and/or --acls.
|
||||
|
||||
- Rsync now sets a cleanup flag for --inplace and --append transfers that
|
||||
will flush the write buffer if the transfer aborts. This ensures that
|
||||
more received data gets written out to the disk on an aborted transfer
|
||||
(which is quite helpful on a slow, flaky connection).
|
||||
- Fixed an itemize bug that affected the combo of --link-dest, -X, and -n.
|
||||
|
||||
- The reads that map_ptr() now does are aligned on 1K boundaries. This
|
||||
helps some filesystems and/or files that don't like unaligned reads.
|
||||
- Fixed a problem with delete messages not appearing in the log file when
|
||||
the user didn't use --verbose.
|
||||
|
||||
- Fix an issue in the msleep() function if time jumps backwards.
|
||||
- Improve chunked xattr reading for OS X.
|
||||
|
||||
- Fix daemon-server module-name splitting bug where an arg would get split
|
||||
even if --protect-args was used.
|
||||
- Removed an attempted hard-link xattr optimization that was causing a
|
||||
transfer failure. (If you need to interact with an rsync 3.1.0 using
|
||||
--hard-links & --xattrs, you can specify --protocol=30.)
|
||||
|
||||
- We now generate a better error if the buffer overflows in do_mknod().
|
||||
|
||||
- Fixed a problem reading more than 16 ACLs on some OSes.
|
||||
|
||||
- Switched Cygwin back to using socketpair "pipes" to try to speed it up.
|
||||
|
||||
- Added knowledge of a few new options to rrsync.
|
||||
|
||||
ENHANCEMENTS:
|
||||
|
||||
- Added the --remote-option=OPT (-M OPT) command-line option that is useful
|
||||
for things like sending a remote --log-file=FILE or --fake-super option.
|
||||
- Added the support/rsync-no-vanished wrapper script.
|
||||
|
||||
- Added the --info=FLAGS and --debug=FLAGS options to allow finer-grained
|
||||
control over what is output. Added an extra type of --progress output
|
||||
using --info=progress2.
|
||||
|
||||
- The --msgs2stderr option can help with debugging rsync by allowing the
|
||||
debug messages to get output to stderr rather than travel via the socket
|
||||
protocol.
|
||||
|
||||
- Added the --delete-missing-args and --ignore-missing-args options to
|
||||
either delete or ignore user-specified files on the receiver that are
|
||||
missing on the sender (normally the absence of user-specified files
|
||||
generates an error).
|
||||
|
||||
- Added a "T" (terabyte) category to the --human-readable size suffixes.
|
||||
|
||||
- Added the --usermap/--groupmap/--chown options for manipulating file
|
||||
ownership during the copy.
|
||||
|
||||
- Added the "%C" escape to the log-output handling, which will output the
|
||||
MD5 checksum of any transferred file, or all files if --checksum was
|
||||
specified (when protocol 30 or above is in effect).
|
||||
|
||||
- Added the "reverse lookup" parameter to the rsync daemon config file to
|
||||
allow reverse-DNS lookups to be disabled.
|
||||
|
||||
- Added a forward-DNS lookup for the daemon's hosts allow/deny config. Can
|
||||
be disabled via "forward lookup" parameter (defaults to enabled).
|
||||
|
||||
- Added a way for more than one group to be specified in the daemon's
|
||||
config file, including a way to specify that you want all of the
|
||||
specified user's groups without having to name them. Also changed the
|
||||
daemon to complain about an inability to set explicitly-specified uid/gid
|
||||
values, even when not run by a super-user.
|
||||
|
||||
- The daemon now tries to send the user the error messages from the
|
||||
pre-xfer exec script when it fails.
|
||||
|
||||
- Improved the use of alt-dest options into an existing hierarchy of files:
|
||||
If a match is found in an alt-dir, it takes precedence over an existing
|
||||
file. (We'll need to wait for a future version before attribute-changes
|
||||
on otherwise unchanged files are safe when using an existing hierarchy.)
|
||||
|
||||
- Added per-user authorization options and group-authorization support to
|
||||
the daemon's "auth users" parameter.
|
||||
|
||||
- Added a way to reference environment variables in a daemon's config file
|
||||
(using %VAR% references).
|
||||
|
||||
- When replacing a non-dir with a symlink/hard-link/device/special-file,
|
||||
the update should now be done in an atomic manner.
|
||||
|
||||
- Avoid re-sending xattr info for hard-linked files w/the same xattrs
|
||||
(protocol 31).
|
||||
|
||||
- The backup code was improved to use better logic maintaining the backup
|
||||
directory hierarchy. Also, when a file is being backed up, rsync tries
|
||||
to hard-link it into place so that the upcoming replacement of the
|
||||
destination file will be atomic (for the normal, non-inplace logic).
|
||||
|
||||
- Added the ability to synchronize nano-second modified times.
|
||||
|
||||
- Added a few more default suffixes for the "dont compress" settings.
|
||||
|
||||
- Added the checking of the RSYNC_PROTECT_ARGS environment variable to allow
|
||||
the default for the --protect-args command-line option to be overridden.
|
||||
|
||||
- Added the --preallocate command-line option.
|
||||
|
||||
- Allow --password-file=- to read the password from stdin (filename "-").
|
||||
|
||||
- Rsync now comes packaged with an rsync-ssl helper script that can be
|
||||
used to contact a remote rsync daemon using a piped-stunnel command.
|
||||
It also includes an stunnel config file to run the server side to
|
||||
support ssl daemon connections. See the packaging/lsb/rsync.spec
|
||||
file for one way to package the resulting files. (Suggestions for
|
||||
how to make this even easier to install & use are welcomed.)
|
||||
|
||||
- Improved the speed of some --inplace updates when there are lots of
|
||||
identical checksum blocks that end up being unusable.
|
||||
|
||||
- Added the --outbuf=N|L|B option for choosing the output buffering.
|
||||
|
||||
- Repeating the --fuzzy option now causes the code to look for fuzzy
|
||||
matches inside alt-dest directories too.
|
||||
|
||||
- The --chmod option now supports numeric modes, e.g. --chmod=644,D755
|
||||
|
||||
- Added some Solaris xattr code.
|
||||
|
||||
- Made an rsync daemon (the listening process) exit with a 0 status when
|
||||
it was signaled to die. This helps launchd.
|
||||
|
||||
- Improved the RSYNC_* environment variables for the pre-xfer exec script:
|
||||
when a daemon is sent multiple request args, they are now joined into a
|
||||
single return value (separated by spaces) so that the RSYNC_REQUEST
|
||||
environment variable is accurate for any "pre-xfer exec". The values in
|
||||
RSYNC_ARG# vars are no longer truncated at the "." arg (prior to the
|
||||
request dirs/files), so that all the requested values are also listed
|
||||
(separately) in RSYNC_ARG# variables.
|
||||
|
||||
EXTRAS:
|
||||
|
||||
- Added an "instant-rsyncd" script to the support directory, which makes
|
||||
it easy to configure a simple rsync daemon in the current directory.
|
||||
|
||||
- Added the "mapfrom" and "mapto" scripts to the support directory, which
|
||||
makes it easier to do user/group mapping in a local transfer based on
|
||||
passwd/group files from another machine.
|
||||
|
||||
- There's a new, improved version of the lsh script in the support dir:
|
||||
it's written in perl and supports -u without resorting to using sudo
|
||||
(when run as root). The old shell version is now named lsh.sh.
|
||||
|
||||
- There is a helper script named rsync-slash-strip in the support directory
|
||||
for anyone that wants to change the way rsync handles args with trailing
|
||||
slashes. (e.g. arg/ would get stripped to arg while arg/. would turn into
|
||||
arg/).
|
||||
|
||||
INTERNAL:
|
||||
|
||||
- The I/O code was rewritten to be simpler and do bigger buffered reads
|
||||
over the socket. The I/O between the receiver and the generator was
|
||||
changed to be standard multiplexed-I/O (like that over the socket).
|
||||
|
||||
- The sender tries to use any dead time while the generator is looking for
|
||||
files to transfer in order to do sender-side directory scanning in a more
|
||||
parallel manner.
|
||||
|
||||
- A daemon can now inform a client about a daemon-configured timeout value
|
||||
so that the client can assist in the keep-alive activity (protocol 31).
|
||||
|
||||
- The filter code received some refactoring to make it more extendible, to
|
||||
read better, and do better sanity checking.
|
||||
|
||||
- Really big numbers are now output using our own big-num routine rather
|
||||
than casting them to a double and using a %.0f conversion.
|
||||
|
||||
- The pool_alloc library has received some minor improvements in alignment
|
||||
handling.
|
||||
|
||||
- Added init_stat_x() function to avoid duplication of acl/xattr init code.
|
||||
|
||||
- The included zlib was upgraded from 1.2.3 to 1.2.8.
|
||||
|
||||
- Rsync can now be compiled to use an unmodified zlib library instead of
|
||||
the tweaked one that is included with rsync. This will eventually
|
||||
become the default, at which point we'll start the countdown to removing
|
||||
the included zlib. Until then, feel free to configure using:
|
||||
|
||||
./configure --with-included-zlib=no
|
||||
|
||||
DEVELOPER RELATED:
|
||||
|
||||
- Added more conditional debug output.
|
||||
|
||||
- Fixed some build issues for android and minix.
|
||||
- Made configure more prominently mention when we failed to find yodl (in
|
||||
case the user wants to be able to generate manpages from *.yo files).
|
||||
|
||||
245
OLDNEWS
245
OLDNEWS
@@ -1,3 +1,247 @@
|
||||
NEWS for rsync 3.1.0 (28 Sep 2013)
|
||||
Protocol: 31 (changed)
|
||||
Changes since 3.0.9:
|
||||
|
||||
OUTPUT CHANGES:
|
||||
|
||||
- Output numbers in 3-digit groups by default (e.g. 1,234,567). See the
|
||||
--human-readable option for a way to turn it off. See also the daemon's
|
||||
"log format" parameter and related command-line options (including
|
||||
--out-format) for a modifier that can be used to request digit-grouping
|
||||
or human-readable output in log escapes. (Note that log output is
|
||||
unchanged by default.)
|
||||
|
||||
- The --list-only option is now affected by the --human-readable setting.
|
||||
It will display digit groupings by default, and unit suffixes if higher
|
||||
levels of readability are requested. Also, the column width for the size
|
||||
output has increased from 11 to 14 characters when human readability is
|
||||
enabled. Use --no-h to get the old-style output and column size.
|
||||
|
||||
- The output of the --progress option has changed: the string "xfer" was
|
||||
shortened to "xfr", and the string "to-check" was shortened to "to-chk",
|
||||
both designed to make room for the (by default) wider display of file
|
||||
size numbers without making the total line-length longer. Also, when
|
||||
incremental recursion is enabled, the string "ir-chk" will be used
|
||||
instead of "to-chk" up until the incremental-recursion scan is done,
|
||||
letting you know that the value to check and the total value will still
|
||||
be increasing as new files are found.
|
||||
|
||||
- Enhanced the --stats output: 1) to mention how many files were created
|
||||
(protocol >= 28), 2) to mention how many files were deleted (a new line
|
||||
for protocol 31, but only output when --delete is in effect), and 3) to
|
||||
follow the file-count, created-count, and deleted-count with a subcount
|
||||
list that shows the counts by type. The wording of the transferred count
|
||||
has also changed so that it is clearer that it is only a count of regular
|
||||
files.
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
- Fixed a bug in the iconv code when EINVAL or EILSEQ is returned with a
|
||||
full output buffer.
|
||||
|
||||
- Fixed some rare bugs in --iconv processing that might cause a multibyte
|
||||
character to get translated incorrectly.
|
||||
|
||||
- Fixed a bogus "vanished file" error if some files were specified with
|
||||
"./" prefixes and others were not.
|
||||
|
||||
- Fixed a bug in --sparse where an extra gap could get inserted after a
|
||||
partial write.
|
||||
|
||||
- Changed the way --progress overwrites its prior output in order to make
|
||||
it nearly impossible for the progress to get overwritten by an error.
|
||||
|
||||
- Improved the propagation of abnormal-exit error messages. This should
|
||||
help the client side to receive errors from the server when it is exiting
|
||||
abnormally, and should also avoid dying with an "connection unexpectedly
|
||||
closed" exit when the closed connection is really expected.
|
||||
|
||||
- The sender now checks each file it plans to remove to ensure that it
|
||||
hasn't changed from the first stat's info. This helps to avoid losing
|
||||
file data when the user is not using the option in a safe manner.
|
||||
|
||||
- Fixed a data-duplication bug in the compress option that made compression
|
||||
less efficient. This improves protocol 31 onward, while behaving in a
|
||||
compatible (buggy) manner with older rsync protocols.
|
||||
|
||||
- When creating a temp-file, rsync is now a bit smarter about it dot-char
|
||||
choices, which can fix a problem on OS X with names that start with "..".
|
||||
|
||||
- Rsync now sets a cleanup flag for --inplace and --append transfers that
|
||||
will flush the write buffer if the transfer aborts. This ensures that
|
||||
more received data gets written out to the disk on an aborted transfer
|
||||
(which is quite helpful on a slow, flaky connection).
|
||||
|
||||
- The reads that map_ptr() now does are aligned on 1K boundaries. This
|
||||
helps some filesystems and/or files that don't like unaligned reads.
|
||||
|
||||
- Fix an issue in the msleep() function if time jumps backwards.
|
||||
|
||||
- Fix daemon-server module-name splitting bug where an arg would get split
|
||||
even if --protect-args was used.
|
||||
|
||||
ENHANCEMENTS:
|
||||
|
||||
- Added the --remote-option=OPT (-M OPT) command-line option that is useful
|
||||
for things like sending a remote --log-file=FILE or --fake-super option.
|
||||
|
||||
- Added the --info=FLAGS and --debug=FLAGS options to allow finer-grained
|
||||
control over what is output. Added an extra type of --progress output
|
||||
using --info=progress2.
|
||||
|
||||
- The --msgs2stderr option can help with debugging rsync by allowing the
|
||||
debug messages to get output to stderr rather than travel via the socket
|
||||
protocol.
|
||||
|
||||
- Added the --delete-missing-args and --ignore-missing-args options to
|
||||
either delete or ignore user-specified files on the receiver that are
|
||||
missing on the sender (normally the absence of user-specified files
|
||||
generates an error).
|
||||
|
||||
- Added a "T" (terabyte) category to the --human-readable size suffixes.
|
||||
|
||||
- Added the --usermap/--groupmap/--chown options for manipulating file
|
||||
ownership during the copy.
|
||||
|
||||
- Added the "%C" escape to the log-output handling, which will output the
|
||||
MD5 checksum of any transferred file, or all files if --checksum was
|
||||
specified (when protocol 30 or above is in effect).
|
||||
|
||||
- Added the "reverse lookup" parameter to the rsync daemon config file to
|
||||
allow reverse-DNS lookups to be disabled.
|
||||
|
||||
- Added a forward-DNS lookup for the daemon's hosts allow/deny config. Can
|
||||
be disabled via "forward lookup" parameter (defaults to enabled).
|
||||
|
||||
- Added a way for more than one group to be specified in the daemon's
|
||||
config file, including a way to specify that you want all of the
|
||||
specified user's groups without having to name them. Also changed the
|
||||
daemon to complain about an inability to set explicitly-specified uid/gid
|
||||
values, even when not run by a super-user.
|
||||
|
||||
- The daemon now tries to send the user the error messages from the
|
||||
pre-xfer exec script when it fails.
|
||||
|
||||
- Improved the use of alt-dest options into an existing hierarchy of files:
|
||||
If a match is found in an alt-dir, it takes precedence over an existing
|
||||
file. (We'll need to wait for a future version before attribute-changes
|
||||
on otherwise unchanged files are safe when using an existing hierarchy.)
|
||||
|
||||
- Added per-user authorization options and group-authorization support to
|
||||
the daemon's "auth users" parameter.
|
||||
|
||||
- Added a way to reference environment variables in a daemon's config file
|
||||
(using %VAR% references).
|
||||
|
||||
- When replacing a non-dir with a symlink/hard-link/device/special-file,
|
||||
the update should now be done in an atomic manner.
|
||||
|
||||
- Avoid re-sending xattr info for hard-linked files w/the same xattrs
|
||||
(protocol 31).
|
||||
|
||||
- The backup code was improved to use better logic maintaining the backup
|
||||
directory hierarchy. Also, when a file is being backed up, rsync tries
|
||||
to hard-link it into place so that the upcoming replacement of the
|
||||
destination file will be atomic (for the normal, non-inplace logic).
|
||||
|
||||
- Added the ability to synchronize nano-second modified times.
|
||||
|
||||
- Added a few more default suffixes for the "dont compress" settings.
|
||||
|
||||
- Added the checking of the RSYNC_PROTECT_ARGS environment variable to allow
|
||||
the default for the --protect-args command-line option to be overridden.
|
||||
|
||||
- Added the --preallocate command-line option.
|
||||
|
||||
- Allow --password-file=- to read the password from stdin (filename "-").
|
||||
|
||||
- Rsync now comes packaged with an rsync-ssl helper script that can be
|
||||
used to contact a remote rsync daemon using a piped-stunnel command.
|
||||
It also includes an stunnel config file to run the server side to
|
||||
support ssl daemon connections. See the packaging/lsb/rsync.spec
|
||||
file for one way to package the resulting files. (Suggestions for
|
||||
how to make this even easier to install & use are welcomed.)
|
||||
|
||||
- Improved the speed of some --inplace updates when there are lots of
|
||||
identical checksum blocks that end up being unusable.
|
||||
|
||||
- Added the --outbuf=N|L|B option for choosing the output buffering.
|
||||
|
||||
- Repeating the --fuzzy option now causes the code to look for fuzzy
|
||||
matches inside alt-dest directories too.
|
||||
|
||||
- The --chmod option now supports numeric modes, e.g. --chmod=644,D755
|
||||
|
||||
- Added some Solaris xattr code.
|
||||
|
||||
- Made an rsync daemon (the listening process) exit with a 0 status when
|
||||
it was signaled to die. This helps launchd.
|
||||
|
||||
- Improved the RSYNC_* environment variables for the pre-xfer exec script:
|
||||
when a daemon is sent multiple request args, they are now joined into a
|
||||
single return value (separated by spaces) so that the RSYNC_REQUEST
|
||||
environment variable is accurate for any "pre-xfer exec". The values in
|
||||
RSYNC_ARG# vars are no longer truncated at the "." arg (prior to the
|
||||
request dirs/files), so that all the requested values are also listed
|
||||
(separately) in RSYNC_ARG# variables.
|
||||
|
||||
EXTRAS:
|
||||
|
||||
- Added an "instant-rsyncd" script to the support directory, which makes
|
||||
it easy to configure a simple rsync daemon in the current directory.
|
||||
|
||||
- Added the "mapfrom" and "mapto" scripts to the support directory, which
|
||||
makes it easier to do user/group mapping in a local transfer based on
|
||||
passwd/group files from another machine.
|
||||
|
||||
- There's a new, improved version of the lsh script in the support dir:
|
||||
it's written in perl and supports -u without resorting to using sudo
|
||||
(when run as root). The old shell version is now named lsh.sh.
|
||||
|
||||
- There is a helper script named rsync-slash-strip in the support directory
|
||||
for anyone that wants to change the way rsync handles args with trailing
|
||||
slashes. (e.g. arg/ would get stripped to arg while arg/. would turn into
|
||||
arg/).
|
||||
|
||||
INTERNAL:
|
||||
|
||||
- The I/O code was rewritten to be simpler and do bigger buffered reads
|
||||
over the socket. The I/O between the receiver and the generator was
|
||||
changed to be standard multiplexed-I/O (like that over the socket).
|
||||
|
||||
- The sender tries to use any dead time while the generator is looking for
|
||||
files to transfer in order to do sender-side directory scanning in a more
|
||||
parallel manner.
|
||||
|
||||
- A daemon can now inform a client about a daemon-configured timeout value
|
||||
so that the client can assist in the keep-alive activity (protocol 31).
|
||||
|
||||
- The filter code received some refactoring to make it more extendible, to
|
||||
read better, and do better sanity checking.
|
||||
|
||||
- Really big numbers are now output using our own big-num routine rather
|
||||
than casting them to a double and using a %.0f conversion.
|
||||
|
||||
- The pool_alloc library has received some minor improvements in alignment
|
||||
handling.
|
||||
|
||||
- Added init_stat_x() function to avoid duplication of acl/xattr init code.
|
||||
|
||||
- The included zlib was upgraded from 1.2.3 to 1.2.8.
|
||||
|
||||
- Rsync can now be compiled to use an unmodified zlib library instead of
|
||||
the tweaked one that is included with rsync. This will eventually
|
||||
become the default, at which point we'll start the countdown to removing
|
||||
the included zlib. Until then, feel free to configure using:
|
||||
|
||||
./configure --with-included-zlib=no
|
||||
|
||||
DEVELOPER RELATED:
|
||||
|
||||
- Added more conditional debug output.
|
||||
|
||||
- Fixed some build issues for android and minix.
|
||||
|
||||
NEWS for rsync 3.0.9 (23 Sep 2011)
|
||||
Protocol: 30 (unchanged)
|
||||
Changes since 3.0.8:
|
||||
@@ -3290,6 +3534,7 @@ Changes since 2.4.6:
|
||||
|
||||
Partial Protocol History
|
||||
RELEASE DATE VER. DATE OF COMMIT* PROTOCOL
|
||||
?? ??? 2013 3.1.1 31
|
||||
28 Sep 2013 3.1.0 31 Aug 2008 31
|
||||
23 Sep 2011 3.0.9 30
|
||||
26 Mar 2011 3.0.8 30
|
||||
|
||||
2
access.c
2
access.c
@@ -2,7 +2,7 @@
|
||||
* Routines to authenticate access to a daemon (hosts allow/deny).
|
||||
*
|
||||
* Copyright (C) 1998 Andrew Tridgell
|
||||
* Copyright (C) 2004-2013 Wayne Davison
|
||||
* Copyright (C) 2004-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
7
acls.c
7
acls.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2006-2013 Wayne Davison
|
||||
* Copyright (C) 2006-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -423,7 +423,7 @@ static BOOL pack_smb_acl(SMB_ACL_T *smb_acl, const rsync_acl *racl)
|
||||
#ifdef ACLS_NEED_MASK
|
||||
mask_bits = racl->mask_obj == NO_ENTRY ? racl->group_obj & ~NO_ENTRY : racl->mask_obj;
|
||||
COE( sys_acl_create_entry,(smb_acl, &entry) );
|
||||
COE( sys_acl_set_info,(entry, SMB_ACL_MASK, mask_bits, NULL) );
|
||||
COE( sys_acl_set_info,(entry, SMB_ACL_MASK, mask_bits, 0) );
|
||||
#else
|
||||
if (racl->mask_obj != NO_ENTRY) {
|
||||
COE( sys_acl_create_entry,(smb_acl, &entry) );
|
||||
@@ -560,7 +560,8 @@ int get_acl(const char *fname, stat_x *sxp)
|
||||
if (!preserve_devices)
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
} else if (IS_MISSING_FILE(sxp->st))
|
||||
return 0;
|
||||
|
||||
if (get_rsync_acl(fname, sxp->acc_acl, SMB_ACL_TYPE_ACCESS,
|
||||
sxp->st.st_mode) < 0) {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Support rsync daemon authentication.
|
||||
*
|
||||
* Copyright (C) 1998-2000 Andrew Tridgell
|
||||
* Copyright (C) 2002-2013 Wayne Davison
|
||||
* Copyright (C) 2002-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
backup.c
2
backup.c
@@ -2,7 +2,7 @@
|
||||
* Backup handling code.
|
||||
*
|
||||
* Copyright (C) 1999 Andrew Tridgell
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
batch.c
2
batch.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1999 Weiss
|
||||
* Copyright (C) 2004 Chris Shoemaker
|
||||
* Copyright (C) 2004-2013 Wayne Davison
|
||||
* Copyright (C) 2004-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
30
byteorder.h
30
byteorder.h
@@ -2,7 +2,7 @@
|
||||
* Simple byteorder handling.
|
||||
*
|
||||
* Copyright (C) 1992-1995 Andrew Tridgell
|
||||
* Copyright (C) 2007-2013 Wayne Davison
|
||||
* Copyright (C) 2007-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
/* We know that the x86 can handle misalignment and has the same
|
||||
* byte order (LSB-first) as the 32-bit numbers we transmit. */
|
||||
#ifdef __i386__
|
||||
#if defined __i386__ || defined __i486__ || defined __i586__ || defined __i686__ || __amd64
|
||||
#define CAREFUL_ALIGNMENT 0
|
||||
#endif
|
||||
|
||||
@@ -38,9 +38,11 @@
|
||||
|
||||
#define PVAL(buf,pos) (UVAL(buf,pos)|UVAL(buf,(pos)+1)<<8)
|
||||
#define IVAL(buf,pos) (PVAL(buf,pos)|PVAL(buf,(pos)+2)<<16)
|
||||
#define IVAL64(buf,pos) (IVAL(buf,pos)|(int64)IVAL(buf,(pos)+4)<<32)
|
||||
#define SSVALX(buf,pos,val) (CVAL(buf,pos)=(val)&0xFF,CVAL(buf,pos+1)=(val)>>8)
|
||||
#define SIVALX(buf,pos,val) (SSVALX(buf,pos,val&0xFFFF),SSVALX(buf,pos+2,val>>16))
|
||||
#define SIVAL(buf,pos,val) SIVALX((buf),(pos),((uint32)(val)))
|
||||
#define SIVAL(buf,pos,val) SIVALX(buf,pos,(uint32)(val))
|
||||
#define SIVAL64(buf,pos,val) (SIVAL(buf,pos,val),SIVAL(buf,(pos)+4,(val)>>32))
|
||||
|
||||
#define IVALu(buf,pos) IVAL(buf,pos)
|
||||
#define SIVALu(buf,pos,val) SIVAL(buf,pos,val)
|
||||
@@ -95,6 +97,28 @@ SIVAL(char *buf, int pos, uint32 val)
|
||||
SIVALu((uchar*)buf, pos, val);
|
||||
}
|
||||
|
||||
static inline int64
|
||||
IVAL64(const char *buf, int pos)
|
||||
{
|
||||
union {
|
||||
const char *b;
|
||||
const int64 *num;
|
||||
} u;
|
||||
u.b = buf + pos;
|
||||
return *u.num;
|
||||
}
|
||||
|
||||
static inline void
|
||||
SIVAL64(char *buf, int pos, int64 val)
|
||||
{
|
||||
union {
|
||||
char *b;
|
||||
int64 *num;
|
||||
} u;
|
||||
u.b = buf + pos;
|
||||
*u.num = val;
|
||||
}
|
||||
|
||||
# endif /* !AVOID_BYTEORDER_INLINE */
|
||||
|
||||
#endif /* !CAREFUL_ALIGNMENT */
|
||||
|
||||
2
case_N.h
2
case_N.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Allow an arbitrary sequence of case labels.
|
||||
*
|
||||
* Copyright (C) 2006-2013 Wayne Davison
|
||||
* Copyright (C) 2006-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2004-2013 Wayne Davison
|
||||
* Copyright (C) 2004-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
chmod.c
2
chmod.c
@@ -2,7 +2,7 @@
|
||||
* Implement the core of the --chmod option.
|
||||
*
|
||||
* Copyright (C) 2002 Scott Howard
|
||||
* Copyright (C) 2005-2013 Wayne Davison
|
||||
* Copyright (C) 2005-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2000 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2002 Martin Pool
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -156,8 +156,6 @@ NORETURN void _exit_cleanup(int code, const char *file, int line)
|
||||
switch_step++;
|
||||
|
||||
if (cleanup_got_literal && (cleanup_fname || cleanup_fd_w != -1)) {
|
||||
const char *fname = cleanup_fname;
|
||||
cleanup_fname = NULL;
|
||||
if (cleanup_fd_r != -1) {
|
||||
close(cleanup_fd_r);
|
||||
cleanup_fd_r = -1;
|
||||
@@ -167,9 +165,11 @@ NORETURN void _exit_cleanup(int code, const char *file, int line)
|
||||
close(cleanup_fd_w);
|
||||
cleanup_fd_w = -1;
|
||||
}
|
||||
if (fname && cleanup_new_fname && keep_partial
|
||||
if (cleanup_fname && cleanup_new_fname && keep_partial
|
||||
&& handle_partial_dir(cleanup_new_fname, PDIR_CREATE)) {
|
||||
int tweak_modtime = 0;
|
||||
const char *fname = cleanup_fname;
|
||||
cleanup_fname = NULL;
|
||||
if (!partial_dir) {
|
||||
/* We don't want to leave a partial file with a modern time or it
|
||||
* could be skipped via --update. Setting the time to something
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1992-2001 Andrew Tridgell <tridge@samba.org>
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2002-2013 Wayne Davison
|
||||
* Copyright (C) 2002-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1998-2001 Andrew Tridgell <tridge@samba.org>
|
||||
* Copyright (C) 2001-2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2002-2013 Wayne Davison
|
||||
* Copyright (C) 2002-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
compat.c
2
compat.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) Andrew Tridgell 1996
|
||||
* Copyright (C) Paul Mackerras 1996
|
||||
* Copyright (C) 2004-2013 Wayne Davison
|
||||
* Copyright (C) 2004-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
13
configure.ac
13
configure.ac
@@ -3,9 +3,9 @@ dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT()
|
||||
AC_CONFIG_SRCDIR([byteorder.h])
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
AC_PREREQ(2.59)
|
||||
AC_PREREQ(2.60)
|
||||
|
||||
RSYNC_VERSION=3.1.0
|
||||
RSYNC_VERSION=3.1.1pre1
|
||||
AC_SUBST(RSYNC_VERSION)
|
||||
AC_MSG_NOTICE([Configuring rsync $RSYNC_VERSION])
|
||||
|
||||
@@ -739,11 +739,7 @@ AC_TRY_RUN([
|
||||
|
||||
main() {
|
||||
int fd[2];
|
||||
#ifdef __CYGWIN__
|
||||
exit(1);
|
||||
#else
|
||||
exit((socketpair(AF_UNIX, SOCK_STREAM, 0, fd) != -1) ? 0 : 1);
|
||||
#endif
|
||||
}],
|
||||
rsync_cv_HAVE_SOCKETPAIR=yes,rsync_cv_HAVE_SOCKETPAIR=no,rsync_cv_HAVE_SOCKETPAIR=cross)])
|
||||
if test x"$rsync_cv_HAVE_SOCKETPAIR" = x"yes"; then
|
||||
@@ -1112,3 +1108,8 @@ AC_OUTPUT
|
||||
AC_MSG_RESULT()
|
||||
AC_MSG_RESULT([ rsync ${RSYNC_VERSION} configuration successful])
|
||||
AC_MSG_RESULT()
|
||||
if test x$HAVE_YODL2MAN != x1; then
|
||||
AC_MSG_RESULT([ Note that yodl2man was not found, so pre-existing manpage files will be])
|
||||
AC_MSG_RESULT([ used w/o change (if available) -- no .yo file changes will be used.])
|
||||
AC_MSG_RESULT()
|
||||
fi
|
||||
|
||||
4
delete.c
4
delete.c
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2000 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -199,7 +199,7 @@ enum delret delete_item(char *fbuf, uint16 mode, uint16 flags)
|
||||
fbuf);
|
||||
ret = DR_NOT_EMPTY;
|
||||
} else if (errno != ENOENT) {
|
||||
rsyserr(FERROR, errno, "delete_file: %s(%s) failed",
|
||||
rsyserr(FERROR_XFER, errno, "delete_file: %s(%s) failed",
|
||||
what, fbuf);
|
||||
ret = DR_FAILURE;
|
||||
} else
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Error codes returned by rsync.
|
||||
*
|
||||
* Copyright (C) 1998-2000 Andrew Tridgell
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2001 Andrew Tridgell <tridge@samba.org>
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2002 Martin Pool
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -356,7 +356,7 @@ static char *parse_merge_name(const char *merge_file, unsigned int *len_ptr,
|
||||
fn_len = clean_fname(fn, CFN_COLLAPSE_DOT_DOT_DIRS);
|
||||
}
|
||||
|
||||
/* If the name isn't in buf yet, it's wasn't absolute. */
|
||||
/* If the name isn't in buf yet, it wasn't absolute. */
|
||||
if (fn != buf) {
|
||||
int d_len = dirbuf_len - prefix_skip;
|
||||
if (d_len + fn_len >= MAXPATHLEN) {
|
||||
|
||||
2
fileio.c
2
fileio.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1998 Andrew Tridgell
|
||||
* Copyright (C) 2002 Martin Pool
|
||||
* Copyright (C) 2004-2013 Wayne Davison
|
||||
* Copyright (C) 2004-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
8
flist.c
8
flist.c
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2002-2013 Wayne Davison
|
||||
* Copyright (C) 2002-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -1156,7 +1156,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
|
||||
if (sanitize_paths)
|
||||
sanitize_path(thisname, thisname, "", 0, SP_DEFAULT);
|
||||
|
||||
if (stp && (S_ISDIR(stp->st_mode) || stp->st_mode == 0)) {
|
||||
if (stp && (S_ISDIR(stp->st_mode) || IS_MISSING_FILE(*stp))) {
|
||||
/* This is needed to handle a "symlink/." with a --relative
|
||||
* dir, or a request to delete a specific file. */
|
||||
st = *stp;
|
||||
@@ -1200,7 +1200,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
|
||||
full_fname(thisname));
|
||||
}
|
||||
return NULL;
|
||||
} else if (st.st_mode == 0) {
|
||||
} else if (IS_MISSING_FILE(st)) {
|
||||
io_error |= IOERR_GENERAL;
|
||||
rprintf(FINFO, "skipping file with bogus (zero) st_mode: %s\n",
|
||||
full_fname(thisname));
|
||||
@@ -2290,7 +2290,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
|
||||
} else
|
||||
fn = p;
|
||||
send_implied_dirs(f, flist, fbuf, fbuf, p, flags,
|
||||
st.st_mode == 0 ? MISSING_NAME : name_type);
|
||||
IS_MISSING_FILE(st) ? MISSING_NAME : name_type);
|
||||
if (fn == p)
|
||||
continue;
|
||||
}
|
||||
|
||||
18
generator.c
18
generator.c
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2000 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -550,9 +550,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
|
||||
#ifdef SUPPORT_XATTRS
|
||||
if (preserve_xattrs && do_xfers
|
||||
&& iflags & (ITEM_REPORT_XATTR|ITEM_TRANSFER)) {
|
||||
int fd = iflags & ITEM_REPORT_XATTR
|
||||
&& (protocol_version < 31 || !BITS_SET(iflags, ITEM_XNAME_FOLLOWS|ITEM_LOCAL_CHANGE))
|
||||
? sock_f_out : -1;
|
||||
int fd = iflags & ITEM_REPORT_XATTR ? sock_f_out : -1;
|
||||
send_xattr_request(NULL, file, fd);
|
||||
}
|
||||
#endif
|
||||
@@ -1520,15 +1518,17 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
|
||||
goto cleanup;
|
||||
itemizing = 0;
|
||||
code = FNONE;
|
||||
} else if (j >= 0)
|
||||
} else if (j >= 0) {
|
||||
statret = 1;
|
||||
fnamecmp = fnamecmpbuf;
|
||||
}
|
||||
}
|
||||
if (atomic_create(file, fname, sl, MAKEDEV(0, 0), &sx, statret == 0 ? DEL_FOR_SYMLINK : 0)) {
|
||||
set_file_attrs(fname, file, NULL, NULL, 0);
|
||||
if (itemizing) {
|
||||
if (statret == 0 && !S_ISLNK(sx.st.st_mode))
|
||||
statret = -1;
|
||||
itemize(fname, file, ndx, statret, &sx,
|
||||
itemize(fnamecmp, file, ndx, statret, &sx,
|
||||
ITEM_LOCAL_CHANGE|ITEM_REPORT_CHANGE, 0, NULL);
|
||||
}
|
||||
if (code != FNONE && INFO_GTE(NAME, 1))
|
||||
@@ -1594,8 +1594,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
|
||||
goto cleanup;
|
||||
itemizing = 0;
|
||||
code = FNONE;
|
||||
} else if (j >= 0)
|
||||
} else if (j >= 0) {
|
||||
statret = 1;
|
||||
fnamecmp = fnamecmpbuf;
|
||||
}
|
||||
}
|
||||
if (DEBUG_GTE(GENR, 1)) {
|
||||
rprintf(FINFO, "mknod(%s, 0%o, [%ld,%ld])\n",
|
||||
@@ -1605,7 +1607,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
|
||||
if (atomic_create(file, fname, NULL, rdev, &sx, del_for_flag)) {
|
||||
set_file_attrs(fname, file, NULL, NULL, 0);
|
||||
if (itemizing) {
|
||||
itemize(fname, file, ndx, statret, &sx,
|
||||
itemize(fnamecmp, file, ndx, statret, &sx,
|
||||
ITEM_LOCAL_CHANGE|ITEM_REPORT_CHANGE, 0, NULL);
|
||||
}
|
||||
if (code != FNONE && INFO_GTE(NAME, 1))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* `id -G` on Linux, but it's too hard to find a portable equivalent.
|
||||
*
|
||||
* Copyright (C) 2002 Martin Pool
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 3 as
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Routines to provide a memory-efficient hashtable.
|
||||
*
|
||||
* Copyright (C) 2007-2013 Wayne Davison
|
||||
* Copyright (C) 2007-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
hlink.c
2
hlink.c
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2004-2013 Wayne Davison
|
||||
* Copyright (C) 2004-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
ifuncs.h
2
ifuncs.h
@@ -1,6 +1,6 @@
|
||||
/* Inline functions for rsync.
|
||||
*
|
||||
* Copyright (C) 2007-2013 Wayne Davison
|
||||
* Copyright (C) 2007-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
inums.h
2
inums.h
@@ -1,6 +1,6 @@
|
||||
/* Inline functions for rsync.
|
||||
*
|
||||
* Copyright (C) 2008 Wayne Davison
|
||||
* Copyright (C) 2008-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
64
io.c
64
io.c
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2001 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -155,7 +155,7 @@ static void read_a_msg(void);
|
||||
static void drain_multiplex_messages(void);
|
||||
static void sleep_for_bwlimit(int bytes_written);
|
||||
|
||||
static void check_timeout(BOOL allow_keepalive)
|
||||
static void check_timeout(BOOL allow_keepalive, int keepalive_flags)
|
||||
{
|
||||
time_t t, chk;
|
||||
|
||||
@@ -177,7 +177,7 @@ static void check_timeout(BOOL allow_keepalive)
|
||||
|
||||
if (allow_keepalive) {
|
||||
/* This may put data into iobuf.msg w/o flushing. */
|
||||
maybe_send_keepalive(t, 0);
|
||||
maybe_send_keepalive(t, keepalive_flags);
|
||||
}
|
||||
|
||||
if (!last_io_in)
|
||||
@@ -232,28 +232,10 @@ static NORETURN void whine_about_eof(BOOL allow_kluge)
|
||||
* the socket except very early in the transfer. */
|
||||
static size_t safe_read(int fd, char *buf, size_t len)
|
||||
{
|
||||
size_t got;
|
||||
int n;
|
||||
size_t got = 0;
|
||||
|
||||
assert(fd != iobuf.in_fd);
|
||||
|
||||
n = read(fd, buf, len);
|
||||
if ((size_t)n == len || n == 0) {
|
||||
if (DEBUG_GTE(IO, 2))
|
||||
rprintf(FINFO, "[%s] safe_read(%d)=%ld\n", who_am_i(), fd, (long)n);
|
||||
return n;
|
||||
}
|
||||
if (n < 0) {
|
||||
if (errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN) {
|
||||
read_failed:
|
||||
rsyserr(FERROR, errno, "safe_read failed to read %ld bytes [%s]",
|
||||
(long)len, who_am_i());
|
||||
exit_cleanup(RERR_STREAMIO);
|
||||
}
|
||||
got = 0;
|
||||
} else
|
||||
got = n;
|
||||
|
||||
while (1) {
|
||||
struct timeval tv;
|
||||
fd_set r_fds, e_fds;
|
||||
@@ -273,8 +255,7 @@ static size_t safe_read(int fd, char *buf, size_t len)
|
||||
who_am_i());
|
||||
exit_cleanup(RERR_FILEIO);
|
||||
}
|
||||
if (io_timeout)
|
||||
maybe_send_keepalive(time(NULL), MSK_ALLOW_FLUSH);
|
||||
check_timeout(1, MSK_ALLOW_FLUSH);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -282,7 +263,7 @@ static size_t safe_read(int fd, char *buf, size_t len)
|
||||
rprintf(FINFO, "select exception on fd %d\n", fd); */
|
||||
|
||||
if (FD_ISSET(fd, &r_fds)) {
|
||||
n = read(fd, buf + got, len - got);
|
||||
int n = read(fd, buf + got, len - got);
|
||||
if (DEBUG_GTE(IO, 2))
|
||||
rprintf(FINFO, "[%s] safe_read(%d)=%ld\n", who_am_i(), fd, (long)n);
|
||||
if (n == 0)
|
||||
@@ -290,7 +271,9 @@ static size_t safe_read(int fd, char *buf, size_t len)
|
||||
if (n < 0) {
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
goto read_failed;
|
||||
rsyserr(FERROR, errno, "safe_read failed to read %ld bytes [%s]",
|
||||
(long)len, who_am_i());
|
||||
exit_cleanup(RERR_STREAMIO);
|
||||
}
|
||||
if ((got += (size_t)n) == len)
|
||||
break;
|
||||
@@ -768,7 +751,7 @@ static char *perform_io(size_t needed, int flags)
|
||||
send_extra_file_list(sock_f_out, -1);
|
||||
extra_flist_sending_enabled = !flist_eof;
|
||||
} else
|
||||
check_timeout((flags & PIO_NEED_INPUT) != 0);
|
||||
check_timeout((flags & PIO_NEED_INPUT) != 0, 0);
|
||||
FD_ZERO(&r_fds); /* Just in case... */
|
||||
FD_ZERO(&w_fds);
|
||||
}
|
||||
@@ -1388,6 +1371,14 @@ void maybe_send_keepalive(time_t now, int flags)
|
||||
if (flags & MSK_ACTIVE_RECEIVER)
|
||||
last_io_in = now; /* Fudge things when we're working hard on the files. */
|
||||
|
||||
/* Early in the transfer (before the receiver forks) the receiving side doesn't
|
||||
* care if it hasn't sent data in a while as long as it is receiving data (in
|
||||
* fact, a pre-3.1.0 rsync would die if we tried to send it a keep alive during
|
||||
* this time). So, if we're an early-receiving proc, just return and let the
|
||||
* incoming data determine if we timeout. */
|
||||
if (!am_sender && !am_receiver && !am_generator)
|
||||
return;
|
||||
|
||||
if (now - last_io_out >= allowed_lull) {
|
||||
/* The receiver is special: it only sends keep-alive messages if it is
|
||||
* actively receiving data. Otherwise, it lets the generator timeout. */
|
||||
@@ -1794,7 +1785,7 @@ int64 read_varlong(int f, uchar min_bytes)
|
||||
#if SIZEOF_INT64 < 8
|
||||
u.x = IVAL(u.b,0);
|
||||
#elif CAREFUL_ALIGNMENT
|
||||
u.x = IVAL(u.b,0) | (((int64)IVAL(u.b,4))<<32);
|
||||
u.x = IVAL64(u.b,0);
|
||||
#endif
|
||||
return u.x;
|
||||
}
|
||||
@@ -2046,10 +2037,10 @@ void write_varlong(int f, int64 x, uchar min_bytes)
|
||||
uchar bit;
|
||||
int cnt = 8;
|
||||
|
||||
SIVAL(b, 1, x);
|
||||
#if SIZEOF_INT64 >= 8
|
||||
SIVAL(b, 5, x >> 32);
|
||||
SIVAL64(b, 1, x);
|
||||
#else
|
||||
SIVAL(b, 1, x);
|
||||
if (x <= 0x7FFFFFFF && x >= 0)
|
||||
memset(b + 5, 0, 4);
|
||||
else {
|
||||
@@ -2096,6 +2087,19 @@ void write_longint(int f, int64 x)
|
||||
#endif
|
||||
}
|
||||
|
||||
void write_bigbuf(int f, const char *buf, size_t len)
|
||||
{
|
||||
size_t half_max = (iobuf.out.size - iobuf.out_empty_len) / 2;
|
||||
|
||||
while (len > half_max + 1024) {
|
||||
write_buf(f, buf, half_max);
|
||||
buf += half_max;
|
||||
len -= half_max;
|
||||
}
|
||||
|
||||
write_buf(f, buf, len);
|
||||
}
|
||||
|
||||
void write_buf(int f, const char *buf, size_t len)
|
||||
{
|
||||
size_t pos, siz;
|
||||
|
||||
2
io.h
2
io.h
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2007-2013 Wayne Davison
|
||||
* Copyright (C) 2007-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
itypes.h
2
itypes.h
@@ -1,6 +1,6 @@
|
||||
/* Inline functions for rsync.
|
||||
*
|
||||
* Copyright (C) 2007-2013 Wayne Davison
|
||||
* Copyright (C) 2007-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1998 Andrew Tridgell
|
||||
* Copyright (C) 2002 Martin Pool
|
||||
* Copyright (C) 2004, 2005, 2006 Wayne Davison
|
||||
* Copyright (C) 2004-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* An implementation of MD4 designed for use in the SMB authentication protocol.
|
||||
*
|
||||
* Copyright (C) 1997-1998 Andrew Tridgell
|
||||
* Copyright (C) 2005-2008 Wayne Davison
|
||||
* Copyright (C) 2005-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2001 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003, 2006 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Unix SMB/CIFS implementation.
|
||||
* Based on the Samba ACL support code.
|
||||
* Copyright (C) Jeremy Allison 2000.
|
||||
* Copyright (C) 2007-2008 Wayne Davison
|
||||
* Copyright (C) 2007-2014 Wayne Davison
|
||||
*
|
||||
* The permission functions have been changed to get/set all bits via
|
||||
* one call. Some functions that rsync doesn't need were also removed.
|
||||
@@ -873,6 +873,10 @@ int sys_acl_get_tag_type(SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *type_p)
|
||||
|
||||
#define INITIAL_ACL_SIZE 16
|
||||
|
||||
#ifndef NACLENTRIES
|
||||
#define NACLENTRIES 0
|
||||
#endif
|
||||
|
||||
SMB_ACL_T sys_acl_get_file(const char *path_p, SMB_ACL_TYPE_T type)
|
||||
{
|
||||
SMB_ACL_T acl_d;
|
||||
@@ -909,7 +913,7 @@ SMB_ACL_T sys_acl_get_file(const char *path_p, SMB_ACL_TYPE_T type)
|
||||
|
||||
sys_acl_free_acl(acl_d);
|
||||
|
||||
if ((count = acl(path_p, ACL_CNT, 0, NULL)) < 0) {
|
||||
if ((count = acl(path_p, ACL_CNT, NACLENTRIES, NULL)) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Version 2.2.x
|
||||
* Portable SMB ACL interface
|
||||
* Copyright (C) Jeremy Allison 2000
|
||||
* Copyright (C) 2007-2008 Wayne Davison
|
||||
* Copyright (C) 2007-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Extended attribute support for rsync.
|
||||
*
|
||||
* Copyright (C) 2004 Red Hat, Inc.
|
||||
* Copyright (C) 2003-2008 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
* Written by Jay Fenlason.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -24,6 +24,10 @@
|
||||
|
||||
#ifdef SUPPORT_XATTRS
|
||||
|
||||
#ifdef HAVE_OSX_XATTRS
|
||||
#define GETXATTR_FETCH_LIMIT (64*1024*1024)
|
||||
#endif
|
||||
|
||||
#if defined HAVE_LINUX_XATTRS
|
||||
|
||||
ssize_t sys_lgetxattr(const char *path, const char *name, void *value, size_t size)
|
||||
@@ -55,7 +59,24 @@ ssize_t sys_llistxattr(const char *path, char *list, size_t size)
|
||||
|
||||
ssize_t sys_lgetxattr(const char *path, const char *name, void *value, size_t size)
|
||||
{
|
||||
return getxattr(path, name, value, size, 0, XATTR_NOFOLLOW);
|
||||
ssize_t len = getxattr(path, name, value, size, 0, XATTR_NOFOLLOW);
|
||||
|
||||
/* If we're retrieving data, handle resource forks > 64MB specially */
|
||||
if (value != NULL && len == GETXATTR_FETCH_LIMIT && (size_t)len < size) {
|
||||
/* getxattr will only return 64MB of data at a time, need to call again with a new offset */
|
||||
u_int32_t offset = len;
|
||||
size_t data_retrieved = len;
|
||||
while (data_retrieved < size) {
|
||||
len = getxattr(path, name, value + offset, size - data_retrieved, offset, XATTR_NOFOLLOW);
|
||||
if (len <= 0)
|
||||
break;
|
||||
data_retrieved += len;
|
||||
offset += (u_int32_t)len;
|
||||
}
|
||||
len = data_retrieved;
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
ssize_t sys_fgetxattr(int filedes, const char *name, void *value, size_t size)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* and Karl Auer. Some of the changes are:
|
||||
*
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison <wayned@samba.org>
|
||||
* Copyright (C) 2003-2014 Wayne Davison <wayned@samba.org>
|
||||
*/
|
||||
|
||||
/* Load parameters.
|
||||
|
||||
16
log.c
16
log.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1998-2001 Andrew Tridgell <tridge@samba.org>
|
||||
* Copyright (C) 2000-2001 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -846,13 +846,13 @@ void log_delete(const char *fname, int mode)
|
||||
|
||||
x.file.mode = mode;
|
||||
|
||||
if (!INFO_GTE(DEL, 1) && !stdout_format)
|
||||
;
|
||||
else if (am_server && protocol_version >= 29 && len < MAXPATHLEN) {
|
||||
if (am_server && protocol_version >= 29 && len < MAXPATHLEN) {
|
||||
if (S_ISDIR(mode))
|
||||
len++; /* directories include trailing null */
|
||||
send_msg(MSG_DELETED, fname, len, am_generator);
|
||||
} else {
|
||||
} else if (!INFO_GTE(DEL, 1) && !stdout_format)
|
||||
;
|
||||
else {
|
||||
fmt = stdout_format_has_o_or_i ? stdout_format : "deleting %n";
|
||||
log_formatted(FCLIENT, fmt, "del.", &x.file, fname, ITEM_DELETED, NULL);
|
||||
}
|
||||
@@ -874,9 +874,9 @@ void log_exit(int code, const char *file, int line)
|
||||
{
|
||||
if (code == 0) {
|
||||
rprintf(FLOG,"sent %s bytes received %s bytes total size %s\n",
|
||||
comma_num(stats.total_written),
|
||||
comma_num(stats.total_read),
|
||||
comma_num(stats.total_size));
|
||||
big_num(stats.total_written),
|
||||
big_num(stats.total_read),
|
||||
big_num(stats.total_size));
|
||||
} else if (am_server != 2) {
|
||||
const char *name;
|
||||
|
||||
|
||||
2
main.c
2
main.c
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2001 Andrew Tridgell <tridge@samba.org>
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
match.c
2
match.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1998-2001 Andrew Tridgell <tridge@samba.org>
|
||||
* Copyright (C) 2000, 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2002-2013 Wayne Davison
|
||||
* Copyright (C) 2002-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -611,7 +611,7 @@ static void print_rsync_version(enum logcode f)
|
||||
|
||||
rprintf(f, "%s version %s protocol version %d%s\n",
|
||||
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
|
||||
rprintf(f, "Copyright (C) 1996-2013 by Andrew Tridgell, Wayne Davison, and others.\n");
|
||||
rprintf(f, "Copyright (C) 1996-2014 by Andrew Tridgell, Wayne Davison, and others.\n");
|
||||
rprintf(f, "Web site: http://rsync.samba.org/\n");
|
||||
rprintf(f, "Capabilities:\n");
|
||||
rprintf(f, " %d-bit files, %d-bit inums, %d-bit timestamps, %d-bit long ints,\n",
|
||||
@@ -2456,7 +2456,9 @@ void server_options(char **args, int *argc_p)
|
||||
|
||||
set_allow_inc_recurse();
|
||||
|
||||
/* Checking the pre-negotiated value allows --protocol=29 override. */
|
||||
/* We don't really know the actual protocol_version at this point,
|
||||
* but checking the pre-negotiated value allows the user to use a
|
||||
* --protocol=29 override to avoid the use of this -eFLAGS opt. */
|
||||
if (protocol_version >= 30) {
|
||||
/* We make use of the -e option to let the server know about
|
||||
* any pre-release protocol version && some behavior flags. */
|
||||
@@ -2477,6 +2479,7 @@ void server_options(char **args, int *argc_p)
|
||||
#ifdef ICONV_OPTION
|
||||
argstr[x++] = 's';
|
||||
#endif
|
||||
argstr[x++] = 'f';
|
||||
}
|
||||
|
||||
if (x >= (int)sizeof argstr) { /* Not possible... */
|
||||
|
||||
@@ -8,7 +8,9 @@ our %short_no_arg;
|
||||
our %short_with_num;
|
||||
our %long_opt = (
|
||||
'daemon' => -1,
|
||||
'debug' => 1,
|
||||
'fake-super' => 0,
|
||||
'info' => 1,
|
||||
'log-file' => 3,
|
||||
);
|
||||
our $last_long_opt;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
Summary: A fast, versatile, remote (and local) file-copying tool
|
||||
Name: rsync
|
||||
Version: 3.1.0
|
||||
%define fullversion %{version}
|
||||
Release: 1
|
||||
%define srcdir src
|
||||
Version: 3.1.1
|
||||
%define fullversion %{version}pre1
|
||||
Release: 0.1.pre1
|
||||
%define srcdir src-previews
|
||||
Group: Applications/Internet
|
||||
Source0: http://rsync.samba.org/ftp/rsync/%{srcdir}/rsync-%{fullversion}.tar.gz
|
||||
#Source1: http://rsync.samba.org/ftp/rsync/%{srcdir}/rsync-patches-%{fullversion}.tar.gz
|
||||
@@ -89,8 +89,8 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%dir /etc/rsync-ssl/certs
|
||||
|
||||
%changelog
|
||||
* Sat Sep 28 2013 Wayne Davison <wayned@samba.org>
|
||||
Released 3.1.0.
|
||||
* Sun Jan 26 2014 Wayne Davison <wayned@samba.org>
|
||||
Released 3.1.1pre1.
|
||||
|
||||
* Fri Mar 21 2008 Wayne Davison <wayned@samba.org>
|
||||
Added installation of /etc/xinetd.d/rsync file and some commented-out
|
||||
|
||||
2
pipe.c
2
pipe.c
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2000 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2004-2013 Wayne Davison
|
||||
* Copyright (C) 2004-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2000 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1996-2000 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -580,16 +580,14 @@ int recv_files(int f_in, int f_out, char *local_name)
|
||||
rprintf(FINFO, "recv_files(%s)\n", fname);
|
||||
|
||||
#ifdef SUPPORT_XATTRS
|
||||
if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers
|
||||
&& (protocol_version < 31 || !BITS_SET(iflags, ITEM_XNAME_FOLLOWS|ITEM_LOCAL_CHANGE)))
|
||||
if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers)
|
||||
recv_xattr_request(file, f_in);
|
||||
#endif
|
||||
|
||||
if (!(iflags & ITEM_TRANSFER)) {
|
||||
maybe_log_item(file, iflags, itemizing, xname);
|
||||
#ifdef SUPPORT_XATTRS
|
||||
if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers
|
||||
&& !BITS_SET(iflags, ITEM_XNAME_FOLLOWS|ITEM_LOCAL_CHANGE))
|
||||
if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers)
|
||||
set_file_attrs(fname, file, NULL, fname, 0);
|
||||
#endif
|
||||
if (iflags & ITEM_IS_NEW) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* A pre-compilation helper program to aid in the creation of rounding.h.
|
||||
*
|
||||
* Copyright (C) 2007-2013 Wayne Davison
|
||||
* Copyright (C) 2007-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
52
rsync.c
52
rsync.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -489,31 +489,6 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
|
||||
get_acl(fname, sxp);
|
||||
#endif
|
||||
|
||||
#ifdef SUPPORT_XATTRS
|
||||
if (am_root < 0)
|
||||
set_stat_xattr(fname, file, new_mode);
|
||||
if (preserve_xattrs && fnamecmp)
|
||||
set_xattr(fname, file, fnamecmp, sxp);
|
||||
#endif
|
||||
|
||||
if (!preserve_times
|
||||
|| (!(preserve_times & PRESERVE_DIR_TIMES) && S_ISDIR(sxp->st.st_mode))
|
||||
|| (!(preserve_times & PRESERVE_LINK_TIMES) && S_ISLNK(sxp->st.st_mode)))
|
||||
flags |= ATTRS_SKIP_MTIME;
|
||||
if (!(flags & ATTRS_SKIP_MTIME)
|
||||
&& cmp_time(sxp->st.st_mtime, file->modtime) != 0) {
|
||||
int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode);
|
||||
if (ret < 0) {
|
||||
rsyserr(FERROR_XFER, errno, "failed to set times on %s",
|
||||
full_fname(fname));
|
||||
goto cleanup;
|
||||
}
|
||||
if (ret == 0) /* ret == 1 if symlink could not be set */
|
||||
updated = 1;
|
||||
else
|
||||
file->flags |= FLAG_TIME_FAILED;
|
||||
}
|
||||
|
||||
change_uid = am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file);
|
||||
change_gid = gid_ndx && !(file->flags & FLAG_SKIP_GROUP)
|
||||
&& sxp->st.st_gid != (gid_t)F_GROUP(file);
|
||||
@@ -561,6 +536,31 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
|
||||
updated = 1;
|
||||
}
|
||||
|
||||
#ifdef SUPPORT_XATTRS
|
||||
if (am_root < 0)
|
||||
set_stat_xattr(fname, file, new_mode);
|
||||
if (preserve_xattrs && fnamecmp)
|
||||
set_xattr(fname, file, fnamecmp, sxp);
|
||||
#endif
|
||||
|
||||
if (!preserve_times
|
||||
|| (!(preserve_times & PRESERVE_DIR_TIMES) && S_ISDIR(sxp->st.st_mode))
|
||||
|| (!(preserve_times & PRESERVE_LINK_TIMES) && S_ISLNK(sxp->st.st_mode)))
|
||||
flags |= ATTRS_SKIP_MTIME;
|
||||
if (!(flags & ATTRS_SKIP_MTIME)
|
||||
&& cmp_time(sxp->st.st_mtime, file->modtime) != 0) {
|
||||
int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode);
|
||||
if (ret < 0) {
|
||||
rsyserr(FERROR_XFER, errno, "failed to set times on %s",
|
||||
full_fname(fname));
|
||||
goto cleanup;
|
||||
}
|
||||
if (ret == 0) /* ret == 1 if symlink could not be set */
|
||||
updated = 1;
|
||||
else
|
||||
file->flags |= FLAG_TIME_FAILED;
|
||||
}
|
||||
|
||||
#ifdef SUPPORT_ACLS
|
||||
/* It's OK to call set_acl() now, even for a dir, as the generator
|
||||
* will enable owner-writability using chmod, if necessary.
|
||||
|
||||
4
rsync.h
4
rsync.h
@@ -2,7 +2,7 @@
|
||||
* Copyright (C) 1996, 2000 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -787,6 +787,8 @@ extern int xattrs_ndx;
|
||||
#define DIR_FIRST_CHILD(a) (a)[1]
|
||||
#define DIR_NEXT_SIBLING(a) (a)[2]
|
||||
|
||||
#define IS_MISSING_FILE(statbuf) ((statbuf).st_mode == 0)
|
||||
|
||||
/*
|
||||
* Start the flist array at FLIST_START entries and grow it
|
||||
* by doubling until FLIST_LINEAR then grow by FLIST_LINEAR
|
||||
|
||||
4
rsync.yo
4
rsync.yo
@@ -1,5 +1,5 @@
|
||||
mailto(rsync-bugs@samba.org)
|
||||
manpage(rsync)(1)(28 Sep 2013)()()
|
||||
manpage(rsync)(1)(26 Jan 2014)()()
|
||||
manpagename(rsync)(a fast, versatile, remote (and local) file-copying tool)
|
||||
manpagesynopsis()
|
||||
|
||||
@@ -3361,7 +3361,7 @@ url(http://rsync.samba.org/)(http://rsync.samba.org/)
|
||||
|
||||
manpagesection(VERSION)
|
||||
|
||||
This man page is current for version 3.1.0 of rsync.
|
||||
This man page is current for version 3.1.1pre1 of rsync.
|
||||
|
||||
manpagesection(INTERNAL OPTIONS)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
mailto(rsync-bugs@samba.org)
|
||||
manpage(rsyncd.conf)(5)(28 Sep 2013)()()
|
||||
manpage(rsyncd.conf)(5)(26 Jan 2014)()()
|
||||
manpagename(rsyncd.conf)(configuration file for rsync in daemon mode)
|
||||
manpagesynopsis()
|
||||
|
||||
@@ -894,7 +894,7 @@ url(http://rsync.samba.org/)(http://rsync.samba.org/)
|
||||
|
||||
manpagesection(VERSION)
|
||||
|
||||
This man page is current for version 3.1.0 of rsync.
|
||||
This man page is current for version 3.1.1pre1 of rsync.
|
||||
|
||||
manpagesection(CREDITS)
|
||||
|
||||
|
||||
5
sender.c
5
sender.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -177,8 +177,7 @@ static void write_ndx_and_attrs(int f_out, int ndx, int iflags,
|
||||
if (iflags & ITEM_XNAME_FOLLOWS)
|
||||
write_vstring(f_out, buf, len);
|
||||
#ifdef SUPPORT_XATTRS
|
||||
if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers
|
||||
&& (protocol_version < 31 || !BITS_SET(iflags, ITEM_XNAME_FOLLOWS|ITEM_LOCAL_CHANGE)))
|
||||
if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers)
|
||||
send_xattr_request(fname, file, f_out);
|
||||
#endif
|
||||
}
|
||||
|
||||
2
socket.c
2
socket.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1992-2001 Andrew Tridgell <tridge@samba.org>
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -51,7 +51,7 @@ die "$0 -ro: sending to read-only server not allowed\n" if $ro && !$am_sender;
|
||||
# To disable a short-named option, add its letter to this string:
|
||||
our $short_disabled = 's';
|
||||
|
||||
our $short_no_arg = 'ACDEHIKLORSWXbcdgklmnoprstuvxz'; # DO NOT REMOVE ANY
|
||||
our $short_no_arg = 'ACDEHIJKLORSWXbcdgklmnoprstuvxyz'; # DO NOT REMOVE ANY
|
||||
our $short_with_num = 'B'; # DO NOT REMOVE ANY
|
||||
|
||||
# To disable a long-named option, change its value to a -1. The values mean:
|
||||
@@ -67,6 +67,7 @@ our %long_opt = (
|
||||
'copy-dest' => 2,
|
||||
'copy-unsafe-links' => 0,
|
||||
'daemon' => -1,
|
||||
'debug' => 1,
|
||||
'delay-updates' => 0,
|
||||
'delete' => 0,
|
||||
'delete-after' => 0,
|
||||
@@ -86,6 +87,7 @@ our %long_opt = (
|
||||
'ignore-errors' => 0,
|
||||
'ignore-existing' => 0,
|
||||
'ignore-missing-args' => 0,
|
||||
'info' => 1,
|
||||
'inplace' => 0,
|
||||
'link-dest' => 2,
|
||||
'list-only' => 0,
|
||||
@@ -103,6 +105,7 @@ our %long_opt = (
|
||||
'only-write-batch' => 1,
|
||||
'partial' => 0,
|
||||
'partial-dir' => 2,
|
||||
'preallocate' => 0,
|
||||
'remove-sent-files' => $ro ? -1 : 0,
|
||||
'remove-source-files' => $ro ? -1 : 0,
|
||||
'safe-links' => 0,
|
||||
|
||||
15
support/rsync-no-vanished
Executable file
15
support/rsync-no-vanished
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
IGNOREEXIT=24
|
||||
IGNOREOUT='^(file has vanished: |rsync warning: some files vanished before they could be transferred)'
|
||||
|
||||
set -o pipefail
|
||||
|
||||
rsync "${@}" 2>&1 | (egrep -v "$IGNOREOUT" || true)
|
||||
ret=$?
|
||||
|
||||
if [[ $ret == $IGNOREEXIT ]]; then
|
||||
ret=0
|
||||
fi
|
||||
|
||||
exit $ret
|
||||
14
syscall.c
14
syscall.c
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* Copyright (C) 1998 Andrew Tridgell
|
||||
* Copyright (C) 2002 Martin Pool
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -147,13 +147,13 @@ int do_mknod(const char *pathname, mode_t mode, dev_t dev)
|
||||
if (S_ISSOCK(mode)) {
|
||||
int sock;
|
||||
struct sockaddr_un saddr;
|
||||
unsigned int len = strlcpy(saddr.sun_path, pathname, sizeof saddr.sun_path);
|
||||
if (len >= sizeof saddr.sun_path) {
|
||||
errno = ENAMETOOLONG;
|
||||
return -1;
|
||||
}
|
||||
#ifdef HAVE_SOCKADDR_UN_LEN
|
||||
unsigned int len =
|
||||
#endif
|
||||
strlcpy(saddr.sun_path, pathname, sizeof saddr.sun_path);
|
||||
#ifdef HAVE_SOCKADDR_UN_LEN
|
||||
saddr.sun_len = len >= sizeof saddr.sun_path
|
||||
? sizeof saddr.sun_path : len + 1;
|
||||
saddr.sun_len = len + 1;
|
||||
#endif
|
||||
saddr.sun_family = AF_UNIX;
|
||||
|
||||
|
||||
2
t_stub.c
2
t_stub.c
@@ -3,7 +3,7 @@
|
||||
* functions, so that module test harnesses can run standalone.
|
||||
*
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Test harness for unsafe_symlink(). Not linked into rsync itself.
|
||||
*
|
||||
* Copyright (C) 2002 Martin Pool
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
tls.c
2
tls.c
@@ -2,7 +2,7 @@
|
||||
* Trivial ls for comparing two directories after running an rsync.
|
||||
*
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
2
token.c
2
token.c
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Simple utility used only by the test harness.
|
||||
*
|
||||
* Copyright (C) 2002 Martin Pool
|
||||
* Copyright (C) 2003 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 1996 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2004-2013 Wayne Davison
|
||||
* Copyright (C) 2004-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
24
util.c
24
util.c
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2000 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "itypes.h"
|
||||
#include "inums.h"
|
||||
|
||||
extern int dry_run;
|
||||
extern int module_id;
|
||||
extern int protect_args;
|
||||
extern int modify_window;
|
||||
@@ -197,7 +198,15 @@ int make_path(char *fname, int flags)
|
||||
|
||||
/* Try to find an existing dir, starting from the deepest dir. */
|
||||
for (p = end; ; ) {
|
||||
if (do_mkdir(fname, ACCESSPERMS) == 0) {
|
||||
if (dry_run) {
|
||||
STRUCT_STAT st;
|
||||
if (do_stat(fname, &st) == 0) {
|
||||
if (S_ISDIR(st.st_mode))
|
||||
errno = EEXIST;
|
||||
else
|
||||
errno = ENOTDIR;
|
||||
}
|
||||
} else if (do_mkdir(fname, ACCESSPERMS) == 0) {
|
||||
ret++;
|
||||
break;
|
||||
}
|
||||
@@ -208,12 +217,14 @@ int make_path(char *fname, int flags)
|
||||
}
|
||||
while (1) {
|
||||
if (p == fname) {
|
||||
ret = -ret - 1;
|
||||
/* We got a relative path that doesn't exist, so assume that '.'
|
||||
* is there and just break out and create the whole thing. */
|
||||
p = NULL;
|
||||
goto double_break;
|
||||
}
|
||||
if (*--p == '/') {
|
||||
if (p == fname) {
|
||||
ret = -ret - 1; /* impossible... */
|
||||
/* We reached the "/" dir, which we assume is there. */
|
||||
goto double_break;
|
||||
}
|
||||
*p = '\0';
|
||||
@@ -225,7 +236,10 @@ int make_path(char *fname, int flags)
|
||||
|
||||
/* Make all the dirs that we didn't find on the way here. */
|
||||
while (p != end) {
|
||||
*p = '/';
|
||||
if (p)
|
||||
*p = '/';
|
||||
else
|
||||
p = fname;
|
||||
p += strlen(p);
|
||||
if (ret < 0) /* Skip mkdir on error, but keep restoring the path. */
|
||||
continue;
|
||||
|
||||
2
util2.c
2
util2.c
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1996-2000 Andrew Tridgell
|
||||
* Copyright (C) 1996 Paul Mackerras
|
||||
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Test suite for the wildmatch code.
|
||||
*
|
||||
* Copyright (C) 2003-2013 Wayne Davison
|
||||
* Copyright (C) 2003-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
9
xattrs.c
9
xattrs.c
@@ -3,7 +3,7 @@
|
||||
* Written by Jay Fenlason, vaguely based on the ACLs patch.
|
||||
*
|
||||
* Copyright (C) 2004 Red Hat, Inc.
|
||||
* Copyright (C) 2006-2013 Wayne Davison
|
||||
* Copyright (C) 2006-2014 Wayne Davison
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -308,7 +308,8 @@ int get_xattr(const char *fname, stat_x *sxp)
|
||||
if (!preserve_devices)
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
} else if (IS_MISSING_FILE(sxp->st))
|
||||
return 0;
|
||||
|
||||
if (rsync_xal_get(fname, sxp->xattr) < 0) {
|
||||
free_xattr(sxp);
|
||||
@@ -451,7 +452,7 @@ int send_xattr(int f, stat_x *sxp)
|
||||
if (rxa->datum_len > MAX_FULL_DATUM)
|
||||
write_buf(f, rxa->datum + 1, MAX_DIGEST_LEN);
|
||||
else
|
||||
write_buf(f, rxa->datum, rxa->datum_len);
|
||||
write_bigbuf(f, rxa->datum, rxa->datum_len);
|
||||
}
|
||||
ndx = rsync_xal_l.count; /* pre-incremented count */
|
||||
rsync_xal_store(sxp->xattr); /* adds item to rsync_xal_l */
|
||||
@@ -579,7 +580,7 @@ void send_xattr_request(const char *fname, struct file_struct *file, int f_out)
|
||||
}
|
||||
|
||||
write_varint(f_out, len); /* length might have changed! */
|
||||
write_buf(f_out, ptr, len);
|
||||
write_bigbuf(f_out, ptr, len);
|
||||
free(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user