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>