-
-struct in_addr socket_address = {INADDR_ANY};
+/** Local address to bind. As a character string because it's
+ * interpreted by the IPv6 layer: should be a numeric IP4 or ip6
+ * address, or a hostname. **/
+char *bind_address;
char const *got_socketpair = "no ";
char const *hardlinks = "no ";
char const *links = "no ";
char const *got_socketpair = "no ";
char const *hardlinks = "no ";
char const *links = "no ";
rprintf(f, "<http://rsync.samba.org/>\n");
rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, "
rprintf(f, "<http://rsync.samba.org/>\n");
rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, "
- "%shard links, %ssymlinks, batchfiles\n\n",
- sizeof(int64) * 8,
- got_socketpair,
- hardlinks, links);
+ "%shard links, %ssymlinks, batchfiles, %sIPv6\n\n",
+ (int) (sizeof(OFF_T) * 8),
+ got_socketpair, hardlinks, links, ipv6);
rprintf(F," -f --read-batch=EXT read batch file\n");
rprintf(F," -F --write-batch write batch file\n");
rprintf(F," -h, --help show this help screen\n");
rprintf(F," -f --read-batch=EXT read batch file\n");
rprintf(F," -F --write-batch write batch file\n");
rprintf(F," -h, --help show this help screen\n");
{"archive", 'a', POPT_ARG_NONE, 0, 'a'},
{"server", 0, POPT_ARG_NONE, &am_server},
{"sender", 0, POPT_ARG_NONE, 0, OPT_SENDER},
{"archive", 'a', POPT_ARG_NONE, 0, 'a'},
{"server", 0, POPT_ARG_NONE, &am_server},
{"sender", 0, POPT_ARG_NONE, 0, OPT_SENDER},
- {"recurse", 'r', POPT_ARG_NONE, &recurse},
+ {"recursive", 'r', POPT_ARG_NONE, &recurse},
{"relative", 'R', POPT_ARG_NONE, &relative_paths},
{"rsh", 'e', POPT_ARG_STRING, &shell_cmd},
{"block-size", 'B', POPT_ARG_INT, &block_size},
{"max-delete", 0, POPT_ARG_INT, &max_delete},
{"timeout", 0, POPT_ARG_INT, &io_timeout},
{"temp-dir", 'T', POPT_ARG_STRING, &tmpdir},
{"relative", 'R', POPT_ARG_NONE, &relative_paths},
{"rsh", 'e', POPT_ARG_STRING, &shell_cmd},
{"block-size", 'B', POPT_ARG_INT, &block_size},
{"max-delete", 0, POPT_ARG_INT, &max_delete},
{"timeout", 0, POPT_ARG_INT, &io_timeout},
{"temp-dir", 'T', POPT_ARG_STRING, &tmpdir},
- {"compare-dest", 0, POPT_ARG_NONE, &compare_dest},
+ {"compare-dest", 0, POPT_ARG_STRING, &compare_dest},
/* TODO: Should this take an optional int giving the compression level? */
{"compress", 'z', POPT_ARG_NONE, &do_compression},
{"daemon", 0, POPT_ARG_NONE, &am_daemon},
/* TODO: Should this take an optional int giving the compression level? */
{"compress", 'z', POPT_ARG_NONE, &do_compression},
{"daemon", 0, POPT_ARG_NONE, &am_daemon},
{"port", 0, POPT_ARG_INT, &rsync_port},
{"log-format", 0, POPT_ARG_STRING, &log_format},
{"bwlimit", 0, POPT_ARG_INT, &bwlimit},
{"port", 0, POPT_ARG_INT, &rsync_port},
{"log-format", 0, POPT_ARG_STRING, &log_format},
{"bwlimit", 0, POPT_ARG_INT, &bwlimit},
- {"address", 0, POPT_ARG_STRING, 0, OPT_ADDRESS},
+ {"address", 0, POPT_ARG_STRING, &bind_address, 0},
{"backup-dir", 0, POPT_ARG_STRING, &backup_dir},
{"hard-links", 'H', POPT_ARG_NONE, &preserve_hard_links},
{"read-batch", 'f', POPT_ARG_STRING, &batch_ext, 'f'},
{"write-batch", 'F', POPT_ARG_NONE, &write_batch, 0},
{"backup-dir", 0, POPT_ARG_STRING, &backup_dir},
{"hard-links", 'H', POPT_ARG_NONE, &preserve_hard_links},
{"read-batch", 'f', POPT_ARG_STRING, &batch_ext, 'f'},
{"write-batch", 'F', POPT_ARG_NONE, &write_batch, 0},
+#ifdef INET6
+ {0, '4', POPT_ARG_VAL, &af, AF_INET },
+ {0, '6', POPT_ARG_VAL, &af, AF_INET6 },
+#endif
+/* We store the option error message, if any, so that we can log the
+ connection attempt (which requires parsing the options), and then
+ show the error later on. */
void option_error(void)
{
if (err_buf[0]) {
rprintf(FLOG, "%s", err_buf);
rprintf(FERROR, "%s: %s", RSYNC_NAME, err_buf);
} else {
void option_error(void)
{
if (err_buf[0]) {
rprintf(FLOG, "%s", err_buf);
rprintf(FERROR, "%s: %s", RSYNC_NAME, err_buf);
} else {
- rprintf(FLOG,"Error parsing options - unsupported option?\n");
- rprintf(FERROR,"Error parsing options - unsupported option?\n");
+ rprintf (FERROR, "Error parsing options: "
+ "option may be supported on client but not on server?\n");
+ rprintf (FERROR, RSYNC_NAME ": Error parsing options: "
+ "option may be supported on client but not on server?\n");