summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/rcmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libc/net/rcmd.c')
-rw-r--r--src/lib/libc/net/rcmd.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/lib/libc/net/rcmd.c b/src/lib/libc/net/rcmd.c
index 1439fff061..a9fdc1b1d0 100644
--- a/src/lib/libc/net/rcmd.c
+++ b/src/lib/libc/net/rcmd.c
@@ -34,7 +34,7 @@
34 */ 34 */
35 35
36#if defined(LIBC_SCCS) && !defined(lint) 36#if defined(LIBC_SCCS) && !defined(lint)
37static char *rcsid = "$OpenBSD: rcmd.c,v 1.38 2001/06/27 00:58:55 lebel Exp $"; 37static char *rcsid = "$OpenBSD: rcmd.c,v 1.39 2001/09/04 23:35:58 millert Exp $";
38#endif /* LIBC_SCCS and not lint */ 38#endif /* LIBC_SCCS and not lint */
39 39
40#include <sys/param.h> 40#include <sys/param.h>
@@ -87,7 +87,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
87 int error; 87 int error;
88 struct sockaddr_storage from; 88 struct sockaddr_storage from;
89 fd_set *readsp = NULL; 89 fd_set *readsp = NULL;
90 int oldmask; 90 sigset_t oldmask, mask;
91 pid_t pid; 91 pid_t pid;
92 int s, lport, timo; 92 int s, lport, timo;
93 char c, *p; 93 char c, *p;
@@ -132,7 +132,9 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
132 132
133 r = res; 133 r = res;
134 refused = 0; 134 refused = 0;
135 oldmask = sigblock(sigmask(SIGURG)); 135 sigemptyset(&mask);
136 sigaddset(&mask, SIGURG);
137 oldmask = sigprocmask(SIG_BLOCK, &mask, &oldmask);
136 for (timo = 1, lport = IPPORT_RESERVED - 1;;) { 138 for (timo = 1, lport = IPPORT_RESERVED - 1;;) {
137 s = rresvport_af(&lport, r->ai_family); 139 s = rresvport_af(&lport, r->ai_family);
138 if (s < 0) { 140 if (s < 0) {
@@ -146,7 +148,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
146 r = r->ai_next; 148 r = r->ai_next;
147 continue; 149 continue;
148 } else { 150 } else {
149 sigsetmask(oldmask); 151 sigprocmask(SIG_SETMASK, &oldmask, NULL);
150 freeaddrinfo(res); 152 freeaddrinfo(res);
151 return (-1); 153 return (-1);
152 } 154 }
@@ -194,7 +196,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
194 } 196 }
195 (void)fprintf(stderr, "%s: %s\n", res->ai_canonname, 197 (void)fprintf(stderr, "%s: %s\n", res->ai_canonname,
196 strerror(errno)); 198 strerror(errno));
197 sigsetmask(oldmask); 199 sigprocmask(SIG_SETMASK, &oldmask, NULL);
198 freeaddrinfo(res); 200 freeaddrinfo(res);
199 return (-1); 201 return (-1);
200 } 202 }
@@ -306,7 +308,7 @@ again:
306 } 308 }
307 goto bad2; 309 goto bad2;
308 } 310 }
309 sigsetmask(oldmask); 311 sigprocmask(SIG_SETMASK, &oldmask, NULL);
310 free(readsp); 312 free(readsp);
311 return (s); 313 return (s);
312bad2: 314bad2:
@@ -316,7 +318,7 @@ bad:
316 if (readsp) 318 if (readsp)
317 free(readsp); 319 free(readsp);
318 (void)close(s); 320 (void)close(s);
319 sigsetmask(oldmask); 321 sigprocmask(SIG_SETMASK, &oldmask, NULL);
320 return (-1); 322 return (-1);
321} 323}
322 324