Date: Wed, 15 Mar 2000 16:28:13 +1100 (EST) From: Niels.Endres@biddles.its.unimelb.edu.au To: FreeBSD-gnats-submit@freebsd.org Subject: misc/17384: patch for lpd to add -p option to disable internet sockets Message-ID: <200003150528.QAA03127@biddles.its.unimelb.edu.au>
next in thread | raw e-mail | index | archive | help
>Number: 17384
>Category: misc
>Synopsis: patch for lpd to add -p option to disable internet sockets
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Mar 14 21:30:02 PST 2000
>Closed-Date:
>Last-Modified:
>Originator: Niels Endres
>Release: FreeBSD 3.4-RELEASE i386
>Organization:
>Environment:
N/A
>Description:
patch for lpd to add -p option to disable internet sockets
>How-To-Repeat:
N/A
>Fix:
*** lpd.c.orig Wed Mar 15 15:36:00 2000
--- lpd.c Wed Mar 15 15:43:22 2000
***************
*** 104,109 ****
--- 104,110 ----
#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 **));
***************
*** 136,141 ****
--- 137,143 ----
euid = geteuid(); /* these shouldn't be different */
uid = getuid();
options = 0;
+ pflag = 0;
gethostname(host, sizeof(host));
name = "lpd";
***************
*** 144,150 ****
errx(EX_NOPERM,"must run as root");
errs = 0;
! while ((i = getopt(argc, argv, "dl")) != -1)
switch (i) {
case 'd':
options |= SO_DEBUG;
--- 146,152 ----
errx(EX_NOPERM,"must run as root");
errs = 0;
! while ((i = getopt(argc, argv, "dlp")) != -1)
switch (i) {
case 'd':
options |= SO_DEBUG;
***************
*** 152,157 ****
--- 154,163 ----
case 'l':
lflag++;
break;
+
+ case 'p':
+ pflag++;
+ break;
default:
errs++;
}
***************
*** 278,299 ****
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) {
! 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);
}
- FD_SET(finet, &defreadfds);
- listen(finet, 5);
}
/*
* Main loop: accept, do a request, continue.
--- 284,310 ----
FD_ZERO(&defreadfds);
FD_SET(funix, &defreadfds);
listen(funix, 5);
! if (pflag == 0) {
! finet = socket(AF_INET, SOCK_STREAM, 0);
! if (finet >= 0) {
! if (options & SO_DEBUG)
! if (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);
}
! FD_SET(finet, &defreadfds);
! listen(finet, 5);
}
}
/*
* Main loop: accept, do a request, continue.
***************
*** 318,324 ****
domain = AF_UNIX, fromlen = sizeof(fromunix);
s = accept(funix,
(struct sockaddr *)&fromunix, &fromlen);
! } else /* if (FD_ISSET(finet, &readfds)) */ {
domain = AF_INET, fromlen = sizeof(frominet);
s = accept(finet,
(struct sockaddr *)&frominet, &fromlen);
--- 329,335 ----
domain = AF_UNIX, fromlen = sizeof(fromunix);
s = accept(funix,
(struct sockaddr *)&fromunix, &fromlen);
! } else if (pflag == 0) /* if (FD_ISSET(finet, &readfds)) */ {
domain = AF_INET, fromlen = sizeof(frominet);
s = accept(finet,
(struct sockaddr *)&frominet, &fromlen);
***************
*** 339,345 ****
signal(SIGQUIT, SIG_IGN);
signal(SIGTERM, SIG_IGN);
(void) close(funix);
! (void) close(finet);
dup2(s, 1);
(void) close(s);
if (domain == AF_INET) {
--- 350,358 ----
signal(SIGQUIT, SIG_IGN);
signal(SIGTERM, SIG_IGN);
(void) close(funix);
! if (pflag == 0) {
! (void) close(finet);
! }
dup2(s, 1);
(void) close(s);
if (domain == AF_INET) {
***************
*** 629,634 ****
static void
usage()
{
! fprintf(stderr, "usage: lpd [-dl] [port#]\n");
exit(EX_USAGE);
}
--- 642,647 ----
static void
usage()
{
! fprintf(stderr, "usage: lpd [-dlp] [port#]\n");
exit(EX_USAGE);
}
*** lpd.8.orig Wed Mar 15 15:47:12 2000
--- lpd.8 Wed Mar 15 15:53:18 2000
***************
*** 40,46 ****
.Nd line printer spooler daemon
.Sh SYNOPSIS
.Nm lpd
! .Op Fl dl
.Op Ar port#
.Sh DESCRIPTION
.Nm Lpd
--- 40,46 ----
.Nd line printer spooler daemon
.Sh SYNOPSIS
.Nm lpd
! .Op Fl dlp
.Op Ar port#
.Sh DESCRIPTION
.Nm Lpd
***************
*** 73,78 ****
--- 73,84 ----
.Nm
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
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200003150528.QAA03127>
