X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a3a841073e6e3d5a560c072c8bc7bbd770740235..e610e50f9c3b8d10a3c96674b007eee125ed55bc:/socket.c diff --git a/socket.c b/socket.c index fc01edf9..264c5321 100644 --- a/socket.c +++ b/socket.c @@ -48,11 +48,11 @@ static int establish_proxy_connection(int fd, char *host, int port, int len; if (proxy_user && proxy_pass) { - snprintf(buffer, sizeof buffer, "%s:%s", - proxy_user, proxy_pass); + stringjoin(buffer, sizeof buffer, + proxy_user, ":", proxy_pass, NULL); len = strlen(buffer); - if ((len*8 + 5) / 6 - 2 >= (int)sizeof authbuf) { + if ((len*8 + 5) / 6 >= (int)sizeof authbuf) { rprintf(FERROR, "authentication information is too long\n"); return -1; @@ -299,9 +299,14 @@ int open_socket_out(char *host, int port, const char *bind_address, int open_socket_out_wrapped(char *host, int port, const char *bind_address, int af_hint) { - char *prog; + char *prog = getenv("RSYNC_CONNECT_PROG"); - if ((prog = getenv("RSYNC_CONNECT_PROG")) != NULL) + if (verbose >= 2) { + rprintf(FINFO, "%sopening tcp connection to %s port %d\n", + prog ? "Using RSYNC_CONNECT_PROG instead of " : "", + host, port); + } + if (prog) return sock_exec(prog); return open_socket_out(host, port, bind_address, af_hint); } @@ -431,10 +436,10 @@ int is_a_socket(int fd) static RETSIGTYPE sigchld_handler(UNUSED(int val)) { - signal(SIGCHLD, sigchld_handler); #ifdef WNOHANG while (waitpid(-1, NULL, WNOHANG) > 0) {} #endif + signal(SIGCHLD, sigchld_handler); } @@ -698,7 +703,7 @@ static int socketpair_tcp(int fd[2]) goto failed; memset(&sock2, 0, sizeof sock2); -#ifdef HAVE_SOCKADDR_LEN +#if HAVE_SOCKADDR_IN_LEN sock2.sin_len = sizeof sock2; #endif sock2.sin_family = PF_INET; @@ -769,18 +774,14 @@ int sock_exec(const char *prog) strerror(errno)); return -1; } + if (verbose >= 2) + rprintf(FINFO, "Running socket program: \"%s\"\n", prog); if (fork() == 0) { close(fd[0]); close(0); close(1); dup(fd[1]); dup(fd[1]); - if (verbose > 3) { - /* Can't use rprintf because we've forked. */ - fprintf(stderr, - RSYNC_NAME ": execute socket program \"%s\"\n", - prog); - } exit(system(prog)); } close(fd[1]);