- Look for last '@' in a user@host spec.
[rsync/rsync.git] / socket.c
index 7dfb258..c6341ce 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -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;
@@ -506,6 +506,9 @@ void start_accept_loop(int port, int (*fn)(int, int))
                        int ret;
                        for (i = 0; sp[i] >= 0; i++)
                                close(sp[i]);
+                       /* Re-open log file in child before possibly giving
+                        * up privileges (see log_close() above). */
+                       log_open();
                        ret = fn(fd, fd);
                        close_all();
                        _exit(ret);