nntp@lib.tmc.edu (Stan Barber) (07/10/90)
#! /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: # doc # inews # xfer # xmit # This archive created: Tue Jul 10 00:04:52 1990 export PATH; PATH=/bin:$PATH if test ! -d 'doc' then echo shar: creating directory "'doc'" mkdir 'doc' fi echo shar: entering directory "'doc'" cd 'doc' echo shar: extracting "'doc.diff'" '(6686 characters)' if test -f 'doc.diff' then echo shar: will not over-write existing file "'doc.diff'" else sed 's/^ X//' << \SHAR_EOF > 'doc.diff' XIndex: Makefile X*** Makefile Sun Feb 7 01:36:35 1988 X--- ../../nntp/doc/Makefile Sun Jul 8 03:07:57 1990 X*************** X*** 1,7 X # X # Makefile for manual pages for nntp service X # X! # Created by Stan Barber; Mon Apr 6 13:25:27 CDT 1987 X # X X # change these to suit your system X X--- 1,7 ----- X # X # Makefile for manual pages for nntp service X # X! # $Header: Makefile,v 1.3 90/07/08 03:07:56 sob Exp $ X # X X # change these to suit your system X*************** X*** 12,18 X # from here down should be constant X SHELL = /bin/sh X MACROS = -man X! MANPAGES= nntpd.8c mkgrdates.8c getactive.1 X EXTRACT = ./config.sh X X all: $(MANPAGES) X X--- 12,18 ----- X # from here down should be constant X SHELL = /bin/sh X MACROS = -man X! MANPAGES= nntpd.8c mkgrdates.8c getactive.1 nntpxmit.1 X EXTRACT = ./config.sh X X all: $(MANPAGES) X*************** X*** 27,32 X getactive.1: getactive.dst $(EXTRACT) X $(EXTRACT) getactive.dst getactive.1 X X install: $(MANPAGES) X mv nntpd.8c $(MANDIR)/man8/nntpd.8c X mv mkgrdates.8c $(MANDIR)/man8/mkgrdates.8c X X--- 27,35 ----- X getactive.1: getactive.dst $(EXTRACT) X $(EXTRACT) getactive.dst getactive.1 X X+ nntpxmit.1: nntpxmit.dst $(EXTRACT) X+ $(EXTRACT) nntpxmit.dst nntpxmit.1 X+ X install: $(MANPAGES) X mv nntpd.8c $(MANDIR)/man8/nntpd.8c X mv mkgrdates.8c $(MANDIR)/man8/mkgrdates.8c X*************** X*** 37,42 X $(ROFF) $(MACROS) -P$(PRINTER) nntpd.8c X $(ROFF) $(MACROS) -P$(PRINTER) mkgrdates.8c X $(ROFF) $(MACROS) -P$(PRINTER) getactive.1 X X clean: X -rm -f $(MANPAGES) X X--- 40,46 ----- X $(ROFF) $(MACROS) -P$(PRINTER) nntpd.8c X $(ROFF) $(MACROS) -P$(PRINTER) mkgrdates.8c X $(ROFF) $(MACROS) -P$(PRINTER) getactive.1 X+ $(ROFF) $(MACROS) -P$(PRINTER) nntpxmit.1 X X clean: X -rm -f $(MANPAGES) XIndex: nntpd.dst XPrereq: 1.4 X*** nntpd.dst Fri Mar 9 22:41:01 1990 X--- ../../nntp/doc/nntpd.dst Thu Jul 5 02:20:45 1990 X*************** X*** 1,5 X .\" X! .\" @(#)nntpd.dst 1.4 (Berkeley) 5/11/89 X .\" X .TH NNTPD 8C "12 March 1990" X .UC 4 X X--- 1,5 ----- X .\" X! .\" @(#)$Header: nntpd.dst,v 1.5 90/07/05 02:20:42 sob Exp $ X .\" X .TH NNTPD 8C "4 July 1990" X .UC 4 X*************** X*** 1,7 X .\" X .\" @(#)nntpd.dst 1.4 (Berkeley) 5/11/89 X .\" X! .TH NNTPD 8C "12 March 1990" X .UC 4 X .SH NAME X nntpd \- Network News Transfer Protocol server X X--- 1,7 ----- X .\" X .\" @(#)$Header: nntpd.dst,v 1.5 90/07/05 02:20:42 sob Exp $ X .\" X! .TH NNTPD 8C "4 July 1990" X .UC 4 X .SH NAME X nntpd \- Network News Transfer Protocol server X*************** X*** 35,41 X .sp X This manual page describes X .I nntpd X! from version 1.5.8 of the NNTP package. X .PP X .I Nntpd X can operate either as a stand-alone server, or as a X X--- 35,41 ----- X .sp X This manual page describes X .I nntpd X! from version 1.5.9 of the NNTP package. X .PP X .I Nntpd X can operate either as a stand-alone server, or as a X*************** X*** 40,46 X .I Nntpd X can operate either as a stand-alone server, or as a X server under X! .IR inetd (1). X For stand-alone use, X .I nntpd X must be compiled with the -DALONE option, and is X X--- 40,46 ----- X .I Nntpd X can operate either as a stand-alone server, or as a X server under X! .IR inetd (8C). X For stand-alone use, X .I nntpd X must be compiled with the -DALONE option, and is X*************** X*** 48,54 X .IR /etc/rc.local X script. X Under X! .IR inetd (1), X the appropriate entry must be made in X .IR INETDCONFIG , X and the server must be compiled without the X X--- 48,54 ----- X .IR /etc/rc.local X script. X Under X! .IR inetd (8C), X the appropriate entry must be made in X .IR INETDCONFIG , X and the server must be compiled without the X*************** X*** 53,59 X .IR INETDCONFIG , X and the server must be compiled without the X -DALONE flag. You may need to halt and restart X! .IR inetd (1) X or send it SIGHUP to force it to reread X .IR INETDCONFIG . X .PP X X--- 53,59 ----- X .IR INETDCONFIG , X and the server must be compiled without the X -DALONE flag. You may need to halt and restart X! .IR inetd (8C) X or send it SIGHUP to force it to reread X .IR INETDCONFIG . X .PP X*************** X*** 83,89 X This file consists of three or four fields in the following form: X .sp X .nf X! host/net/*domain.suffix/address read/xfer/no post/no newsgroups X .fi X .sp X where X X--- 83,89 ----- X This file consists of three or four fields in the following form: X .sp X .nf X! host/net/*domain.suffix/address read/xfer/both/no post/no newsgroups X .fi X .sp X where X*************** X*** 100,105 X is a valid internet address in the form of a dotted quad, and X .I ``read'', X .I ``xfer'', X .I ``post'', X and X .I ``no'' X X--- 100,106 ----- X is a valid internet address in the form of a dotted quad, and X .I ``read'', X .I ``xfer'', X+ .I ``both'', X .I ``post'', X and X .I ``no'' X*************** X*** 126,132 X specifies the read access of the host/net in X question. X If the entry is ``read,'' matching X! hosts can both read and transfer news. X If the entry is ``xfer,'' however, X matching hosts can only execute commands X used for transferring news, such as X X--- 127,134 ----- X specifies the read access of the host/net in X question. X If the entry is ``read,'' matching X! hosts can read news. This means that all commands but IHAVE and POST can X! be executed. X If the entry is ``xfer,'' however, X matching hosts can only execute commands X used for transferring news, such as X*************** X*** 131,136 X matching hosts can only execute commands X used for transferring news, such as X NEWNEWS, NEWGROUPS, IHAVE, and ARTICLE with message-id parameters. X The string ``no'' denies read permission X of any kind to a matching host. X .PP X X--- 133,140 ----- X matching hosts can only execute commands X used for transferring news, such as X NEWNEWS, NEWGROUPS, IHAVE, and ARTICLE with message-id parameters. X+ If the entry is ``both,'' ths host can X+ execute all commands but POST. X The string ``no'' denies read permission X of any kind to a matching host. X .PP X*************** X*** 174,180 X The above file allows only transfer of news (i.e., no reading or posting) X by default. X Hosts on the network ``ucb-ether'' would be able to X! read and post news. X The host ``shadow'' would not be allowed X to read or post news. X Hosts that have a domain suffix of ``.stanford.edu'' are denied access X X--- 178,184 ----- X The above file allows only transfer of news (i.e., no reading or posting) X by default. X Hosts on the network ``ucb-ether'' would be able to X! read and post news, however news transfer would not be allowed. X The host ``shadow'' would not be allowed X to read or post news. X Hosts that have a domain suffix of ``.stanford.edu'' are denied access SHAR_EOF if test 6686 -ne "`wc -c < 'doc.diff'`" then echo shar: error transmitting "'doc.diff'" '(should have been 6686 characters)' fi fi # end of overwriting check echo shar: extracting "'nntpxmit.dst'" '(5838 characters)' if test -f 'nntpxmit.dst' then echo shar: will not over-write existing file "'nntpxmit.dst'" else sed 's/^ X//' << \SHAR_EOF > 'nntpxmit.dst' X.TH NNTPXMIT 1 netnews/NNTP X.SH NAME X.I nntpxmit X\- transmit netnews articles to a remote NNTP server X.SH SYNOPSIS X.I nntpxmit X[ X.B \-a X] X[ X.B \-d X] X[ X.B \-s X] X[ X.B \-r X] X[ X.B \-T X] X[ X.B \-F X] X[ X.B \-D X] hostname|hostname:file [...] X.SH DESCRIPTION X.PP X.I Nntpxmit Xoffers netnews articles [RFC850] named in a queue file (a file of Xfilenames) to a remote NNTP (Network News Transfer Protocol, X[RFC977]) server, transmitting those articles that the remote server Xindicates that it does not already have. X.PP XThe command line arguments a processed sequentially, and the flags Xcan thus be toggled several times during one invocation of the Xprogram, by giving the options more than once. XThe options are: X.IP hostname|hostname:file XThe name of the remote host, and the name of the queue file of Xarticles destined for that host. XThe hostname may be an internet address in dotted Xformat (e.g. 10.2.0.78, [10.0.0.78]). XIf the hostname is given without an associated file, it is assumed Xthat the hostname is also the name of the queue file. XIf the separator is "::" instead of ":", it is assumed that the Xremote host speaks DECNET, instead of the default, IP/TCP. X.IP -s XToggles reporting of transfer statistics (how many articles we Xoffered them, how many they accepted, etc). X.br XDefault is X.B ON. X.IP -d XToggles DEBUG output on stderr. XThis can be used to see exactly what the two systems are saying to Xeach other, except for the actual article text. X.br XDefault is X.B OFF. X.IP -r XToggles requeuing of failed articles. XA failed article is an article that we (client) offer them (remote server), Xthey accept, we transmit, and then they report that they "failed" Xor dropped the article (i.e. inews(1) on the remote returned non-zero). XIf we have requeuing set, we save the list of articles that they Xfailed on, and rewrite the queue file with them, so that they get Xreoffered the next time we initiate transmission to them. X.br XDefault is X.B ON. X.IP -a XThis flag says that the next queue file on the command line isn't Xa queue file, but is a single netnews Xarticle to be transmitted to the remote in a single operation. X.IP X.B NOTE: Xthis option causes X.I nntpxmit Xto exit immediately after this transfer is done (regardless of Xwhatever else is on the command line), and to exit with a code Xindicating whether the articles was successfully accepted by the Xremote server (zero exit for success, non-zero for failure). X.PP XThe next options set the underlying transport protocol that X.I nntpxmit Xuses. XThe NNTP specification assumes a TCP-style transport protocol Xunderlies it (i.e. a reliable, flow-controlled, full-duplex byte Xstream). X.I Nntpxmit Xassumes that after doing some magic to get a descriptor, Xit can do read(2) and write(2) calls (and use stdio) to move data Xand check for errors. XBy default, X.I nntpxmit Xwill use IP/TCP (DoD Internet Protocol suite). X.IP -T XSets transport protocol to IP/TCP for all remaining Xtransfers (unless reset by other transport flags). XDefault transport. X.IP -D XSets transport protocol to DECNET for all remaining Xtransfers (unless reset by other transport flags). X.B NOTE: Xusing "::" as the hostname/queue filename separator has the Xsame effect. X.IP -F XThis says that the hostname is a file descriptor number, already Xopen to a remote server (with some reliable protocol underneath) Xthat was passed to X.I nntpxmit Xthrough a fork(2). X.SH "THEORY OF OPERATION" X.PP X.I Nntpxmit Ximplements an interactive ihave/sendme transmission system. XRoughly, the protocol is X.IP 1. Xopen the article, Xfetch out the message-id (required on all netnews articles), Xand send the command IHAVE <message-id> to the remote. X.IP 2. XThe remote will then say either "I've seen it already" or "please send Xthat article to me." X.IP 3. XIf the response was negative, X.I nntpxmit Xloops back to step 1 and offers the next article (until queue file EOF). XOtherwise, X.I nntpxmit Xwill send the article, using SMTP [RFC821] text transmission conventions X(i.e. CRLF line terminators, and dot escaping). X.IP 4. X.I Nntpxmit Xwaits for the remote to say whether the article was successfully Xaccepted or not. XIf the answer is negative and requeuing of failed articles is enabled, X.I nntpxmit Xwill queue this article's filename to be Xwritten back to the queue file at the end of the session with this Xremote. X.PP XIf the communcation link should fail (and X.I nntpxmit Xdetects it through a system call error return), X.I nntpxmit Xwill rewrite the queue file with the article filenames of the Xarticles that it did not transmit (that is, we don't retransmit Xstuff we've already successfully sent and gotten back an positive Xconfirmation that they got it). X.SH FILES X/tmp/nntpxmitXXXXXX X.SH AUTHOR XErik E. Fair X.SH "SEE ALSO" Xinews(1), X.br XRFC977 \- Network News Transfer Protocol (NNTP), X.br XRFC850 \- USENET Article Format standard, X.br XRFC821 \- Simple Mail Transfer Protocol (SMTP), X.SH BUGS X.PP XAlways requeuing failed articles can lead to beating the remote to Xdeath with a list of articles that he can't accept for come structural Xreason. XHow many of these have to pile up before you should declare that Xsomething is seriously wrong with the remote system and stop trying? X.PP XWhile X.B nntpxmit Xwill lock a queue file (your version of UNIX permitting) against Xmultiple invocations of itself, there is no locking with inews(1), Xwhich is what writes the queue files in the first place. XTherefore, never use X.B nntpxmit Xon the queue files that inews(1) writes, because two processes Xwriting into the same file without some kind of cooperation will Xalmost certainly trash the file; move them to some other name that Xinews(1) knows nothing about, so that you won't lose articles to Xraces between inews and nntpxmit. X.PP XAdding inews(1) compatible locking to the C code would be much more Xtrouble than it's worth, and violates the KISS principle besides. SHAR_EOF if test 5838 -ne "`wc -c < 'nntpxmit.dst'`" then echo shar: error transmitting "'nntpxmit.dst'" '(should have been 5838 characters)' fi fi # end of overwriting check echo shar: done with directory "'doc'" 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'" '(12508 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: Makefile X*** Makefile Sun Mar 11 16:55:56 1990 X--- ../../nntp/inews/Makefile Sun Jul 8 02:46:58 1990 X*************** X*** 2,9 X # Makefile for pseudo-inews X # X X! SRCS = inews.c uname.c ../common/clientlib.c ../common/version.c X! OBJS = inews.o uname.o ../common/clientlib.o ../common/version.o X HFILES = ../common/nntp.h ../common/conf.h X X CFLAGS = -O X X--- 2,9 ----- X # Makefile for pseudo-inews X # X X! SRCS = inews.c uname.c postauth.c ../common/clientlib.c ../common/version.c ../server/strcasecmp.c X! OBJS = inews.o uname.o postauth.o ../common/clientlib.o ../common/version.o ../server/strcasecmp.o X HFILES = ../common/nntp.h ../common/conf.h X X CFLAGS = -O X*************** X*** 15,21 X inews: $(OBJS) $(HFILES) X $(CC) $(CFLAGS) $(OBJS) -o inews $(LIBS) X X! uname.o: ../common/conf.h X X ../common/clientlib.o: X ${CC} ${CFLAGS} -DNNTPSRC -c ../common/clientlib.c X X--- 15,21 ----- X inews: $(OBJS) $(HFILES) X $(CC) $(CFLAGS) $(OBJS) -o inews $(LIBS) X X! uname.o: uname.c ../common/conf.h X X inews.o: inews.c ../common/conf.h X X*************** X*** 17,22 X X uname.o: ../common/conf.h X X ../common/clientlib.o: X ${CC} ${CFLAGS} -DNNTPSRC -c ../common/clientlib.c X mv clientlib.o ../common/clientlib.o X X--- 17,24 ----- X X uname.o: uname.c ../common/conf.h X X+ inews.o: inews.c ../common/conf.h X+ X ../common/clientlib.o: X ${CC} ${CFLAGS} -DNNTPSRC -c ../common/clientlib.c X mv clientlib.o ../common/clientlib.o X*************** X*** 24,29 X ../common/version.o: X ${CC} ${CFLAGS} -c ../common/version.c X mv version.o ../common/version.o X X install: inews X cp inews ${DESTDIR}/inews X X--- 26,35 ----- X ../common/version.o: X ${CC} ${CFLAGS} -c ../common/version.c X mv version.o ../common/version.o X+ X+ ../server/strcasecmp.o: X+ ${CC} ${CFLAGS} -c ../server/strcasecmp.c X+ mv strcasecmp.o ../server/strcasecmp.o X X install: inews X cp inews ${DESTDIR}/inews XIndex: inews.c XPrereq: 1.16 X*** inews.c Sun Jan 14 13:41:31 1990 X--- ../../nntp/inews/inews.c Sun Jul 8 01:00:01 1990 X*************** X*** 1,5 X #ifndef lint X! static char *sccsid = "@(#)inews.c 1.16 (Berkeley) 8/27/89"; X #endif X X /* X X--- 1,5 ----- X #ifndef lint X! static char *sccsid = "@(#)$Header: inews.c,v 1.18 90/07/08 00:59:48 sob Exp $"; X #endif X X /* X*************** X*** 25,30 X #else not USG X #include <strings.h> X #endif not USG X X #define MAX_SIGNATURE 4 X X X--- 25,33 ----- X #else not USG X #include <strings.h> X #endif not USG X+ /* for gen_frompath() */ X+ #define FROM 1 X+ #define PATH 2 X X #define MAX_SIGNATURE 4 X X*************** X*** 29,34 X #define MAX_SIGNATURE 4 X X extern FILE *ser_wr_fp; X X char host_name[256]; X X X--- 32,38 ----- X #define MAX_SIGNATURE 4 X X extern FILE *ser_wr_fp; X+ extern char *getlogin(); X X #ifdef AUTH X FILE *passfile; X*************** X*** 30,35 X X extern FILE *ser_wr_fp; X X char host_name[256]; X X main(argc, argv) X X--- 34,43 ----- X extern FILE *ser_wr_fp; X extern char *getlogin(); X X+ #ifdef AUTH X+ FILE *passfile; X+ #endif AUTH X+ X char host_name[256]; X struct passwd *passwd; X X*************** X*** 31,36 X extern FILE *ser_wr_fp; X X char host_name[256]; X X main(argc, argv) X int argc; X X--- 39,45 ----- X #endif AUTH X X char host_name[256]; X+ struct passwd *passwd; X X main(argc, argv) X int argc; X*************** X*** 37,43 X char *argv[]; X { X char line[NNTP_STRLEN], s[NNTP_STRLEN]; X! int seen_fromline, in_header, seen_header; X int response; X char *server; X char *getserverbyfile(); X X--- 46,52 ----- X char *argv[]; X { X char line[NNTP_STRLEN], s[NNTP_STRLEN]; X! int seen_fromline, in_header, seen_header, seen_pathline; X int response; X char *server; X char *getserverbyfile(); X*************** X*** 42,47 X char *server; X char *getserverbyfile(); X register char *cp; X X ++argv; X while (argc > 1) X X--- 51,57 ----- X char *server; X char *getserverbyfile(); X register char *cp; X+ char *username; X X /* find out who they REALLY are */ X username = getlogin(); X*************** X*** 43,48 X char *getserverbyfile(); X register char *cp; X X ++argv; X while (argc > 1) X if (*argv[0] == '-') { X X--- 53,79 ----- X register char *cp; X char *username; X X+ /* find out who they REALLY are */ X+ username = getlogin(); X+ if (username) X+ passwd = getpwnam(username); X+ else X+ { X+ passwd = getpwuid(getuid()); X+ username = passwd->pw_name; X+ } X+ X+ #ifdef AUTH X+ /* X+ * we have to be setuid to news to open the file, but not afterwards X+ */ X+ passfile = fopen(PASSFILE, "r"); X+ #ifndef USG /* this call does not exist on USG */ X+ seteuid(getuid()); X+ setegid(getgid()); X+ #endif X+ #endif AUTH X+ X ++argv; X while (argc > 1) X if (*argv[0] == '-') { X*************** X*** 83,88 X exit(1); X } X X put_server("POST"); X (void) get_server(line, sizeof(line)); X if (*line != CHAR_CONT) { X X--- 114,120 ----- X exit(1); X } X X+ again: X put_server("POST"); X (void) get_server(line, sizeof(line)); X if (*line != CHAR_CONT) { X*************** X*** 91,100 X fprintf(stderr, X "Sorry, you can't post from this machine.\n"); X exit(1); X- } else { X- close_server(); X- fprintf(stderr, "Remote error: %s\n", line); X- exit(1); X } X } X X X--- 123,128 ----- X fprintf(stderr, X "Sorry, you can't post from this machine.\n"); X exit(1); X } X #ifdef AUTH X if (atoi(line) == ERR_NOAUTH) { X*************** X*** 96,101 X fprintf(stderr, "Remote error: %s\n", line); X exit(1); X } X } X X in_header = 1; X X--- 124,138 ----- X "Sorry, you can't post from this machine.\n"); X exit(1); X } X+ #ifdef AUTH X+ if (atoi(line) == ERR_NOAUTH) { X+ postauth(server); X+ goto again; X+ } X+ #endif X+ close_server(); X+ fprintf(stderr, "Remote error: %s\n", line); X+ exit(1); X } X X in_header = 1; X*************** X*** 109,114 X seen_header = 1; X seen_fromline = 1; X } X if (in_header && s[0] == '\0') { X if (seen_header) { X in_header = 0; X X--- 146,155 ----- X seen_header = 1; X seen_fromline = 1; X } X+ if (in_header && strneql(s, "Path:", sizeof("Path:")-1)) { X+ seen_header = 1; X+ seen_pathline = 1; X+ } X if (in_header && s[0] == '\0') { X if (seen_header) { X in_header = 0; X*************** X*** 112,119 X if (in_header && s[0] == '\0') { X if (seen_header) { X in_header = 0; X! if (!seen_fromline) X! gen_frompath(); X } else { X continue; X } X X--- 153,164 ----- X if (in_header && s[0] == '\0') { X if (seen_header) { 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 } else { X continue; X } X*************** X*** 125,131 X } X fprintf(ser_wr_fp, "%s\r\n", s); X } X! X append_signature(); X X fprintf(ser_wr_fp, ".\r\n"); X X--- 170,176 ----- X } X fprintf(ser_wr_fp, "%s\r\n", s); X } X! X append_signature(); X X fprintf(ser_wr_fp, ".\r\n"); X*************** X*** 205,211 X fprintf(stderr,"sigfile opened OK\n"); X #endif X X! fprintf(ser_wr_fp, "--\r\n"); X while (fgets(line, sizeof (line), fp)) { X count++; X if (count > MAX_SIGNATURE) { X X--- 250,256 ----- X fprintf(stderr,"sigfile opened OK\n"); X #endif X X! fprintf(ser_wr_fp, "-- \r\n"); X while (fgets(line, sizeof (line), fp)) { X count++; X if (count > MAX_SIGNATURE) { X*************** X*** 238,244 X * a From: line in it. X */ X X! gen_frompath() X { X char *full_name; X char *cp; X X--- 283,290 ----- X * a From: line in it. X */ X X! gen_frompath(which) X! int which; X { X char *full_name; X char *cp; X*************** X*** 254,259 X *cp = '\0'; X } X X #ifdef DOMAIN X #ifdef HIDDENNET X fprintf(ser_wr_fp, "From: %s@%s (", X X--- 300,306 ----- X *cp = '\0'; X } X X+ if (which == FROM){ X #ifdef DOMAIN X #ifdef HIDDENNET X fprintf(ser_wr_fp, "From: %s@%s (", X*************** X*** 256,264 X X #ifdef DOMAIN X #ifdef HIDDENNET X! fprintf(ser_wr_fp, "From: %s@%s (", X! passwd->pw_name, X! DOMAIN); X #else /* HIDDENNET */ X X /* A heuristic to see if we should tack on a domain */ X X--- 303,311 ----- X if (which == FROM){ X #ifdef DOMAIN X #ifdef HIDDENNET X! fprintf(ser_wr_fp, "From: %s@%s (", X! passwd->pw_name, X! DOMAIN); X #else /* HIDDENNET */ X X /* A heuristic to see if we should tack on a domain */ X*************** X*** 261,267 X DOMAIN); X #else /* HIDDENNET */ X X! /* A heuristic to see if we should tack on a domain */ X X cp = index(host_name, '.'); X if (cp) X X--- 308,314 ----- X DOMAIN); X #else /* HIDDENNET */ X X! /* A heuristic to see if we should tack on a domain */ X X cp = index(host_name, '.'); X if (cp) X*************** X*** 263,270 X X /* A heuristic to see if we should tack on a domain */ X X! cp = index(host_name, '.'); X! if (cp) X fprintf(ser_wr_fp, "From: %s@%s (", X passwd->pw_name, X host_name); X X--- 310,327 ----- X X /* A heuristic to see if we should tack on a domain */ X X! cp = index(host_name, '.'); X! if (cp) X! fprintf(ser_wr_fp, "From: %s@%s (", X! passwd->pw_name, X! host_name); X! else X! fprintf(ser_wr_fp, "From: %s@%s.%s (", X! passwd->pw_name, X! host_name, X! DOMAIN); X! #endif /* HIDDENNET */ X! #else X fprintf(ser_wr_fp, "From: %s@%s (", X passwd->pw_name, X host_name); X*************** X*** 268,283 X fprintf(ser_wr_fp, "From: %s@%s (", X passwd->pw_name, X host_name); X- else X- fprintf(ser_wr_fp, "From: %s@%s.%s (", X- passwd->pw_name, X- host_name, X- DOMAIN); X- #endif /* HIDDENNET */ X- #else X- fprintf(ser_wr_fp, "From: %s@%s (", X- passwd->pw_name, X- host_name); X #endif X X for (cp = full_name; *cp != '\0'; ++cp) X X--- 325,330 ----- X fprintf(ser_wr_fp, "From: %s@%s (", X passwd->pw_name, X host_name); X #endif X X for (cp = full_name; *cp != '\0'; ++cp) X*************** X*** 280,295 X host_name); X #endif X X! for (cp = full_name; *cp != '\0'; ++cp) X! if (*cp != '&') X! putc(*cp, ser_wr_fp); X! else { /* Stupid & hack. God damn it. */ X! putc(toupper(passwd->pw_name[0]), ser_wr_fp); X! fprintf(ser_wr_fp, passwd->pw_name+1); X! } X! X! fprintf(ser_wr_fp, ")\r\n"); X! X #ifdef HIDDENNET X /* Only the login name - nntp server will add uucp name */ X fprintf(ser_wr_fp, "Path: %s\r\n", passwd->pw_name); X X--- 327,342 ----- X host_name); X #endif X X! for (cp = full_name; *cp != '\0'; ++cp) X! if (*cp != '&') X! putc(*cp, ser_wr_fp); X! else { /* Stupid & hack. God damn it. */ X! putc(toupper(passwd->pw_name[0]), ser_wr_fp); X! fprintf(ser_wr_fp, passwd->pw_name+1); X! } X! fprintf(ser_wr_fp, ")\r\n"); X! } X! if (which == PATH){ X #ifdef HIDDENNET X /* Only the login name - nntp server will add uucp name */ X fprintf(ser_wr_fp, "Path: %s\r\n", passwd->pw_name); X*************** X*** 292,298 X X #ifdef HIDDENNET X /* Only the login name - nntp server will add uucp name */ X! fprintf(ser_wr_fp, "Path: %s\r\n", passwd->pw_name); X #else /* HIDDENNET */ X fprintf(ser_wr_fp, "Path: %s!%s\r\n", host_name, passwd->pw_name); X #endif /* HIDDENNET */ X X--- 339,345 ----- X if (which == PATH){ X #ifdef HIDDENNET X /* Only the login name - nntp server will add uucp name */ X! fprintf(ser_wr_fp, "Path: %s\r\n", passwd->pw_name); X #else /* HIDDENNET */ X fprintf(ser_wr_fp, "Path: %s!%s\r\n", host_name, X passwd->pw_name); X*************** X*** 294,300 X /* Only the login name - nntp server will add uucp name */ X fprintf(ser_wr_fp, "Path: %s\r\n", passwd->pw_name); X #else /* HIDDENNET */ X! fprintf(ser_wr_fp, "Path: %s!%s\r\n", host_name, passwd->pw_name); X #endif /* HIDDENNET */ X } X X X--- 341,348 ----- X /* Only the login name - nntp server will add uucp name */ X fprintf(ser_wr_fp, "Path: %s\r\n", passwd->pw_name); X #else /* HIDDENNET */ X! fprintf(ser_wr_fp, "Path: %s!%s\r\n", host_name, X! passwd->pw_name); X #endif /* HIDDENNET */ X } X } X*************** X*** 296,301 X #else /* HIDDENNET */ X fprintf(ser_wr_fp, "Path: %s!%s\r\n", host_name, passwd->pw_name); X #endif /* HIDDENNET */ X } X X X X--- 344,350 ----- X fprintf(ser_wr_fp, "Path: %s!%s\r\n", host_name, X passwd->pw_name); X #endif /* HIDDENNET */ X+ } X } X X SHAR_EOF if test 12508 -ne "`wc -c < 'inews.diff'`" then echo shar: error transmitting "'inews.diff'" '(should have been 12508 characters)' fi fi # end of overwriting check echo shar: done with directory "'inews'" 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'" '(1652 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' XIndex: nntpxfer.c XPrereq: 1.5 X*** nntpxfer.c Tue Jan 16 01:18:59 1990 X--- ../../nntp/xfer/nntpxfer.c Thu Jul 5 02:04:38 1990 X*************** X*** 1,5 X #ifndef lint X! static char * scsid = "@(#)$Header: nntpxfer.c,v 1.5 90/01/16 01:18:32 sob Exp $"; X #endif X /* X * nntpxfer X X--- 1,5 ----- X #ifndef lint X! static char * scsid = "@(#)$Header: nntpxfer.c,v 1.6 90/07/05 02:04:28 sob Exp $"; X #endif X /* X * nntpxfer X*************** X*** 60,67 X #endif X X #ifdef DBM X! #include <dbm.h> X! #endif X X #ifdef NDBM X #include <ndbm.h> X X--- 60,70 ----- X #endif X X #ifdef DBM X! # undef NULL X! # include <dbm.h> X! # undef NULL X! # define NULL 0 X! #endif DBM X X #ifdef NDBM X #include <ndbm.h> X*************** X*** 435,443 X if (setjmp(SFGstack)) { X (void) alarm(0); /* reset alarm clock */ X (void) signal(SIGALRM, SIG_DFL); X- #ifdef apollo X- rd_fp->_flag |= _SIERR; X- #else X rd_fp->_flag |= _IOERR; /* set stdio error */ X #endif X #ifndef ETIMEDOUT X X--- 438,443 ----- X if (setjmp(SFGstack)) { X (void) alarm(0); /* reset alarm clock */ X (void) signal(SIGALRM, SIG_DFL); X rd_fp->_flag |= _IOERR; /* set stdio error */ X #ifndef ETIMEDOUT X errno = EPIPE; /* USG doesn't have ETIMEDOUT */ X*************** X*** 439,445 X rd_fp->_flag |= _SIERR; X #else X rd_fp->_flag |= _IOERR; /* set stdio error */ X- #endif X #ifndef ETIMEDOUT X errno = EPIPE; /* USG doesn't have ETIMEDOUT */ X #else X X--- 439,444 ----- X (void) alarm(0); /* reset alarm clock */ X (void) signal(SIGALRM, SIG_DFL); X rd_fp->_flag |= _IOERR; /* set stdio error */ X #ifndef ETIMEDOUT X errno = EPIPE; /* USG doesn't have ETIMEDOUT */ X #else SHAR_EOF if test 1652 -ne "`wc -c < 'xfer.diff'`" then echo shar: error transmitting "'xfer.diff'" '(should have been 1652 characters)' fi fi # end of overwriting check echo shar: done with directory "'xfer'" cd .. if test ! -d 'xmit' then echo shar: creating directory "'xmit'" mkdir 'xmit' fi echo shar: entering directory "'xmit'" cd 'xmit' echo shar: extracting "'xmitauth.c'" '(1269 characters)' if test -f 'xmitauth.c' then echo shar: will not over-write existing file "'xmitauth.c'" else sed 's/^ X//' << \SHAR_EOF > 'xmitauth.c' X#ifndef lint Xstatic char *rcsid = "$Header: xmitauth.c,v 1.2 90/07/08 01:03:23 sob Exp $"; X#endif X#include <stdio.h> X#include "../common/conf.h" X#include "../common/nntp.h" X#include "nntpxmit.h" X X#ifdef AUTH X Xextern char Debug; Xextern int converse(); X XFILE *sys; X Xxmitauth(host) Xchar *host; X { X char remote[64], user[16], pass[16]; X char buf[1024]; X int i; X char savedebug; X X sys = fopen(PASSFILE, "r"); X if (sys == NULL) X { X exit(1); X } X X while(fgets(buf, sizeof(buf), sys)) X { X if (buf[0] == '#') X continue; X X i = sscanf(buf,"%s %s %s", remote, user, pass); X /* malformed entry? */ X if (i != 3) X { X log(L_NOTICE,"malformed entry in nntp.sys"); X continue; X } X X /* right host? */ X if (!strcasecmp(remote,host)) X break; X } X if (feof(sys)) X { X sprintf(buf,"host %s authinfo not in nntp.sys", host); X log(L_NOTICE, buf); X exit(1); X } X X sprintf(buf,"authinfo user %s", user); X if (converse(buf, sizeof(buf)) != NEED_AUTHDATA) X { X log(L_NOTICE, buf); X exit(1); X } X X /* don't display the password even if debug is on */ X savedebug = Debug; X Debug = FALSE; X X sprintf(buf,"authinfo pass %s", pass); X if (converse(buf, sizeof(buf)) != OK_AUTH) X { X log(L_NOTICE, buf); X exit(1); X } X X Debug = savedebug; X X fclose(sys); X } X X#endif AUTH X SHAR_EOF if test 1269 -ne "`wc -c < 'xmitauth.c'`" then echo shar: error transmitting "'xmitauth.c'" '(should have been 1269 characters)' fi fi # end of overwriting check echo shar: extracting "'xmit.diff'" '(2822 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 Mon Jan 15 02:03:11 1990 X--- ../../nntp/xmit/Makefile Sun Jul 8 01:10:57 1990 X*************** X*** 2,8 X # Makefile for nntpxmit X # X X! SRVRSRC = nntpxmit.c remote.c llist.c get_tcp_conn.c ../server/fakesyslog.c X X SRVROBJ = nntpxmit.o remote.o llist.o get_tcp_conn.o fakesyslog.o X X X--- 2,8 ----- X # Makefile for nntpxmit X # X X! SRVRSRC = nntpxmit.c remote.c llist.c get_tcp_conn.c xmitauth.c ../server/fakesyslog.c ../server/strcasecmp.c X X SRVROBJ = nntpxmit.o remote.o llist.o get_tcp_conn.o xmitauth.o fakesyslog.o strcasecmp.o X X*************** X*** 4,10 X X SRVRSRC = nntpxmit.c remote.c llist.c get_tcp_conn.c ../server/fakesyslog.c X X! SRVROBJ = nntpxmit.o remote.o llist.o get_tcp_conn.o fakesyslog.o X X SRVRINC = ../common/conf.h ../common/nntp.h nntpxmit.h get_tcp_conn.h \ X llist.h sysexits.h ../common/nntp.h ../server/fakesyslog.h X X--- 4,10 ----- X X SRVRSRC = nntpxmit.c remote.c llist.c get_tcp_conn.c xmitauth.c ../server/fakesyslog.c ../server/strcasecmp.c X X! SRVROBJ = nntpxmit.o remote.o llist.o get_tcp_conn.o xmitauth.o fakesyslog.o strcasecmp.o X X SRVRINC = ../common/conf.h ../common/nntp.h nntpxmit.h get_tcp_conn.h \ X llist.h sysexits.h ../common/nntp.h ../server/fakesyslog.h X*************** X*** 53,58 X X fakesyslog.o: ../server/fakesyslog.c ../server/fakesyslog.h X ${CC} ${CFLAGS} -c ../server/fakesyslog.c X X nntpxmit.o: nntpxmit.c nntpxmit.h llist.h ../common/conf.h X X X--- 53,61 ----- X X fakesyslog.o: ../server/fakesyslog.c ../server/fakesyslog.h X ${CC} ${CFLAGS} -c ../server/fakesyslog.c X+ X+ strcasecmp.o: ../server/strcasecmp.c X+ ${CC} ${CFLAGS} -c ../server/strcasecmp.c X X nntpxmit.o: nntpxmit.c nntpxmit.h llist.h ../common/conf.h X XIndex: nntpxmit.c XPrereq: 1.2 X*** nntpxmit.c Mon Jan 15 02:24:09 1990 X--- ../../nntp/xmit/nntpxmit.c Sun Jul 8 01:18:10 1990 X*************** X*** 1,5 X #ifndef lint X! static char * rcsid = "@(#)$Header: nntpxmit.c,v 1.2 90/01/15 01:36:48 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.3 90/07/08 01:17:56 sob Exp $"; X #endif X /* nntpxmit - transmit netnews articles across the internet with nntp X ** X*************** X*** 745,750 X return(ERR_GOTIT); X } X X sprintf(buf, "IHAVE %s", id); X Stats.offered++; X X X--- 745,751 ----- X return(ERR_GOTIT); X } X X+ again: X sprintf(buf, "IHAVE %s", id); X Stats.offered++; X X*************** X*** 756,761 X case ERR_GOTIT: X Stats.rejected++; X return(code); X default: X return(code); X } X X--- 757,767 ----- X case ERR_GOTIT: X Stats.rejected++; X return(code); X+ #ifdef AUTH X+ case ERR_NOAUTH: X+ xmitauth(Host); X+ goto again; X+ #endif X default: X return(code); X } SHAR_EOF if test 2822 -ne "`wc -c < 'xmit.diff'`" then echo shar: error transmitting "'xmit.diff'" '(should have been 2822 characters)' fi fi # end of overwriting check echo shar: done with directory "'xmit'" cd .. # End of shell archive exit 0