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

Stan Barber nntp at tmc.edu
Mon Feb 11 07:53:55 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:
#	CHANGES.diff
#	README.1.5.11
#	xmit
#	xfer
#	inews
# This archive created: Sun Feb 10 14:37:30 1991
export PATH; PATH=/bin:$PATH
echo shar: extracting "'CHANGES.diff'" '(2485 characters)'
if test -f 'CHANGES.diff'
then
	echo shar: will not over-write existing file "'CHANGES.diff'"
else
sed 's/^	X//' << \SHAR_EOF > 'CHANGES.diff'
	X*** CHANGES	Sat Sep  1 22:03:56 1990
	X--- ../nntp/CHANGES	Fri Feb  8 18:22:39 1991
	X***************
	X*** 2,7
	X  since the initial release.  Individuals who either reported the bug or
	X  inspired the bug fix are in square brackets.
	X  
	X  1.5.10
	X  	Fixes to spawn.c to allow it to work correctly with CNEWS.
	X  	[All CNEWS sites....Sorry, guys and gals!]
	X
	X--- 2,41 -----
	X  since the initial release.  Individuals who either reported the bug or
	X  inspired the bug fix are in square brackets.
	X  
	X+ 1.5.11
	X+ 	Fixes to spawn.c and batch.c for those system that need
	X+ 	execle() to specifically call /bin/sh to exectute a sh script.
	X+ 	[All CNEWS sites running System V.]
	X+ 	Fixes to the timeout code to make it all work the GNUS.
	X+ 	[leres at ee.lbl.gov]
	X+ 	Fixes to nntpxmit to support CNEWS batch file formats which
	X+ 	contain the name of the article file and its message id.
	X+ 	[flee at guardian.cs.psu.edu]
	X+ 	Fixes to nntpxmit to not mistake the delete character in an
	X+ 	article as an EOF indication. [pst+ at ir.stanford.edu]
	X+ 	Added the $HOME environmental variable in the new environment
	X+ 	provided to a child process. [steve at avalon.dartmouth.edu]
	X+ 	Added rudimentary support to clientlib for TLI. [sob at tmc.edu]
	X+ 	Changes to inews to optionally use gethostbyname() to get canonical
	X+ 	hostname as needed. [jef at ee.lbl.gov]
	X+ 	Changed extern int timezone to extern long timezone in time.c.
	X+ 	[pk at unidoct.chemietechnik.uni-dortmund.de]
	X+ 	Reset SIGCLD before calling serve for WIN/TCP users on System V.
	X+ 	[wescott%micky%sauron%ncrcae at ncrlnk.dayton.ncr.com]
	X+ 	Changed references to "server" in clientlib.c to "nntpserver" to
	X+ 	avoid a conflict with WIN/TCP. [rdc30med at nmrdc1.nmrdc.nnmc.navy.mil]
	X+ 	Defining DBZ will take care of defining DBM. [tgt at cblpf.att.com]
	X+ 	Some minor changes to nntpxfer to remove the risk of doing an update
	X+ 	when it's not necessary. [ccc141j at monu6.cc.monash.edu.au,
	X+ 	corbin at utep-vaxa.uucp]
	X+ 	Changes to nntpxmit to correctly utilize LOG_DEBUG when LOG is
	X+ 	defined and not when it isn't. [alden at shape.mps.ohio-state.edu]
	X+ 	Change order of setuid/setgid in spawn.c and batch.c to execute
	X+ 	setgid first. [apple.com!arc!chet]
	X+ 	Provided an optional and untested way to use a dynamically
	X+ 	resizing article array in the server. This will allow large
	X+ 	numbers of articles in each group without giving nntp heartburn.
	X+ 	[leres at ee.lbl.gov]
	X  1.5.10
	X  	Fixes to spawn.c to allow it to work correctly with CNEWS.
	X  	[All CNEWS sites....Sorry, guys and gals!]
SHAR_EOF
if test 2485 -ne "`wc -c < 'CHANGES.diff'`"
then
	echo shar: error transmitting "'CHANGES.diff'" '(should have been 2485 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'README.1.5.11'" '(3359 characters)'
if test -f 'README.1.5.11'
then
	echo shar: will not over-write existing file "'README.1.5.11'"
else
sed 's/^	X//' << \SHAR_EOF > 'README.1.5.11'
	XWelcome to patch number 11 for NNTP 1.5.
	X
	X	If you have not installed the first ten patches, you must do so
	X	before proceeding. You can get those patches (and this one) from
	X	anoymous ftp on bcm.tmc.edu [128.249.2.1] or by sending a message
	X	to the archive-server at bcm.tmc.edu with the following text:
	X	send public nntp.patch.1
	X	send public nntp.patch.2
	X	send public nntp.patch.3
	X	send public nntp.patch.4.shar
	X	send public nntp.patch.5.shar
	X	send public nntp.patch.6.shar
	X	send public nntp.patch.7.shar
	X	send public nntp.patch.8.pt1.shar
	X	send public nntp.patch.8.pt2.shar
	X	send public nntp.patch.9.pt1.shar
	X	send public nntp.patch.9.pt2.shar
	X	send public nntp.patch.9.pt3.shar
	X	send public nntp.patch.10.pt1.shar
	X	send public nntp.patch.10.pt2.shar
	X
	X	If you have all ten patches installed, you are ready to install
	X	this set of patches. These patches are packaged as four shell archives.
	X	Be sure to unpack the shars in the root of your nntp distribution.
	X	They are as follows: 
	X	CHANGES.diff  -- This will patch the CHANGES file in the root
	X	of the nntp distrbution to reflect changes since the release of 1.5.
	X	To install, just type patch < CHANGES.diffs
	X	server.pt1.diff -- This patch is the first of two diffs to be applied
	X	to the files in the server subdirectory.
	X	To install, change directory to the server directory and type
	X	patch < server.pt1.diff.
	X	server.pt2.diff -- This patch is the first of two diffs to be applied
	X	to the files in the server subdirectory.
	X	To install, change directory to the server directory and type
	X	patch < server.pt2.diff.
	X	common.diff -- This patch is for the files in the common subdirectory.
	X	To install, change directory to the common directory and type
	X	patch < common.diff
	X	xfer.diff -- This is a patch for nntpxfer.c in the xfer directory.
	X	To install, change directory to the xfer directory and type
	X	patch < xfer.diff.
	X	xmit.diff -- This is a patch for the files in the xmit directory.
	X	To install, change directory to the xmit directory and type
	X	patch < xmit.diff.
	X	inews.diff -- This patch is for the files in the inews subdirectory.
	X	To install, change directory to the inews directory and type
	X	patch < inews.diff.
	X	
	X	SPECIAL NOTE: Two new files (timer.c and timer.h) will be created
	X	in the server subdirectory. New versions of README and conf.h.dist
	X	will be created in the common subdirectory. A new version of
	X	access_file will be created in the support subdirectory.
	X
	XBug reports and enhancements welcome,
	XStan Barber
	Xnntp at tmc.edu
	X
	XP.S. This patched version of NNTP has been compiled on the following systems:
	X
	XVax 3600 running Ultrix 3.1 (BNEWS 2.11.19)
	XSolbourne Series 5/601 with OS/MP 4.0D (SunOS 4.0.3c compatible) (Same BNEWS)
	XHP 9000/825 running HP-UX A.B3.00.5B
	X
	XP.P.S. The fully patched version is available via anonymous ftp from
	Xlib.tmc.edu [129.106.5.1] and gazette.bcm.tmc.edu [128.249.2.2]. Look in
	Xthe public directory for nntp.1.5.11.tar. A compressed version is also on line.
	X
	XP.P.P.S. This is the really FINAL release of NNTP 1.5. The next release will
	Xbe 1.6. There will be no patch kit. NNTP 1.6 will be a full release and
	Xwill only be distributed in full source.
	X
	XP.P.P.P.S. Much thanks to all our beta testers: 
	Xmolenda at s1.msi.umn.edu,tale at cs.rpi.edu,anselmo-ed at cs.yale.edu,
	Xleres at helios.ee.lbl.gov,vixie at decwrl.dec.com,scs at hela.iti.org,
	Xwisner at ims.alaska.edu,nash at parc.xerox.com
SHAR_EOF
if test 3359 -ne "`wc -c < 'README.1.5.11'`"
then
	echo shar: error transmitting "'README.1.5.11'" '(should have been 3359 characters)'
fi
fi # end of overwriting check
if test ! -d 'xmit'
then
	echo shar: creating directory "'xmit'"
	mkdir 'xmit'
fi
echo shar: entering directory "'xmit'"
cd 'xmit'
echo shar: extracting "'xmit.diff'" '(35693 characters)'
if test -f 'xmit.diff'
then
	echo shar: will not over-write existing file "'xmit.diff'"
else
sed 's/^	X//' << \SHAR_EOF > 'xmit.diff'
	XIndex: Makefile
	X*** Makefile	Sat Aug 18 17:14:40 1990
	X--- ../../nntp/xmit/Makefile	Sat Jan 12 01:05:39 1991
	X***************
	X*** 25,31
	X  	${CC} ${CFLAGS} -o nntpxmit ${SRVROBJ} ${LIBS}
	X  
	X  shlock: shlock.c
	X! 	cc ${CFLAGS} -o shlock shlock.c
	X  
	X  ${SRVROBJ}: ${SRVRINC}
	X  
	X
	X--- 25,31 -----
	X  	${CC} ${CFLAGS} -o nntpxmit ${SRVROBJ} ${LIBS}
	X  
	X  shlock: shlock.c
	X! 	cc ${CFLAGS} -DNNTPSRC -o shlock shlock.c
	X  
	X  ${SRVROBJ}: ${SRVRINC}
	X  
	XIndex: README
	X*** README	Wed Jul  4 19:49:19 1990
	X--- ../../nntp/xmit/README	Mon Dec 24 16:36:18 1990
	X***************
	X*** 1,4
	X!      The program "nntpxmit" is an active trnamission client
	X  (see the comment in nntpxmit.c for a description of the
	X  difference between active and passive clients) written by Erik Fair
	X  <fair at ucbvax.berkeley.edu, ...!ucbvax!fair>.  A larger comment on
	X
	X--- 1,4 -----
	X!      The program "nntpxmit" is an active transmission client
	X  (see the comment in nntpxmit.c for a description of the
	X  difference between active and passive clients) written by Erik Fair
	X  <fair at ucbvax.berkeley.edu, ...!ucbvax!fair>.  A larger comment on
	X***************
	X*** 26,33
	X  logging via syslog.  Additionally, the "-d" option is availible
	X  for debugging.
	X  
	X!      Please forward comments/suggestions for improvement/bugs to
	X! sob at bcm.tmc.edu.
	X  
	X       [My thanks extended to Erik for writing nntpxmit, shlock,
	X  and the stats scripts.  My thanks also to Mel Pleasant
	X
	X--- 26,32 -----
	X  logging via syslog.  Additionally, the "-d" option is availible
	X  for debugging.
	X  
	X!      Please forward comments/suggestions for improvement/bugs to nntp at tmc.edu.
	X  
	X       [My thanks extended to Erik for writing nntpxmit, shlock,
	X  and the stats scripts.  My thanks also to Mel Pleasant
	XIndex: get_tcp_conn.c
	X*** /tmp/,RCSt1a20229	Sun Feb 10 13:48:06 1991
	X--- /tmp/,RCSt2a20229	Sun Feb 10 13:48:06 1991
	X***************
	X*** 1,3
	X  /*
	X  ** Routines to open a TCP connection
	X  **
	X
	X--- 1,8 -----
	X+ #ifndef lint
	X+ static char * rcsid = "$Header: get_tcp_conn.c,v 1.3 91/02/10 13:47:16 sob Exp $";
	X+ #endif
	X+ #define USE_KEEPALIVES /* XXX should be in ../common/conf.h */
	X+ 
	X  /*
	X  ** Routines to open a TCP connection
	X  **
	X***************
	X*** 316,322
	X  			(void) close(sock);	/* dump descriptor */
	X  			errno = e_save;
	X  		} else
	X! 			return(sock);
	X  	}
	X  	return(FAIL);
	X  }
	X
	X--- 321,338 -----
	X  			(void) close(sock);	/* dump descriptor */
	X  			errno = e_save;
	X  		} else
	X! 								    {
	X! #ifdef USE_KEEPALIVES
	X! 								      int on = 1;
	X! 								      if (setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,(char *)&on,sizeof(on)) < 0)
	X! 								       { int e_save;
	X! 									 e_save = errno;
	X! 									 fprintf(stderr,"%s: %s [%s]: setsockopt KEEPALIVE: %s\n",Pname,host,inet_ntoa(sadr.sin_addr),errmsg(errno));
	X! 									 /* don't bother erroring out, just note it and ignore it */
	X! 								       }
	X! #endif
	X! 								      return(sock);
	X! 								    }
	X  	}
	X  	return(FAIL);
	X  }
	XIndex: nntpxmit.c
	XPrereq: 1.3
	X*** nntpxmit.c	Sun Jul  8 01:18:10 1990
	X--- ../../nntp/xmit/nntpxmit.c	Fri Jan 25 20:56:17 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char * rcsid = "@(#)$Header: nntpxmit.c,v 1.3 90/07/08 01:17:56 sob Exp $";
	X  #endif
	X  /* nntpxmit - transmit netnews articles across the internet with nntp
	X  **
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char * rcsid = "@(#)$Header: nntpxmit.c,v 1.6 91/01/25 20:55:53 sob Exp $";
	X  #endif
	X  /* nntpxmit - transmit netnews articles across the internet with nntp
	X  **
	X***************
	X*** 60,65
	X  ** nntpxmit only implements active send, for now.
	X  **
	X  ** Erik E. Fair <fair at ucbarpa.berkeley.edu>, Dec 4, 1987
	X  */
	X  
	X  #include "../common/conf.h"
	X
	X--- 60,66 -----
	X  ** nntpxmit only implements active send, for now.
	X  **
	X  ** Erik E. Fair <fair at ucbarpa.berkeley.edu>, Dec 4, 1987
	X+ ** Stan Barber <sob at bcm.tmc.edu>, Jan 1, 1989
	X  */
	X  
	X  #include "../common/conf.h"
	X***************
	X*** 89,95
	X  #else
	X  #include <syslog.h>
	X  #endif
	X! #endif	SYSLOG
	X  #include "../common/nntp.h"
	X  #include "llist.h"
	X  
	X
	X--- 90,96 -----
	X  #else
	X  #include <syslog.h>
	X  #endif
	X! #endif	/* SYSLOG */
	X  #include "../common/nntp.h"
	X  #include "llist.h"
	X  
	X***************
	X*** 94,100
	X  #include "llist.h"
	X  
	X  #define	MAXFNAME	BUFSIZ	/* maximum filename size - big enough? */
	X! #define	FCLOSE(fp)	(void) fclose(fp); (fp) = (FILE *)NULL
	X  
	X  FILE	*getfp();
	X  char	*errmsg();
	X
	X--- 95,101 -----
	X  #include "llist.h"
	X  
	X  #define	MAXFNAME	BUFSIZ	/* maximum filename size - big enough? */
	X! #define	FCLOSE(fp)	if (fp) (void) fclose(fp); (fp) = (FILE *)NULL
	X  
	X  char	*getline();
	X  char	*getmsgid();
	X***************
	X*** 96,102
	X  #define	MAXFNAME	BUFSIZ	/* maximum filename size - big enough? */
	X  #define	FCLOSE(fp)	(void) fclose(fp); (fp) = (FILE *)NULL
	X  
	X! FILE	*getfp();
	X  char	*errmsg();
	X  void	requeue();
	X  SIGRET	catchsig();
	X
	X--- 97,104 -----
	X  #define	MAXFNAME	BUFSIZ	/* maximum filename size - big enough? */
	X  #define	FCLOSE(fp)	if (fp) (void) fclose(fp); (fp) = (FILE *)NULL
	X  
	X! char	*getline();
	X! char	*getmsgid();
	X  char	*errmsg();
	X  void	requeue();
	X  SIGRET	catchsig();
	X***************
	X*** 151,156
	X  extern	char	*index();
	X  extern	char	*mktemp();
	X  extern	char	*strcpy();
	X  
	X  #ifdef	USG
	X  void
	X
	X--- 153,159 -----
	X  extern	char	*index();
	X  extern	char	*mktemp();
	X  extern	char	*strcpy();
	X+ extern	char	*strcat();
	X  
	X  #ifdef	USG
	X  void
	X***************
	X*** 160,166
	X  {
	X  	while(l-- > 0) *s++ = 0;
	X  }
	X! #endif	USG
	X  
	X  main(ac, av)
	X  int	ac;
	X
	X--- 163,169 -----
	X  {
	X  	while(l-- > 0) *s++ = 0;
	X  }
	X! #endif	/* USG */
	X  
	X  main(ac, av)
	X  int	ac;
	X***************
	X*** 192,199
	X  	(void) openlog(Pname, LOG_PID);
	X  #else
	X  	(void) openlog(Pname, LOG_PID, SYSLOG);
	X! #endif	BSD_42
	X! #endif	SYSLOG
	X  
	X  	for(i = 1; i < ac; i++) {
	X  		if (av[i][0] == '-') {
	X
	X--- 195,202 -----
	X  	(void) openlog(Pname, LOG_PID);
	X  #else
	X  	(void) openlog(Pname, LOG_PID, SYSLOG);
	X! #endif	/* BSD_42 */
	X! #endif	/* SYSLOG */
	X  
	X  	for(i = 1; i < ac; i++) {
	X  		if (av[i][0] == '-') {
	X***************
	X*** 304,310
	X  		Host, Stats.offered, Stats.accepted, Stats.rejected,
	X  		Stats.failed);
	X  	log(L_INFO, buf);
	X! 	sprintf(buf, "%s xmit user %.1f system %.1f elapsed %.1f",
	X  		Host, (user - ouser), (sys - osys), (Tend - Tbegin));
	X  	log(L_INFO, buf);
	X  	/* reset reference point */
	X
	X--- 307,313 -----
	X  		Host, Stats.offered, Stats.accepted, Stats.rejected,
	X  		Stats.failed);
	X  	log(L_INFO, buf);
	X! 	sprintf(buf, "%s xmit user %.3f system %.3f elapsed %.3f",
	X  		Host, (user - ouser), (sys - osys), (Tend - Tbegin));
	X  	log(L_INFO, buf);
	X  	/* reset reference point */
	X***************
	X*** 330,336
	X  char	*host, *file;
	X  int	transport, isQfile;
	X  {
	X- 	register FILE	*fp;
	X  #ifdef	FTRUNCATE
	X  	char	*mode = "r+";		/* so we can use ftruncate() */
	X  #else
	X
	X--- 333,338 -----
	X  char	*host, *file;
	X  int	transport, isQfile;
	X  {
	X  #ifdef	FTRUNCATE
	X  	char	*mode = "r+";		/* so we can use ftruncate() */
	X  #else
	X***************
	X*** 335,341
	X  	char	*mode = "r+";		/* so we can use ftruncate() */
	X  #else
	X  	char	*mode = "r";
	X! #endif	FTRUNCATE
	X  
	X  	if ((Qfp = fopen(file, mode)) == (FILE *)NULL) {
	X  		char	buf[BUFSIZ];
	X
	X--- 337,344 -----
	X  	char	*mode = "r+";		/* so we can use ftruncate() */
	X  #else
	X  	char	*mode = "r";
	X! #endif	/* FTRUNCATE */
	X! 	char	*msgid;
	X  
	X  	if ((Qfp = fopen(file, mode)) == (FILE *)NULL) {
	X  		char	buf[BUFSIZ];
	X***************
	X*** 376,385
	X  		*/
	X  		catchsig(interrupted);
	X  
	X! 		while((fp = getfp(Qfp, Article, sizeof(Article))) != (FILE *)NULL) {
	X! 			if (!sendarticle(host, fp)) {
	X! 				(void) fclose(fp);
	X! 				requeue(Article);
	X  				Article[0] = '\0';
	X  				cleanup();
	X  				goodbye(DONT_WAIT);
	X
	X--- 379,387 -----
	X  		*/
	X  		catchsig(interrupted);
	X  
	X! 		while ((msgid = getline(Qfp, Article, sizeof(Article))) != NULL) {
	X! 			if (!sendarticle(host, Article, msgid)) {
	X! 				requeue(Article, msgid);
	X  				Article[0] = '\0';
	X  				cleanup();
	X  				goodbye(DONT_WAIT);
	X***************
	X*** 386,392
	X  				restsig();
	X  				return(TRUE);
	X  			}
	X- 			(void) fclose(fp);
	X  		}
	X  
	X  		cleanup();
	X
	X--- 388,393 -----
	X  				restsig();
	X  				return(TRUE);
	X  			}
	X  		}
	X  
	X  		cleanup();
	X***************
	X*** 401,407
	X  		*/
	X  		register int	retcode;
	X  
	X- 		retcode = sendarticle(host, Qfp);
	X  		FCLOSE(Qfp);
	X  		goodbye(retcode ? WAIT : DONT_WAIT);
	X  		return(retcode && Stats.accepted == 1 && Stats.failed == 0);
	X
	X--- 402,407 -----
	X  		*/
	X  		register int	retcode;
	X  
	X  		FCLOSE(Qfp);
	X  		retcode = sendarticle(host, file, (char *) NULL);
	X  		goodbye(retcode ? WAIT : DONT_WAIT);
	X***************
	X*** 403,408
	X  
	X  		retcode = sendarticle(host, Qfp);
	X  		FCLOSE(Qfp);
	X  		goodbye(retcode ? WAIT : DONT_WAIT);
	X  		return(retcode && Stats.accepted == 1 && Stats.failed == 0);
	X  	}
	X
	X--- 403,409 -----
	X  		register int	retcode;
	X  
	X  		FCLOSE(Qfp);
	X+ 		retcode = sendarticle(host, file, (char *) NULL);
	X  		goodbye(retcode ? WAIT : DONT_WAIT);
	X  		return(retcode && Stats.accepted == 1 && Stats.failed == 0);
	X  	}
	X***************
	X*** 417,423
	X  **	Watch all network I/O for errors, return FALSE if
	X  **		the connection fails and we have to cleanup.
	X  */
	X! sendarticle(host, fp)
	X  char	*host;
	X  FILE	*fp;
	X  {
	X
	X--- 418,424 -----
	X  **	Watch all network I/O for errors, return FALSE if
	X  **		the connection fails and we have to cleanup.
	X  */
	X! sendarticle(host, file, msgid)
	X  char	*host;
	X  char	*file;
	X  char	*msgid;
	X***************
	X*** 419,425
	X  */
	X  sendarticle(host, fp)
	X  char	*host;
	X! FILE	*fp;
	X  {
	X  	register int	code;
	X  	char	buf[BUFSIZ];
	X
	X--- 420,427 -----
	X  */
	X  sendarticle(host, file, msgid)
	X  char	*host;
	X! char	*file;
	X! char	*msgid;
	X  {
	X  	register int	code;
	X  	FILE	*fp = NULL;
	X***************
	X*** 422,427
	X  FILE	*fp;
	X  {
	X  	register int	code;
	X  	char	buf[BUFSIZ];
	X  	char	*e_xfer = "%s xfer: %s";
	X  
	X
	X--- 424,431 -----
	X  char	*msgid;
	X  {
	X  	register int	code;
	X+ 	FILE	*fp = NULL;
	X+ 	int	error;
	X  	char	buf[BUFSIZ];
	X  	char	*e_xfer = "%s xfer: %s";
	X  
	X***************
	X*** 425,431
	X  	char	buf[BUFSIZ];
	X  	char	*e_xfer = "%s xfer: %s";
	X  
	X! 	switch(code = ihave(fp)) {
	X  	case CONT_XFER:
	X  		/*
	X  		** They want it. Give it to 'em.
	X
	X--- 429,442 -----
	X  	char	buf[BUFSIZ];
	X  	char	*e_xfer = "%s xfer: %s";
	X  
	X! 	errno = 0;
	X! 	if (msgid == NULL || *msgid == '\0') {
	X! 		if ((msgid = getmsgid(file, &fp)) == NULL) {
	X! 			if (fp) { (void) fclose(fp); fp = NULL; }
	X! 			return TRUE;
	X! 		}
	X! 	}
	X! 	switch(code = ihave(msgid)) {
	X  	case CONT_XFER:
	X  		/*
	X  		** They want it. Give it to 'em.
	X***************
	X*** 430,437
	X  		/*
	X  		** They want it. Give it to 'em.
	X  		*/
	X! 		if (!sendfile(fp)) {
	X! 			sprintf(buf, e_xfer, host, errmsg(errno));
	X  			log(L_NOTICE, buf);
	X  			Stats.failed++;
	X  			return(FALSE);
	X
	X--- 441,465 -----
	X  		/*
	X  		** They want it. Give it to 'em.
	X  		*/
	X! 		if (!fp) { fp = fopen(file, "r"); }
	X! 		if (fp == NULL && errno != ENOENT) {
	X! 			/* Worse than "No such file or directory"? */
	X! 			sprintf(buf, E_fopen, file, "r", errmsg(errno));
	X! 			log(L_WARNING, buf);
	X! 			goodbye(DONT_WAIT);
	X! 			exit(EX_OSERR);
	X! 		}
	X! 		if (fp == NULL) {
	X! 			/* Hmph. The file didn't exist. */
	X! 			error = sendcmd(".");
	X! 		} else {
	X! 			error = !sendfile(fp);
	X! 			(void) fclose(fp);
	X! 			fp = NULL;
	X! 		}
	X! 		if (error) {
	X! 			sprintf(buf, "%s xfer: sendfile: %s",
	X! 				host, errmsg(errno));
	X  			log(L_NOTICE, buf);
	X  			Stats.failed++;
	X  			if (fp) { (void) fclose(fp); fp = NULL; }
	X***************
	X*** 434,439
	X  			sprintf(buf, e_xfer, host, errmsg(errno));
	X  			log(L_NOTICE, buf);
	X  			Stats.failed++;
	X  			return(FALSE);
	X  		}
	X  		/*
	X
	X--- 462,468 -----
	X  				host, errmsg(errno));
	X  			log(L_NOTICE, buf);
	X  			Stats.failed++;
	X+ 			if (fp) { (void) fclose(fp); fp = NULL; }
	X  			return(FALSE);
	X  		}
	X  		/*
	X***************
	X*** 440,445
	X  		** Did the article transfer OK?
	X  		** Stay tuned to this same socket to find out!
	X  		*/
	X  		if ((code = readreply(buf, sizeof(buf))) != OK_XFERED) {
	X  			Stats.failed++;
	X  			if (code < 0) {
	X
	X--- 469,475 -----
	X  		** Did the article transfer OK?
	X  		** Stay tuned to this same socket to find out!
	X  		*/
	X+ 		errno = 0;
	X  		if ((code = readreply(buf, sizeof(buf))) != OK_XFERED) {
	X  			Stats.failed++;
	X  			if (code < 0) {
	X***************
	X*** 451,456
	X  
	X  					sprintf(errbuf, e_xfer, host, buf);
	X  					log(L_NOTICE, errbuf);
	X  				}
	X  				return(FALSE);
	X  			}
	X
	X--- 481,487 -----
	X  
	X  					sprintf(errbuf, e_xfer, host, buf);
	X  					log(L_NOTICE, errbuf);
	X+ 				if (fp) { (void) fclose(fp); fp = NULL; }
	X  				}
	X  				return(FALSE);
	X  			}
	X***************
	X*** 454,461
	X  				}
	X  				return(FALSE);
	X  			}
	X! 			if (ReQueue_Fails && code != ERR_XFERRJCT) {
	X! 				requeue(Article);
	X  				Article[0] = '\0';
	X  			}
	X  		}
	X
	X--- 485,492 -----
	X  				}
	X  				return(FALSE);
	X  			}
	X! 			if (ReQueue_Fails && code != ERR_XFERRJCT && fp != NULL) {
	X! 				requeue(Article, msgid);
	X  				Article[0] = '\0';
	X  			}
	X  		}
	X***************
	X*** 464,469
	X  		/* they don't want it */
	X  		break;
	X  	case ERR_XFERFAIL:
	X  		/* they can't do it right now, but maybe later */
	X  		return(FALSE);
	X  		break;
	X
	X--- 495,501 -----
	X  		/* they don't want it */
	X  		break;
	X  	case ERR_XFERFAIL:
	X+ 		if (fp) { (void) fclose(fp); fp = NULL; }
	X  		/* they can't do it right now, but maybe later */
	X  		return(FALSE);
	X  		break;
	X***************
	X*** 479,484
	X  		} else {
	X  			sprintf(buf, "%s improper response to IHAVE: %d while offering %s", host, code, Article);
	X  			log(L_WARNING, buf);
	X  		}
	X  		return(FALSE);
	X  	}
	X
	X--- 511,517 -----
	X  		} else {
	X  			sprintf(buf, "%s improper response to IHAVE: %d while offering %s", host, code, Article);
	X  			log(L_WARNING, buf);
	X+ 			if (fp) { (void) fclose(fp); fp = NULL; }
	X  		}
	X  		return(FALSE);
	X  	}
	X***************
	X*** 482,487
	X  		}
	X  		return(FALSE);
	X  	}
	X  	return(TRUE);
	X  }
	X  
	X
	X--- 515,521 -----
	X  		}
	X  		return(FALSE);
	X  	}
	X+ 	if (fp) { (void) fclose(fp); fp = NULL; }
	X  	return(TRUE);
	X  }
	X  
	X***************
	X*** 549,556
	X  ** Get the message-id header field data with a minimum of fuss.
	X  */
	X  char *
	X! getmsgid(fp)
	X! FILE *fp;
	X  {
	X  	static	char	buf[BUFSIZ];
	X  	static	char	*msgid = "message-id";
	X
	X--- 583,591 -----
	X  ** Get the message-id header field data with a minimum of fuss.
	X  */
	X  char *
	X! getmsgid(file, fpp)
	X! char *file;
	X! FILE **fpp;
	X  {
	X  	static	char	buf[BUFSIZ];
	X  	static	char	msgid[] = "message-id";
	X***************
	X*** 553,559
	X  FILE *fp;
	X  {
	X  	static	char	buf[BUFSIZ];
	X! 	static	char	*msgid = "message-id";
	X  	register char	*cp, *cp2;
	X  
	X  	while(fgets(buf, sizeof(buf), fp) != (char *)NULL) {
	X
	X--- 588,594 -----
	X  FILE **fpp;
	X  {
	X  	static	char	buf[BUFSIZ];
	X! 	static	char	msgid[] = "message-id";
	X  	register char	*cp, *cp2;
	X  
	X  	*fpp = fopen(file, "r");
	X***************
	X*** 556,562
	X  	static	char	*msgid = "message-id";
	X  	register char	*cp, *cp2;
	X  
	X! 	while(fgets(buf, sizeof(buf), fp) != (char *)NULL) {
	X  		switch(buf[0]) {
	X  		case '\n':
	X  			return((char *)NULL);	/* EOH, we failed */
	X
	X--- 591,600 -----
	X  	static	char	msgid[] = "message-id";
	X  	register char	*cp, *cp2;
	X  
	X! 	*fpp = fopen(file, "r");
	X! 	if (*fpp == NULL) return NULL;
	X! 
	X! 	while(fgets(buf, sizeof(buf), *fpp) != NULL) {
	X  		switch(buf[0]) {
	X  		case '\n':
	X  			(void) fclose(*fpp);
	X***************
	X*** 559,565
	X  	while(fgets(buf, sizeof(buf), fp) != (char *)NULL) {
	X  		switch(buf[0]) {
	X  		case '\n':
	X! 			return((char *)NULL);	/* EOH, we failed */
	X  		case 'M':
	X  		case 'm':
	X  			if ((cp = index(buf, ':')) == (char *)NULL)
	X
	X--- 597,605 -----
	X  	while(fgets(buf, sizeof(buf), *fpp) != NULL) {
	X  		switch(buf[0]) {
	X  		case '\n':
	X! 			(void) fclose(*fpp);
	X! 			*fpp = NULL;
	X! 			return NULL;	/* EOH, we failed */
	X  		case 'M':
	X  		case 'm':
	X  			cp = index(buf, ':');
	X***************
	X*** 562,569
	X  			return((char *)NULL);	/* EOH, we failed */
	X  		case 'M':
	X  		case 'm':
	X! 			if ((cp = index(buf, ':')) == (char *)NULL)
	X! 				continue;
	X  			*cp++ = '\0';
	X  			if (strncmp(lcase(buf), msgid, sizeof(*msgid)) == 0) {
	X  				/* dump extraneous trash - umass.bitnet */
	X
	X--- 602,609 -----
	X  			return NULL;	/* EOH, we failed */
	X  		case 'M':
	X  		case 'm':
	X! 			cp = index(buf, ':');
	X! 			if (cp == NULL) continue;
	X  			*cp++ = '\0';
	X  			if (strncmp(lcase(buf), msgid, strlen(msgid)) == 0) {
	X  				/* dump extraneous trash - umass.bitnet */
	X***************
	X*** 565,571
	X  			if ((cp = index(buf, ':')) == (char *)NULL)
	X  				continue;
	X  			*cp++ = '\0';
	X! 			if (strncmp(lcase(buf), msgid, sizeof(*msgid)) == 0) {
	X  				/* dump extraneous trash - umass.bitnet */
	X  				/* hope nobody quotes an '>' in a msgid */
	X  				if ((cp2 = index(cp, '>')) != (char *)NULL)
	X
	X--- 605,611 -----
	X  			cp = index(buf, ':');
	X  			if (cp == NULL) continue;
	X  			*cp++ = '\0';
	X! 			if (strncmp(lcase(buf), msgid, strlen(msgid)) == 0) {
	X  				/* dump extraneous trash - umass.bitnet */
	X  				/* hope nobody quotes an '>' in a msgid */
	X  				cp2 = index(cp, '>');
	X***************
	X*** 568,575
	X  			if (strncmp(lcase(buf), msgid, sizeof(*msgid)) == 0) {
	X  				/* dump extraneous trash - umass.bitnet */
	X  				/* hope nobody quotes an '>' in a msgid */
	X! 				if ((cp2 = index(cp, '>')) != (char *)NULL)
	X! 					*++cp2 = '\0';
	X  				return(sp_strip(cp));
	X  			}
	X  			break;
	X
	X--- 608,616 -----
	X  			if (strncmp(lcase(buf), msgid, strlen(msgid)) == 0) {
	X  				/* dump extraneous trash - umass.bitnet */
	X  				/* hope nobody quotes an '>' in a msgid */
	X! 				cp2 = index(cp, '>');
	X! 				if (cp2 != NULL) *++cp2 = '\0';
	X! 				(void) rewind(*fpp);
	X  				return(sp_strip(cp));
	X  			}
	X  			break;
	X***************
	X*** 575,581
	X  			break;
	X  		}
	X  	}
	X! 	return((char *)NULL);	/* EOF, we failed */
	X  }
	X  
	X  #ifdef	notdef	/* nobody obeys the triply damned protocol anyway! */
	X
	X--- 616,624 -----
	X  			break;
	X  		}
	X  	}
	X! 	(void) fclose(*fpp);
	X! 	*fpp = NULL;
	X! 	return NULL;	/* EOF, failed. */
	X  }
	X  
	X  #ifdef	notdef	/* nobody obeys the triply damned protocol anyway! */
	X***************
	X*** 715,721
	X  	}
	X  	return(FALSE);
	X  }
	X! #endif	notdef
	X  
	X  /*
	X  ** Read the header of a netnews article, snatch the message-id therefrom,
	X
	X--- 758,764 -----
	X  	}
	X  	return(FALSE);
	X  }
	X! #endif	/* notdef */
	X  
	X  /*
	X  ** Read the header of a netnews article, snatch the message-id therefrom,
	X***************
	X*** 721,728
	X  ** Read the header of a netnews article, snatch the message-id therefrom,
	X  ** and ask the remote if they have that one already.
	X  */
	X! ihave(fp)
	X! FILE	*fp;
	X  {
	X  	register int	code;
	X  	register char	*id;
	X
	X--- 764,771 -----
	X  ** Read the header of a netnews article, snatch the message-id therefrom,
	X  ** and ask the remote if they have that one already.
	X  */
	X! ihave(id)
	X! char	*id;
	X  {
	X  	register int	code;
	X  	char	buf[BUFSIZ];
	X***************
	X*** 725,731
	X  FILE	*fp;
	X  {
	X  	register int	code;
	X- 	register char	*id;
	X  	char	buf[BUFSIZ];
	X  
	X  	if ((id = getmsgid(fp)) == (char *)NULL || *id == '\0') {
	X
	X--- 768,773 -----
	X  char	*id;
	X  {
	X  	register int	code;
	X  	char	buf[BUFSIZ];
	X  
	X  	if (id == NULL || *id == '\0') {
	X***************
	X*** 728,734
	X  	register char	*id;
	X  	char	buf[BUFSIZ];
	X  
	X! 	if ((id = getmsgid(fp)) == (char *)NULL || *id == '\0') {
	X  		/*
	X  		** something botched locally with the article
	X  		** so we don't send it, but we don't break off
	X
	X--- 770,776 -----
	X  	register int	code;
	X  	char	buf[BUFSIZ];
	X  
	X! 	if (id == NULL || *id == '\0') {
	X  		/*
	X  		** something botched locally with the article
	X  		** so we don't send it, but we don't break off
	X***************
	X*** 752,758
	X  	switch(code = converse(buf, sizeof(buf))) {
	X  	case CONT_XFER:
	X  		Stats.accepted++;
	X- 		rewind(fp);
	X  		return(code);
	X  	case ERR_GOTIT:
	X  		Stats.rejected++;
	X
	X--- 794,799 -----
	X  	switch(code = converse(buf, sizeof(buf))) {
	X  	case CONT_XFER:
	X  		Stats.accepted++;
	X  		return(code);
	X  	case ERR_GOTIT:
	X  		Stats.rejected++;
	X***************
	X*** 768,778
	X  }
	X  
	X  /*
	X! ** Given that fp points to an open file containing filenames,
	X! ** open and return a file pointer to the next filename in the file.
	X! ** Don't you love indirection?
	X! **
	X! ** Returns a valid FILE pointer or NULL if end of file.
	X  */
	X  FILE *
	X  getfp(fp, filename, fnlen)
	X
	X--- 809,819 -----
	X  }
	X  
	X  /*
	X! ** Read the next line from fp into line,
	X! ** break it apart into filename and message-id,
	X! ** and return a pointer to the message-id.
	X! ** Returns "" if no message-id.
	X! ** Returns NULL at end of file.
	X  */
	X  char *
	X  getline(fp, line, len)
	X***************
	X*** 774,784
	X  **
	X  ** Returns a valid FILE pointer or NULL if end of file.
	X  */
	X! FILE *
	X! getfp(fp, filename, fnlen)
	X! register FILE	*fp;
	X! char	*filename;
	X! register int	fnlen;
	X  {
	X  	register FILE	*newfp = (FILE *)NULL;
	X  	register char	*cp;
	X
	X--- 815,825 -----
	X  ** Returns "" if no message-id.
	X  ** Returns NULL at end of file.
	X  */
	X! char *
	X! getline(fp, line, len)
	X! FILE	*fp;
	X! char	*line;
	X! int	len;
	X  {
	X  	register char	*cp;
	X  
	X***************
	X*** 780,786
	X  char	*filename;
	X  register int	fnlen;
	X  {
	X- 	register FILE	*newfp = (FILE *)NULL;
	X  	register char	*cp;
	X  	char	*mode = "r";
	X  
	X
	X--- 821,826 -----
	X  char	*line;
	X  int	len;
	X  {
	X  	register char	*cp;
	X  
	X  	do {
	X***************
	X*** 782,788
	X  {
	X  	register FILE	*newfp = (FILE *)NULL;
	X  	register char	*cp;
	X- 	char	*mode = "r";
	X  
	X  	while(newfp == (FILE *)NULL) {
	X  		if (fgets(filename, fnlen, fp) == (char *)NULL)
	X
	X--- 822,827 -----
	X  int	len;
	X  {
	X  	register char	*cp;
	X  
	X  	do {
	X  		if (fgets(line, len, fp) == NULL) return NULL;
	X***************
	X*** 784,792
	X  	register char	*cp;
	X  	char	*mode = "r";
	X  
	X! 	while(newfp == (FILE *)NULL) {
	X! 		if (fgets(filename, fnlen, fp) == (char *)NULL)
	X! 			return((FILE *)NULL);		/* EOF, tell caller */
	X  
	X  		filename[fnlen - 1] = '\0';	/* make sure */
	X  
	X
	X--- 823,831 -----
	X  {
	X  	register char	*cp;
	X  
	X! 	do {
	X! 		if (fgets(line, len, fp) == NULL) return NULL;
	X! 		line[len - 1] = '\0';
	X  
	X  		cp = index(line, '\n');
	X  		if (cp != NULL) *cp = '\0';
	X***************
	X*** 788,794
	X  		if (fgets(filename, fnlen, fp) == (char *)NULL)
	X  			return((FILE *)NULL);		/* EOF, tell caller */
	X  
	X! 		filename[fnlen - 1] = '\0';	/* make sure */
	X  
	X  		/* if fgets() ever forgets the '\n', we're fucked */
	X  		if (*(cp = &filename[strlen(filename) - 1]) == '\n')
	X
	X--- 827,835 -----
	X  		if (fgets(line, len, fp) == NULL) return NULL;
	X  		line[len - 1] = '\0';
	X  
	X! 		cp = index(line, '\n');
	X! 		if (cp != NULL) *cp = '\0';
	X! 	} while (line[0] == '\0');
	X  
	X  	cp = &line[0];
	X  	while (*cp != '\0' && !isspace(*cp)) ++cp;
	X***************
	X*** 790,818
	X  
	X  		filename[fnlen - 1] = '\0';	/* make sure */
	X  
	X! 		/* if fgets() ever forgets the '\n', we're fucked */
	X! 		if (*(cp = &filename[strlen(filename) - 1]) == '\n')
	X! 			*cp = '\0';
	X! 
	X! 		if (filename[0] == '\0')
	X! 			continue;
	X! 
	X! 		if ((newfp = fopen(filename, mode)) == (FILE *)NULL) {
	X! 			/*
	X! 			** The only permissible error is `file non-existant'
	X! 			** anything else indicates something is seriously
	X! 			** wrong, and we should go away to let the shell
	X! 			** script clean up.
	X! 			*/
	X! 			if (errno != ENOENT) {
	X! 				char	buf[BUFSIZ];
	X! 
	X! 				sprintf(buf, E_fopen, filename, mode, errmsg(errno));
	X! 				log(L_WARNING, buf);
	X! 				goodbye(DONT_WAIT);
	X! 				exit(EX_OSERR);
	X! 			}
	X! 		}
	X  	}
	X  	return(newfp);
	X  }
	X
	X--- 831,842 -----
	X  		if (cp != NULL) *cp = '\0';
	X  	} while (line[0] == '\0');
	X  
	X! 	cp = &line[0];
	X! 	while (*cp != '\0' && !isspace(*cp)) ++cp;
	X! 	if (*cp != '\0') {
	X! 		*cp++ = '\0';
	X! 		while (*cp != '\0' && isspace(*cp)) ++cp;
	X! 		/* cp now points to the message-id, if any. */
	X  	}
	X  	return cp;
	X  }
	X***************
	X*** 814,820
	X  			}
	X  		}
	X  	}
	X! 	return(newfp);
	X  }
	X  
	X  /*
	X
	X--- 838,844 -----
	X  		while (*cp != '\0' && isspace(*cp)) ++cp;
	X  		/* cp now points to the message-id, if any. */
	X  	}
	X! 	return cp;
	X  }
	X  
	X  /*
	X***************
	X*** 833,839
	X  		** Nothing to clean up after, reset stuff and
	X  		** nuke the queue file.
	X  		*/
	X! 		requeue((char *)NULL);
	X  		if (feof(Qfp)) {
	X  			dprintf(stderr, "%s: unlink(%s)\n", Pname, Qfile);
	X  			if (unlink(Qfile) < 0) {
	X
	X--- 857,863 -----
	X  		** Nothing to clean up after, reset stuff and
	X  		** nuke the queue file.
	X  		*/
	X! 		requeue((char *)NULL, (char *)NULL);
	X  		if (feof(Qfp)) {
	X  			dprintf(stderr, "%s: unlink(%s)\n", Pname, Qfile);
	X  			if (unlink(Qfile) < 0) {
	X***************
	X*** 853,859
	X  ** Calling this with a NULL pointer resets the internal pointer.
	X  */
	X  void
	X! requeue(article)
	X  char *article;
	X  {
	X  	static ll_t *lp = &FailedArticles;
	X
	X--- 877,884 -----
	X  ** Calling this with a NULL pointer resets the internal pointer.
	X  */
	X  void
	X! requeue(article, msgid)
	X! char *msgid;
	X  char *article;
	X  {
	X  	char buf[BUFSIZ];
	X***************
	X*** 856,861
	X  requeue(article)
	X  char *article;
	X  {
	X  	static ll_t *lp = &FailedArticles;
	X  
	X  	if (article == (char *)NULL) {
	X
	X--- 881,887 -----
	X  char *msgid;
	X  char *article;
	X  {
	X+ 	char buf[BUFSIZ];
	X  	static ll_t *lp = &FailedArticles;
	X  
	X  	if (article == (char *)NULL) {
	X***************
	X*** 866,873
	X  	if (*article == '\0')
	X  		return;
	X  
	X! 	dprintf(stderr, "%s: requeue(%s)\n", Pname, article);
	X! 	if ((lp = l_alloc(lp, article, strlen(article) + 1)) == (ll_t *)NULL) {
	X  		fprintf(stderr, "%s: requeue(%s) failed, dumping fail list\n",
	X  			Pname, article);
	X  		/*
	X
	X--- 892,904 -----
	X  	if (*article == '\0')
	X  		return;
	X  
	X! 	(void) strcpy(buf, article);
	X! 	if (msgid != NULL && *msgid != '\0') {
	X! 		(void) strcat(strcat(buf, " "), msgid);
	X! 	}
	X! 
	X! 	dprintf(stderr, "%s: requeue(%s)\n", Pname, buf);
	X! 	if ((lp = l_alloc(lp, buf, strlen(buf) + 1)) == (ll_t *)NULL) {
	X  		fprintf(stderr, "%s: requeue(%s) failed, dumping fail list\n",
	X  			Pname, buf);
	X  		/*
	X***************
	X*** 869,875
	X  	dprintf(stderr, "%s: requeue(%s)\n", Pname, article);
	X  	if ((lp = l_alloc(lp, article, strlen(article) + 1)) == (ll_t *)NULL) {
	X  		fprintf(stderr, "%s: requeue(%s) failed, dumping fail list\n",
	X! 			Pname, article);
	X  		/*
	X  		** Wow! Did you know that this could blow the stack
	X  		** if we recurse too deeply? I sure didn't!
	X
	X--- 900,906 -----
	X  	dprintf(stderr, "%s: requeue(%s)\n", Pname, buf);
	X  	if ((lp = l_alloc(lp, buf, strlen(buf) + 1)) == (ll_t *)NULL) {
	X  		fprintf(stderr, "%s: requeue(%s) failed, dumping fail list\n",
	X! 			Pname, buf);
	X  		/*
	X  		** Wow! Did you know that this could blow the stack
	X  		** if we recurse too deeply? I sure didn't!
	X***************
	X*** 891,897
	X  	register FILE	*tmpfp;
	X  	register int	nart = 0;
	X  	char	*mode = "w+";
	X! 	char	*template = "/tmp/nntpxmitXXXXXX";
	X  	char	buf[BUFSIZ];
	X  	static char	*tempfile = (char *)NULL;
	X  
	X
	X--- 922,928 -----
	X  	register FILE	*tmpfp;
	X  	register int	nart = 0;
	X  	char	*mode = "w+";
	X! 	static char template[] = "/tmp/nntpxmitXXXXXX";
	X  	char	buf[BUFSIZ];
	X  	static char	*tempfile = (char *)NULL;
	X  
	X***************
	X*** 897,903
	X  
	X  	dprintf(stderr, "%s: rewrite(%s)\n", Pname, Qfile);
	X  
	X! 	if (tempfile == (char *)NULL)		/* should only need this once */
	X  		tempfile = mktemp(template);
	X  
	X  	if ((tmpfp = fopen(tempfile, mode)) == (FILE *)NULL) {
	X
	X--- 928,934 -----
	X  
	X  	dprintf(stderr, "%s: rewrite(%s)\n", Pname, Qfile);
	X  
	X! 	if (tempfile == (char *)NULL)	/* should only need this once */
	X  		tempfile = mktemp(template);
	X  
	X  	if ((tmpfp = fopen(tempfile, mode)) == (FILE *)NULL) {
	X***************
	X*** 946,952
	X  			sprintf(buf, E_unlk, tempfile, errmsg(errno));
	X  			log(L_WARNING, buf);
	X  		}
	X! 		requeue((char *)NULL);		/* reset */
	X  		return;
	X  	}
	X  
	X
	X--- 977,983 -----
	X  			sprintf(buf, E_unlk, tempfile, errmsg(errno));
	X  			log(L_WARNING, buf);
	X  		}
	X! 		requeue((char *)NULL,(char *)NULL);	/* reset */
	X  		return;
	X  	}
	X  
	X***************
	X*** 962,968
	X  			sprintf(buf, E_unlk, tempfile, errmsg(errno));
	X  			log(L_WARNING, buf);
	X  		}
	X! 		requeue((char *)NULL);		/* reset */
	X  		return;
	X  	}
	X  #else
	X
	X--- 993,999 -----
	X  			sprintf(buf, E_unlk, tempfile, errmsg(errno));
	X  			log(L_WARNING, buf);
	X  		}
	X! 		requeue((char *)NULL,(char *)NULL);	/* reset */
	X  		return;
	X  	}
	X  #else
	X***************
	X*** 975,981
	X  			sprintf(buf, E_unlk, tempfile, errmsg(errno));
	X  			log(L_WARNING, buf);
	X  		}
	X! 		requeue((char *)NULL);		/* reset */
	X  		return;
	X  	}
	X  	/* Try to get our lock back (but continue whether we do or not) */
	X
	X--- 1006,1012 -----
	X  			sprintf(buf, E_unlk, tempfile, errmsg(errno));
	X  			log(L_WARNING, buf);
	X  		}
	X! 		requeue((char *)NULL,(char *)NULL);	/* reset */
	X  		return;
	X  	}
	X  	/* Try to get our lock back (but continue whether we do or not) */
	X***************
	X*** 980,986
	X  	}
	X  	/* Try to get our lock back (but continue whether we do or not) */
	X  	(void) lockfd(fileno(Qfp), Qfile, DONT_BLOCK);
	X! #endif	FTRUNCATE
	X  
	X  	dprintf(stderr, "%s: copying %s back to %s\n", Pname, tempfile, Qfile);
	X  	while(fgets(buf, sizeof(buf), tmpfp) != (char *)NULL)
	X
	X--- 1011,1017 -----
	X  	}
	X  	/* Try to get our lock back (but continue whether we do or not) */
	X  	(void) lockfd(fileno(Qfp), Qfile, DONT_BLOCK);
	X! #endif	/* FTRUNCATE */
	X  
	X  	dprintf(stderr, "%s: copying %s back to %s\n", Pname, tempfile, Qfile);
	X  	while(fgets(buf, sizeof(buf), tmpfp) != (char *)NULL)
	X***************
	X*** 997,1003
	X  		sprintf(buf, E_unlk, tempfile, errmsg(errno));
	X  		log(L_WARNING, buf);
	X  	}
	X! 	requeue((char *)NULL);		/* reset */
	X  	dprintf(stderr, "%s: rewrite(%s): done\n", Pname, Qfile);
	X  	return;
	X  }
	X
	X--- 1028,1034 -----
	X  		sprintf(buf, E_unlk, tempfile, errmsg(errno));
	X  		log(L_WARNING, buf);
	X  	}
	X! 	requeue((char *)NULL,(char *)NULL);		/* reset */
	X  	dprintf(stderr, "%s: rewrite(%s): done\n", Pname, Qfile);
	X  	return;
	X  }
	X***************
	X*** 1015,1021
	X  
	X  #ifndef RELSIG
	X  	catchsig(SIG_IGN);	/* for System V - hope we're quick enough */
	X! #endif	RELSIG
	X  	sprintf(buf, "%s signal %d", Host, sig);
	X  	log(L_NOTICE, buf);
	X  	requeue(Article);
	X
	X--- 1046,1052 -----
	X  
	X  #ifndef RELSIG
	X  	catchsig(SIG_IGN);	/* for System V - hope we're quick enough */
	X! #endif	/* RELSIG */
	X  	sprintf(buf, "%s signal %d", Host, sig);
	X  	log(L_NOTICE, buf);
	X  	requeue(Article,(char *)NULL);
	X***************
	X*** 1018,1024
	X  #endif	RELSIG
	X  	sprintf(buf, "%s signal %d", Host, sig);
	X  	log(L_NOTICE, buf);
	X! 	requeue(Article);
	X  	cleanup();
	X  	if (Report_Stats)
	X  		logstats();
	X
	X--- 1049,1055 -----
	X  #endif	/* RELSIG */
	X  	sprintf(buf, "%s signal %d", Host, sig);
	X  	log(L_NOTICE, buf);
	X! 	requeue(Article,(char *)NULL);
	X  	cleanup();
	X  	if (Report_Stats)
	X  		logstats();
	X***************
	X*** 1073,1078
	X  int	importance;
	X  char	*error;
	X  {
	X  	FILE	*report = (importance == L_INFO ? stdout : stderr);
	X  	fprintf(report, "%s: %s\n", Pname, error);
	X  #ifdef	SYSLOG
	X
	X--- 1104,1110 -----
	X  int	importance;
	X  char	*error;
	X  {
	X+ 	int skip = FALSE;
	X  	FILE	*report = (importance == L_INFO ? stdout : stderr);
	X  	fprintf(report, "%s: %s\n", Pname, error);
	X  #ifdef	SYSLOG 
	X***************
	X*** 1075,1081
	X  {
	X  	FILE	*report = (importance == L_INFO ? stdout : stderr);
	X  	fprintf(report, "%s: %s\n", Pname, error);
	X! #ifdef	SYSLOG
	X  	switch(importance) {
	X  #ifdef LOG
	X  	case L_DEBUG:	importance = LOG_DEBUG;		break;
	X
	X--- 1107,1113 -----
	X  	int skip = FALSE;
	X  	FILE	*report = (importance == L_INFO ? stdout : stderr);
	X  	fprintf(report, "%s: %s\n", Pname, error);
	X! #ifdef	SYSLOG 
	X  	switch(importance) {
	X  #ifdef LOG
	X  	case L_DEBUG:	importance = LOG_DEBUG;		break;
	X***************
	X*** 1079,1084
	X  	switch(importance) {
	X  #ifdef LOG
	X  	case L_DEBUG:	importance = LOG_DEBUG;		break;
	X  #endif
	X  	case L_INFO:	importance = LOG_INFO;		break;
	X  	case L_NOTICE:	importance = LOG_NOTICE;	break;
	X
	X--- 1111,1118 -----
	X  	switch(importance) {
	X  #ifdef LOG
	X  	case L_DEBUG:	importance = LOG_DEBUG;		break;
	X+ #else
	X+ 	case L_DEBUG:	skip = TRUE;			break;
	X  #endif
	X  	case L_INFO:	importance = LOG_INFO;		break;
	X  	case L_NOTICE:	importance = LOG_NOTICE;	break;
	X***************
	X*** 1085,1092
	X  	case L_WARNING:	importance = LOG_WARNING;	break;
	X  	default:	importance = LOG_DEBUG;		break;
	X  	}
	X! 	syslog(importance, error);
	X! #endif	SYSLOG
	X  }
	X  
	X  /*
	X
	X--- 1119,1126 -----
	X  	case L_WARNING:	importance = LOG_WARNING;	break;
	X  	default:	importance = LOG_DEBUG;		break;
	X  	}
	X! 	if (skip == FALSE) syslog(importance, error);
	X! #endif	/* SYSLOG */
	X  }
	X  
	X  /*
	X***************
	X*** 1109,1115
	X  		}
	X  		return(FALSE);
	X  	}
	X! #endif	F_TLOCK
	X  #else
	X  #ifdef	LOCK_EX
	X  	if (flock(fd, LOCK_EX|(non_blocking ? LOCK_NB : 0)) < 0) {
	X
	X--- 1143,1149 -----
	X  		}
	X  		return(FALSE);
	X  	}
	X! #endif	/* F_TLOCK */
	X  #else
	X  #ifdef	LOCK_EX
	X  	if (flock(fd, LOCK_EX|(non_blocking ? LOCK_NB : 0)) < 0) {
	X***************
	X*** 1119,1125
	X  		}
	X  		return(FALSE);
	X  	}
	X! #endif	LOCK_EX
	X! #endif	USG
	X  	return(TRUE);
	X  }
	X
	X--- 1153,1159 -----
	X  		}
	X  		return(FALSE);
	X  	}
	X! #endif	/* LOCK_EX */
	X! #endif	/* USG */
	X  	return(TRUE);
	X  }
	XIndex: nntpxmit.h
	X*** nntpxmit.h	Fri Aug 10 22:56:08 1990
	X--- ../../nntp/xmit/nntpxmit.h	Mon Feb  4 02:34:48 1991
	X***************
	X*** 11,21
	X  #include <sys/stat.h>
	X  #endif MMAP
	X  
	X- #ifdef SIGRET
	X- #undef SIGRET
	X- #endif
	X- #define SIGRET void	/* Newfangled signal() returns void, old returns int */
	X- 
	X  typedef	SIGRET	(*ifunp)();	/* pointer to function that returns */
	X  				/* whatever signal() returns */
	X  
	X
	X--- 11,16 -----
	X  #include <sys/stat.h>
	X  #endif MMAP
	X  
	X  typedef	SIGRET	(*ifunp)();	/* pointer to function that returns */
	X  				/* whatever signal() returns */
	X  
	XIndex: remote.c
	XPrereq: 1.2
	X*** remote.c	Fri Aug 10 22:56:22 1990
	X--- ../../nntp/xmit/remote.c	Fri Feb  8 18:32:18 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char * rcsid = "@(#)$Header: remote.c,v 1.2 90/08/10 22:56:12 sob Exp $";
	X  #endif
	X  /*
	X  ** remote communication routines for NNTP/SMTP style communication.
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char * rcsid = "@(#)$Header: remote.c,v 1.5 91/02/08 18:32:11 sob Exp $";
	X  #endif
	X  /*
	X  ** remote communication routines for NNTP/SMTP style communication.
	X***************
	X*** 298,304
	X  	rmt_rd = (FILE *)NULL;
	X  	(void) fclose(rmt_wr);
	X  	rmt_wr = (FILE *)NULL;
	X! 	if (pstate != (ifunp)(-1));
	X  		(void) signal(SIGPIPE, pstate);
	X  }
	X  
	X
	X--- 298,304 -----
	X  	rmt_rd = (FILE *)NULL;
	X  	(void) fclose(rmt_wr);
	X  	rmt_wr = (FILE *)NULL;
	X! 	if (pstate != (ifunp)(-1))
	X  		(void) signal(SIGPIPE, pstate);
	X  }
	X  
	X***************
	X*** 335,341
	X  		fp->_flag |= _IOERR;		/* set stdio error */
	X  #endif
	X  #ifndef ETIMEDOUT
	X! 		errno = EPIPE;			/* USG doesn't have ETIMEDOUT */
	X  #else
	X  		errno = ETIMEDOUT;		/* connection timed out */
	X  #endif
	X
	X--- 335,341 -----
	X  		fp->_flag |= _IOERR;		/* set stdio error */
	X  #endif
	X  #ifndef ETIMEDOUT
	X! 		errno = EPIPE;			/* USG doesn't have ETIMEDOUT*/
	X  #else
	X  		errno = ETIMEDOUT;		/* connection timed out */
	X  #endif
	X***************
	X*** 446,451
	X  	while((c = fgetc(fp)) != EOF && !feof(fp)) {
	X  #endif !MMAP
	X  		switch(c) {
	X  		case '\n':
	X  			PUTC('\r');		/* \n -> \r\n */
	X  			PUTC(c);
	X
	X--- 446,453 -----
	X  	while((c = fgetc(fp)) != EOF && !feof(fp)) {
	X  #endif !MMAP
	X  		switch(c) {
	X+ 		case '\177':			/* skip deletes... */
	X+ 			break;
	X  		case '\n':
	X  			PUTC('\r');		/* \n -> \r\n */
	X  			PUTC(c);
	XIndex: shlock.c
	XPrereq: 1.2
	X*** shlock.c	Wed Jul  4 20:01:52 1990
	X--- ../../nntp/xmit/shlock.c	Sat Jan 12 01:04:42 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char * rcsid = "@(#)$Header: shlock.c,v 1.2 90/01/15 01:37:33 sob Exp $";
	X  #endif
	X  /*
	X  ** Program to produce reliable locks for shell scripts.
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char * rcsid = "@(#)$Header: shlock.c,v 1.3 91/01/12 01:04:24 sob Exp $";
	X  #endif
	X  /*
	X  ** Program to produce reliable locks for shell scripts.
	X***************
	X*** 33,38
	X  #include <fcntl.h>			/* Needed on hpux */
	X  #include <sys/file.h>
	X  #include <errno.h>
	X  #include "../common/conf.h"
	X  
	X  #define	LOCK_SET	0
	X
	X--- 33,39 -----
	X  #include <fcntl.h>			/* Needed on hpux */
	X  #include <sys/file.h>
	X  #include <errno.h>
	X+ #ifdef NNTPSRC
	X  #include "../common/conf.h"
	X  #endif
	X  
	X***************
	X*** 34,39
	X  #include <sys/file.h>
	X  #include <errno.h>
	X  #include "../common/conf.h"
	X  
	X  #define	LOCK_SET	0
	X  #define	LOCK_FAIL	1
	X
	X--- 35,41 -----
	X  #include <errno.h>
	X  #ifdef NNTPSRC
	X  #include "../common/conf.h"
	X+ #endif
	X  
	X  #define	LOCK_SET	0
	X  #define	LOCK_FAIL	1
SHAR_EOF
if test 35693 -ne "`wc -c < 'xmit.diff'`"
then
	echo shar: error transmitting "'xmit.diff'" '(should have been 35693 characters)'
fi
fi # end of overwriting check
echo shar: done with directory "'xmit'"
cd ..
if test ! -d 'xfer'
then
	echo shar: creating directory "'xfer'"
	mkdir 'xfer'
fi
echo shar: entering directory "'xfer'"
cd 'xfer'
echo shar: extracting "'xfer.diff'" '(4642 characters)'
if test -f 'xfer.diff'
then
	echo shar: will not over-write existing file "'xfer.diff'"
else
sed 's/^	X//' << \SHAR_EOF > 'xfer.diff'
	X*** README	Wed Jul  4 19:48:10 1990
	X--- ../../nntp/xfer/README	Sat Feb  2 13:32:39 1991
	X***************
	X*** 1,6
	X! This is a "passive" news transmission client.  It queries
	X! other servers for news with NEWNEWS and gets it via the article
	X! command.
	X  
	X  This program still remains largely undocuemented and experimental.
	X  PLEASE READ THE SOURCE for the best information. This will be more
	X
	X--- 1,5 -----
	X! This is a "passive" news transmission client.  It queries other servers
	X! for news with NEWNEWS and gets it via the ARTICLE command.
	X  
	X  This program still remains largely undocumented and experimental.
	X  PLEASE READ THE SOURCE for the best information. This will be more
	X***************
	X*** 2,8
	X  other servers for news with NEWNEWS and gets it via the article
	X  command.
	X  
	X! This program still remains largely undocuemented and experimental.
	X  PLEASE READ THE SOURCE for the best information. This will be more
	X  integrated into the NNTP distribution, but it is a slow process.
	X  
	X
	X--- 1,7 -----
	X  This is a "passive" news transmission client.  It queries other servers
	X  for news with NEWNEWS and gets it via the ARTICLE command.
	X  
	X! This program still remains largely undocumented and experimental.
	X  PLEASE READ THE SOURCE for the best information. This will be more
	X  integrated into the NNTP distribution, but it is a slow process.
	X
	XIndex: nntpxfer.c
	XPrereq:  1.7
	X*** nntpxfer.c	Sat Aug 25 16:59:00 1990
	X--- ../../nntp/xfer/nntpxfer.c	Sat Feb  2 13:31:49 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char * scsid = "@(#)$Header: nntpxfer.c,v 1.7 90/08/25 16:58:52 sob Exp $";
	X  #endif
	X  /*
	X   * nntpxfer
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char * scsid = "@(#)$Header: nntpxfer.c,v 1.9 91/02/02 13:31:37 sob Exp $";
	X  #endif
	X  /*
	X   * nntpxfer
	X***************
	X*** 78,83
	X  #ifndef TIMEOUT
	X  #define TIMEOUT (30*60)
	X  #endif
	X  
	X  char	*malloc();
	X  char	*strcpy();
	X
	X--- 78,86 -----
	X  #ifndef TIMEOUT
	X  #define TIMEOUT (30*60)
	X  #endif
	X+ #ifndef MAX_ARTICLES
	X+ #define MAX_ARTICLES 4096
	X+ #endif
	X  
	X  char	*malloc();
	X  char	*strcpy();
	X***************
	X*** 104,110
	X  	char dtname[128];
	X  	char newsgroups[BUFSIZ];
	X  	char lasttime[16];
	X- 	int connected = 0;		/* 1 = connected */
	X  	int i;
	X  	int omitupdate = 0;		/* 1 = don't update datetime */
	X  	long clock;
	X
	X--- 107,112 -----
	X  	char dtname[128];
	X  	char newsgroups[BUFSIZ];
	X  	char lasttime[16];
	X  	int i;
	X  	int omitupdate = 0;		/* 1 = don't update datetime */
	X  	long clock;
	X***************
	X*** 128,134
	X  	
	X  	if (argc > 2)
	X  		{
	X! 		omitupdate++;
	X  		(void) strcpy(newsgroups, argv[2]);
	X  		(void) strcpy(lastdate, argv[3]);
	X  		(void) strcpy(lasttime, argv[4]);
	X
	X--- 130,136 -----
	X  	
	X  	if (argc > 2)
	X  		{
	X! 		omitupdate=1;
	X  		(void) strcpy(newsgroups, argv[2]);
	X  		(void) strcpy(lastdate, argv[3]);
	X  		(void) strcpy(lasttime, argv[4]);
	X***************
	X*** 303,309
	X  			break;
	X  		if (wewant(buf))
	X  			{
	X! 			if (newart > MAX_ARTICLES)
	X  				{
	X  				omitupdate++;
	X  				continue;
	X
	X--- 305,311 -----
	X  			break;
	X  		if (wewant(buf))
	X  			{
	X! 			if (newart >= MAX_ARTICLES)
	X  				{
	X  				omitupdate=1;
	X  				continue;
	X***************
	X*** 305,311
	X  			{
	X  			if (newart > MAX_ARTICLES)
	X  				{
	X! 				omitupdate++;
	X  				continue;
	X  				}
	X  			artlist[newart] = malloc((unsigned)(strlen(buf)+1));
	X
	X--- 307,313 -----
	X  			{
	X  			if (newart >= MAX_ARTICLES)
	X  				{
	X! 				omitupdate=1;
	X  				continue;
	X  				}
	X  			artlist[newart] = malloc((unsigned)(strlen(buf)+1));
	X***************
	X*** 367,372
	X  artfetch(articleid)
	X  char *articleid;
	X  	{
	X  	int lines = 0;
	X  	char buf[BUFSIZ];
	X  	FILE *inews;
	X
	X--- 369,375 -----
	X  artfetch(articleid)
	X  char *articleid;
	X  	{
	X+ #ifdef DEBUG
	X  	int lines = 0;
	X  #endif
	X  	char buf[BUFSIZ];
	X***************
	X*** 368,373
	X  char *articleid;
	X  	{
	X  	int lines = 0;
	X  	char buf[BUFSIZ];
	X  	FILE *inews;
	X  
	X
	X--- 371,377 -----
	X  	{
	X  #ifdef DEBUG
	X  	int lines = 0;
	X+ #endif
	X  	char buf[BUFSIZ];
	X  	FILE *inews;
	X  
	X***************
	X*** 412,417
	X  		(void) sockread(buf);
	X  		if (buf[0] == '.' && buf[1] == '\0')
	X  			break;
	X  		lines++;
	X  		(void) strcat(buf,"\n");
	X  		(void) fputs(((buf[0] == '.') ? buf + 1 : buf),
	X
	X--- 416,422 -----
	X  		(void) sockread(buf);
	X  		if (buf[0] == '.' && buf[1] == '\0')
	X  			break;
	X+ #ifdef DEBUG
	X  		lines++;
	X  #endif
	X  		(void) strcat(buf,"\n");
	X***************
	X*** 413,418
	X  		if (buf[0] == '.' && buf[1] == '\0')
	X  			break;
	X  		lines++;
	X  		(void) strcat(buf,"\n");
	X  		(void) fputs(((buf[0] == '.') ? buf + 1 : buf),
	X  			   inews);
	X
	X--- 418,424 -----
	X  			break;
	X  #ifdef DEBUG
	X  		lines++;
	X+ #endif
	X  		(void) strcat(buf,"\n");
	X  		(void) fputs(((buf[0] == '.') ? buf + 1 : buf),
	X  			   inews);
SHAR_EOF
if test 4642 -ne "`wc -c < 'xfer.diff'`"
then
	echo shar: error transmitting "'xfer.diff'" '(should have been 4642 characters)'
fi
fi # end of overwriting check
echo shar: done with directory "'xfer'"
cd ..
if test ! -d 'inews'
then
	echo shar: creating directory "'inews'"
	mkdir 'inews'
fi
echo shar: entering directory "'inews'"
cd 'inews'
echo shar: extracting "'inews.diff'" '(2473 characters)'
if test -f 'inews.diff'
then
	echo shar: will not over-write existing file "'inews.diff'"
else
sed 's/^	X//' << \SHAR_EOF > 'inews.diff'
	XIndex: inews.c
	XPrereq: 1.19
	X*** inews.c	Fri Aug 10 22:53:40 1990
	X--- ../../nntp/inews/inews.c	Fri Feb  8 18:29:38 1991
	X***************
	X*** 1,5
	X  #ifndef lint
	X! static char *sccsid = "@(#)$Header: inews.c,v 1.19 90/08/10 22:53:27 sob Exp $";
	X  #endif
	X  
	X  /*
	X
	X--- 1,5 -----
	X  #ifndef lint
	X! static char *sccsid = "@(#)$Header: inews.c,v 1.21 91/02/08 18:29:35 sob Exp $";
	X  #endif
	X  
	X  /*
	X***************
	X*** 41,46
	X  char	host_name[256];
	X  struct	passwd *passwd;
	X  
	X  main(argc, argv)
	X  int	argc;
	X  char	*argv[];
	X
	X--- 41,50 -----
	X  char	host_name[256];
	X  struct	passwd *passwd;
	X  
	X+ #ifdef REALDOMAIN
	X+ #include <netdb.h>
	X+ #endif
	X+ 
	X  main(argc, argv)
	X  int	argc;
	X  char	*argv[];
	X***************
	X*** 91,96
	X  
	X  	uname(host_name);
	X  
	X  	server = getserverbyfile(SERVER_FILE);
	X  	if (server == NULL) {
	X  		fprintf(stderr,
	X
	X--- 95,109 -----
	X  
	X  	uname(host_name);
	X  
	X+ #ifdef REALDOMAIN
	X+ 	{
	X+ 	struct hostent *hp;
	X+ 
	X+ 	if (hp = gethostbyname(host_name))
	X+ 		strcpy(host_name, hp->h_name);
	X+ 	}
	X+ #endif
	X+ 
	X  	server = getserverbyfile(SERVER_FILE);
	X  	if (server == NULL) {
	X  		fprintf(stderr,
	X***************
	X*** 145,151
	X  		cp = s + strlen(s) - 1;
	X  		if (cp >= s && *cp == '\n')
	X  			*cp = '\0';
	X- 
	X  		if (s[0] == '.')    /* Single . is eof, so put in extra one */
	X  			(void) fputc('.', ser_wr_fp);
	X  		if (in_header && strneql(s, "From:", sizeof("From:")-1)) {
	X
	X--- 158,163 -----
	X  		cp = s + strlen(s) - 1;
	X  		if (cp >= s && *cp == '\n')
	X  			*cp = '\0';
	X  		if (s[0] == '.')    /* Single . is eof, so put in extra one */
	X  			(void) fputc('.', ser_wr_fp);
	X  		if (in_header && strneql(s, "From:", sizeof("From:")-1)) {
	X***************
	X*** 176,181
	X  		}
	X  		fprintf(ser_wr_fp, "%s\r\n", s);
	X  	}
	X    
	X  	append_signature();
	X  
	X
	X--- 188,204 -----
	X  		}
	X  		fprintf(ser_wr_fp, "%s\r\n", s);
	X  	}
	X+ 	if (in_header) {
	X+ 		/* Still in header after EOF?  Hmm... */
	X+ 		in_header = 0;
	X+ 		if (!seen_pathline)
	X+ 			gen_frompath(PATH);
	X+ 		if (!seen_fromline)
	X+ 			gen_frompath(FROM);
	X+ 		else
	X+ fprintf(ser_wr_fp, "Originator: %s@%s\r\n", passwd->pw_name, host_name);
	X+ 		fprintf(ser_wr_fp, "\r\n");
	X+ 	}
	X    
	X  	append_signature();
	X  
	X***************
	X*** 310,316
	X  	}
	X  
	X  	if (which == FROM){
	X! #ifdef DOMAIN
	X  #ifdef HIDDENNET
	X  			fprintf(ser_wr_fp, "From: %s@%s (",
	X  				passwd->pw_name,
	X
	X--- 333,339 -----
	X  	}
	X  
	X  	if (which == FROM){
	X! #if defined(DOMAIN) && ! defined(REALDOMAIN)
	X  #ifdef HIDDENNET
	X  			fprintf(ser_wr_fp, "From: %s@%s (",
	X  				passwd->pw_name,
SHAR_EOF
if test 2473 -ne "`wc -c < 'inews.diff'`"
then
	echo shar: error transmitting "'inews.diff'" '(should have been 2473 characters)'
fi
fi # end of overwriting check
echo shar: done with directory "'inews'"
cd ..
#	End of shell archive
exit 0



More information about the Comp.sources.bugs mailing list