extern int module_id;
extern int sanitize_paths;
extern int daemon_over_rsh;
+extern unsigned int module_dirlen;
extern struct filter_list_struct filter_list;
extern struct filter_list_struct server_filter_list;
int am_daemon = 0;
int do_stats = 0;
int do_progress = 0;
+int connect_timeout = 0;
int keep_partial = 0;
int safe_symlinks = 0;
int copy_unsafe_links = 0;
#define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */
char *batch_name = NULL;
-#ifdef ICONV_OPTION
int need_unsorted_flist = 0;
+#ifdef ICONV_OPTION
char *iconv_opt = ICONV_OPTION;
#endif
rprintf(F," --fake-super store/recover privileged attrs using xattrs\n");
#endif
rprintf(F," -S, --sparse handle sparse files efficiently\n");
- rprintf(F," -n, --dry-run show what would have been transferred\n");
- rprintf(F," -W, --whole-file copy files whole (without rsync algorithm)\n");
+ rprintf(F," -n, --dry-run perform a trial run with no changes made\n");
+ rprintf(F," -W, --whole-file copy files whole (without delta-xfer algorithm)\n");
rprintf(F," -x, --one-file-system don't cross filesystem boundaries\n");
rprintf(F," -B, --block-size=SIZE force a fixed checksum block-size\n");
rprintf(F," -e, --rsh=COMMAND specify the remote shell to use\n");
rprintf(F," --delay-updates put all updated files into place at transfer's end\n");
rprintf(F," -m, --prune-empty-dirs prune empty directory chains from the file-list\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
- rprintf(F," --timeout=TIME set I/O timeout in seconds\n");
+ rprintf(F," --timeout=SECONDS set I/O timeout in seconds\n");
+ rprintf(F," --contimeout=SECONDS set daemon connection timeout in seconds\n");
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," --size-only skip files that match in size\n");
rprintf(F," --modify-window=NUM compare mod-times with reduced accuracy\n");
{"no-numeric-ids", 0, POPT_ARG_VAL, &numeric_ids, 0, 0, 0 },
{"timeout", 0, POPT_ARG_INT, &io_timeout, 0, 0, 0 },
{"no-timeout", 0, POPT_ARG_VAL, &io_timeout, 0, 0, 0 },
+ {"contimeout", 0, POPT_ARG_INT, &connect_timeout, 0, 0, 0 },
{"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
{"rsync-path", 0, POPT_ARG_STRING, &rsync_path, 0, 0, 0 },
{"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
case OPT_INCLUDE_FROM:
arg = poptGetOptArg(pc);
if (sanitize_paths)
- arg = sanitize_path(NULL, arg, NULL, 0, NULL);
+ arg = sanitize_path(NULL, arg, NULL, 0);
if (server_filter_list.head) {
int rej;
- char *cp = strdup(arg);
+ char *dir, *cp = strdup(arg);
if (!cp)
out_of_memory("parse_arguments");
if (!*cp)
goto options_rejected;
- clean_fname(cp, CFN_COLLAPSE_DOT_DOT_DIRS);
- rej = check_filter(&server_filter_list, cp, 0) < 0;
+ dir = cp + (*cp == '/' ? module_dirlen : 0);
+ clean_fname(dir, CFN_COLLAPSE_DOT_DOT_DIRS);
+ rej = check_filter(&server_filter_list, dir, 0) < 0;
free(cp);
if (rej)
goto options_rejected;
batch_name = NULL;
} else if (dry_run)
write_batch = 0;
- }
+ } else if (write_batch < 0 && dry_run)
+ write_batch = 0;
if (read_batch && files_from) {
snprintf(err_buf, sizeof err_buf,
"--read-batch cannot be used with --files-from\n");
if (sanitize_paths) {
int i;
for (i = argc; i-- > 0; )
- argv[i] = sanitize_path(NULL, argv[i], "", 0, NULL);
+ argv[i] = sanitize_path(NULL, argv[i], "", 0);
if (tmpdir)
- tmpdir = sanitize_path(NULL, tmpdir, NULL, 0, NULL);
+ tmpdir = sanitize_path(NULL, tmpdir, NULL, 0);
if (backup_dir)
- backup_dir = sanitize_path(NULL, backup_dir, NULL, 0, NULL);
+ backup_dir = sanitize_path(NULL, backup_dir, NULL, 0);
}
if (server_filter_list.head && !am_sender) {
struct filter_list_struct *elp = &server_filter_list;
if (tmpdir) {
+ char *dir;
if (!*tmpdir)
goto options_rejected;
- clean_fname(tmpdir, CFN_COLLAPSE_DOT_DOT_DIRS);
- if (check_filter(elp, tmpdir, 1) < 0)
+ dir = tmpdir + (*tmpdir == '/' ? module_dirlen : 0);
+ clean_fname(dir, CFN_COLLAPSE_DOT_DOT_DIRS);
+ if (check_filter(elp, dir, 1) < 0)
goto options_rejected;
}
if (backup_dir) {
+ char *dir;
if (!*backup_dir)
goto options_rejected;
- clean_fname(backup_dir, CFN_COLLAPSE_DOT_DOT_DIRS);
- if (check_filter(elp, backup_dir, 1) < 0)
+ dir = backup_dir + (*backup_dir == '/' ? module_dirlen : 0);
+ clean_fname(dir, CFN_COLLAPSE_DOT_DOT_DIRS);
+ if (check_filter(elp, dir, 1) < 0)
goto options_rejected;
}
}
}
} else {
if (sanitize_paths)
- files_from = sanitize_path(NULL, files_from, NULL, 0, NULL);
+ files_from = sanitize_path(NULL, files_from, NULL, 0);
if (server_filter_list.head) {
+ char *dir;
if (!*files_from)
goto options_rejected;
- clean_fname(files_from, CFN_COLLAPSE_DOT_DOT_DIRS);
- if (check_filter(&server_filter_list, files_from, 0) < 0)
+ dir = files_from + (*files_from == '/' ? module_dirlen : 0);
+ clean_fname(dir, CFN_COLLAPSE_DOT_DOT_DIRS);
+ if (check_filter(&server_filter_list, dir, 0) < 0)
goto options_rejected;
}
filesfrom_fd = open(files_from, O_RDONLY|O_BINARY);