Preparing for release of 2.6.6pre1
[rsync.git] / socket.c
index 29fb2dcd45f220aeb8219c4a007f8f0d4ebf9fe0..279b24e2ff9cea0066e173a8deba9cbb4d7ab118 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -90,7 +90,7 @@ static int establish_proxy_connection(int fd, char *host, int port,
        if (*cp == '\r')
                *cp = '\0';
        if (strncmp(buffer, "HTTP/", 5) != 0) {
-               rprintf(FERROR, "bad response from proxy - %s\n",
+               rprintf(FERROR, "bad response from proxy -- %s\n",
                        buffer);
                return -1;
        }
@@ -98,7 +98,7 @@ static int establish_proxy_connection(int fd, char *host, int port,
        while (*cp == ' ')
                cp++;
        if (*cp != '2') {
-               rprintf(FERROR, "bad response from proxy - %s\n",
+               rprintf(FERROR, "bad response from proxy -- %s\n",
                        buffer);
                return -1;
        }
@@ -127,7 +127,7 @@ static int establish_proxy_connection(int fd, char *host, int port,
  * if this fails.
  **/
 int try_bind_local(int s, int ai_family, int ai_socktype,
-                  const char *bind_address)
+                  const char *bind_addr)
 {
        int error;
        struct addrinfo bhints, *bres_all, *r;
@@ -136,9 +136,9 @@ int try_bind_local(int s, int ai_family, int ai_socktype,
        bhints.ai_family = ai_family;
        bhints.ai_socktype = ai_socktype;
        bhints.ai_flags = AI_PASSIVE;
-       if ((error = getaddrinfo(bind_address, NULL, &bhints, &bres_all))) {
+       if ((error = getaddrinfo(bind_addr, NULL, &bhints, &bres_all))) {
                rprintf(FERROR, RSYNC_NAME ": getaddrinfo %s: %s\n",
-                       bind_address, gai_strerror(error));
+                       bind_addr, gai_strerror(error));
                return -1;
        }
 
@@ -172,12 +172,12 @@ int try_bind_local(int s, int ai_family, int ai_socktype,
  * reachable, perhaps because we can't e.g. route ipv6 to that network
  * but we can get ip4 packets through.
  *
- * @param bind_address Local address to use.  Normally NULL to bind
+ * @param bind_addr Local address to use.  Normally NULL to bind
  * the wildcard address.
  *
  * @param af_hint Address family, e.g. AF_INET or AF_INET6.
  **/
-int open_socket_out(char *host, int port, const char *bind_address,
+int open_socket_out(char *host, int port, const char *bind_addr,
                    int af_hint)
 {
        int type = SOCK_STREAM;
@@ -198,7 +198,7 @@ int open_socket_out(char *host, int port, const char *bind_address,
                strlcpy(buffer, h, sizeof buffer);
 
                /* Is the USER:PASS@ prefix present? */
-               if ((cp = strchr(buffer, '@')) != NULL) {
+               if ((cp = strrchr(buffer, '@')) != NULL) {
                        *cp++ = '\0';
                        /* The remainder is the HOST:PORT part. */
                        h = cp;
@@ -253,9 +253,9 @@ int open_socket_out(char *host, int port, const char *bind_address,
                if (s < 0)
                        continue;
 
-               if (bind_address
+               if (bind_addr
                 && try_bind_local(s, res->ai_family, type,
-                                  bind_address) == -1) {
+                                  bind_addr) == -1) {
                        close(s);
                        s = -1;
                        continue;
@@ -293,9 +293,9 @@ int open_socket_out(char *host, int port, const char *bind_address,
  *
  * This is based on the Samba LIBSMB_PROG feature.
  *
- * @param bind_address Local address to use.  Normally NULL to get the stack default.
+ * @param bind_addr Local address to use.  Normally NULL to get the stack default.
  **/
-int open_socket_out_wrapped(char *host, int port, const char *bind_address,
+int open_socket_out_wrapped(char *host, int port, const char *bind_addr,
                            int af_hint)
 {
        char *prog = getenv("RSYNC_CONNECT_PROG");
@@ -307,7 +307,7 @@ int open_socket_out_wrapped(char *host, int port, const char *bind_address,
        }
        if (prog)
                return sock_exec(prog);
-       return open_socket_out(host, port, bind_address, af_hint);
+       return open_socket_out(host, port, bind_addr, af_hint);
 }
 
 
@@ -322,10 +322,10 @@ int open_socket_out_wrapped(char *host, int port, const char *bind_address,
  * We return an array of file-descriptors to the sockets, with a trailing
  * -1 value to indicate the end of the list.
  *
- * @param bind_address Local address to bind, or NULL to allow it to
+ * @param bind_addr Local address to bind, or NULL to allow it to
  * default.
  **/
-static int *open_socket_in(int type, int port, const char *bind_address,
+static int *open_socket_in(int type, int port, const char *bind_addr,
                           int af_hint)
 {
        int one = 1;
@@ -339,10 +339,10 @@ static int *open_socket_in(int type, int port, const char *bind_address,
        hints.ai_socktype = type;
        hints.ai_flags = AI_PASSIVE;
        snprintf(portbuf, sizeof portbuf, "%d", port);
-       error = getaddrinfo(bind_address, portbuf, &hints, &all_ai);
+       error = getaddrinfo(bind_addr, portbuf, &hints, &all_ai);
        if (error) {
                rprintf(FERROR, RSYNC_NAME ": getaddrinfo: bind address %s: %s\n",
-                       bind_address, gai_strerror(error));
+                       bind_addr, gai_strerror(error));
                return NULL;
        }
 
@@ -455,7 +455,7 @@ void start_accept_loop(int port, int (*fn)(int, int))
 #ifdef INET6
                        if (errno == EADDRINUSE && i > 0) {
                                rprintf(FINFO,
-                                   "Try using --ipv4 or --ipv6 to avoid this listen() error.");
+                                   "Try using --ipv4 or --ipv6 to avoid this listen() error.\n");
                        }
 #endif
                        exit_cleanup(RERR_SOCKETIO);
@@ -478,7 +478,7 @@ void start_accept_loop(int port, int (*fn)(int, int))
                /* close log file before the potentially very long select so
                 * file can be trimmed by another process instead of growing
                 * forever */
-               log_close();
+               logfile_close();
 
 #ifdef FD_COPY
                FD_COPY(&deffds, &fds);
@@ -506,9 +506,9 @@ void start_accept_loop(int port, int (*fn)(int, int))
                        int ret;
                        for (i = 0; sp[i] >= 0; i++)
                                close(sp[i]);
-                       /* open log file in child before possibly giving
-                        * up privileges  */
-                       log_open();
+                       /* Re-open log file in child before possibly giving
+                        * up privileges (see logfile_close() above). */
+                       logfile_reopen();
                        ret = fn(fd, fd);
                        close_all();
                        _exit(ret);
@@ -525,7 +525,6 @@ void start_accept_loop(int port, int (*fn)(int, int))
                        close(fd);
                }
        }
-       free(sp);
 }
 
 
@@ -620,7 +619,7 @@ void set_socket_options(int fd, char *options)
 
                case OPT_ON:
                        if (got_value)
-                               rprintf(FERROR,"syntax error - %s does not take a value\n",tok);
+                               rprintf(FERROR,"syntax error -- %s does not take a value\n",tok);
 
                        {
                                int on = socket_options[i].value;
@@ -654,14 +653,12 @@ void become_daemon(void)
        /* detach from the terminal */
 #ifdef HAVE_SETSID
        setsid();
-#else
-#ifdef TIOCNOTTY
+#elif defined TIOCNOTTY
        i = open("/dev/tty", O_RDWR);
        if (i >= 0) {
                ioctl(i, (int)TIOCNOTTY, (char *)0);
                close(i);
        }
-#endif /* TIOCNOTTY */
 #endif
        /* make sure that stdin, stdout an stderr don't stuff things
         * up (library functions, for example) */
@@ -697,7 +694,7 @@ static int socketpair_tcp(int fd[2])
                goto failed;
 
        memset(&sock2, 0, sizeof sock2);
-#if HAVE_SOCKADDR_IN_LEN
+#ifdef HAVE_SOCKADDR_IN_LEN
        sock2.sin_len = sizeof sock2;
 #endif
        sock2.sin_family = PF_INET;
@@ -727,14 +724,16 @@ static int socketpair_tcp(int fd[2])
                goto failed;
 
        close(listener);
+       listener = -1;
+
+       set_blocking(fd[1]);
+
        if (connect_done == 0) {
                if (connect(fd[1], (struct sockaddr *)&sock, sizeof sock) != 0
                    && errno != EISCONN)
                        goto failed;
        }
 
-       set_blocking(fd[1]);
-
        /* all OK! */
        return 0;