Make the --ignore-existing option not overwrite a regular file with
authorWayne Davison <wayned@samba.org>
Mon, 17 Mar 2008 00:06:52 +0000 (17:06 -0700)
committerWayne Davison <wayned@samba.org>
Mon, 17 Mar 2008 00:17:38 +0000 (17:17 -0700)
a dir/symlink/device/special-file, just like it already refuses to
overwrite a non-regular file with a regular file.

generator.c

index 4ec0ac4..909c0f4 100644 (file)
@@ -1358,6 +1358,13 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
         && !am_root && sx.st.st_uid == our_uid)
                del_opts |= DEL_NO_UID_WRITE;
 
+       if (ignore_existing > 0 && statret == 0
+        && (!is_dir || !S_ISDIR(sx.st.st_mode))) {
+               if (verbose > 1 && is_dir >= 0)
+                       rprintf(FINFO, "%s exists\n", fname);
+               goto cleanup;
+       }
+
        if (is_dir) {
                if (!implied_dirs && file->flags & FLAG_IMPLIED_DIR)
                        goto cleanup;
@@ -1663,12 +1670,6 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                goto cleanup;
        }
 
-       if (ignore_existing > 0 && statret == 0) {
-               if (verbose > 1)
-                       rprintf(FINFO, "%s exists\n", fname);
-               goto cleanup;
-       }
-
        if (update_only > 0 && statret == 0
            && cmp_time(sx.st.st_mtime, file->modtime) > 0) {
                if (verbose > 1)