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;
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);
}
static RETSIGTYPE sigchld_handler(UNUSED(int val))
{
- signal(SIGCHLD, sigchld_handler);
#ifdef WNOHANG
while (waitpid(-1, NULL, WNOHANG) > 0) {}
#endif
+ signal(SIGCHLD, sigchld_handler);
}
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;
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]);