Skip site navigation (1)Skip section navigation (2)
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>