char *p, *user=NULL;
extern int remote_version;
extern int am_sender;
- extern struct in_addr socket_address;
extern char *shell_cmd;
extern int kludge_around_eof;
-
+ extern char *bind_address;
+
if (argc == 0 && !am_sender) {
extern int list_only;
list_only = 1;
if (!user) user = getenv("USER");
if (!user) user = getenv("LOGNAME");
- fd = open_socket_out_wrapped (host, rsync_port, &socket_address);
+ fd = open_socket_out_wrapped (host, rsync_port, bind_address,
+ global_opts.af_hint);
if (fd == -1) {
exit_cleanup(RERR_SOCKETIO);
}
log_init();
if (use_chroot) {
+ /*
+ * XXX: The 'use chroot' flag is a fairly reliable
+ * source of confusion, because it fails under two
+ * important circumstances: running as non-root,
+ * running on Win32 (or possibly others). On the
+ * other hand, if you are running as root, then it
+ * might be better to always use chroot.
+ *
+ * So, perhaps if we can't chroot we should just issue
+ * a warning, unless a "require chroot" flag is set,
+ * in which case we fail.
+ */
if (chroot(lp_path(i))) {
rsyserr(FERROR, errno, "chroot %s failed", lp_path(i));
io_printf(fd,"@ERROR: chroot failed\n");
log_init();
- rprintf(FINFO, "rsyncd version %s starting, listening on port %d\n", VERSION,
+ rprintf(FINFO, "rsyncd version %s starting, listening on port %d\n",
+ RSYNC_VERSION,
rsync_port);
/* TODO: If listening on a particular address, then show that
* address too. */