int delete_mode=0;
int delete_excluded=0;
int one_file_system=0;
-int remote_version=0;
+int protocol_version = PROTOCOL_VERSION;
int sparse_files=0;
int do_compression=0;
int am_root=0;
int numeric_ids = 0;
int force_delete = 0;
int io_timeout = 0;
-int io_error = 0;
int read_only = 0;
int module_id = -1;
int am_server = 0;
rprintf(f, "%s version %s protocol version %d\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION);
rprintf(f,
- "Copyright (C) 1996-2002 by Andrew Tridgell and others\n");
+ "Copyright (C) 1996-2004 by Andrew Tridgell and others\n");
rprintf(f, "<http://rsync.samba.org/>\n");
rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, "
"%shard links, %ssymlinks, batchfiles, \n",
rprintf(F,"See http://rsync.samba.org/ for updates, bug reports, and answers\n");
}
-enum {OPT_VERSION = 1000, OPT_SENDER, OPT_SERVER, OPT_EXCLUDE,
- OPT_EXCLUDE_FROM, OPT_DELETE, OPT_DELETE_EXCLUDED, OPT_NUMERIC_IDS,
- OPT_RSYNC_PATH, OPT_FORCE, OPT_TIMEOUT, OPT_DAEMON, OPT_CONFIG, OPT_PORT,
- OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_STATS, OPT_PARTIAL, OPT_PROGRESS,
- OPT_COPY_UNSAFE_LINKS, OPT_SAFE_LINKS, OPT_COMPARE_DEST, OPT_LINK_DEST,
- OPT_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS,
- OPT_DELETE_AFTER, OPT_EXISTING, OPT_MAX_DELETE, OPT_BACKUP_DIR,
- OPT_IGNORE_ERRORS, OPT_BWLIMIT,
- OPT_MODIFY_WINDOW, OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_IGNORE_EXISTING};
+enum {OPT_VERSION = 1000, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+ OPT_DELETE_AFTER, OPT_DELETE_EXCLUDED, OPT_LINK_DEST,
+ OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW,
+ OPT_READ_BATCH, OPT_WRITE_BATCH};
static struct poptOption long_options[] = {
/* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
{"files-from", 0, POPT_ARG_STRING, &files_from, 0, 0, 0 },
{"from0", '0', POPT_ARG_NONE, &eol_nulls, 0, 0, 0},
{"no-implied-dirs", 0, POPT_ARG_VAL, &implied_dirs, 0, 0, 0 },
+ {"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 },
#ifdef INET6
{0, '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 },
{0, '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 },
{
if (err_buf[0]) {
rprintf(FLOG, "%s", err_buf);
- rprintf(FERROR, "%s: %s", RSYNC_NAME, err_buf);
+ rprintf(FERROR, RSYNC_NAME ": %s", err_buf);
} else {
rprintf (FERROR, "Error parsing options: "
"option may be supported on client but not on server?\n");
if (!backup_suffix)
backup_suffix = backup_dir? "" : BACKUP_SUFFIX;
backup_suffix_len = strlen(backup_suffix);
+ if (strchr(backup_suffix, '/') != NULL) {
+ rprintf(FERROR, "--suffix cannot contain slashes: %s\n",
+ backup_suffix);
+ exit_cleanup(RERR_SYNTAX);
+ }
if (backup_dir)
backup_dir_len = strlen(backup_dir);
else if (!backup_suffix_len) {
exit_cleanup(RERR_SYNTAX);
}
+ if (do_progress && !verbose)
+ verbose = 1;
+
*argv = poptGetArgs(pc);
if (*argv)
*argc = count_args(*argv);
usage(FERROR);
exit_cleanup(RERR_SYNTAX);
}
- if (strcmp(files_from, "-") == 0)
+ if (strcmp(files_from, "-") == 0) {
filesfrom_fd = 0;
+ if (am_server)
+ remote_filesfrom_file = "-";
+ }
else if ((colon = find_colon(files_from)) != 0) {
if (am_server) {
usage(FERROR);
/* Only send --suffix if it specifies a non-default value. */
if (strcmp(backup_suffix, backup_dir? "" : BACKUP_SUFFIX) != 0) {
- args[ac++] = "--suffix";
- args[ac++] = backup_suffix;
+ char *s = new_array(char, 9+backup_suffix_len+1);
+ if (!s)
+ out_of_memory("server_options");
+ /* We use the following syntax to avoid weirdness with '~'. */
+ sprintf(s, "--suffix=%s", backup_suffix);
+ args[ac++] = s;
}
if (delete_mode && !delete_excluded)