Andrew Tridgell [Fri, 17 Jul 1998 13:18:32 +0000 (13:18 +0000)]
make rsync behave more like GNU cp with regard to file permissions
when -p (preserve permissions) isn't set.
It works by taking the sending file permissions and masking them with
the umask to create the destination file permissions. (There is really
no "correct" way of doing this but at least we now behave like GNU cp
which fits the principle of least surprise.)
Andrew Tridgell [Thu, 2 Jul 1998 10:57:20 +0000 (10:57 +0000)]
- use explicit flushes instead of setlinebuf. I've had reports of
verbose info not being line buffered to files.
- add a call to localtime() in open_log() in order to prime the C
libraries timezone cache before the chroot(). This should fix the
problem of rsyncd log entries being in GMT time.
Andrew Tridgell [Thu, 2 Jul 1998 01:27:14 +0000 (01:27 +0000)]
enable output buffering in the recv generator. This makes a
significant difference when the transport is ssh as ssh will otherwise
output a complete frame for each checksum record, which increases the
checksum data in size by a factor of around 4.
Andrew Tridgell [Wed, 1 Jul 1998 11:03:50 +0000 (11:03 +0000)]
- only keep a partial file if some literal data has been transferred,
this prevents a second interrupted transfer from reducing the size of
the transferred file.
- set SIGUSR1 to SIG_IGN early to prevent a race condition that
prevents the --partial code from working properly
Andrew Tridgell [Fri, 19 Jun 1998 00:55:19 +0000 (00:55 +0000)]
if we get EWOULDBLOCK on a write then reduce the amount of data we are
trying to write. This guarantees that the maximum amount of data that
can be written at any one time is written.
Andrew Tridgell [Thu, 18 Jun 1998 12:17:23 +0000 (12:17 +0000)]
fixed a race condition in rsync that opened a security hole. The
temporary files were being created with the same permissions as the
original file. So if the file was setuid but not owned by the user
doing the transfer then there was a window of opportunity for a
malicious user to execute it with the wrong permissions while it was
being transferred.
Andrew Tridgell [Wed, 3 Jun 1998 02:47:52 +0000 (02:47 +0000)]
the tag table should be of type int* not tag*.
This bug resulted in rsync being much less efficient that it could be
for files with more than 64k blocks. With the adaptive block size code
giving a maximum block size of 16k this means that files larger than
1GB were handled very inefficiently. The transfer was still accurate,
just slow.
Andrew Tridgell [Mon, 1 Jun 1998 13:39:54 +0000 (13:39 +0000)]
replace calls to strcmp() with a u_strcmp() function that uses only
unsigned comparisons. Transferring files between two machines that
treated strcmp() differently led to the files being given the wrong
name at the destination if the filenames had characters > 128 (such as
Kanji characters) and the source and destination machines treated
strcmp() differently (ie. one treated strings as signed and the other
as unsigned).
We now treat all string comparisons for file list sorting as unsigned.
Andrew Tridgell [Wed, 27 May 1998 12:37:22 +0000 (12:37 +0000)]
heaps of cleanup in the io code.
we no longer use non-blocking IO, instead it uses select a lot more,
being careful to always allow for reading whenever a valid read fd is
available and chcking timeouts.
Andrew Tridgell [Tue, 26 May 1998 14:39:18 +0000 (14:39 +0000)]
fixed a bug in the handling of very long filenames (longer than 255
chars) where two neighboring filenames share more than 255 characters
at the start of their names.
Andrew Tridgell [Fri, 22 May 1998 14:03:30 +0000 (14:03 +0000)]
use a simpler mmap() test in autoconf as we don't need all the
features of mmap that the standard test uses, and it reports Ultrix as
having no working mmap() when in fact any mmap will do what we want
for rsync.
Andrew Tridgell [Fri, 22 May 1998 01:53:02 +0000 (01:53 +0000)]
this fixes two problems:
1) handle 64 bit file offsets in the token code. I wonder how large
bit files worked up till now?
2) send a null token when we have passed over a large lump of data
without finding a token match. This reduces the number of IOs
considerably as it removes the need for seeks/reads on the checksum
calculation and literal send code. This is not enabled yet for the
compressed case as the deflate token code can't handle it yet.