summaryrefslogtreecommitdiffstats
path: root/usr.sbin/lpr
diff options
context:
space:
mode:
authorsheldonh <sheldonh@FreeBSD.org>2000-03-29 11:15:54 +0000
committersheldonh <sheldonh@FreeBSD.org>2000-03-29 11:15:54 +0000
commit409bbf806052ec3deb6fa3c7f799afeb0559dfb7 (patch)
treedaba3df8e1e3062ac7fac2d93cba9da5c75ab665 /usr.sbin/lpr
parenta12619f86801d28316676a19a0267008ccb8ceff (diff)
downloadFreeBSD-src-409bbf806052ec3deb6fa3c7f799afeb0559dfb7.zip
FreeBSD-src-409bbf806052ec3deb6fa3c7f799afeb0559dfb7.tar.gz
Add -p option to prevent lpd(8) from opening a listening socket.
PR: 17384 Submitted by: Niels Endres <niels@b5.nu>
Diffstat (limited to 'usr.sbin/lpr')
-rw-r--r--usr.sbin/lpr/lpd/lpd.88
-rw-r--r--usr.sbin/lpr/lpd/lpd.c41
2 files changed, 32 insertions, 17 deletions
diff --git a/usr.sbin/lpr/lpd/lpd.8 b/usr.sbin/lpr/lpd/lpd.8
index d8ff190..f882a31 100644
--- a/usr.sbin/lpr/lpd/lpd.8
+++ b/usr.sbin/lpr/lpd/lpd.8
@@ -40,7 +40,7 @@
.Nd line printer spooler daemon
.Sh SYNOPSIS
.Nm lpd
-.Op Fl dl
+.Op Fl dlp
.Op Ar port#
.Sh DESCRIPTION
.Nm Lpd
@@ -75,6 +75,12 @@ flag causes
to log valid requests received from the network.
This can be useful
for debugging purposes.
+.It Fl p
+The
+.Fl p
+flag causes
+.Nm
+not to open an Internet listening socket.
.It Ar "port#"
The Internet port number used to rendezvous
with other processes is normally obtained with
diff --git a/usr.sbin/lpr/lpd/lpd.c b/usr.sbin/lpr/lpd/lpd.c
index 47e8056..76846a7 100644
--- a/usr.sbin/lpr/lpd/lpd.c
+++ b/usr.sbin/lpr/lpd/lpd.c
@@ -104,6 +104,7 @@ static const char rcsid[] =
#include "extern.h"
int lflag; /* log requests flag */
+int pflag; /* no incoming port flag */
int from_remote; /* from remote socket */
int main __P((int, char **));
@@ -144,7 +145,7 @@ main(argc, argv)
errx(EX_NOPERM,"must run as root");
errs = 0;
- while ((i = getopt(argc, argv, "dl")) != -1)
+ while ((i = getopt(argc, argv, "dlp")) != -1)
switch (i) {
case 'd':
options |= SO_DEBUG;
@@ -152,6 +153,9 @@ main(argc, argv)
case 'l':
lflag++;
break;
+ case 'p':
+ pflag++;
+ break;
default:
errs++;
}
@@ -278,22 +282,25 @@ main(argc, argv)
FD_ZERO(&defreadfds);
FD_SET(funix, &defreadfds);
listen(funix, 5);
- finet = socket(AF_INET, SOCK_STREAM, 0);
- if (finet >= 0) {
- if (options & SO_DEBUG)
- if (setsockopt(finet, SOL_SOCKET, SO_DEBUG, 0, 0) < 0) {
+ if (pflag == 0) {
+ finet = socket(AF_INET, SOCK_STREAM, 0);
+ if (finet >= 0) {
+ if (options & SO_DEBUG &&
+ setsockopt(finet, SOL_SOCKET, SO_DEBUG, 0, 0) < 0) {
syslog(LOG_ERR, "setsockopt (SO_DEBUG): %m");
mcleanup(0);
}
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_port = sp->s_port;
- if (bind(finet, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
- syslog(LOG_ERR, "bind: %m");
- mcleanup(0);
+ memset(&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_port = sp->s_port;
+ if (bind(finet, (struct sockaddr *)&sin,
+ sizeof(sin)) < 0) {
+ syslog(LOG_ERR, "bind: %m");
+ mcleanup(0);
+ }
+ FD_SET(finet, &defreadfds);
+ listen(finet, 5);
}
- FD_SET(finet, &defreadfds);
- listen(finet, 5);
}
/*
* Main loop: accept, do a request, continue.
@@ -318,7 +325,7 @@ main(argc, argv)
domain = AF_UNIX, fromlen = sizeof(fromunix);
s = accept(funix,
(struct sockaddr *)&fromunix, &fromlen);
- } else /* if (FD_ISSET(finet, &readfds)) */ {
+ } else if (pflag == 0) /* if (FD_ISSET(finet, &readfds)) */ {
domain = AF_INET, fromlen = sizeof(frominet);
s = accept(finet,
(struct sockaddr *)&frominet, &fromlen);
@@ -339,7 +346,9 @@ main(argc, argv)
signal(SIGQUIT, SIG_IGN);
signal(SIGTERM, SIG_IGN);
(void) close(funix);
- (void) close(finet);
+ if (pflag == 0) {
+ (void) close(finet);
+ }
dup2(s, 1);
(void) close(s);
if (domain == AF_INET) {
@@ -629,6 +638,6 @@ again:
static void
usage()
{
- fprintf(stderr, "usage: lpd [-dl] [port#]\n");
+ fprintf(stderr, "usage: lpd [-dlp] [port#]\n");
exit(EX_USAGE);
}
OpenPOWER on IntegriCloud