NNTP 1.5.11 (11 Feburary 1991) patch release (part 3 of 4)

Stan Barber nntp at tmc.edu
Mon Feb 11 07:57:34 AEST 1991


#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	server/server.pt1.diff
# This archive created: Sun Feb 10 14:24:06 1991
export PATH; PATH=/bin:$PATH
if test ! -d 'server'
then
	echo shar: creating directory "'server'"
	mkdir 'server'
fi
echo shar: entering directory "'server'"
cd 'server'
echo shar: extracting "'server.pt1.diff'" '(55179 characters)'
if test -f 'server.pt1.diff'
then
	echo shar: will not over-write existing file "'server.pt1.diff'"
else
sed 's/^	X//' << \SHAR_EOF > 'server.pt1.diff'
	XIndex: ihave.c
	XPrereq: 1.17
	X*** ihave.c	Sat Aug 18 17:15:57 1990
	X--- ../../nntp/server/ihave.c	Sun Dec 23 11:50:00 1990
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: ihave.c,v 1.17 90/08/18 17:15:17 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: ihave.c,v 1.18 90/12/23 11:49:59 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X***************
	X*** 67,73
	X  	} else 
	X  #ifdef BATCHED_INPUT
	X  	    /* C news input hook */
	X! 	    retcode = batch_input_article(CONT_XFER, ERR_XFERFAIL, errbuf);
	X  #else
	X  	    retcode = spawn(rnews, "rnews", (char *) 0, CONT_XFER,
	X  			    ERR_XFERFAIL, errbuf);
	X
	X--- 67,74 -----
	X  	} else 
	X  #ifdef BATCHED_INPUT
	X  	    /* C news input hook */
	X! 	    retcode = batch_input_article(CONT_XFER, ERR_XFERFAIL,
	X! 		errbuf, argv[1]);
	X  #else
	X  	    retcode = spawn(rnews, "rnews", (char *) 0, CONT_XFER,
	X  		ERR_XFERFAIL, errbuf, argv[1]);
	X***************
	X*** 70,76
	X  	    retcode = batch_input_article(CONT_XFER, ERR_XFERFAIL, errbuf);
	X  #else
	X  	    retcode = spawn(rnews, "rnews", (char *) 0, CONT_XFER,
	X! 			    ERR_XFERFAIL, errbuf);
	X  #endif
	X  
	X  	if (retcode <= 0){
	X
	X--- 71,77 -----
	X  		errbuf, argv[1]);
	X  #else
	X  	    retcode = spawn(rnews, "rnews", (char *) 0, CONT_XFER,
	X! 		ERR_XFERFAIL, errbuf, argv[1]);
	X  #endif
	X  
	X  	if (retcode <= 0){
	X***************
	X*** 89,94
	X          else
	X                 printf("%d Thanks.\r\n", OK_XFERED);
	X          (void) fflush(stdout);
	X  #ifdef LOG
	X  	if (retcode == 1)
	X  		ih_accepted++;
	X
	X--- 90,96 -----
	X          else
	X                 printf("%d Thanks.\r\n", OK_XFERED);
	X          (void) fflush(stdout);
	X+ 
	X  #ifdef LOG
	X  	if (retcode == 1)
	X  		ih_accepted++;
	XIndex: main.c
	XPrereq: 1.15
	X*** main.c	Sat Aug 11 21:30:22 1990
	X--- ../../nntp/server/main.c	Sat Jan 12 10:54:24 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: main.c,v 1.15 90/08/11 21:29:53 sob Exp $";
	X  #endif
	X  
	X  /*
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: main.c,v 1.18 91/01/12 10:54:01 sob Exp $";
	X  #endif
	X  
	X  /*
	X***************
	X*** 22,28
	X  struct sockaddr_in current_peer = { AF_INET, IPPORT_NNTP };
	X  #endif
	X  #include <signal.h>
	X! #ifdef hpux
	X  #include <varargs.h>
	X  #endif /*hpux*/
	X  
	X
	X--- 22,29 -----
	X  struct sockaddr_in current_peer = { AF_INET, IPPORT_NNTP };
	X  #endif
	X  #include <signal.h>
	X! /* XXX Should be #ifdef VARARGS */
	X! #if defined(sun) || defined(hpux)
	X  #include <varargs.h>
	X  #endif
	X  
	X***************
	X*** 24,30
	X  #include <signal.h>
	X  #ifdef hpux
	X  #include <varargs.h>
	X! #endif /*hpux*/
	X  
	X  #ifdef SETPROCTITLE
	X  char	**Argv = NULL;		/* pointer to argument vector */
	X
	X--- 25,31 -----
	X  /* XXX Should be #ifdef VARARGS */
	X  #if defined(sun) || defined(hpux)
	X  #include <varargs.h>
	X! #endif
	X  
	X  #ifdef SETPROCTITLE
	X  char	**Argv = NULL;		/* pointer to argument vector */
	X***************
	X*** 31,38
	X  char	*LastArgv = NULL;	/* end of argv */
	X  #endif /* SETPROCTITLE */
	X  
	X- char **myenviron;
	X- 
	X  main(argc,argv,envp)
	X  char **argv, **envp;
	X  {
	X
	X--- 32,37 -----
	X  char	*LastArgv = NULL;	/* end of argv */
	X  #endif /* SETPROCTITLE */
	X  
	X  main(argc,argv,envp)
	X  char **argv, **envp;
	X  {
	X***************
	X*** 42,47
	X  	int			sockt, client, length;
	X  	struct sockaddr_in	from;
	X  	extern int 		reaper();
	X  
	X  	disassoc();
	X  
	X
	X--- 41,49 -----
	X  	int			sockt, client, length;
	X  	struct sockaddr_in	from;
	X  	extern int 		reaper();
	X+ #ifdef LOAD
	X+ 	register int load;
	X+ #endif /* LOAD */
	X  
	X  	disassoc();
	X  
	X***************
	X*** 74,79
	X  	(void) signal(SIGCHLD, reaper);
	X  #endif /* USG */
	X  
	X  	if (listen(sockt, SOMAXCONN) < 0) {
	X  #ifdef SYSLOG
	X  		syslog(LOG_ERR, "main: listen: %m");
	X
	X--- 76,86 -----
	X  	(void) signal(SIGCHLD, reaper);
	X  #endif /* USG */
	X  
	X+ #ifdef DEBUG
	X+ 	(void) signal(SIGUSR1, debugup);
	X+ 	(void) signal(SIGUSR2, debugdown);
	X+ #endif
	X+ 
	X  	if (listen(sockt, SOMAXCONN) < 0) {
	X  #ifdef SYSLOG
	X  		syslog(LOG_ERR, "main: listen: %m");
	X***************
	X*** 84,105
	X  
	X  #ifdef SETPROCTITLE
	X  	/*
	X- 	 * Stash away a copy of the environment for use by later exec's.
	X- 	 * (This leaves us free to trash the original copy.)
	X- 	 */
	X- 	{
	X- 	register int i;
	X- 
	X- 	i = 0;
	X- 	while (envp[i++])
	X- 		;
	X- 	myenviron = (char **)malloc(i * sizeof(char **));
	X- 	myenviron[--i] = 0;
	X- 	while (--i >= 0)
	X- 		myenviron[i] =
	X- 		    strcpy((char *)malloc(strlen(envp[i]) + 1), envp[i]);
	X- 	}
	X- 	/*
	X  	 *  Save start and extent of argv for setproctitle.
	X  	 */
	X  
	X
	X--- 91,96 -----
	X  
	X  #ifdef SETPROCTITLE
	X  	/*
	X  	 *  Save start and extent of argv for setproctitle.
	X  	 */
	X  
	X***************
	X*** 111,119
	X  		envp++;
	X  	LastArgv = envp[-1] + strlen(envp[-1]);
	X  #endif /*SDD*/
	X- #else /* SETPROCTITLE */
	X- 	/* Just use original copy if not doing proctitle hacking */
	X- 	myenviron = envp;
	X  #endif /* SETPROCTITLE */
	X  
	X  	for (;;) {
	X
	X--- 102,107 -----
	X  		envp++;
	X  	LastArgv = envp[-1] + strlen(envp[-1]);
	X  #endif /*SDD*/
	X  #endif /* SETPROCTITLE */
	X  #if defined(LOAD) && defined(SETPROCTITLE)
	X  	/* If LOAD and SETPROCTITLE, display load before first accept() */
	X***************
	X*** 115,120
	X  	/* Just use original copy if not doing proctitle hacking */
	X  	myenviron = envp;
	X  #endif /* SETPROCTITLE */
	X  
	X  	for (;;) {
	X  #ifdef LOAD
	X
	X--- 103,114 -----
	X  	LastArgv = envp[-1] + strlen(envp[-1]);
	X  #endif /*SDD*/
	X  #endif /* SETPROCTITLE */
	X+ #if defined(LOAD) && defined(SETPROCTITLE)
	X+ 	/* If LOAD and SETPROCTITLE, display load before first accept() */
	X+ 	load = getla();
	X+ 	setproctitle("%sing connections: loadav %d",
	X+ 	    load > LOAD ? "reject" : "accept", load);
	X+ #endif /* LOAD && SETPROCTITLE */
	X  
	X  	for (;;) {
	X  #ifdef LOAD
	X***************
	X*** 118,124
	X  
	X  	for (;;) {
	X  #ifdef LOAD
	X- 		register int load;
	X  		char oline[NNTP_STRLEN];
	X  #endif /* LOAD */
	X  #ifdef EXCELAN
	X
	X--- 112,117 -----
	X  
	X  	for (;;) {
	X  #ifdef LOAD
	X  		char oline[NNTP_STRLEN];
	X  #endif /* LOAD */
	X  #ifdef EXCELAN
	X***************
	X*** 156,161
	X  
	X  #ifdef LOAD
	X  		if (( load = getla()) > LOAD ) {
	X  			setproctitle("rejecting connections: loadav %d", load);
	X  			sprintf( oline, "%d loadav at %d, try later\n",
	X  				ERR_GOODBYE, load );
	X
	X--- 149,155 -----
	X  
	X  #ifdef LOAD
	X  		if (( load = getla()) > LOAD ) {
	X+ #ifdef SETPROCTITLE
	X  			setproctitle("rejecting connections: loadav %d", load);
	X  #endif /* SETPROCTITLE */
	X  			sprintf( oline, "%d loadav at %d, try later\r\n",
	X***************
	X*** 157,163
	X  #ifdef LOAD
	X  		if (( load = getla()) > LOAD ) {
	X  			setproctitle("rejecting connections: loadav %d", load);
	X! 			sprintf( oline, "%d loadav at %d, try later\n",
	X  				ERR_GOODBYE, load );
	X  			write( client, oline, strlen( oline ));
	X  #ifdef SYSLOG
	X
	X--- 151,158 -----
	X  		if (( load = getla()) > LOAD ) {
	X  #ifdef SETPROCTITLE
	X  			setproctitle("rejecting connections: loadav %d", load);
	X! #endif /* SETPROCTITLE */
	X! 			sprintf( oline, "%d loadav at %d, try later\r\n",
	X  				ERR_GOODBYE, load );
	X  			write( client, oline, strlen( oline ));
	X  #ifdef SYSLOG
	X***************
	X*** 167,172
	X  			sleep( 5 );
	X  			continue;
	X  		} else {
	X  			setproctitle("accepting connections: loadav %d", load);
	X  		}
	X  #endif LOAD
	X
	X--- 162,168 -----
	X  			sleep( 5 );
	X  			continue;
	X  		} else {
	X+ #ifdef SETPROCTITLE
	X  			setproctitle("accepting connections: loadav %d", load);
	X  #endif /* SETPROCTITLE */
	X  		}
	X***************
	X*** 168,173
	X  			continue;
	X  		} else {
	X  			setproctitle("accepting connections: loadav %d", load);
	X  		}
	X  #endif LOAD
	X  
	X
	X--- 164,170 -----
	X  		} else {
	X  #ifdef SETPROCTITLE
	X  			setproctitle("accepting connections: loadav %d", load);
	X+ #endif /* SETPROCTITLE */
	X  		}
	X  #endif /* LOAD */
	X  
	X***************
	X*** 169,175
	X  		} else {
	X  			setproctitle("accepting connections: loadav %d", load);
	X  		}
	X! #endif LOAD
	X  
	X  		switch (fork()) {
	X  		case	-1:
	X
	X--- 166,172 -----
	X  			setproctitle("accepting connections: loadav %d", load);
	X  #endif /* SETPROCTITLE */
	X  		}
	X! #endif /* LOAD */
	X  
	X  		switch (fork()) {
	X  		case	-1:
	X***************
	X*** 206,212
	X  		default:
	X  #ifdef EXCELAN
	X  				(void) close(sockt);
	X! #else /* EXCELAN */
	X  				(void) close(client);
	X  #endif /* EXCELAN */
	X  				break;
	X
	X--- 203,209 -----
	X  		default:
	X  #ifdef EXCELAN
	X  				(void) close(sockt);
	X! #else /* !EXCELAN */
	X  				(void) close(client);
	X  #endif /* EXCELAN */
	X  				break;
	X***************
	X*** 220,226
	X  		register int load;
	X  
	X  		if (( load = getla()) > LOAD ) {
	X! 			printf("%d loadav at %d, try later\n", 
	X  			       ERR_GOODBYE, load );
	X  #ifdef SYSLOG
	X  #ifdef BSD_42
	X
	X--- 217,223 -----
	X  		register int load;
	X  
	X  		if (( load = getla()) > LOAD ) {
	X! 			printf("%d loadav at %d, try later\r\n", 
	X  			       ERR_GOODBYE, load );
	X  #ifdef SYSLOG
	X  #ifdef BSD_42
	X***************
	X*** 234,240
	X  			exit(1);
	X  		}
	X  	}
	X! #endif LOAD
	X  #ifdef SETPROCTITLE
	X  	/*
	X  	 *  Save start and extent of argv for setproctitle.
	X
	X--- 231,237 -----
	X  			exit(1);
	X  		}
	X  	}
	X! #endif /* LOAD */
	X  #ifdef SETPROCTITLE
	X  	/*
	X  	 *  Save start and extent of argv for setproctitle.
	X***************
	X*** 250,255
	X  #endif /*SDD*/
	X  #endif /* SETPROCTITLE */
	X  
	X  	serve();
	X  
	X  #endif /* ALONE */
	X
	X--- 247,256 -----
	X  #endif /*SDD*/
	X  #endif /* SETPROCTITLE */
	X  
	X+ #ifdef USG
	X+ 	(void) signal(SIGCLD,SIG_DFL);
	X+ #endif /* USG */
	X+ 
	X  	serve();
	X  
	X  #endif /* ALONE */
	X***************
	X*** 259,265
	X   * clobber argv so ps will show what we're doing.
	X   * stolen from sendmail
	X   */
	X! #ifdef hpux
	X  /*VARARGS*/
	X  void
	X  setproctitle(va_alist)
	X
	X--- 260,267 -----
	X   * clobber argv so ps will show what we're doing.
	X   * stolen from sendmail
	X   */
	X! #ifdef SETPROCTITLE
	X! #if defined(sun) || defined(hpux)
	X  /*VARARGS*/
	X  void
	X  setproctitle(va_alist)
	X***************
	X*** 271,277
	X      va_list ap;
	X  
	X      va_start(ap);
	X- #ifdef SETPROCTITLE
	X      fmt = va_arg(ap, char *);
	X      
	X      (void) vsprintf(buf, fmt, ap);
	X
	X--- 273,278 -----
	X      va_list ap;
	X  
	X      va_start(ap);
	X      fmt = va_arg(ap, char *);
	X      
	X      (void) vsprintf(buf, fmt, ap);
	X***************
	X*** 290,296
	X      while (p < LastArgv)
	X  	*p++ = ' ';
	X  
	X- #endif /* SETPROCTITLE */
	X      va_end(ap);
	X  }
	X  #else
	X
	X--- 291,296 -----
	X      while (p < LastArgv)
	X  	*p++ = ' ';
	X  
	X      va_end(ap);
	X  }
	X  #else
	X***************
	X*** 295,300
	X  }
	X  #else
	X  /*VARARGS1*/
	X  setproctitle(fmt, a, b, c)
	X  char *fmt;
	X  {
	X
	X--- 295,301 -----
	X  }
	X  #else
	X  /*VARARGS1*/
	X+ void
	X  setproctitle(fmt, a, b, c)
	X  char *fmt;
	X  {
	X***************
	X*** 298,304
	X  setproctitle(fmt, a, b, c)
	X  char *fmt;
	X  {
	X- #ifdef SETPROCTITLE
	X  	register char *p;
	X  	register int i;
	X  	char buf[BUFSIZ];
	X
	X--- 299,304 -----
	X  setproctitle(fmt, a, b, c)
	X  char *fmt;
	X  {
	X  	register char *p;
	X  	register int i;
	X  	char buf[BUFSIZ];
	X***************
	X*** 318,323
	X  	p += i;
	X  	while (p < LastArgv)
	X  		*p++ = ' ';
	X- #endif /* SETPROCTITLE */
	X  }
	X  #endif /* hpux */
	X
	X--- 318,323 -----
	X  	p += i;
	X  	while (p < LastArgv)
	X  		*p++ = ' ';
	X  }
	X  #endif /* hpux */
	X  #endif /* SETPROCTITLE */
	X***************
	X*** 321,323
	X  #endif /* SETPROCTITLE */
	X  }
	X  #endif /* hpux */
	X
	X--- 320,323 -----
	X  		*p++ = ' ';
	X  }
	X  #endif /* hpux */
	X+ #endif /* SETPROCTITLE */
	XIndex: misc.c
	XPrereq: 1.39
	X*** misc.c	Sat Aug 25 17:00:10 1990
	X--- ../../nntp/server/misc.c	Wed Dec 12 00:00:11 1990
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: misc.c,v 1.39 90/08/25 16:59:48 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: misc.c,v 1.41 90/12/12 00:00:02 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X***************
	X*** 54,60
	X  		return (NULL);
	X  	}
	X  
	X! 	if ((statbuf.st_mode & S_IFREG) != S_IFREG) {
	X  		close_crnt();
	X  		return (NULL);
	X  	}
	X
	X--- 54,60 -----
	X  		return (NULL);
	X  	}
	X  
	X! 	if ((statbuf.st_mode & S_IFMT) != S_IFREG) {
	X  		close_crnt();
	X  		return (NULL);
	X  	}
	X***************
	X*** 565,571
	X   *
	X   *	Returns:	"c" if the character is not
	X   *			upper case, otherwise the lower
	X!  *			case eqivalent of "c".
	X   *
	X   *	Side effects:	None.
	X   */
	X
	X--- 565,571 -----
	X   *
	X   *	Returns:	"c" if the character is not
	X   *			upper case, otherwise the lower
	X!  *			case equivalent of "c".
	X   *
	X   *	Side effects:	None.
	X   */
	XIndex: netaux.c
	XPrereq: 1.11
	X*** /tmp/,RCSt1a20277	Sun Feb 10 13:59:52 1991
	X--- /tmp/,RCSt2a20277	Sun Feb 10 13:59:52 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char	*sccsid = "@(#)netaux.c	1.11	(Berkeley) 2/25/88";
	X  #endif
	X  
	X  /*
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: netaux.c,v 1.14 91/02/10 13:59:20 sob Exp $";
	X  #endif
	X  
	X  /*
	X***************
	X*** 61,67
	X  	(void) dup2(0, 2);
	X  	setpgrp();
	X  	umask(000);
	X! #else not USG
	X  	i = open("/dev/tty", O_RDWR);
	X  	if (i >= 0) {
	X  		ioctl(i, TIOCNOTTY, 0);
	X
	X--- 61,67 -----
	X  	(void) dup2(0, 2);
	X  	setpgrp();
	X  	umask(000);
	X! #else /* not USG */
	X  	i = open("/dev/tty", O_RDWR);
	X  	if (i >= 0) {
	X  		ioctl(i, TIOCNOTTY, 0);
	X***************
	X*** 77,83
	X  		(void) dup2(0, 1);
	X  		(void) dup2(1, 2);
	X  	}
	X! #endif not USG
	X  }
	X  
	X  
	X
	X--- 77,83 -----
	X  		(void) dup2(0, 1);
	X  		(void) dup2(1, 2);
	X  	}
	X! #endif /* not USG */
	X  }
	X  
	X  
	X***************
	X*** 91,97
	X   *
	X   *	Side effects:	None.
	X   *
	X!  *	Errors:		Syslogd, cause aboriton.
	X   */
	X  
	X  get_socket()
	X
	X--- 91,97 -----
	X   *
	X   *	Side effects:	None.
	X   *
	X!  *	Errors:		Syslogd, cause abortion.
	X   */
	X  
	X  get_socket()
	X***************
	X*** 109,115
	X  #endif
	X  		exit(1);
	X  	}
	X! #endif not EXCELAN
	X  
	X  	bzero((char *) &sin, sizeof (sin));
	X  	sin.sin_family = AF_INET;
	X
	X--- 109,115 -----
	X  #endif
	X  		exit(1);
	X  	}
	X! #endif /* not EXCELAN */
	X  
	X  	bzero((char *) &sin, sizeof (sin));
	X  	sin.sin_family = AF_INET;
	X***************
	X*** 118,124
	X  	sin.sin_port = sp->s_port;
	X  
	X  	s = socket(AF_INET, SOCK_STREAM, 0);
	X! #else EXCELAN
	X  	sin.sin_port = htons(IPPORT_NNTP);
	X  	s = 3;		/* WTF??? */
	X  	s = socket(SOCK_STREAM, (struct sockproto *)0, &sin,
	X
	X--- 118,124 -----
	X  	sin.sin_port = sp->s_port;
	X  
	X  	s = socket(AF_INET, SOCK_STREAM, 0);
	X! #else /* EXCELAN */
	X  	sin.sin_port = htons(IPPORT_NNTP);
	X  	s = 3;		/* WTF??? */
	X  	s = socket(SOCK_STREAM, (struct sockproto *)0, &sin,
	X***************
	X*** 123,129
	X  	s = 3;		/* WTF??? */
	X  	s = socket(SOCK_STREAM, (struct sockproto *)0, &sin,
	X  		(SO_KEEPALIVE|SO_ACCEPTCONN));
	X! #endif EXCELAN
	X  	if (s < 0) {
	X  #ifdef EXCELAN
	X  		sleep(5);
	X
	X--- 123,129 -----
	X  	s = 3;		/* WTF??? */
	X  	s = socket(SOCK_STREAM, (struct sockproto *)0, &sin,
	X  		(SO_KEEPALIVE|SO_ACCEPTCONN));
	X! #endif /* EXCELAN */
	X  	if (s < 0) {
	X  #ifdef EXCELAN
	X  		sleep(5);
	X***************
	X*** 128,134
	X  #ifdef EXCELAN
	X  		sleep(5);
	X  		return (-1);
	X! #else not EXCELAN
	X  #ifdef SYSLOG
	X  		syslog(LOG_ERR, "get_socket: socket: %m");
	X  #endif SYSLOG
	X
	X--- 128,134 -----
	X  #ifdef EXCELAN
	X  		sleep(5);
	X  		return (-1);
	X! #else /* not EXCELAN */
	X  #ifdef SYSLOG
	X  		syslog(LOG_ERR, "get_socket: socket: %m");
	X  #endif /* SYSLOG */
	X***************
	X*** 131,137
	X  #else not EXCELAN
	X  #ifdef SYSLOG
	X  		syslog(LOG_ERR, "get_socket: socket: %m");
	X! #endif SYSLOG
	X  		exit(1);
	X  #endif not EXCELAN
	X  	}
	X
	X--- 131,137 -----
	X  #else /* not EXCELAN */
	X  #ifdef SYSLOG
	X  		syslog(LOG_ERR, "get_socket: socket: %m");
	X! #endif /* SYSLOG */
	X  		exit(1);
	X  #endif /* not EXCELAN */
	X  	}
	X***************
	X*** 133,139
	X  		syslog(LOG_ERR, "get_socket: socket: %m");
	X  #endif SYSLOG
	X  		exit(1);
	X! #endif not EXCELAN
	X  	}
	X  #ifndef EXCELAN
	X  #ifdef SO_REUSEADDR
	X
	X--- 133,139 -----
	X  		syslog(LOG_ERR, "get_socket: socket: %m");
	X  #endif /* SYSLOG */
	X  		exit(1);
	X! #endif /* not EXCELAN */
	X  	}
	X  #ifndef EXCELAN
	X  #ifdef SO_REUSEADDR
	X***************
	X*** 147,153
	X  #endif
	X  		exit(1);
	X  	}
	X! #endif not EXCELAN
	X  
	X  	return (s);
	X  }
	X
	X--- 147,153 -----
	X  #endif
	X  		exit(1);
	X  	}
	X! #endif /* not EXCELAN */
	X  
	X  	return (s);
	X  }
	X***************
	X*** 191,197
	X  {
	X  #ifndef USG
	X  	struct itimerval	new, old;
	X! #endif not USG
	X  	extern int		read_again();
	X  
	X  	(void) signal(SIGALRM, read_again);
	X
	X--- 191,197 -----
	X  {
	X  #ifndef USG
	X  	struct itimerval	new, old;
	X! #endif /* not USG */
	X  	extern int		read_again();
	X  
	X  	(void) signal(SIGALRM, read_again);
	X***************
	X*** 197,203
	X  	(void) signal(SIGALRM, read_again);
	X  #ifdef USG
	X  	alarm(READINTVL);
	X! #else not USG
	X  
	X  	new.it_value.tv_sec = READINTVL;
	X  	new.it_value.tv_usec = 0;
	X
	X--- 197,203 -----
	X  	(void) signal(SIGALRM, read_again);
	X  #ifdef USG
	X  	alarm(READINTVL);
	X! #else /* not USG */
	X  
	X  	new.it_value.tv_sec = READINTVL;
	X  	new.it_value.tv_usec = 0;
	X***************
	X*** 214,220
	X  #endif SYSLOG
	X  		exit(1);
	X  	}
	X! #endif not USG
	X  }
	X  
	X  
	X
	X--- 214,220 -----
	X  #endif SYSLOG
	X  		exit(1);
	X  	}
	X! #endif /* not USG */
	X  }
	X  
	X  
	X***************
	X*** 262,268
	X  
	X  	while (wait3(&status, WNOHANG, (struct rusage *)0) > 0)
	X  		;
	X! #endif not USG
	X  }
	X  
	X  #else not ALONE
	X
	X--- 262,268 -----
	X  
	X  	while (wait3(&status, WNOHANG, (struct rusage *)0) > 0)
	X  		;
	X! #endif /* not USG */
	X  }
	X  
	X  #else /* not ALONE */
	X***************
	X*** 265,271
	X  #endif not USG
	X  }
	X  
	X! #else not ALONE
	X  
	X  /* Kludge for greenhill's C compiler */
	X  
	X
	X--- 265,271 -----
	X  #endif /* not USG */
	X  }
	X  
	X! #else /* not ALONE */
	X  
	X  /* Kludge for greenhill's C compiler */
	X  
	X***************
	X*** 273,276
	X  netaux_greenkludge()
	X  {
	X  }
	X! #endif not ALONE
	X
	X--- 273,276 -----
	X  netaux_greenkludge()
	X  {
	X  }
	X! #endif /* not ALONE */
	X
	XIndex: post.c
	XPrereq: 1.16
	X*** post.c	Thu Jul  5 23:47:54 1990
	X--- ../../nntp/server/post.c	Sun Dec 23 11:50:02 1990
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: post.c,v 1.16 90/07/05 23:47:52 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: post.c,v 1.17 90/12/23 11:50:01 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X***************
	X*** 51,57
	X  	}
	X  	else retcode =
	X  #ifdef CNEWS
	X! 	    spawn(inews, "inews", "-W", CONT_POST, ERR_POSTFAIL, errbuf);
	X  #else
	X  	    spawn(inews, "inews", "-h", CONT_POST, ERR_POSTFAIL, errbuf);
	X  #endif
	X
	X--- 51,58 -----
	X  	}
	X  	else retcode =
	X  #ifdef CNEWS
	X! 	    spawn(inews, "inews", "-W", CONT_POST, ERR_POSTFAIL, errbuf,
	X! 		"<none>");
	X  #else
	X  	    spawn(inews, "inews", "-h", CONT_POST, ERR_POSTFAIL, errbuf,
	X  		"<none>");
	X***************
	X*** 53,59
	X  #ifdef CNEWS
	X  	    spawn(inews, "inews", "-W", CONT_POST, ERR_POSTFAIL, errbuf);
	X  #else
	X! 	    spawn(inews, "inews", "-h", CONT_POST, ERR_POSTFAIL, errbuf);
	X  #endif
	X  	if (retcode <= 0)
	X  		printf("%d %s\r\n", ERR_POSTFAIL, errbuf);
	X
	X--- 54,61 -----
	X  	    spawn(inews, "inews", "-W", CONT_POST, ERR_POSTFAIL, errbuf,
	X  		"<none>");
	X  #else
	X! 	    spawn(inews, "inews", "-h", CONT_POST, ERR_POSTFAIL, errbuf,
	X! 		"<none>");
	X  #endif
	X  	if (retcode <= 0)
	X  		printf("%d %s\r\n", ERR_POSTFAIL, errbuf);
	XIndex: scandir.c
	XPrereq: 1.3
	X*** scandir.c	Thu Jul  5 02:29:19 1990
	X--- ../../nntp/server/scandir.c	Fri Feb  8 18:22:16 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char	*sccsid = "@(#)scandir.c	1.3	(Berkeley) 6/26/87";
	X  #endif
	X  
	X  #include "common.h"
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: scandir.c,v 1.6 91/02/08 18:22:07 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X***************
	X*** 9,15
	X   *	loading the article numbers into art_array.  Return
	X   *	number of articles loaded.
	X   *
	X!  *	Paramaters:	"low_msg", "high_msg" are the low
	X   *			and high messages numbers in this
	X   *			group; we ignore numbers outside this
	X   *			range.
	X
	X--- 9,15 -----
	X   *	loading the article numbers into art_array.  Return
	X   *	number of articles loaded.
	X   *
	X!  *	Parameters:	"low_msg", "high_msg" are the low
	X   *			and high messages numbers in this
	X   *			group; we ignore numbers outside this
	X   *			range.
	X***************
	X*** 21,26
	X   */
	X  
	X  extern	int	intcmp();
	X  
	X  scan_dir(low_msg, high_msg)
	X  int	low_msg, high_msg;
	X
	X--- 21,27 -----
	X   */
	X  
	X  extern	int	intcmp();
	X+ extern char *malloc(), *realloc();
	X  
	X  scan_dir(low_msg, high_msg)
	X  int	low_msg, high_msg;
	X***************
	X*** 38,43
	X  
	X  	while ((dirent = readdir(dirp)) != NULL) {
	X  		artnum = atoi(dirent->d_name);
	X  		if (artnum != 0 && artnum >= low_msg && artnum <= high_msg)
	X  			art_array[num_arts++] = artnum;
	X  	}
	X
	X--- 39,76 -----
	X  
	X  	while ((dirent = readdir(dirp)) != NULL) {
	X  		artnum = atoi(dirent->d_name);
	X+ #ifdef DYNAMIC_ART_ARRAY
	X+ 		if (artnum == 0 || artnum < low_msg || artnum > high_msg)
	X+ 			continue;
	X+ 		/* Expand/allocate art_array elements as necessary */
	X+ 		if (num_arts + 1 >= size_art_array) {
	X+ 			size_art_array += 1024;
	X+ 			if (art_array) {
	X+ #ifdef SYSLOG
	X+ 				syslog(LOG_INFO,
	X+ 				    "increasing art_array to %d elements",
	X+ 				    size_art_array);
	X+ #endif
	X+ 				art_array = (int *)realloc(art_array,
	X+ 				    size_art_array * sizeof(*art_array));
	X+ 			} else
	X+ 				art_array = (int *)
	X+ 				    malloc(size_art_array * sizeof(*art_array));
	X+ 			if (art_array == 0) {
	X+ #ifdef SYSLOG
	X+ 				syslog(LOG_ERR,
	X+ 				    "scan_dir(): malloc/realloc failed");
	X+ #endif
	X+ 				num_arts = 0;
	X+ 				size_art_array = 0;
	X+ 				size_art_array = 0;
	X+ 				closedir(dirp);
	X+ 				return(0);
	X+ 			}
	X+ 		}
	X+ 		art_array[num_arts] = artnum;
	X+  		++num_arts;
	X+ #else
	X  		if (artnum != 0 && artnum >= low_msg && artnum <= high_msg)
	X  			art_array[num_arts++] = artnum;
	X  #endif
	X***************
	X*** 40,46
	X  		artnum = atoi(dirent->d_name);
	X  		if (artnum != 0 && artnum >= low_msg && artnum <= high_msg)
	X  			art_array[num_arts++] = artnum;
	X! 	}
	X  
	X  	closedir(dirp);
	X  
	X
	X--- 73,79 -----
	X  #else
	X  		if (artnum != 0 && artnum >= low_msg && artnum <= high_msg)
	X  			art_array[num_arts++] = artnum;
	X! #endif
	X  
	X  	}
	X  	closedir(dirp);
	X***************
	X*** 42,47
	X  			art_array[num_arts++] = artnum;
	X  	}
	X  
	X  	closedir(dirp);
	X  
	X  	qsort((char *) art_array, num_arts, sizeof(int), intcmp);
	X
	X--- 75,81 -----
	X  			art_array[num_arts++] = artnum;
	X  #endif
	X  
	X+ 	}
	X  	closedir(dirp);
	X  
	X  	qsort((char *) art_array, num_arts, sizeof(int), intcmp);
	XIndex: serve.c
	XPrereq: 1.35
	X*** serve.c	Sat Aug 11 21:33:30 1990
	X--- ../../nntp/server/serve.c	Thu Jan 10 17:20:08 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: serve.c,v 1.35 90/08/11 21:33:10 sob Exp $";
	X  #endif
	X  
	X  /*
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: serve.c,v 1.37 91/01/10 17:19:52 sob Exp $";
	X  #endif
	X  
	X  /*
	X***************
	X*** 20,32
	X  # endif not USG
	X  #endif
	X  
	X! #ifdef TIMEOUT
	X! /* Not all systems define these */
	X! #ifndef FD_SETSIZE
	X! #define FD_SET(n, p)	((p)->fds_bits[0] |= (1<<(n)))
	X! #define FD_CLR(n, p)	((p)->fds_bits[0] &= ~(1<<(n)))
	X! #define FD_ISSET(n, p)	((p)->fds_bits[0] & (1<<(n)))
	X! #define FD_ZERO(p)	((p)->fds_bits[0] = 0)
	X  #endif
	X  #endif
	X  
	X
	X--- 20,27 -----
	X  # endif not USG
	X  #endif
	X  
	X! #ifdef TIMERS
	X! #include "timer.h"
	X  #endif
	X  
	X  extern	int	ahbs(), group(), help(), ihave();
	X***************
	X*** 28,34
	X  #define FD_ISSET(n, p)	((p)->fds_bits[0] & (1<<(n)))
	X  #define FD_ZERO(p)	((p)->fds_bits[0] = 0)
	X  #endif
	X- #endif
	X  
	X  extern	int	ahbs(), group(), help(), ihave();
	X  extern	int	list(), newgroups(), newnews(), nextlast(), post();
	X
	X--- 23,28 -----
	X  #ifdef TIMERS
	X  #include "timer.h"
	X  #endif
	X  
	X  extern	int	ahbs(), group(), help(), ihave();
	X  extern	int	list(), newgroups(), newnews(), nextlast(), post();
	X***************
	X*** 70,75
	X  };
	X  #define NUMCMDS (sizeof(cmdtbl) / sizeof(struct cmdent))
	X  
	X  #ifdef AUTH
	X  extern int	Needauth;
	X  extern char	User[];
	X
	X--- 64,100 -----
	X  };
	X  #define NUMCMDS (sizeof(cmdtbl) / sizeof(struct cmdent))
	X  
	X+ #ifdef TIMEOUT
	X+ static void timeout();
	X+ #endif
	X+ #ifdef LOGINCHECK
	X+ static void logincheck();
	X+ static int firstlogincheck;
	X+ #endif
	X+ #ifdef BATCHED_INPUT
	X+ static void batchcheck();
	X+ #endif
	X+ 
	X+ #ifdef TIMERS
	X+ static struct timer timers[] = {
	X+ #ifdef TIMEOUT
	X+ 	{ timeout, 1, TIMEOUT, 0 },
	X+ #endif
	X+ #ifdef LOGINCHECK
	X+ 	{ logincheck, 0, LOGINCHECK, 0 },
	X+ #endif
	X+ #ifdef BATCHCHECK
	X+ 	{ batchcheck, 1, BATCHCHECK, 0 },
	X+ #endif
	X+ };
	X+ #define NTIMERS (sizeof(timers) / sizeof(struct timer))
	X+ #endif
	X+ 
	X+ static char *stats_init();
	X+ #ifdef LOG
	X+ static void stats_finish();
	X+ #endif
	X+ 
	X  #ifdef AUTH
	X  extern int	Needauth;
	X  extern char	User[];
	X***************
	X*** 96,109
	X  	char		**argp;
	X  	char		*timeptr, *cp;
	X  	int		argnum, i;
	X- 	double		Tstart, Tfinish;
	X- 	double		user, sys;
	X- #ifdef USG
	X- 	time_t		start, finish;
	X- #else /* not USG */
	X- 	struct timeval	start, finish;
	X- #endif /* not USG */
	X- 	extern char	*ctime();
	X  #ifdef POSTER
	X  	struct passwd	*pp;
	X  #endif
	X
	X--- 121,126 -----
	X  	char		**argp;
	X  	char		*timeptr, *cp;
	X  	int		argnum, i;
	X  #ifdef POSTER
	X  	struct passwd	*pp;
	X  #endif
	X***************
	X*** 107,116
	X  #ifdef POSTER
	X  	struct passwd	*pp;
	X  #endif
	X- #ifdef TIMEOUT
	X- 	struct timeval timeout;
	X- 	fd_set readfds;
	X- #endif
	X  #ifdef LOG
	X  # ifdef USG
	X  	struct tms	cpu;
	X
	X--- 124,129 -----
	X  #ifdef POSTER
	X  	struct passwd	*pp;
	X  #endif
	X  #ifdef LOG
	X  	grps_acsd = arts_acsd = 0;
	X  #endif
	X***************
	X*** 112,122
	X  	fd_set readfds;
	X  #endif
	X  #ifdef LOG
	X- # ifdef USG
	X- 	struct tms	cpu;
	X- # else /* not USG */
	X- 	struct rusage	me, kids;
	X- # endif /* not USG */
	X  	grps_acsd = arts_acsd = 0;
	X  #endif
	X  
	X
	X--- 125,130 -----
	X  	struct passwd	*pp;
	X  #endif
	X  #ifdef LOG
	X  	grps_acsd = arts_acsd = 0;
	X  #endif
	X  
	X***************
	X*** 139,144
	X  # endif
	X  #endif
	X  
	X  #ifdef ALONE
	X  #ifndef USG
	X  	(void) signal(SIGCHLD, SIG_IGN);
	X
	X--- 147,154 -----
	X  # endif
	X  #endif
	X  
	X+ 	timeptr = stats_init();
	X+ 
	X  #ifdef ALONE
	X  #ifndef USG
	X  	(void) signal(SIGCHLD, SIG_IGN);
	X***************
	X*** 159,164
	X  	if (gethostname(host, sizeof(host)) < 0)
	X  		(void) strcpy(host, "Amnesiac");
	X  
	X  	setproctitle("%s", hostname);
	X  
	X  	if (!canread && !canxfer) {
	X
	X--- 169,175 -----
	X  	if (gethostname(host, sizeof(host)) < 0)
	X  		(void) strcpy(host, "Amnesiac");
	X  
	X+ #ifdef SETPROCTITLE
	X  	setproctitle("%s", hostname);
	X  #endif
	X  
	X***************
	X*** 160,165
	X  		(void) strcpy(host, "Amnesiac");
	X  
	X  	setproctitle("%s", hostname);
	X  
	X  	if (!canread && !canxfer) {
	X  		printf("%d %s NNTP server can't talk to you.  Goodbye.\r\n",
	X
	X--- 171,177 -----
	X  
	X  #ifdef SETPROCTITLE
	X  	setproctitle("%s", hostname);
	X+ #endif
	X  
	X  	if (!canread && !canxfer) {
	X  		printf("%d %s NNTP server can't talk to you.  Goodbye.\r\n",
	X***************
	X*** 166,172
	X  			ERR_ACCESS, host);
	X  		(void) fflush(stdout);
	X  		(void) fclose(stdout);
	X! #ifdef LOG
	X  		syslog(LOG_INFO, "%s refused connection", hostname);
	X  #endif
	X  		exit(1);
	X
	X--- 178,184 -----
	X  			ERR_ACCESS, host);
	X  		(void) fflush(stdout);
	X  		(void) fclose(stdout);
	X! #ifdef SYSLOG
	X  		syslog(LOG_INFO, "%s refused connection", hostname);
	X  #endif
	X  		exit(1);
	X***************
	X*** 172,177
	X  		exit(1);
	X  	}
	X  
	X  	if ( !canpost && !canread && !space(MINFREE)) {
	X  		printf("%d %s NNTP server out of space. Try later.\r\n",
	X  			ERR_GOODBYE, host);
	X
	X--- 184,195 -----
	X  		exit(1);
	X  	}
	X  
	X+ #ifdef LOGINCHECK
	X+ 	firstlogincheck = 1;
	X+ 	logincheck();
	X+ 	firstlogincheck = 0;
	X+ #endif
	X+ 
	X  	if ( !canpost && !canread && !space(MINFREE)) {
	X  		printf("%d %s NNTP server out of space. Try later.\r\n",
	X  			ERR_GOODBYE, host);
	X***************
	X*** 176,181
	X  		printf("%d %s NNTP server out of space. Try later.\r\n",
	X  			ERR_GOODBYE, host);
	X  		(void) fflush(stdout);
	X  		exit(1);
	X  	}
	X  
	X
	X--- 194,202 -----
	X  		printf("%d %s NNTP server out of space. Try later.\r\n",
	X  			ERR_GOODBYE, host);
	X  		(void) fflush(stdout);
	X+ #ifdef SYSLOG
	X+ 		syslog(LOG_INFO, "%s no space", hostname);
	X+ #endif
	X  		exit(1);
	X  	}
	X  
	X***************
	X*** 188,195
	X  	if (pp != NULL) {
	X  		uid_poster = pp->pw_uid;
	X  		gid_poster = pp->pw_gid;
	X! 		putenv("USER",POSTER,1);
	X! 		putenv("LOGNAME",POSTER,1);
	X  	} else
	X  #endif
	X  		uid_poster = gid_poster = 0;
	X
	X--- 209,215 -----
	X  	if (pp != NULL) {
	X  		uid_poster = pp->pw_uid;
	X  		gid_poster = pp->pw_gid;
	X! 		home_poster = pp->pw_dir;
	X  	} else
	X  #endif
	X  		uid_poster = gid_poster = 0;
	X***************
	X*** 210,216
	X  		printf("%d %s NNTP server unavailable. Try later.\r\n",
	X  			ERR_FAULT, host);
	X  		(void) fflush(stdout);
	X! #ifdef LOG
	X  		syslog(LOG_INFO, "%s no groups", hostname);
	X  #endif
	X  		exit(1);
	X
	X--- 230,236 -----
	X  		printf("%d %s NNTP server unavailable. Try later.\r\n",
	X  			ERR_FAULT, host);
	X  		(void) fflush(stdout);
	X! #ifdef SYSLOG
	X  		syslog(LOG_INFO, "%s no groups", hostname);
	X  #endif
	X  		exit(1);
	X***************
	X*** 219,233
	X  	art_fp = NULL;
	X  	argp = (char **) NULL;		/* for first time */
	X  
	X- #ifdef USG
	X- 	(void) time(&start);
	X- 	Tstart = (double) start;
	X- 	timeptr = ctime(&start);
	X- #else not USG
	X- 	(void) gettimeofday(&start, (struct timezone *)NULL);
	X- 	Tstart = (double) start.tv_sec + ((double)start.tv_usec)/1000000.0;
	X- 	timeptr = ctime(&start.tv_sec);
	X- #endif not USG
	X  	if ((cp = index(timeptr, '\n')) != NULL)
	X  		*cp = '\0';
	X  	else
	X
	X--- 239,244 -----
	X  	art_fp = NULL;
	X  	argp = (char **) NULL;		/* for first time */
	X  
	X  	if ((cp = index(timeptr, '\n')) != NULL)
	X  		*cp = '\0';
	X  	else
	X***************
	X*** 247,256
	X  	 * Now get commands one at a time and execute the
	X  	 * appropriate routine to deal with them.
	X  	 */
	X! 
	X! #ifdef TIMEOUT
	X! 	timeout.tv_sec = TIMEOUT;
	X! 	timeout.tv_usec = 0;
	X  #endif
	X  	for (;;) {
	X  #ifdef TIMEOUT
	X
	X--- 258,265 -----
	X  	 * Now get commands one at a time and execute the
	X  	 * appropriate routine to deal with them.
	X  	 */
	X! #ifdef TIMERS
	X! 	timer_init(timers, NTIMERS);
	X  #endif
	X  	for (;;) {
	X  #ifdef TIMERS
	X***************
	X*** 253,283
	X  	timeout.tv_usec = 0;
	X  #endif
	X  	for (;;) {
	X! #ifdef TIMEOUT
	X! 		/* Do timeout with select() (i.e. the intelligent way) */
	X! 		FD_ZERO(&readfds);
	X! 		FD_SET(fileno(stdin), &readfds);
	X! 		errno = 0;
	X! 		i = select(fileno(stdin) + 1,
	X! 		    &readfds, (fd_set*)0, (fd_set*)0, &timeout);
	X! 		if (i < 0) {
	X! 			/* "Interrupted system call" isn't a real error */
	X! 			if (errno == EINTR)
	X! 				continue;
	X! 			syslog(LOG_ERR, "%s read select: %m", hostname);
	X! 			break;
	X! 		}
	X! 		if (!FD_ISSET(fileno(stdin), &readfds)) {
	X! 			printf(
	X! 		    "%d Timeout after %d seconds, closing connection.\r\n",
	X! 				ERR_FAULT, TIMEOUT);
	X! 			(void) fflush(stdout);
	X! 
	X! #ifdef LOG
	X! 			syslog(LOG_ERR, "%s timeout", hostname);
	X! #endif LOG
	X! 			exit(1);
	X! 		}
	X  #endif
	X  		if (fgets(line, sizeof(line), stdin) == NULL)
	X  			break;
	X
	X--- 262,271 -----
	X  	timer_init(timers, NTIMERS);
	X  #endif
	X  	for (;;) {
	X! #ifdef TIMERS
	X! 		/* Don't try to read input unless there is some */
	X! 		if (!timer_sleep(timers, NTIMERS))
	X! 			continue;
	X  #endif
	X  		if (fgets(line, sizeof(line), stdin) == NULL)
	X  			break;
	X***************
	X*** 286,292
	X  		while (cp >= line && (*cp == '\n' || *cp == '\r'))
	X  			*cp-- = '\0';
	X  #ifdef DEBUG
	X! 		syslog(LOG_DEBUG, "<- \"%s\"", line);
	X  #endif
	X  
	X  		if ((argnum = parsit(line, &argp)) == 0)
	X
	X--- 274,281 -----
	X  		while (cp >= line && (*cp == '\n' || *cp == '\r'))
	X  			*cp-- = '\0';
	X  #ifdef DEBUG
	X! 		if (debug)
	X! 			syslog(LOG_DEBUG, "<- \"%s\"", line);
	X  #endif
	X  
	X  		/* Null command */
	X***************
	X*** 289,294
	X  		syslog(LOG_DEBUG, "<- \"%s\"", line);
	X  #endif
	X  
	X  		if ((argnum = parsit(line, &argp)) == 0)
	X  			continue;		/* Null command */
	X  		else {
	X
	X--- 278,284 -----
	X  			syslog(LOG_DEBUG, "<- \"%s\"", line);
	X  #endif
	X  
	X+ 		/* Null command */
	X  		if ((argnum = parsit(line, &argp)) == 0)
	X  			continue;
	X  
	X***************
	X*** 290,299
	X  #endif
	X  
	X  		if ((argnum = parsit(line, &argp)) == 0)
	X! 			continue;		/* Null command */
	X! 		else {
	X! 			/* a motion to adjourn is always in order */
	X! 			if (!strcasecmp(argp[0], "quit"))
	X  				break;
	X  			for (i = 0; i < NUMCMDS; ++i)
	X  				if (!strcasecmp(cmdtbl[i].cmd_name, argp[0]))
	X
	X--- 280,293 -----
	X  
	X  		/* Null command */
	X  		if ((argnum = parsit(line, &argp)) == 0)
	X! 			continue;
	X! 
	X! 		/* a motion to adjourn is always in order */
	X! 		if (!strcasecmp(argp[0], "quit"))
	X! 			break;
	X! 
	X! 		for (i = 0; i < NUMCMDS; ++i)
	X! 			if (!strcasecmp(cmdtbl[i].cmd_name, argp[0]))
	X  				break;
	X  
	X  		if (i < NUMCMDS) {
	X***************
	X*** 295,305
	X  			/* a motion to adjourn is always in order */
	X  			if (!strcasecmp(argp[0], "quit"))
	X  				break;
	X! 			for (i = 0; i < NUMCMDS; ++i)
	X! 				if (!strcasecmp(cmdtbl[i].cmd_name, argp[0]))
	X! 					break;
	X! 			if (i < NUMCMDS)
	X! 				{
	X  #ifdef AUTH
	X  				/* authentication required? */
	X  				if (cmdtbl[i].authreq == 1 && Needauth)
	X
	X--- 289,299 -----
	X  		for (i = 0; i < NUMCMDS; ++i)
	X  			if (!strcasecmp(cmdtbl[i].cmd_name, argp[0]))
	X  				break;
	X! 
	X! 		if (i < NUMCMDS) {
	X! #ifdef SETPROCTITLE
	X! 			setproctitle("%s %s", hostname, argp[0]);
	X! #endif
	X  #ifdef AUTH
	X  			/* authentication required? */
	X  			if (cmdtbl[i].authreq == 1 && Needauth)
	X***************
	X*** 301,315
	X  			if (i < NUMCMDS)
	X  				{
	X  #ifdef AUTH
	X! 				/* authentication required? */
	X! 				if (cmdtbl[i].authreq == 1 && Needauth)
	X! 					{
	X! 	printf("%d Authentication required for command\r\n", ERR_NOAUTH);
	X! 					(void) fflush(stdout);
	X! 					continue;
	X! 					}
	X! #endif AUTH
	X! 				(*cmdtbl[i].cmd_fctn)(argnum, argp);
	X  				}
	X  			else {
	X  #ifdef LOG
	X
	X--- 295,306 -----
	X  			setproctitle("%s %s", hostname, argp[0]);
	X  #endif
	X  #ifdef AUTH
	X! 			/* authentication required? */
	X! 			if (cmdtbl[i].authreq == 1 && Needauth)
	X! 				{
	X! printf("%d Authentication required for command\r\n", ERR_NOAUTH);
	X! 				(void) fflush(stdout);
	X! 				continue;
	X  				}
	X  #endif AUTH
	X  			(*cmdtbl[i].cmd_fctn)(argnum, argp);
	X***************
	X*** 311,321
	X  #endif AUTH
	X  				(*cmdtbl[i].cmd_fctn)(argnum, argp);
	X  				}
	X! 			else {
	X! #ifdef LOG
	X! 				syslog(LOG_INFO, "%s unrecognized %s",
	X! 					hostname,
	X! 					line);
	X  #endif
	X  				printf("%d Command unrecognized.\r\n",
	X  					ERR_COMMAND);
	X
	X--- 302,312 -----
	X  				(void) fflush(stdout);
	X  				continue;
	X  				}
	X! #endif AUTH
	X! 			(*cmdtbl[i].cmd_fctn)(argnum, argp);
	X! 		} else {
	X! #ifdef SYSLOG
	X! 			syslog(LOG_INFO, "%s unrecognized %s", hostname, line);
	X  #endif
	X  			printf("%d Command unrecognized.\r\n", ERR_COMMAND);
	X  			(void) fflush(stdout);
	X***************
	X*** 317,326
	X  					hostname,
	X  					line);
	X  #endif
	X! 				printf("%d Command unrecognized.\r\n",
	X! 					ERR_COMMAND);
	X! 				(void) fflush(stdout);
	X! 			}
	X  		}
	X  	}
	X  
	X
	X--- 308,315 -----
	X  #ifdef SYSLOG
	X  			syslog(LOG_INFO, "%s unrecognized %s", hostname, line);
	X  #endif
	X! 			printf("%d Command unrecognized.\r\n", ERR_COMMAND);
	X! 			(void) fflush(stdout);
	X  		}
	X  	}
	X  
	X***************
	X*** 324,331
	X  		}
	X  	}
	X  
	X! 	printf("%d %s closing connection.  Goodbye.\r\n",
	X! 		OK_GOODBYE, host);
	X  
	X  	(void) fflush(stdout);
	X  
	X
	X--- 313,319 -----
	X  		}
	X  	}
	X  
	X! 	printf("%d %s closing connection.  Goodbye.\r\n", OK_GOODBYE, host);
	X  
	X  	(void) fflush(stdout);
	X  
	X***************
	X*** 329,336
	X  
	X  	(void) fflush(stdout);
	X  
	X! #ifdef notdef
	X! 	/* XXX why do this twice? */
	X  	(void) fflush(stdout);
	X  #endif
	X  
	X
	X--- 317,354 -----
	X  
	X  	(void) fflush(stdout);
	X  
	X! #ifdef BATCHED_INPUT
	X! 	batchcheck();
	X! #endif
	X! 
	X! #ifdef SYSLOG
	X! 	if (ferror(stdout))
	X! 		syslog(LOG_ERR, "%s disconnect: %m", hostname);
	X! #ifdef LOG
	X! 	stats_finish();
	X! #endif
	X! #endif
	X! 
	X! #ifdef PROFILE
	X! 	profile();
	X! #endif
	X! 	exit(0);
	X! }
	X! 
	X! #ifdef TIMEOUT
	X! /*
	X!  * Called after TIMEOUT seconds of idle time to shut things down.
	X!  * XXX stats are not reported when this occurs
	X!  */
	X! static void
	X! timeout()
	X! {
	X! 
	X! 	printf("%d Timeout after %d seconds, closing connection.\r\n",
	X! 	    ERR_FAULT, TIMEOUT);
	X! #ifdef SYSLOG
	X! 	syslog(LOG_NOTICE, "%s timeout", hostname);
	X! #endif
	X  	(void) fflush(stdout);
	X  #ifdef BATCHED_INPUT
	X  	batchcheck();
	X***************
	X*** 332,337
	X  #ifdef notdef
	X  	/* XXX why do this twice? */
	X  	(void) fflush(stdout);
	X  #endif
	X  
	X  #ifdef BATCHED_INPUT
	X
	X--- 350,357 -----
	X  	syslog(LOG_NOTICE, "%s timeout", hostname);
	X  #endif
	X  	(void) fflush(stdout);
	X+ #ifdef BATCHED_INPUT
	X+ 	batchcheck();
	X  #endif
	X  #ifdef LOG
	X  	stats_finish();
	X***************
	X*** 333,338
	X  	/* XXX why do this twice? */
	X  	(void) fflush(stdout);
	X  #endif
	X  
	X  #ifdef BATCHED_INPUT
	X  	{
	X
	X--- 353,367 -----
	X  #ifdef BATCHED_INPUT
	X  	batchcheck();
	X  #endif
	X+ #ifdef LOG
	X+ 	stats_finish();
	X+ #endif
	X+ #ifdef PROFILE
	X+ 	profile();
	X+ #endif
	X+ 	exit(1);
	X+ }
	X+ #endif
	X  
	X  #ifdef LOGINCHECK
	X  /*
	X***************
	X*** 334,339
	X  	(void) fflush(stdout);
	X  #endif
	X  
	X  #ifdef BATCHED_INPUT
	X  	{
	X  		char errbuf[2 * NNTP_STRLEN];
	X
	X--- 363,390 -----
	X  }
	X  #endif
	X  
	X+ #ifdef LOGINCHECK
	X+ /*
	X+  * Called ever LOGINCHECK seconds to see if logins have been disabled.
	X+  * If so, shut down.
	X+  * XXX stats are not reported when this occurs
	X+  */
	X+ static void
	X+ logincheck()
	X+ {
	X+ 	char host[MAXHOSTNAMELEN];
	X+ 
	X+ 	if (access(NOLOGIN, F_OK) < 0)
	X+ 		return;
	X+ 	if (gethostname(host, sizeof(host)) < 0)
	X+ 		(void) strcpy(host, "Amnesiac");
	X+ 	printf("%d Logins are disabled on NNTP server %s. Try again later.\r\n",
	X+ 	    ERR_ACCESS, host);
	X+ 	(void) fflush(stdout);
	X+ #ifdef SYSLOG
	X+ 	syslog(LOG_INFO, "%s logins disabled%s",
	X+ 	    hostname, firstlogincheck ? "" : " (kicked out)");
	X+ #endif
	X  #ifdef BATCHED_INPUT
	X  	batchcheck();
	X  #endif
	X***************
	X*** 335,342
	X  #endif
	X  
	X  #ifdef BATCHED_INPUT
	X! 	{
	X! 		char errbuf[2 * NNTP_STRLEN];
	X  
	X  		enqpartbatch(CONT_XFER, ERR_XFERFAIL, errbuf);
	X  	}
	X
	X--- 386,402 -----
	X  	    hostname, firstlogincheck ? "" : " (kicked out)");
	X  #endif
	X  #ifdef BATCHED_INPUT
	X! 	batchcheck();
	X! #endif
	X! #ifdef LOG
	X! 	stats_finish();
	X! #endif
	X! #ifdef PROFILE
	X! 	profile();
	X! #endif
	X! 	exit(1);
	X! }
	X! #endif
	X  
	X  #ifdef BATCHED_INPUT
	X  /*
	X***************
	X*** 338,345
	X  	{
	X  		char errbuf[2 * NNTP_STRLEN];
	X  
	X! 		enqpartbatch(CONT_XFER, ERR_XFERFAIL, errbuf);
	X! 	}
	X  #endif
	X  
	X  
	X
	X--- 398,415 -----
	X  }
	X  #endif
	X  
	X! #ifdef BATCHED_INPUT
	X! /*
	X!  * Called after BATCHCHECK seconds of idle time and at the end
	X!  * of a session to see if a batch needs to be launched.
	X!  */
	X! static void
	X! batchcheck()
	X! {
	X! 	char errbuf[2 * NNTP_STRLEN];
	X! 
	X! 	enqpartbatch(CONT_XFER, ERR_XFERFAIL, errbuf);
	X! }
	X  #endif
	X  
	X  /*
	X***************
	X*** 342,347
	X  	}
	X  #endif
	X  
	X  
	X  #ifdef LOG
	X  	if (ferror(stdout))
	X
	X--- 412,427 -----
	X  }
	X  #endif
	X  
	X+ /*
	X+  * Stats stuff
	X+  */
	X+ static double		Tstart, Tfinish;
	X+ static double		user, sys;
	X+ #ifdef USG
	X+ static time_t		start, finish;
	X+ #else /* not USG */
	X+ static struct timeval	start, finish;
	X+ #endif /* not USG */
	X  
	X  static char *
	X  stats_init()
	X***************
	X*** 343,348
	X  #endif
	X  
	X  
	X  #ifdef LOG
	X  	if (ferror(stdout))
	X  		syslog(LOG_ERR, "%s disconnect: %m", hostname);
	X
	X--- 423,444 -----
	X  static struct timeval	start, finish;
	X  #endif /* not USG */
	X  
	X+ static char *
	X+ stats_init()
	X+ {
	X+ 	extern char	*ctime();
	X+ 
	X+ #ifdef USG
	X+ 	(void) time(&start);
	X+ 	Tstart = (double) start;
	X+ 	return(ctime(&start));
	X+ #else /* not USG */
	X+ 	(void) gettimeofday(&start, (struct timezone *)NULL);
	X+ 	Tstart = (double) start.tv_sec + ((double)start.tv_usec)/1000000.0;
	X+ 	return(ctime(&start.tv_sec));
	X+ #endif /* not USG */
	X+ }
	X+ 
	X  #ifdef LOG
	X  static void
	X  stats_finish()
	X***************
	X*** 344,351
	X  
	X  
	X  #ifdef LOG
	X! 	if (ferror(stdout))
	X! 		syslog(LOG_ERR, "%s disconnect: %m", hostname);
	X  
	X  #ifdef USG
	X  	(void) time(&finish);
	X
	X--- 440,454 -----
	X  }
	X  
	X  #ifdef LOG
	X! static void
	X! stats_finish()
	X! {
	X! 	char		buf[NNTP_STRLEN];
	X! # ifdef USG
	X! 	struct tms	cpu;
	X! # else /* not USG */
	X! 	struct rusage	me, kids;
	X! # endif /* not USG */
	X  
	X  #ifdef USG
	X  	(void) time(&finish);
	X***************
	X*** 353,359
	X  
	X  #ifndef HZ
	X  #define	HZ	60.0	/* typical system clock ticks - param.h */
	X! #endif not HZ
	X  
	X  	(void) times(&cpu);
	X  	user = (double)(cpu.tms_utime + cpu.tms_cutime) / HZ;
	X
	X--- 456,462 -----
	X  
	X  #ifndef HZ
	X  #define	HZ	60.0	/* typical system clock ticks - param.h */
	X! #endif /* not HZ */
	X  
	X  	(void) times(&cpu);
	X  	user = (double)(cpu.tms_utime + cpu.tms_cutime) / HZ;
	X***************
	X*** 358,364
	X  	(void) times(&cpu);
	X  	user = (double)(cpu.tms_utime + cpu.tms_cutime) / HZ;
	X  	sys  = (double)(cpu.tms_stime + cpu.tms_cstime) / HZ;
	X! #else not USG
	X  	(void) gettimeofday(&finish, (struct timezone *)NULL);
	X  	Tfinish = (double) finish.tv_sec + ((double)finish.tv_usec)/1000000.0;
	X  
	X
	X--- 461,467 -----
	X  	(void) times(&cpu);
	X  	user = (double)(cpu.tms_utime + cpu.tms_cutime) / HZ;
	X  	sys  = (double)(cpu.tms_stime + cpu.tms_cstime) / HZ;
	X! #else /* not USG */
	X  	(void) gettimeofday(&finish, (struct timezone *)NULL);
	X  	Tfinish = (double) finish.tv_sec + ((double)finish.tv_usec)/1000000.0;
	X  
	X***************
	X*** 369,375
	X  		kids.ru_utime.tv_sec + kids.ru_utime.tv_usec/1000000.0;
	X  	sys = (double) me.ru_stime.tv_sec + me.ru_stime.tv_usec/1000000.0 +
	X  		kids.ru_stime.tv_sec + kids.ru_stime.tv_usec/1000000.0;
	X! #endif not USG
	X  	if (grps_acsd)
	X  		syslog(LOG_INFO, "%s exit %d articles %d groups",
	X  			hostname, arts_acsd, grps_acsd);
	X
	X--- 472,478 -----
	X  		kids.ru_utime.tv_sec + kids.ru_utime.tv_usec/1000000.0;
	X  	sys = (double) me.ru_stime.tv_sec + me.ru_stime.tv_usec/1000000.0 +
	X  		kids.ru_stime.tv_sec + kids.ru_stime.tv_usec/1000000.0;
	X! #endif /* not USG */
	X  	if (grps_acsd)
	X  		syslog(LOG_INFO, "%s exit %d articles %d groups",
	X  			hostname, arts_acsd, grps_acsd);
	X***************
	X*** 383,389
	X  			ih_accepted,
	X  			ih_rejected,
	X  			ih_failed);
	X! 	(void) sprintf(line, "user %.3f system %.3f elapsed %.3f",
	X  		user, sys, Tfinish - Tstart);
	X  	syslog(LOG_INFO, "%s times %s", hostname, line);
	X  #endif LOG
	X
	X--- 486,492 -----
	X  			ih_accepted,
	X  			ih_rejected,
	X  			ih_failed);
	X! 	(void) sprintf(buf, "user %.3f system %.3f elapsed %.3f",
	X  		user, sys, Tfinish - Tstart);
	X  	syslog(LOG_INFO, "%s times %s", hostname, buf);
	X  }
	X***************
	X*** 385,395
	X  			ih_failed);
	X  	(void) sprintf(line, "user %.3f system %.3f elapsed %.3f",
	X  		user, sys, Tfinish - Tstart);
	X! 	syslog(LOG_INFO, "%s times %s", hostname, line);
	X! #endif LOG
	X! 
	X! #ifdef PROFILE
	X! 	profile();
	X! #endif
	X! 	exit(0);
	X  }
	X
	X--- 488,493 -----
	X  			ih_failed);
	X  	(void) sprintf(buf, "user %.3f system %.3f elapsed %.3f",
	X  		user, sys, Tfinish - Tstart);
	X! 	syslog(LOG_INFO, "%s times %s", hostname, buf);
	X  }
	X  #endif LOG
	X***************
	X*** 393,395
	X  #endif
	X  	exit(0);
	X  }
	X
	X--- 490,493 -----
	X  		user, sys, Tfinish - Tstart);
	X  	syslog(LOG_INFO, "%s times %s", hostname, buf);
	X  }
	X+ #endif LOG
	XIndex: spawn.c
	XPrereq: 1.15
	X*** spawn.c	Sat Aug 18 17:17:03 1990
	X--- ../../nntp/server/spawn.c	Fri Feb  8 18:30:43 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static	char	*sccsid = "@(#)$Header: spawn.c,v 1.15 90/08/18 17:16:47 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static	char	*sccsid = "@(#)$Header: spawn.c,v 1.22 91/02/08 18:30:30 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X***************
	X*** 13,21
	X  static int	old_xfer_lines;
	X  #endif
	X  
	X- /* imports */
	X- extern char **myenviron;
	X- 
	X  static char	tempfile[256];
	X  static char	badfile[256];
	X  
	X
	X--- 13,18 -----
	X  static int	old_xfer_lines;
	X  #endif
	X  
	X  static char	tempfile[256];
	X  #ifndef CNEWS
	X  static char	badfile[256];
	X***************
	X*** 17,22
	X  extern char **myenviron;
	X  
	X  static char	tempfile[256];
	X  static char	badfile[256];
	X  
	X  /*
	X
	X--- 14,20 -----
	X  #endif
	X  
	X  static char	tempfile[256];
	X+ #ifndef CNEWS
	X  static char	badfile[256];
	X  #endif
	X  
	X***************
	X*** 18,23
	X  
	X  static char	tempfile[256];
	X  static char	badfile[256];
	X  
	X  /*
	X   * spawn -- create a child process with the input from the client
	X
	X--- 16,22 -----
	X  static char	tempfile[256];
	X  #ifndef CNEWS
	X  static char	badfile[256];
	X+ #endif
	X  
	X  /*
	X   * spawn -- create a child process with the input from the client
	X***************
	X*** 40,46
	X   *			Can time out if XFER_TIMEOUT is defined.
	X   */
	X  
	X! spawn(path, name, flag, cont_code, err_code, errbuf)
	X  	char		*path;
	X  	char		*name;
	X  	char		*flag;
	X
	X--- 39,45 -----
	X   *			Can time out if XFER_TIMEOUT is defined.
	X   */
	X  
	X! spawn(path, name, flag, cont_code, err_code, errbuf, msg_id)
	X  	char		*path;
	X  	char		*name;
	X  	char		*flag;
	X***************
	X*** 47,52
	X  	int		cont_code;
	X  	int		err_code;
	X  	char		*errbuf;
	X  {
	X  	char		line[NNTP_STRLEN];
	X  	register char	*cp;
	X
	X--- 46,52 -----
	X  	int		cont_code;
	X  	int		err_code;
	X  	char		*errbuf;
	X+ 	char		*msg_id;
	X  {
	X  	char		line[NNTP_STRLEN];
	X  	register char	*cp;
	X***************
	X*** 53,59
	X  	int		i, fd;
	X  	int		fds[2];
	X  	int		pid, npid;
	X! 	int		exit_status;
	X  #ifdef XFER_TIMEOUT
	X  	int		xfer_timeout();
	X  #endif
	X
	X--- 53,65 -----
	X  	int		i, fd;
	X  	int		fds[2];
	X  	int		pid, npid;
	X! 	int		exit_status = 1;
	X! #ifdef POSTER
	X! 	char *envp[4], user[sizeof(POSTER) + 5], logname[sizeof(POSTER) + 8];
	X! 	char *home;
	X! #else
	X! 	char *envp[1];
	X! #endif
	X  #ifdef XFER_TIMEOUT
	X  	int		xfer_timeout();
	X  #endif
	X***************
	X*** 127,134
	X  		(void) unlink(tempfile);
	X  #ifdef SYSLOG
	X  # ifdef LOG
	X! 		syslog(LOG_ERR, "%s spawn: EOF before period on line by itself",
	X! 			hostname);
	X  # else
	X  		syslog(LOG_ERR, "spawn: EOF before period on line by itself");
	X  # endif
	X
	X--- 133,141 -----
	X  		(void) unlink(tempfile);
	X  #ifdef SYSLOG
	X  # ifdef LOG
	X! 		syslog(LOG_ERR,
	X! 		    "%s spawn: EOF before period on line by itself %s",
	X! 		    hostname, msg_id);
	X  # else
	X  		syslog(LOG_ERR,
	X  		    "spawn: EOF before period on line by itself %s", msg_id);
	X***************
	X*** 130,136
	X  		syslog(LOG_ERR, "%s spawn: EOF before period on line by itself",
	X  			hostname);
	X  # else
	X! 		syslog(LOG_ERR, "spawn: EOF before period on line by itself");
	X  # endif
	X  #endif
	X  		return (0);
	X
	X--- 137,144 -----
	X  		    "%s spawn: EOF before period on line by itself %s",
	X  		    hostname, msg_id);
	X  # else
	X! 		syslog(LOG_ERR,
	X! 		    "spawn: EOF before period on line by itself %s", msg_id);
	X  # endif
	X  #endif
	X  		return (0);
	X***************
	X*** 157,162
	X  	 * whatever), open "tempfile" for input, thus making
	X  	 * it stdin, and then execle the inews.  We think.
	X  	 */
	X  
	X  	pid = vfork();
	X  	if (pid == 0) {		/* We're in child */
	X
	X--- 165,179 -----
	X  	 * whatever), open "tempfile" for input, thus making
	X  	 * it stdin, and then execle the inews.  We think.
	X  	 */
	X+ #ifdef SYSLOG
	X+ 	/*
	X+ 	 * Close in such a way that syslog() will know to reopen.
	X+ 	 * We must do this before the vfork() otherwise the parent
	X+ 	 * will think the syslog fd is closed and open a new one,
	X+ 	 * eventually using up all the available file descriptors.
	X+ 	 */
	X+ 	closelog();
	X+ #endif
	X  
	X  	pid = vfork();
	X  	if (pid == 0) {		/* We're in child */
	X***************
	X*** 164,170
	X  #ifndef USG
	X  		if (getuid() == 0) initgroups(POSTER,gid_poster);
	X  #endif
	X- 		(void) setuid(uid_poster);
	X  		(void) setgid(gid_poster);
	X  #endif
	X  
	X
	X--- 181,186 -----
	X  #ifndef USG
	X  		if (getuid() == 0) initgroups(POSTER,gid_poster);
	X  #endif
	X  		(void) setgid(gid_poster);
	X  		(void) setuid(uid_poster);
	X  #endif
	X***************
	X*** 166,171
	X  #endif
	X  		(void) setuid(uid_poster);
	X  		(void) setgid(gid_poster);
	X  #endif
	X  
	X  		/* Set up stdout and stderr for child */
	X
	X--- 182,188 -----
	X  		if (getuid() == 0) initgroups(POSTER,gid_poster);
	X  #endif
	X  		(void) setgid(gid_poster);
	X+ 		(void) setuid(uid_poster);
	X  #endif
	X  
	X  		/* Set up stdout and stderr for child */
	X***************
	X*** 176,185
	X  		}
	X  		(void) dup2(1, 2);
	X  
	X- #ifdef SYSLOG
	X- 		/* Close in such a way that syslog() will know to reopen */
	X- 		closelog();
	X- #endif
	X  		for (i = 3; i < 10; ++i) /* XXX but getdtablesize is too big */
	X  			(void) close(i);
	X  
	X
	X--- 193,198 -----
	X  		}
	X  		(void) dup2(1, 2);
	X  
	X  		for (i = 3; i < 10; ++i) /* XXX but getdtablesize is too big */
	X  			(void) close(i);
	X  
	X***************
	X*** 189,195
	X  			(void) close(fd);
	X  		}
	X  
	X! 		execle(path, name, flag, (char *) NULL, myenviron);
	X  		fprintf(stderr, "spawn: execle(%s)", path);
	X  		perror(path);
	X  #ifdef SYSLOG
	X
	X--- 202,227 -----
	X  			(void) close(fd);
	X  		}
	X  
	X! 		/* Empty environment keeps cnews inews from telling lies */
	X! #ifdef POSTER
	X! 		sprintf(user, "USER=%s", POSTER);
	X! 		sprintf(logname, "LOGNAME=%s", POSTER);
	X! 		if ((home = (char *)malloc(strlen(home_poster)+5)) != NULL)
	X! 			sprintf(home, "HOME=%s", home_poster);
	X! 		envp[0] = user;
	X! 		envp[1] = logname;
	X! 		envp[2] = home;
	X! 		envp[3] = 0;
	X! #else
	X! 		envp[0] = 0;
	X! #endif
	X! 
	X! #ifdef USG
	X!  		/* execle() fails if name is a shell procedure */
	X!  		execle("/bin/sh", "sh", path, flag, (char *)NULL, envp);
	X! #else
	X! 		execle(path, name, flag, (char *) NULL, envp);
	X! #endif
	X  		fprintf(stderr, "spawn: execle(%s)", path);
	X  		perror(path);
	X  #ifdef SYSLOG
	X***************
	X*** 231,237
	X  					(void) strcat(errbuf, line);
	X  				}
	X  #ifdef SYSLOG
	X! 				syslog(LOG_ERR, "%s: %s", path, line);
	X  #endif
	X  			}
	X  		}
	X
	X--- 263,269 -----
	X  					(void) strcat(errbuf, line);
	X  				}
	X  #ifdef SYSLOG
	X! 				syslog(LOG_INFO, "%s: %s", path, line);
	X  #endif
	X  			}
	X  		}
	X***************
	X*** 308,310
	X  }
	X  
	X  #endif XFER_TIMEOUT
	X
	X--- 340,343 -----
	X  }
	X  
	X  #endif XFER_TIMEOUT
	X+ 
	XIndex: subnet.c
	XPrereq: 1.6
	X*** subnet.c	Thu Jul  5 02:29:20 1990
	X--- ../../nntp/server/subnet.c	Wed Dec 12 02:21:48 1990
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static	char	*sccsid = "@(#)subnet.c	1.6	(Berkeley) 8/27/89";
	X  #endif
	X  
	X  #include "../common/conf.h"
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static	char	*sccsid = "@(#)$Header: subnet.c,v 1.8 90/12/12 02:21:38 sob Exp $";
	X  #endif
	X  
	X  #include "../common/conf.h"
	X***************
	X*** 66,72
	X  
	X  /*
	X   * Table (eventually, once we malloc) of
	X!  * internet interface subnet informaiton.
	X   */
	X  static	struct in_if	*in_ifsni;
	X  
	X
	X--- 66,72 -----
	X  
	X  /*
	X   * Table (eventually, once we malloc) of
	X!  * internet interface subnet information.
	X   */
	X  static	struct in_if	*in_ifsni;
	X  
	X***************
	X*** 144,150
	X  		s_in = (struct sockaddr_in *) &ifr->ifr_addr;
	X  		in_ifsni[j].i_subnetmask = ntohl(s_in->sin_addr.s_addr);
	X  		/*
	X! 		 * The following should "never happen".  But under SunOs
	X  		 * 3.4, along with the rest of their broken networking code,
	X  		 * SIOCGIFNETMASK can get a netmask which is 0.  There
	X  		 * really isn't anything that "right" that we can do
	X
	X--- 144,150 -----
	X  		s_in = (struct sockaddr_in *) &ifr->ifr_addr;
	X  		in_ifsni[j].i_subnetmask = ntohl(s_in->sin_addr.s_addr);
	X  		/*
	X! 		 * The following should "never happen".  But under SunOS
	X  		 * 3.4, along with the rest of their broken networking code,
	X  		 * SIOCGIFNETMASK can get a netmask which is 0.  There
	X  		 * really isn't anything that "right" that we can do
	X***************
	X*** 231,237
	X  
	X  /*
	X   * Return the number of bits required to
	X!  * shift right a mask into a getnetent-able entitity.
	X   */
	X  
	X  bsr(mask)
	X
	X--- 231,237 -----
	X  
	X  /*
	X   * Return the number of bits required to
	X!  * shift right a mask into a getnetent-able entity.
	X   */
	X  
	X  bsr(mask)
	X***************
	X*** 239,245
	X  {
	X  	register int	count = 0;
	X  
	X! 	if (mask == 0)		/* "never happen", except with SunOs 3.4 */
	X  		return (0);
	X  
	X  	while ((mask & 1) == 0) {
	X
	X--- 239,245 -----
	X  {
	X  	register int	count = 0;
	X  
	X! 	if (mask == 0)		/* "never happen", except with SunOS 3.4 */
	X  		return (0);
	X  
	X  	while ((mask & 1) == 0) {
	XIndex: time.c
	XPrereq: 1.11
	X*** time.c	Thu Jul  5 02:29:20 1990
	X--- ../../nntp/server/time.c	Sun Jan 13 03:27:23 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: time.c,v 1.11 90/01/15 01:05:05 sob Exp $";
	X  #endif
	X  
	X  /*
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: time.c,v 1.13 91/01/13 03:27:14 sob Exp $";
	X  #endif
	X  
	X  /*
	X***************
	X*** 7,17
	X   * These may actually be useful in their own right.
	X   */
	X  
	X! #include "../common/conf.h"
	X! 
	X! #include <stdio.h>
	X! #include <sys/types.h>
	X! #include <ctype.h>
	X  #ifdef USG
	X  #include <time.h>
	X  #else not USG
	X
	X--- 7,13 -----
	X   * These may actually be useful in their own right.
	X   */
	X  
	X! #include "common.h"
	X  #ifdef USG
	X  #include <time.h>
	X  #else not USG
	X***************
	X*** 15,21
	X  #ifdef USG
	X  #include <time.h>
	X  #else not USG
	X- #include <strings.h>
	X  #include <sys/time.h>
	X  #endif not USG
	X  
	X
	X--- 11,16 -----
	X  #ifdef USG
	X  #include <time.h>
	X  #else not USG
	X  #include <sys/time.h>
	X  #endif not USG
	X  
	X***************
	X*** 58,65
	X  	(void) strcpy(date, date_ascii);
	X  	date_str = date;
	X  
	X! #ifdef debug
	X! 	printf("date_str = %s\n", date_str);
	X  #endif
	X  	rhs = date_str + len - 1;
	X  	lhs = date_str;
	X
	X--- 53,61 -----
	X  	(void) strcpy(date, date_ascii);
	X  	date_str = date;
	X  
	X! #ifdef DEBUG
	X! 	if (debug > 1)
	X! 		syslog(LOG_DEBUG, "(1) date_str = \"%s\"", date_str);
	X  #endif
	X  	rhs = date_str + len - 1;
	X  	lhs = date_str;
	X***************
	X*** 73,80
	X  	}
	X  
	X  	lhs = date_str;
	X! #ifdef debug
	X! 	printf("date_str = %s\n", date_str);
	X  #endif
	X  
	X  	secs = twodigtoi(lhs);
	X
	X--- 69,77 -----
	X  	}
	X  
	X  	lhs = date_str;
	X! #ifdef DEBUG
	X! 	if (debug > 1)
	X! 		syslog(LOG_DEBUG, "(2) date_str = \"%s\"", date_str);
	X  #endif
	X  
	X  	secs = twodigtoi(lhs);
	X***************
	X*** 168,174
	X  {
	X  #ifdef USG
	X  #if !defined(dgux) && !defined(M_XENIX)
	X! 	extern	int	timezone;
	X  #endif
	X  	tzset();
	X  	date += timezone;
	X
	X--- 165,171 -----
	X  {
	X  #ifdef USG
	X  #if !defined(dgux) && !defined(M_XENIX)
	X! 	extern	long	timezone;
	X  #endif
	X  	tzset();
	X  	date += timezone;
	X***************
	X*** 172,178
	X  #endif
	X  	tzset();
	X  	date += timezone;
	X! #else not USG
	X  	struct	timeval	tv;
	X  	struct	timezone tz;
	X  
	X
	X--- 169,175 -----
	X  #endif
	X  	tzset();
	X  	date += timezone;
	X! #else /* not USG */
	X  	struct	timeval	tv;
	X  	struct	timezone tz;
	X  
	X***************
	X*** 178,184
	X  
	X  	(void) gettimeofday(&tv, &tz);
	X  	date += (long) tz.tz_minuteswest * 60;
	X! #endif not USG
	X  
	X  	/* now fix up local daylight time */
	X  	if (localtime((time_t *)&date)->tm_isdst)
	X
	X--- 175,181 -----
	X  
	X  	(void) gettimeofday(&tv, &tz);
	X  	date += (long) tz.tz_minuteswest * 60;
	X! #endif /* not USG */
	X  
	X  	/* now fix up local daylight time */
	X  	if (localtime((time_t *)&date)->tm_isdst)
	X***************
	X*** 203,209
	X  {
	X  #ifdef USG
	X  #if !defined(dgux) && !defined(M_XENIX)
	X! 	extern	int	timezone;
	X  #endif
	X  	tzset();
	X  	date -= timezone;
	X
	X--- 200,206 -----
	X  {
	X  #ifdef USG
	X  #if !defined(dgux) && !defined(M_XENIX)
	X! 	extern	long	timezone;
	X  #endif
	X  	tzset();
	X  	date -= timezone;
	X***************
	X*** 207,213
	X  #endif
	X  	tzset();
	X  	date -= timezone;
	X! #else not USG
	X  	struct	timeval	tv;
	X  	struct	timezone tz;
	X  
	X
	X--- 204,210 -----
	X  #endif
	X  	tzset();
	X  	date -= timezone;
	X! #else /* not USG */
	X  	struct	timeval	tv;
	X  	struct	timezone tz;
	X  
	X***************
	X*** 213,219
	X  
	X  	(void) gettimeofday(&tv, &tz);
	X  	date -= (long) tz.tz_minuteswest * 60;
	X! #endif not USG
	X  
	X  	/* now fix up local daylight time */
	X  	if (localtime((time_t *)&date)->tm_isdst)
	X
	X--- 210,216 -----
	X  
	X  	(void) gettimeofday(&tv, &tz);
	X  	date -= (long) tz.tz_minuteswest * 60;
	X! #endif /* not USG */
	X  
	X  	/* now fix up local daylight time */
	X  	if (localtime((time_t *)&date)->tm_isdst)
	XIndex: xhdr.c
	XPrereq: 1.10
	X*** xhdr.c	Thu Jul  5 02:29:22 1990
	X--- ../../nntp/server/xhdr.c	Tue Dec 11 23:59:56 1990
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: xhdr.c,v 1.10 90/03/09 22:26:05 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char	*sccsid = "@(#)$Header: xhdr.c,v 1.11 90/12/11 23:59:53 sob Exp $";
	X  #endif
	X  
	X  #include "common.h"
	X***************
	X*** 23,29
	X   * XHDR subject 5589		retrieve subject of art 5589 only
	X   * XHDR subject <123 at ucbvax>	retrieve subject of art <123 at ucbvax>
	X   *
	X!  * This command is an extention, and not included in RFC 977.
	X   */
	X  
	X  xhdr(argc, argv)
	X
	X--- 23,29 -----
	X   * XHDR subject 5589		retrieve subject of art 5589 only
	X   * XHDR subject <123 at ucbvax>	retrieve subject of art <123 at ucbvax>
	X   *
	X!  * This command is an extension, and not included in RFC 977.
	X   */
	X  
	X  xhdr(argc, argv)
SHAR_EOF
if test 55179 -ne "`wc -c < 'server.pt1.diff'`"
then
	echo shar: error transmitting "'server.pt1.diff'" '(should have been 55179 characters)'
fi
fi # end of overwriting check
echo shar: done with directory "'server'"
cd ..
#	End of shell archive
exit 0



More information about the Comp.sources.bugs mailing list