wls@astrovax.UUCP (11/22/83)
I was about to post this anyway but it is convenient to be able to post
it as a followup to something.
I have made some modifications to readnews and vnews at our site to use a
routing data base rather than the news arrival path to constuct a path
for the r(eply) command. The diffs to the files readr.c, visual.c, and
Makefile which are needed to implement this change follow this introduction.
As implemented here, this requires the dbm (data base management) subroutines
and a pairs of files /usr/lib/uucp/alpath.dir and /usr/lib/uucp/alpath.pag ,
such as that constructed by these dbm routines. The format of the data
stored in these files is: using the name of a site as a key, stored under
the key is a string of the form site1!site2!...!keysite!%s , where the %s
could be replaced by an account name located at that site. Another possible
string is site1!site2!...!siten!%s@keysite. The dbm pair of files of this
form is output by the version of pathalias that we have.
In use, these patches look along the arrival path and substitute a
replacement path for the first site that they find in the data base. Thus
a new site that has not yet made it into the data base will be handled
properly. The original arrival path is still placed in the mail header for
reference in a line headed by "News-path: " (sorry Mark, I wasn't able to
check if this is a legal thing to do Arpa-wise. It can be changed to some
other name if it matters). The "To: " line can still be edited if one
notices some obvious goof, i.e. some hop which one knows is bad. (Suggestion:
if this occurs, tell your site manager so he can update the data base. If
you are site manager, update your data base.)
Hopefully, this change can reduce a lot of silly paths. Even though I was
aware of the need to edit my paths I would sometimes forget and let loose a
reply bouncing all over the net.
Note: there are many bug fixes and such in the "original" versions of
the files "diff" below. Therefore the "original" line numbers have only
vaguely the values they might have in your own versions of these files.
indicative. If it is desired to place the routing information is some other
location than /usr/lib/uucp/alpath* , redefine the variable NETPATHS in the
Makefile (sorry, I gave up on localize.sh a fair while ago).
--
Bill Sebok Princeton Univ. Astrophysics
{allegra,akgua,burl,cbosgd,decvax,ihnp4,kpno,princeton}!astrovax!wls
------------------------------------------------------------------------
Diff for readr.c
*** readr.c.BAK Mon Nov 14 16:39:04 1983
--- readr.c Mon Nov 14 22:04:47 1983
***************
*** 5,12
static char *SccsId = "@(#)readr.c 2.26 6/24/83";
#include "rparams.h"
#define FAST
static char lbuf[BUFLEN*2];
#define saveart oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hbufcp(&hbuf1, &h);ongsize = pngsize
--- 5,15 -----
static char *SccsId = "@(#)readr.c 2.26 6/24/83";
#include "rparams.h"
#define FAST
+ #ifdef NETPATHS
+ #include <dbm.h>
+ #endif NETPATHS
static char lbuf[BUFLEN*2];
#define saveart oobit = bit;strcpy(ofilename1, filename);strcpy(ogroupdir, groupdir);hbufcp(&hbuf1, &h);ongsize = pngsize
***************
*** 613,620
char *replyname();
char subj[100];
char folbuf[BUFLEN];
extern char MAILPARSER[];
hptr = &h;
while (*bptr && index("d-", *bptr)) {
switch (*bptr) {
--- 616,632 -----
char *replyname();
char subj[100];
char folbuf[BUFLEN];
extern char MAILPARSER[];
+ #ifdef NETPATHS
+ /* Stuff for finding path in data base */
+ static int dbmopen = 0;
+ static char newspaths[] = NETPATHS;
+ datum key, result;
+ register char *p1, *p2;
+ char sitename[100];
+ /* End Stuff for finding path in data base */
+ #endif NETPATHS
hptr = &h;
while (*bptr && index("d-", *bptr)) {
switch (*bptr) {
***************
*** 641,649
}
*rcbuf = '\0';
*curberk = '\0';
! pathptr = replyname(hptr);;
ptr = pathptr - 1;
i = 0;
for (ptr1 = address, ptr2 = pathptr; *ptr2; ptr1++, ptr2++) {
if (index("\"\\$", *ptr2))
--- 653,688 -----
}
*rcbuf = '\0';
*curberk = '\0';
! pathptr = replyname(hptr);
! #ifdef NETPATHS
! /* Use data Base to Find a reply a Path to a site */
! /* Nov 13, 1983 W. Sebok */
! if (dbmopen==0)
! dbmopen = (dbminit(newspaths)==0) ? 1 : -1 ;
!
! result.dptr = NULL;
! if (dbmopen>0) {
! for(p1=pathptr; (p2 = index(p1,'!'))!=NULL; p1=p2+1);
! if (pathptr!=p1) {
! key.dptr = sitename;
! p1--;
! do {
! for (p2=p1; (p1!=pathptr) && (*--p1!='!'); );
! key.dsize = p2 - p1 ;
! strncpy(sitename, p1+1, key.dsize);
! sitename[key.dsize-1] = '\0';
! result = fetch(key);
! } while ( (p1!=pathptr) && result.dptr==NULL);
! }
! }
! if (result.dptr != NULL) {
! sprintf(sitename, result.dptr, p2+1);
! p1 = pathptr;
! pathptr = sitename;
! }
! #endif NETPATHS
ptr = pathptr - 1;
i = 0;
for (ptr1 = address, ptr2 = pathptr; *ptr2; ptr1++, ptr2++) {
if (index("\"\\$", *ptr2))
***************
*** 687,694
tfp = fopen(tf, "w");
fprintf(tfp, "To: %s\n", pathptr);
fprintf(tfp, "Subject: %s\n", subj);
fprintf(tfp, "References: %s\n\n", folbuf);
fclose(tfp);
sprintf(edcmdbuf, "%s %s", ed, tf);
--- 726,737 -----
tfp = fopen(tf, "w");
fprintf(tfp, "To: %s\n", pathptr);
fprintf(tfp, "Subject: %s\n", subj);
+ #ifdef NETPATHS
+ if (result.dptr != NULL)
+ fprintf(tfp, "News-path: %s\n", p1);
+ #endif NETPATHS
fprintf(tfp, "References: %s\n\n", folbuf);
fclose(tfp);
sprintf(edcmdbuf, "%s %s", ed, tf);
------------------------------------------------------------
Diffs for visual.c of vnews
*** visual.c.BAK Sun Nov 13 22:43:46 1983
--- visual.c Mon Nov 14 22:05:38 1983
***************
*** 49,56
#include "dir.h"
#ifdef MYDB
#include "db.h"
#endif
#define ARTWLEN (ROWS-2)/* number of lines used to display article */
#ifdef STATTOP
--- 49,59 -----
#include "dir.h"
#ifdef MYDB
#include "db.h"
#endif
+ #ifdef NETPATHS
+ #include <dbm.h> /* WLS Nov 13,1983 */
+ #endif NETPATHS
#define ARTWLEN (ROWS-2)/* number of lines used to display article */
#ifdef STATTOP
***************
*** 866,873
char subj[132];
char *p;
char *replyname();
strcpy(tf, tft);
mktemp(tf);
if ((tfp = fopen(tf, "w")) == NULL) {
msg("Can't create %s", tf) ;
--- 869,886 -----
char subj[132];
char *p;
char *replyname();
+ #ifdef NETPATHS
+ /* Stuff for finding path in data base */
+ static int dbmopen = 0;
+ static char newspaths[] = NETPATHS;
+ datum key, result;
+ register char *p1, *p2;
+ char sitename[100];
+ /* End Stuff for finding path in data base */
+ #endif NETPATHS
+
strcpy(tf, tft);
mktemp(tf);
if ((tfp = fopen(tf, "w")) == NULL) {
msg("Can't create %s", tf) ;
***************
*** 894,905
p = h.sender;
else
#endif
p = replyname(&h);
! fprintf(tfp, "To: %s\n", p);
! fprintf(tfp, "Subject: %s\n", subj);
! if (followup != 2)
! fprintf(tfp, "In-reply-to: your article %s\n", h.ident);
arg[1] = REPLYPROG;
arg[4] = p;
} else {
p = h.nbuf;
--- 907,954 -----
p = h.sender;
else
#endif
p = replyname(&h);
!
! #ifdef NETPATHS
! /* Use data Base to Find a reply a Path to a site */
! /* Nov 13, 1983 W. Sebok */
! if (dbmopen==0)
! dbmopen = (dbminit(newspaths)==0) ? 1 : -1 ;
!
! result.dptr = NULL;
! if (dbmopen>0) {
! for(p1=p; (p2 = index(p1,'!'))!=NULL; p1=p2+1);
! if (p!=p1) {
! key.dptr = sitename;
! p1--;
! do {
! for (p2=p1; (p1!=p) && (*--p1!='!'); );
! key.dsize = p2 - p1 ;
! strncpy(sitename, p1+1, key.dsize);
! sitename[key.dsize-1] = '\0';
! result = fetch(key);
! } while ( (p1!=p) && result.dptr==NULL);
! }
! }
! if (result.dptr != NULL) {
! fprintf(tfp, "To: ");
! fprintf(tfp, result.dptr, p2+1);
! fprintf(tfp, "\nSubject: %s\n", subj);
! if (followup != 2)
! fprintf(tfp, "In-reply-to: your article %s\n",
! h.ident);
! fprintf(tfp, "News-path: %s\n", p);
! } else
! #endif NETPATHS
! {
! fprintf(tfp, "To: %s\n", p);
! fprintf(tfp, "Subject: %s\n", subj);
! if (followup != 2)
! fprintf(tfp, "In-reply-to: your article %s\n",
! h.ident);
! }
! /* End Stuff for finding path in data base */
arg[1] = REPLYPROG;
arg[4] = p;
} else {
p = h.nbuf;
----------------------------------------------
diff for Makefile
*** Makefile.BAK Mon Nov 21 23:48:59 1983
--- Makefile Mon Nov 14 22:30:08 1983
***************
*** 3,10
# definitions
SPOOLDIR = /usr/spool/news
LIBDIR = /usr/lib/news
BINDIR = /usr/bin
DEBUG = # -DDEBUG # -pg
CFLAGS = ${DEBUG} -O -DDBM
LFLAGS = # -pg
NEWSUSR = news
--- 3,11 -----
# definitions
SPOOLDIR = /usr/spool/news
LIBDIR = /usr/lib/news
BINDIR = /usr/bin
+ NETPATHS = /usr/lib/uucp/alpath
DEBUG = # -DDEBUG # -pg
CFLAGS = ${DEBUG} -O -DDBM
LFLAGS = # -pg
NEWSUSR = news
***************
*** 70,78
inews: Makefile $(IOBJECTS)
$(CC) $(LFLAGS) $(IOBJECTS) -o inews -ldbm
readnews: Makefile $(ROBJECTS)
! $(CC) $(LFLAGS) $(ROBJECTS) -o readnews
funcs.o: funcs.c params.h defs.h
$(CC) $(CFLAGS) -c funcs.c
--- 71,79 -----
inews: Makefile $(IOBJECTS)
$(CC) $(LFLAGS) $(IOBJECTS) -o inews -ldbm
readnews: Makefile $(ROBJECTS)
! $(CC) $(LFLAGS) $(ROBJECTS) -o readnews -ldbm
funcs.o: funcs.c params.h defs.h
$(CC) $(CFLAGS) -c funcs.c
***************
*** 107,115
$(CC) $(CFLAGS) -DSPOOLDIR=\"$(SPOOLDIR) -DLIBDIR=\"$(LIBDIR)\
-DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" -c rextern.c
readr.o: readr.c rparams.h defs.h params.h Makefile
! $(CC) $(CFLAGS) -c readr.c
checknews.o: checknews.c defs.h Makefile
$(CC) $(CFLAGS) -DSPOOLDIR=\"$(SPOOLDIR) -DLIBDIR=\"$(LIBDIR)\
-DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" -c checknews.c
--- 108,116 -----
$(CC) $(CFLAGS) -DSPOOLDIR=\"$(SPOOLDIR) -DLIBDIR=\"$(LIBDIR)\
-DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" -c rextern.c
readr.o: readr.c rparams.h defs.h params.h Makefile
! $(CC) $(CFLAGS) -DNETPATHS=\"$(NETPATHS)\" -c readr.c
checknews.o: checknews.c defs.h Makefile
$(CC) $(CFLAGS) -DSPOOLDIR=\"$(SPOOLDIR) -DLIBDIR=\"$(LIBDIR)\
-DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" -c checknews.c
***************
*** 201,206
# Vnews section of makefile
VOBJECTS = readnews.o rfuncs.o rfuncs2.o rextern.o process.o rpathinit.o $(OBJECTS) visual.o virtterm.o dir.o
vnews: $(VOBJECTS)
! $(CC) $(LFLAGS) $(VOBJECTS) -ltermcap -ljobs -o $@
--- 201,209 -----
# Vnews section of makefile
VOBJECTS = readnews.o rfuncs.o rfuncs2.o rextern.o process.o rpathinit.o $(OBJECTS) visual.o virtterm.o dir.o
+ visual.o: visual.c rparams.h Makefile
+ $(CC) $(CFLAGS) -DNETPATHS=\"$(NETPATHS)\" -c visual.c
+
vnews: $(VOBJECTS)
! $(CC) $(LFLAGS) $(VOBJECTS) -ltermcap -ljobs -ldbm -o $@
***************
--
Bill Sebok Princeton Univ. Astrophysics
{allegra,akgua,burl,cbosgd,decvax,ihnp4,kpno,princeton}!astrovax!wls