git: 041065e59eae - stable/14 - lpd: Add timeout option
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 04 Mar 2026 14:45:16 UTC
The branch stable/14 has been updated by des:
URL: https://cgit.FreeBSD.org/src/commit/?id=041065e59eae8af5fa3ae676416eff65d90158e5
commit 041065e59eae8af5fa3ae676416eff65d90158e5
Author: Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2026-02-26 06:15:14 +0000
Commit: Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2026-03-04 14:45:09 +0000
lpd: Add timeout option
Set a 120-second receive timeout on all client connections, and add a
command-line option to change that value.
MFC after: 1 week
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D55400
(cherry picked from commit 56fbfd1ecdc78fc99b3a2e381c355ce8980de39d)
---
usr.sbin/lpr/lpd/lpd.8 | 8 +++++++-
usr.sbin/lpr/lpd/lpd.c | 30 +++++++++++++++++++-----------
2 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/usr.sbin/lpr/lpd/lpd.8 b/usr.sbin/lpr/lpd/lpd.8
index f3b78d9d4d11..97f1acb23032 100644
--- a/usr.sbin/lpr/lpd/lpd.8
+++ b/usr.sbin/lpr/lpd/lpd.8
@@ -27,7 +27,7 @@
.\"
.\" @(#)lpd.8 8.3 (Berkeley) 4/19/94
.\"
-.Dd April 15, 2021
+.Dd February 19, 2026
.Dt LPD 8
.Os
.Sh NAME
@@ -36,6 +36,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl cdlpsFW46
+.Op Fl t Ar timeout
.Op Ar port#
.Sh DESCRIPTION
The
@@ -107,6 +108,11 @@ This means that
will not accept any connections from any remote
hosts, although it will still accept print requests
from all local users.
+.It Fl t Ar timeout
+Set the network receive timeout for client connections to
+.Ar timeout
+seconds.
+The default is 120.
.It Fl F
By default,
.Nm
diff --git a/usr.sbin/lpr/lpd/lpd.c b/usr.sbin/lpr/lpd/lpd.c
index c9a7e1615b74..df9bfcec5de1 100644
--- a/usr.sbin/lpr/lpd/lpd.c
+++ b/usr.sbin/lpr/lpd/lpd.c
@@ -73,28 +73,28 @@ static char sccsid[] = "@(#)lpd.c 8.7 (Berkeley) 5/10/95";
*/
#include <sys/param.h>
-#include <sys/wait.h>
-#include <sys/types.h>
+#include <sys/file.h>
#include <sys/socket.h>
-#include <sys/un.h>
#include <sys/stat.h>
-#include <sys/file.h>
+#include <sys/un.h>
+#include <sys/wait.h>
+
#include <netinet/in.h>
#include <arpa/inet.h>
-#include <netdb.h>
-#include <unistd.h>
-#include <syslog.h>
-#include <signal.h>
+#include <ctype.h>
+#include <dirent.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
-#include <dirent.h>
+#include <netdb.h>
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>
-#include <ctype.h>
+#include <syslog.h>
+#include <unistd.h>
#include "lp.h"
#include "lp.local.h"
#include "pathnames.h"
@@ -129,6 +129,7 @@ uid_t uid, euid;
int
main(int argc, char **argv)
{
+ struct timeval tv = { .tv_sec = 120 };
int ch_options, errs, f, funix, *finet, i, lfd, socket_debug;
fd_set defreadfds;
struct sockaddr_un un, fromunix;
@@ -151,7 +152,7 @@ main(int argc, char **argv)
errx(EX_NOPERM,"must run as root");
errs = 0;
- while ((i = getopt(argc, argv, "cdlpswFW46")) != -1)
+ while ((i = getopt(argc, argv, "cdlpst:wFW46")) != -1)
switch (i) {
case 'c':
/* log all kinds of connection-errors to syslog */
@@ -171,6 +172,9 @@ main(int argc, char **argv)
case 's': /* secure (no inet) */
sflag++;
break;
+ case 't':
+ tv.tv_sec = atol(optarg);
+ break;
case 'w': /* netbsd uses -w for maxwait */
/*
* This will be removed after the release of 4.4, as
@@ -398,6 +402,10 @@ main(int argc, char **argv)
syslog(LOG_WARNING, "accept: %m");
continue;
}
+ if (tv.tv_sec > 0) {
+ (void) setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv,
+ sizeof(tv));
+ }
if (fork() == 0) {
/*
* Note that printjob() also plays around with