couple of minor fixes to rsync 2.5.5

Chupriyanov Eugene eric at
Wed Jul 24 02:33:02 EST 2002

Dear friends!

I really appriciate the great job you did on rsync package and hope for its
further improvement and development. It works great in our pretty complex
environment and helps us a lot in our daily duties.

But we've run into couple of small inconveniences.

First one:
We use rsyncd to propagate a tree of html files among several web-servers.
That files are generated on the fly and updated every few minutes.

Here is relevant part of rsyncd.conf:
    use chroot=false
    max connections=2
    read only=true

(Note the exlude line)

Nevertheless I was getting errors like this:

readlink .../include/cnews.html.tmp: No such file or directory
rsync error: partial transfer (code 23) at main.c(578)

I'm not sure I fixed it clean, but I get rid of that errors by patching
flist.c. Here is the diff:

--- flist.c.orig        Mon Jul  8 17:48:12 2002
+++ flist.c     Mon Jul  8 17:48:39 2002
@@ -644,7 +644,7 @@

        if (readlink_stat(fname, &st, linkbuf) != 0) {
                int save_errno = errno;
-               if ((errno == ENOENT) && copy_links && !noexcludes) {
+               if ((errno == ENOENT) && !noexcludes) {
                        /* symlink pointing nowhere, see if excluded */
                        memset((char *) &st, 0, sizeof(st));
                        if (check_exclude_file(f, fname, &st)) {

The second problem appears when we need that target files always have
correct permissions - we do some testing on them and we receive errors, when
file already copied and renamed from tempfile, but permission are not yet
set. So I fixed it with following diff:

--- rsync.c.orig        Fri Jul 19 13:37:25 2002
+++ rsync.c     Fri Jul 19 13:36:42 2002
@@ -236,13 +236,15 @@
        if (make_backups && !make_backup(fname))
+       /* eric: set permisions before moving file */
+       set_perms(fnametmp, file, NULL, 0);

        /* move tmp file over real file */
        if (robust_rename(fnametmp,fname) != 0) {
                if (errno == EXDEV) {
                        /* rename failed on cross-filesystem link.
                           Copy the file instead. */
-                       if (copy_file(fnametmp,fname, file->mode &
+                       if (copy_file(fnametmp,fname, file->mode)) {
                                rprintf(FERROR,"copy %s -> %s : %s\n",
                        } else {

I hope these modifications don't break things apart. :)
Thanks for your attention.

Eugene V. Chupriyanov
RosBusinessConsulting NOC
mail to: eric at

More information about the rsync mailing list