diff options
author | 2001-12-18 00:27:57 +0000 | |
---|---|---|
committer | 2001-12-18 00:27:57 +0000 | |
commit | fdcdff8694a494256f5f239beafb353e0414b015 (patch) | |
tree | 01d748b7bdb357bc8bbda5aa5e01acddbd22dd6c | |
parent | Update rt_ifp in DIOCCHANGERULE. (diff) | |
download | wireguard-openbsd-fdcdff8694a494256f5f239beafb353e0414b015.tar.xz wireguard-openbsd-fdcdff8694a494256f5f239beafb353e0414b015.zip |
Don't use sigprocmask() in signal handlers when we can just set the
mask to be what we want with sigaction. Pointed out by Yar Tikhiy.
-rw-r--r-- | libexec/ftpd/ftpd.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c index 3fbdd8407a2..c0f8f4df3c9 100644 --- a/libexec/ftpd/ftpd.c +++ b/libexec/ftpd/ftpd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ftpd.c,v 1.111 2001/12/17 23:02:53 millert Exp $ */ +/* $OpenBSD: ftpd.c,v 1.112 2001/12/18 00:27:57 millert Exp $ */ /* $NetBSD: ftpd.c,v 1.15 1995/06/03 22:46:47 mycroft Exp $ */ /* @@ -73,7 +73,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)ftpd.c 8.4 (Berkeley) 4/16/94"; #else -static char rcsid[] = "$OpenBSD: ftpd.c,v 1.111 2001/12/17 23:02:53 millert Exp $"; +static char rcsid[] = "$OpenBSD: ftpd.c,v 1.112 2001/12/18 00:27:57 millert Exp $"; #endif #endif /* not lint */ @@ -484,6 +484,15 @@ main(argc, argv, envp) /* set this here so klogin can use it... */ (void)snprintf(ttyline, sizeof(ttyline), "ftp%d", getpid()); + sa.sa_handler = SIG_IGN; + (void) sigaction(SIGCHLD, &sa, NULL); + + sa.sa_handler = sigurg; + sa.sa_flags = 0; /* don't restart syscalls for SIGURG */ + (void) sigaction(SIGURG, &sa, NULL); + + sigfillset(&sa.sa_mask); /* block all signals in handler */ + sa.sa_flags = SA_RESTART; sa.sa_handler = sigquit; (void) sigaction(SIGHUP, &sa, NULL); (void) sigaction(SIGINT, &sa, NULL); @@ -493,13 +502,6 @@ main(argc, argv, envp) sa.sa_handler = lostconn; (void) sigaction(SIGPIPE, &sa, NULL); - sa.sa_handler = SIG_IGN; - (void) sigaction(SIGCHLD, &sa, NULL); - - sa.sa_handler = sigurg; - sa.sa_flags = 0; /* don't restart syscalls for SIGURG */ - (void) sigaction(SIGURG, &sa, NULL); - addrlen = sizeof(ctrl_addr); if (getsockname(0, (struct sockaddr *)&ctrl_addr, &addrlen) < 0) { syslog(LOG_ERR, "getsockname: %m"); @@ -627,7 +629,6 @@ lostconn(signo) { struct syslog_data sdata = SYSLOG_DATA_INIT; - sigprocmask(SIG_BLOCK, &allsigs, NULL); if (debug) syslog_r(LOG_DEBUG, &sdata, "lost connection"); dologout(1); @@ -639,7 +640,6 @@ sigquit(signo) { struct syslog_data sdata = SYSLOG_DATA_INIT; - sigprocmask(SIG_BLOCK, &allsigs, NULL); syslog_r(LOG_ERR, &sdata, "got signal %s", sys_signame[signo]); dologout(1); } @@ -1592,15 +1592,18 @@ receive_data(instr, outstr) { int c; int cnt; - volatile int bare_lfs = 0; char buf[BUFSIZ]; + struct sigaction sa; + volatile int bare_lfs = 0; transflag++; switch (type) { case TYPE_I: case TYPE_L: - signal (SIGALRM, lostconn); + sigfillset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sigaction(SIGALRM, &sa, NULL); do { (void) alarm ((unsigned) timeout); |