Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed a few things that looked like yodl macros but were not.
[rsync/rsync.git]
/
socket.c
diff --git
a/socket.c
b/socket.c
index
adab8e3
..
8a96061
100644
(file)
--- a/
socket.c
+++ b/
socket.c
@@
-36,6
+36,10
@@
extern char *bind_address;
extern int default_af_hint;
extern char *bind_address;
extern int default_af_hint;
+#ifdef HAVE_SIGACTION
+static struct sigaction sigact;
+#endif
+
/**
* Establish a proxy connection on an open socket to a web proxy by
* using the CONNECT method. If proxy_user and proxy_pass are not NULL,
/**
* Establish a proxy connection on an open socket to a web proxy by
* using the CONNECT method. If proxy_user and proxy_pass are not NULL,
@@
-54,13
+58,13
@@
static int establish_proxy_connection(int fd, char *host, int port,
proxy_user, ":", proxy_pass, NULL);
len = strlen(buffer);
proxy_user, ":", proxy_pass, NULL);
len = strlen(buffer);
- if ((len*8 + 5) / 6 >= (int)sizeof authbuf) {
+ if ((len*8 + 5) / 6 >= (int)sizeof authbuf
- 3
) {
rprintf(FERROR,
"authentication information is too long\n");
return -1;
}
rprintf(FERROR,
"authentication information is too long\n");
return -1;
}
- base64_encode(buffer, len, authbuf);
+ base64_encode(buffer, len, authbuf
, 1
);
authhdr = "\r\nProxy-Authorization: Basic ";
} else {
*authbuf = '\0';
authhdr = "\r\nProxy-Authorization: Basic ";
} else {
*authbuf = '\0';
@@
-433,7
+437,9
@@
static RETSIGTYPE sigchld_handler(UNUSED(int val))
#ifdef WNOHANG
while (waitpid(-1, NULL, WNOHANG) > 0) {}
#endif
#ifdef WNOHANG
while (waitpid(-1, NULL, WNOHANG) > 0) {}
#endif
+#ifndef HAVE_SIGACTION
signal(SIGCHLD, sigchld_handler);
signal(SIGCHLD, sigchld_handler);
+#endif
}
}
@@
-442,6
+448,10
@@
void start_accept_loop(int port, int (*fn)(int, int))
fd_set deffds;
int *sp, maxfd, i;
fd_set deffds;
int *sp, maxfd, i;
+#ifdef HAVE_SIGACTION
+ sigact.sa_flags = SA_NOCLDSTOP;
+#endif
+
/* open an incoming socket */
sp = open_socket_in(SOCK_STREAM, port, bind_address, default_af_hint);
if (sp == NULL)
/* open an incoming socket */
sp = open_socket_in(SOCK_STREAM, port, bind_address, default_af_hint);
if (sp == NULL)
@@
-465,7
+475,6
@@
void start_accept_loop(int port, int (*fn)(int, int))
maxfd = sp[i];
}
maxfd = sp[i];
}
-
/* now accept incoming connections - forking a new process
* for each incoming connection */
while (1) {
/* now accept incoming connections - forking a new process
* for each incoming connection */
while (1) {
@@
-478,7
+487,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 */
/* close log file before the potentially very long select so
* file can be trimmed by another process instead of growing
* forever */
- log_close();
+ log
file
_close();
#ifdef FD_COPY
FD_COPY(&deffds, &fds);
#ifdef FD_COPY
FD_COPY(&deffds, &fds);
@@
-500,15
+509,15
@@
void start_accept_loop(int port, int (*fn)(int, int))
if (fd < 0)
continue;
if (fd < 0)
continue;
-
signal
(SIGCHLD, sigchld_handler);
+
SIGACTION
(SIGCHLD, sigchld_handler);
if ((pid = fork()) == 0) {
int ret;
for (i = 0; sp[i] >= 0; i++)
close(sp[i]);
/* Re-open log file in child before possibly giving
if ((pid = fork()) == 0) {
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();
+ * up privileges (see log
file
_close() above). */
+ log
file_re
open();
ret = fn(fd, fd);
close_all();
_exit(ret);
ret = fn(fd, fd);
close_all();
_exit(ret);