arnold@emory.UUCP (Arnold D. Robbins {EUCC}) (04/06/86)
We are running very vanilla 4.2 BSD on two vaxen (not currently on the net, but connected via uucp to the machine I'm writing this on). I found a bug in the /bin/rmail as it came from Berkeley. This may be a very old bug, but you never know. Thanks to akgua!glc for helping to trace this down. Bug report in the official format follows: --------------------------------- Subject: Distributed /bin/rmail chokes on uucp "forwarded by ..." lines Index: /usr/src/bin/rmail.c 4.2BSD Description: Rmail chokes on incoming lines of the form >From glc Tue Apr 1 13:36 EST 1986 forwarded by glc and ends up delivering the mail as "remote from somewhere". Using 'R' in /usr/ucb/Mail tries to send mail to the bogus site ...!somewhere!person. This occured on mail coming from a System V system, but it may also be other UUCP's. Repeat-By: echo test | mail yoursite!yoursite!you or some such magic incantation. Fix: Apply the following context diff. Your line numbers may vary. *** /tmp/,RCSt1004875 Sun Apr 6 12:25:14 1986 --- rmail.c Fri Apr 4 13:29:37 1986 *************** *** 1,5 #ifndef lint ! static char RCSid[] = "$Header: rmail.c,v 1.1 86/04/04 11:00:31 root Exp $"; #endif /* --- 1,5 ----- #ifndef lint ! static char RCSid[] = "$Header: rmail.c,v 1.2 86/04/04 13:28:54 root Exp $"; #endif /* *************** *** 4,9 /* * $Log: rmail.c,v $ * Revision 1.1 86/04/04 11:00:31 root * Initial revision * --- 4,13 ----- /* * $Log: rmail.c,v $ + * Revision 1.2 86/04/04 13:28:54 root + * Fix to handle 'forwarded by ...' incoming lines. They get thrown away. + * ADR. + * * Revision 1.1 86/04/04 11:00:31 root * Initial revision * *************** *** 92,97 uf = p + 1; break; } cp = "remote from somewhere"; } #ifdef DEBUG --- 96,108 ----- uf = p + 1; break; } + /* check for "forwarded by ..." lines. ADR */ + cp = rindex (lbuf, 'f'); + if (cp != NULL && + strncmp (cp, "forwarded by ", 13) == 0) + goto contin1; /* chuck the line */ + /* else + fall thru to old code */ cp = "remote from somewhere"; } #ifdef DEBUG *************** *** 109,114 if (Debug) printf("ufrom='%s', sys='%s', from now '%s'\n", uf, sys, from); #endif } (void) strcat(from, uf); --- 120,127 ----- if (Debug) printf("ufrom='%s', sys='%s', from now '%s'\n", uf, sys, from); #endif + contin1: + ; /* null statement, target of goto */ } (void) strcat(from, uf); -- Arnold Robbins CSNET: arnold@emory BITNET: arnold@emoryu1 ARPA: arnold%emory.csnet@csnet-relay.arpa UUCP: { akgua, decvax, gatech, sb1, sb6, sunatl }!emory!arnold "All this digital stuff is just a fad. Analog is the way to go." -- William M. Robbins, 1984
sam@delftcc.UUCP (Sam Kendall) (04/09/86)
Thanks to Arnold Robbins for figuring this out--I've been wondering
where the "somewhere"s were coming from.
However, there is a bug in his fix. Suppose there is a "forwarded by"
line
>From frank Tue Apr 1 13:36 EST 1986 forwarded by frank
In this part of the fix:
/* check for "forwarded by ..." lines. ADR */
cp = rindex (lbuf, 'f');
the rindex will stop on the 'f' in "frank", not in "forwarded" as
Robbins intends.
----
Sam Kendall { ihnp4 | seismo!cmcl2 }!delftcc!sam
Delft Consulting Corp. ARPA: delftcc!sam@NYU.ARPA