+ *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 (partial_dir)
+ partial_dir = alloc_sanitize_path(partial_dir, 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 (server_exclude_list.head && !am_sender) {
+ struct exclude_list_struct *elp = &server_exclude_list;
+ if (tmpdir) {
+ clean_fname(tmpdir);
+ if (check_exclude(elp, tmpdir, 1) < 0)
+ goto options_rejected;
+ }
+ if (partial_dir) {
+ clean_fname(partial_dir);
+ if (check_exclude(elp, partial_dir, 1) < 0)
+ goto options_rejected;
+ }
+ if (compare_dest) {
+ clean_fname(compare_dest);
+ if (check_exclude(elp, compare_dest, 1) < 0)
+ goto options_rejected;
+ }
+ if (backup_dir) {
+ clean_fname(backup_dir);
+ if (check_exclude(elp, backup_dir, 1) < 0)
+ goto options_rejected;
+ }
+ }
+ if (server_exclude_list.head && files_from) {
+ clean_fname(files_from);
+ if (check_exclude(&server_exclude_list, files_from, 0) < 0) {
+ options_rejected:
+ snprintf(err_buf, sizeof err_buf,
+ "Your options have been rejected by the server.\n");
+ return 0;
+ }
+ }
+
+ if (daemon_opt) {
+ daemon_opt = 0;
+ am_daemon = 1;
+ return 1;
+ }
+