Apply by doing
cd /usr/src/usr.sbin/inetd
patch -p0 < inetd.patch
Then rebuild inetd
make
make install
And restart inetd or reboot your machine.
Index: inetd.c
===================================================================
RCS file: /cvs/src/usr.sbin/inetd/inetd.c,v
retrieving revision 1.46
retrieving revision 1.49
diff -u -r1.46 -r1.49
--- inetd.c 1998/03/12 00:19:16 1.46
+++ inetd.c 1998/07/15 17:51:14 1.49
@@ -1,4 +1,4 @@
-/* $OpenBSD: inetd.c,v 1.46 1998/03/12 00:19:16 deraadt Exp $ */
+/* $OpenBSD: inetd.c,v 1.49 1998/07/15 17:51:14 deraadt Exp $ */
/* $NetBSD: inetd.c,v 1.11 1996/02/22 11:14:41 mycroft Exp $ */
/*
* Copyright (c) 1983,1991 The Regents of the University of California.
@@ -41,7 +41,7 @@
#ifndef lint
/*static char sccsid[] = "from: @(#)inetd.c 5.30 (Berkeley) 6/3/91";*/
-static char rcsid[] = "$OpenBSD: inetd.c,v 1.46 1998/03/12 00:19:16 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: inetd.c,v 1.49 1998/07/15 17:51:14 deraadt Exp $";
#endif /* not lint */
/*
@@ -382,10 +382,13 @@
#endif
memset((char *)&sa, 0, sizeof(sa));
- sa.sa_mask = SIGBLOCK;
+ sigemptyset(&sa.sa_mask);
+ sigaddset(&sa.sa_mask, SIGALRM);
+ sigaddset(&sa.sa_mask, SIGCHLD);
+ sigaddset(&sa.sa_mask, SIGHUP);
sa.sa_handler = retry;
sigaction(SIGALRM, &sa, NULL);
- config(0);
+ config(SIGHUP);
sa.sa_handler = config;
sigaction(SIGHUP, &sa, NULL);
sa.sa_handler = reapchild;
@@ -409,7 +412,7 @@
}
for (;;) {
- int n, ctrl;
+ int n, ctrl = -1;
fd_set readable;
if (nsock == 0) {
@@ -493,6 +496,9 @@
syslog(LOG_ERR,
"%s/%s server failing (looping), service terminated",
sep->se_service, sep->se_proto);
+ if (!sep->se_wait &&
+ sep->se_socktype == SOCK_STREAM)
+ close(ctrl);
FD_CLR(sep->se_fd, &allsock);
(void) close(sep->se_fd);
sep->se_fd = -1;
@@ -1060,7 +1066,7 @@
if (defhost) free(defhost);
defhost = newstr("*");
if (fconfig != NULL) {
- fseek(fconfig, 0L, L_SET);
+ fseek(fconfig, 0L, SEEK_SET);
return (1);
}
fconfig = fopen(CONFIG, "r");