[1274] in Kerberos-V5-bugs
krb5b4pl3: appl/bsd/krshd.c: should use proper select() macros
daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Fri Mar 24 13:59:43 1995
From: "Jonathan I. Kamens" <jik@cam.ov.com>
Date: Fri, 24 Mar 1995 14:02:56 -0500
To: krb5-bugs@MIT.EDU
See the Subject.
Patch:
--- krshd.c 1995/03/23 20:47:29 1.3
+++ krshd.c 1995/03/24 18:58:40
@@ -358,7 +358,7 @@
exit(2);
}
- if ((fd = accept(s, &from, &fromlen)) < 0) {
+ if ((fd = accept(s, (struct sockaddr *) &from, &fromlen)) < 0) {
fprintf(stderr, "Error in accept: %s\n", strerror(errno));
exit(2);
}
@@ -507,7 +507,7 @@
char *hostname;
short port;
int pv[2], cc;
- long ready, readfrom;
+ fd_set ready, readfrom;
char buf[BUFSIZ], sig;
int one = 1;
krb5_sigtype cleanup();
@@ -1083,7 +1083,9 @@
(void) close(0); (void) close(1); (void) close(2);
(void) close(f); (void) close(pv[1]);
- readfrom = (1L<<s) | (1L<<pv[0]);
+ FD_ZERO(&readfrom);
+ FD_SET(s, &readfrom);
+ FD_SET(pv[0], &readfrom);
ioctl(pv[0], FIONBIO, (char *)&one);
/* should set s nbio! */
do {
@@ -1091,24 +1093,24 @@
if (select(16, &ready, (fd_set *)0,
(fd_set *)0, (struct timeval *)0) < 0)
break;
- if (ready & (1L<<s)) {
+ if (FD_ISSET(s, &ready)) {
if (read(s, &sig, 1) <= 0)
- readfrom &= ~(1L<<s);
+ FD_CLR(s, &readfrom);
else {
signal(sig, cleanup);
killpg(pid, sig);
}
}
- if (ready & (1L<<pv[0])) {
+ if (FD_ISSET(pv[0], &ready)) {
errno = 0;
cc = read(pv[0], buf, sizeof (buf));
if (cc <= 0) {
shutdown(s, 1+1);
- readfrom &= ~(1L<<pv[0]);
+ FD_CLR(pv[0], &readfrom);
} else
(void) write(s, buf, cc);
}
- } while (readfrom);
+ } while (FD_ISSET(s, &readfrom) || FD_ISSET(pv[0], &readfrom));
#ifdef KERBEROS
syslog(LOG_INFO ,
"Shell process completed.");