char *p, *user=NULL;
extern int remote_version;
extern int am_sender;
+ extern struct in_addr socket_address;
if (*path == '/') {
rprintf(FERROR,"ERROR: The remote path must start with a module name\n");
if (!user) user = getenv("USER");
if (!user) user = getenv("LOGNAME");
- fd = open_socket_out(host, rsync_port);
+ fd = open_socket_out(host, rsync_port, &socket_address);
if (fd == -1) {
exit_cleanup(RERR_SOCKETIO);
}
int updated = 0;
STRUCT_STAT st2;
int change_uid, change_gid;
- extern int am_daemon;
if (dry_run) return 0;
details.
dit(bf(--address)) By default rsync will bind to the wildcard address
-when run as a daemon with the --daemon option. The --address option
-allows you to specify a specific IP address (or hostname) to bind
-to. This makes virtual hosting possible in conjunction with the
---config option.
+when run as a daemon with the --daemon option or when connecting to a
+rsync server. The --address option allows you to specify a specific IP
+address (or hostname) to bind to. This makes virtual hosting possible
+in conjunction with the --config option.
dit(bf(--config=FILE)) This specifies an alternate config file than
the default /etc/rsyncd.conf. This is only relevant when --daemon is
/* open a socket to a tcp remote host with the specified port
based on code from Warren
proxy support by Stephen Rothwell */
-int open_socket_out(char *host, int port)
+int open_socket_out(char *host, int port, struct in_addr *address)
{
int type = SOCK_STREAM;
struct sockaddr_in sock_out;
+ struct sockaddr_in sock;
int res;
struct hostent *hp;
char *h;
sock_out.sin_port = htons(p);
sock_out.sin_family = PF_INET;
+ if (address) {
+ sock.sin_addr = *address;
+ sock.sin_port = 0;
+ sock.sin_family = hp->h_addrtype;
+ bind(res, (struct sockaddr * ) &sock,sizeof(sock));
+ }
+
if (connect(res,(struct sockaddr *)&sock_out,sizeof(sock_out))) {
rprintf(FERROR,"failed to connect to %s - %s\n", h, strerror(errno));
close(res);