extern int log_got_error;
extern int module_id;
extern int copy_links;
+extern int copy_dirlinks;
extern int keep_dirlinks;
extern int preserve_hard_links;
extern int protocol_version;
/* The receiving side operates in one of two modes:
*
- * 1. it enters a directory and receives one or more files, placing them
- * according to their names in the file-list.
+ * 1. it receives any number of files into a destination directory,
+ * placing them according to their names in the file-list.
*
* 2. it receives a single file and saves it using the name in the
* destination path instead of its file-list name. This requires a
" copying more than 1 file\n");
exit_cleanup(RERR_FILESELECT);
}
+ /* Caution: flist->count could be 0! */
+ if (flist->count == 1 && S_ISDIR(flist->files[0]->mode)) {
+ rprintf(FERROR,
+ "ERROR: cannot overwrite non-directory"
+ " with a directory\n");
+ exit_cleanup(RERR_FILESELECT);
+ }
+ } else if (errno != ENOENT) {
+ rsyserr(FERROR, errno, "cannot stat destination %s",
+ full_fname(dest_path));
+ exit_cleanup(RERR_FILESELECT);
}
cp = strrchr(dest_path, '/');
/* The receiving side mustn't obey this, or an existing symlink that
* points to an identical file won't be replaced by the referent. */
- copy_links = 0;
+ copy_links = copy_dirlinks = 0;
if (preserve_hard_links)
init_hard_links();