SCCS-vsn: usr.sbin/inetd/inetd.c 4.3
SCCS-vsn: libexec/rlogind/rlogind.c 4.21
SCCS-vsn: libexec/rshd/rshd.c 4.20
SCCS-vsn: libexec/telnetd/telnetd.c 4.28
-static char sccsid[] = "@(#)rlogind.c 4.20 (Berkeley) %G%";
+static char sccsid[] = "@(#)rlogind.c 4.21 (Berkeley) %G%";
- int options = 0, fromlen;
+ int on = 1, options = 0, fromlen;
struct sockaddr_in from;
fromlen = sizeof (from);
struct sockaddr_in from;
fromlen = sizeof (from);
perror("getpeername");
_exit(1);
}
perror("getpeername");
_exit(1);
}
- if (setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, 0, 0) < 0) {
+ if (setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof (on)) < 0) {
fprintf(stderr, "%s: ", argv[0]);
perror("setsockopt (SO_KEEPALIVE)");
}
fprintf(stderr, "%s: ", argv[0]);
perror("setsockopt (SO_KEEPALIVE)");
}
-static char sccsid[] = "@(#)rshd.c 4.19 (Berkeley) %G%";
+static char sccsid[] = "@(#)rshd.c 4.20 (Berkeley) %G%";
+ struct linger linger;
+ int on = 1, fromlen;
struct sockaddr_in from;
fromlen = sizeof (from);
struct sockaddr_in from;
fromlen = sizeof (from);
perror("getpeername");
_exit(1);
}
perror("getpeername");
_exit(1);
}
- if (setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, 0, 0) < 0) {
+ if (setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof (on)) < 0) {
fprintf(stderr, "%s: ", argv[0]);
perror("setsockopt (SO_KEEPALIVE)");
}
fprintf(stderr, "%s: ", argv[0]);
perror("setsockopt (SO_KEEPALIVE)");
}
+ linger.l_onoff = 1;
+ linger.l_linger = 60; /* XXX */
if (setsockopt(0, SOL_SOCKET, SO_LINGER, &linger, sizeof (linger)) < 0) {
fprintf(stderr, "%s: ", argv[0]);
perror("setsockopt (SO_LINGER)");
if (setsockopt(0, SOL_SOCKET, SO_LINGER, &linger, sizeof (linger)) < 0) {
fprintf(stderr, "%s: ", argv[0]);
perror("setsockopt (SO_LINGER)");
-static char sccsid[] = "@(#)telnetd.c 4.27 (Berkeley) %G%";
+static char sccsid[] = "@(#)telnetd.c 4.28 (Berkeley) %G%";
char *argv[];
{
struct sockaddr_in from;
char *argv[];
{
struct sockaddr_in from;
fromlen = sizeof (from);
if (getpeername(0, &from, &fromlen) < 0) {
fromlen = sizeof (from);
if (getpeername(0, &from, &fromlen) < 0) {
perror("getpeername");
_exit(1);
}
perror("getpeername");
_exit(1);
}
- if (setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, 0, 0) < 0) {
+ if (setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof (on)) < 0) {
fprintf(stderr, "%s: ", argv[0]);
perror("setsockopt (SO_KEEPALIVE)");
}
fprintf(stderr, "%s: ", argv[0]);
perror("setsockopt (SO_KEEPALIVE)");
}
-static char sccsid[] = "@(#)inetd.c 4.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)inetd.c 4.3 (Berkeley) %G%";
{
register struct servtab *sep, *cp, **sepp;
struct servtab *getconfigent(), *enter();
{
register struct servtab *sep, *cp, **sepp;
struct servtab *getconfigent(), *enter();
if (!setconfig()) {
syslog(LOG_ERR, "%s: %m", CONFIG);
if (!setconfig()) {
syslog(LOG_ERR, "%s: %m", CONFIG);
sep->se_service, sep->se_proto);
continue;
}
sep->se_service, sep->se_proto);
continue;
}
+#define turnon(fd, opt) \
+ setsockopt(fd, SOL_SOCKET, opt, &on, sizeof (on))
if (strcmp(sep->se_proto, "tcp") == 0 && (options & SO_DEBUG) &&
if (strcmp(sep->se_proto, "tcp") == 0 && (options & SO_DEBUG) &&
- setsockopt(sep->se_fd, SOL_SOCKET, SO_DEBUG, 0, 0) < 0)
+ turnon(sep->se_fd, SO_DEBUG) < 0)
syslog(LOG_ERR, "setsockopt (SO_DEBUG): %m");
syslog(LOG_ERR, "setsockopt (SO_DEBUG): %m");
- if (setsockopt(sep->se_fd, SOL_SOCKET, SO_REUSEADDR, 0, 0) < 0)
+ if (turnon(sep->se_fd, SO_REUSEADDR) < 0)
syslog(LOG_ERR, "setsockopt (SO_REUSEADDR): %m");
syslog(LOG_ERR, "setsockopt (SO_REUSEADDR): %m");
if (bind(sep->se_fd, &sep->se_ctrladdr,
sizeof (sep->se_ctrladdr), 0) < 0) {
syslog(LOG_ERR, "%s/%s: bind: %m",
if (bind(sep->se_fd, &sep->se_ctrladdr,
sizeof (sep->se_ctrladdr), 0) < 0) {
syslog(LOG_ERR, "%s/%s: bind: %m",