}
}
- if (human_readable && argc == 2) {
+ if (human_readable && argc == 2 && !am_server) {
/* Allow the old meaning of 'h' (--help) on its own. */
usage(FINFO);
exit_cleanup(0);
xfer_dirs = 1;
}
- if (argc < 2 && !read_batch)
+ if (argc < 2 && !read_batch && !am_server)
list_only |= 1;
if (xfer_dirs >= 4) {
if (do_compression)
argstr[x++] = 'z';
- /* We make use of the -e option to let the server know about any
- * pre-release protocol version && some behavior flags. */
- argstr[x++] = 'e';
+ set_allow_inc_recurse();
+
+ /* Checking the pre-negotiated value allows --protocol=29 override. */
+ if (protocol_version >= 30) {
+ /* We make use of the -e option to let the server know about
+ * any pre-release protocol version && some behavior flags. */
+ argstr[x++] = 'e';
#if SUBPROTOCOL_VERSION != 0
- if (protocol_version == PROTOCOL_VERSION) {
- x += snprintf(argstr+x, sizeof argstr - x,
- "%d.%d", PROTOCOL_VERSION, SUBPROTOCOL_VERSION);
- } else
+ if (protocol_version == PROTOCOL_VERSION) {
+ x += snprintf(argstr+x, sizeof argstr - x,
+ "%d.%d",
+ PROTOCOL_VERSION, SUBPROTOCOL_VERSION);
+ } else
#endif
- argstr[x++] = '.';
- set_allow_inc_recurse();
- if (allow_inc_recurse)
- argstr[x++] = 'i';
+ argstr[x++] = '.';
+ if (allow_inc_recurse)
+ argstr[x++] = 'i';
#if defined HAVE_LUTIMES && defined HAVE_UTIMES
- argstr[x++] = 'L';
+ argstr[x++] = 'L';
+#endif
+#ifdef ICONV_OPTION
+ argstr[x++] = 's';
#endif
+ }
+
+ if (x >= (int)sizeof argstr) { /* Not possible... */
+ rprintf(FERROR, "argstr overflow in server_options().\n");
+ exit_cleanup(RERR_MALLOC);
+ }
+
argstr[x] = '\0';
- args[ac++] = argstr;
+ if (x > 1)
+ args[ac++] = argstr;
#ifdef ICONV_OPTION
if (iconv_opt) {
* and it may be an older version that doesn't know this
* option, so don't send it if client is the sender.
*/
- int i;
for (i = 0; i < basis_dir_cnt; i++) {
args[ac++] = dest_option;
args[ac++] = basis_dir[i];
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
+ if (ac > MAX_SERVER_ARGS) { /* Not possible... */
+ rprintf(FERROR, "argc overflow in server_options().\n");
+ exit_cleanup(RERR_MALLOC);
+ }
+
*argc_p = ac;
return;