#include "rsync.h"
#include "popt.h"
-extern struct exclude_struct **exclude_list;
+extern int sanitize_paths;
+extern char curr_dir[MAXPATHLEN];
+extern struct exclude_list_struct exclude_list;
int make_backups = 0;
rprintf(f, " %sIPv6, %d-bit system inums, %d-bit internal inums\n",
ipv6,
(int) (sizeof dumstat->st_ino * 8),
- (int) (sizeof (INO64_T) * 8));
+ (int) (sizeof (uint64) * 8));
#ifdef MAINTAINER_MODE
rprintf(f, " panic action: \"%s\"\n",
get_panic_action());
{"timeout", 0, POPT_ARG_INT, &io_timeout, 0, 0, 0 },
{"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
{"compare-dest", 0, POPT_ARG_STRING, &compare_dest, 0, 0, 0 },
- {"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
+ {"link-dest", 0, POPT_ARG_STRING, &compare_dest, OPT_LINK_DEST, 0, 0 },
/* TODO: Should this take an optional int giving the compression level? */
{"compress", 'z', POPT_ARG_NONE, &do_compression, 0, 0, 0 },
{"daemon", 0, POPT_ARG_NONE, &daemon_opt, 0, 0, 0 },
{
int opt;
char *ref = lp_refuse_options(module_id);
+ const char *arg;
poptContext pc;
if (ref && *ref)
break;
case OPT_EXCLUDE:
- add_exclude(&exclude_list, poptGetOptArg(pc),
- ADD_EXCLUDE);
+ add_exclude(&exclude_list, poptGetOptArg(pc), 0);
break;
case OPT_INCLUDE:
add_exclude(&exclude_list, poptGetOptArg(pc),
- ADD_INCLUDE);
+ XFLG_DEF_INCLUDE);
break;
case OPT_EXCLUDE_FROM:
- add_exclude_file(&exclude_list, poptGetOptArg(pc),
- MISSING_FATAL, ADD_EXCLUDE);
+ arg = poptGetOptArg(pc);
+ if (sanitize_paths)
+ arg = alloc_sanitize_path(arg, curr_dir);
+ add_exclude_file(&exclude_list, arg,
+ XFLG_FATAL_ERRORS);
break;
case OPT_INCLUDE_FROM:
- add_exclude_file(&exclude_list, poptGetOptArg(pc),
- MISSING_FATAL, ADD_INCLUDE);
+ arg = poptGetOptArg(pc);
+ if (sanitize_paths)
+ arg = alloc_sanitize_path(arg, curr_dir);
+ add_exclude_file(&exclude_list, arg,
+ XFLG_FATAL_ERRORS | XFLG_DEF_INCLUDE);
break;
case 'h':
case OPT_LINK_DEST:
#if HAVE_LINK
- compare_dest = (char *)poptGetOptArg(pc);
link_dest = 1;
break;
#else
if (relative_paths < 0)
relative_paths = files_from? 1 : 0;
+ *argv = poptGetArgs(pc);
+ if (*argv)
+ *argc = count_args(*argv);
+ else
+ *argc = 0;
+
+ if (sanitize_paths) {
+ int i;
+ for (i = *argc; i-- > 0; )
+ (*argv)[i] = alloc_sanitize_path((*argv)[i], NULL);
+ if (tmpdir)
+ tmpdir = alloc_sanitize_path(tmpdir, curr_dir);
+ if (compare_dest)
+ compare_dest = alloc_sanitize_path(compare_dest, curr_dir);
+ if (backup_dir)
+ backup_dir = alloc_sanitize_path(backup_dir, curr_dir);
+ if (files_from)
+ files_from = alloc_sanitize_path(files_from, curr_dir);
+ }
+
+ if (daemon_opt) {
+ daemon_opt = 0;
+ am_daemon = 1;
+ return 1;
+ }
+
if (!backup_suffix)
backup_suffix = backup_dir ? "" : BACKUP_SUFFIX;
backup_suffix_len = strlen(backup_suffix);
backup_dir_buf[backup_dir_len++] = '/';
backup_dir_buf[backup_dir_len] = '\0';
}
- if (verbose > 1)
+ if (verbose > 1 && !am_sender)
rprintf(FINFO, "backup_dir is %s\n", backup_dir_buf);
- } else if (!backup_suffix_len) {
+ } else if (!backup_suffix_len && (!am_server || !am_sender)) {
rprintf(FERROR,
"--suffix cannot be a null string without --backup-dir\n");
exit_cleanup(RERR_SYNTAX);
if (do_progress && !verbose)
verbose = 1;
- *argv = poptGetArgs(pc);
- if (*argv)
- *argc = count_args(*argv);
- else
- *argc = 0;
-
if (files_from) {
char *colon;
- if (*argc != 2) {
+ if (*argc != 2 && !(am_server && am_sender && *argc == 1)) {
usage(FERROR);
exit_cleanup(RERR_SYNTAX);
}
exit_cleanup(RERR_SYNTAX);
}
} else {
- extern int sanitize_paths;
- if (sanitize_paths) {
- files_from = strdup(files_from);
- sanitize_path(files_from, NULL);
- }
filesfrom_fd = open(files_from, O_RDONLY|O_BINARY);
if (filesfrom_fd < 0) {
rsyserr(FERROR, errno,
}
}
- if (daemon_opt)
- am_daemon = 1;
-
return 1;
}