rcc@imsvax.UUCP (06/19/84)
We're running the distribution 4.2 mail system. The reply command has a number of bugs, the most aggravating of which is that the reply command, when given on a message with more than one From line in the header, figures out the path to be used from the wrong From line. This results in reply being worse than useless for replying to any message that originates more than one machine or so away. Someone must have fixed this by now. Could someone who has this fix *please* mail me a copy ? Many thanks... -- The preceding message was brought to you by -- Ray Chen UUCP: umcp-cs!eneevax!imsvax!rcc (NEW ADDRESS) Voice: (301) 984-8343 USnail: Integrated Microcomputer Systems, Inc. Suite 400 6100 Executive Blvd. Rockville, MD 20852
pag@hao.UUCP (Peter Gross) (06/24/84)
imsvax!rcc: > We're running the distribution 4.2 mail system. The reply command has > a number of bugs, the most aggravating of which is that the reply > command, when given on a message with more than one From line in the > header, figures out the path to be used from the wrong From line. > This results in reply being worse than useless for replying to any > message that originates more than one machine or so away. This problem is due to mail passing from 4.2 sendmail sites through non-sendmail sites. Sendmail either adds a "From: " (note colon) header or prepends the sitename to an existing one. Unfortunately this scheme causes problems when the mail passes through non-sendmail sites; they ignore the "From: " header, adding their site name only to the "From " line. Berkeley Mail always uses the "From: " header in preference to the "From " one. Thus you end up with incorrect reply paths. The real problem is that sendmail is conforming to RFC 822 (right number?) when most of the rest of the Unix world is not. What we really need is a public domain mailer that all uucp sites can run which conforms to RFC822. The approach I took was to add a defined constant IGNOREFROM which uucp-only sites can use to cure the problem. Here are those changes: 1. In Mail/Makefile add "-DIGNOREFROM" to the options line. 2. diffs for Mail/aux.c: *** /tmp/,RCSt1013078 Sat Jun 23 15:43:47 1984 --- aux.c Sat Jun 23 15:41:13 1984 *************** *** 1,5 #ifndef lint ! static char *sccsid = "@(#)aux.c 2.11 (Berkeley) 8/11/83"; #endif #include "rcv.h" --- 1,5 ----- #ifndef lint ! static char *rcsid = "$Header: aux.c,v 2.12 84/06/23 15:39:54 pag Exp $"; #endif #include "rcv.h" *************** *** 10,15 * Mail -- a mail program * * Auxiliary functions. */ /* --- 10,21 ----- * Mail -- a mail program * * Auxiliary functions. + * + * $Log: aux.c,v $ + * Revision 2.12 84/06/23 15:39:54 pag + * Added IGNOREFROM conditional code to keep responses from using the + * incomplete "From:" header + * */ /* *************** *** 616,621 register FILE *ibuf; int first = 1; if ((cp = hfield("from", mp)) != NOSTR) return(cp); if (reptype == 0 && (cp = hfield("sender", mp)) != NOSTR) --- 622,628 ----- register FILE *ibuf; int first = 1; + #ifndef IGNOREFROM if ((cp = hfield("from", mp)) != NOSTR) return(cp); if (reptype == 0 && (cp = hfield("sender", mp)) != NOSTR) *************** *** 620,625 return(cp); if (reptype == 0 && (cp = hfield("sender", mp)) != NOSTR) return(cp); ibuf = setinput(mp); copy("", namebuf); if (readline(ibuf, linebuf) <= 0) --- 627,633 ----- return(cp); if (reptype == 0 && (cp = hfield("sender", mp)) != NOSTR) return(cp); + #endif IGNOREFROM ibuf = setinput(mp); copy("", namebuf); if (readline(ibuf, linebuf) <= 0) 3. diffs for cmd3.c: *** /tmp/,RCSt1013089 Sat Jun 23 15:44:51 1984 --- cmd3.c Sat Jun 23 15:42:49 1984 *************** *** 1,5 #ifndef lint ! static char *sccsid = "@(#)cmd3.c 2.14 (Berkeley) 8/11/83"; #endif #include "rcv.h" --- 1,5 ----- #ifndef lint ! static char *rcsid = "$Header: cmd3.c,v 2.15 84/06/23 15:41:47 pag Exp $"; #endif #include "rcv.h" *************** *** 9,14 * Mail -- a mail program * * Still more user commands. */ /* --- 9,20 ----- * Mail -- a mail program * * Still more user commands. + * + * $Log: cmd3.c,v $ + * Revision 2.15 84/06/23 15:41:47 pag + * Added IGNOREFROM conditional code to keep responses from using a + * possibly incomplete "From:" header + * */ /* *************** *** 205,210 cp = skin(nameof(mp, 1)); if (cp != NOSTR) rcv = cp; cp = skin(hfield("from", mp)); if (cp != NOSTR) rcv = cp; --- 211,217 ----- cp = skin(nameof(mp, 1)); if (cp != NOSTR) rcv = cp; + #ifndef IGNOREFROM cp = skin(hfield("from", mp)); if (cp != NOSTR) rcv = cp; *************** *** 208,213 cp = skin(hfield("from", mp)); if (cp != NOSTR) rcv = cp; replyto = skin(hfield("reply-to", mp)); strcpy(buf, ""); if (replyto != NOSTR) --- 215,221 ----- cp = skin(hfield("from", mp)); if (cp != NOSTR) rcv = cp; + #endif IGNOREFROM replyto = skin(hfield("reply-to", mp)); strcpy(buf, ""); if (replyto != NOSTR) *************** *** 673,678 for (s = 0, ap = msgvec; *ap != 0; ap++) { mp = &message[*ap - 1]; dot = mp; if ((cp = skin(hfield("from", mp))) != NOSTR) s+= strlen(cp) + 1; else --- 681,687 ----- for (s = 0, ap = msgvec; *ap != 0; ap++) { mp = &message[*ap - 1]; dot = mp; + #ifndef IGNOREFROM if ((cp = skin(hfield("from", mp))) != NOSTR) s+= strlen(cp) + 1; else *************** *** 676,681 if ((cp = skin(hfield("from", mp))) != NOSTR) s+= strlen(cp) + 1; else s += strlen(skin(nameof(mp, 2))) + 1; } if (s == 0) --- 685,691 ----- if ((cp = skin(hfield("from", mp))) != NOSTR) s+= strlen(cp) + 1; else + #endif IGNOREFROM s += strlen(skin(nameof(mp, 2))) + 1; } if (s == 0) *************** *** 684,689 head.h_to = cp; for (ap = msgvec; *ap != 0; ap++) { mp = &message[*ap - 1]; if ((cp2 = skin(hfield("from", mp))) == NOSTR) cp2 = skin(nameof(mp, 2)); cp = copy(cp2, cp); --- 694,700 ----- head.h_to = cp; for (ap = msgvec; *ap != 0; ap++) { mp = &message[*ap - 1]; + #ifndef IGNOREFROM if ((cp2 = skin(hfield("from", mp))) == NOSTR) #endif IGNOREFROM cp2 = skin(nameof(mp, 2)); *************** *** 685,690 for (ap = msgvec; *ap != 0; ap++) { mp = &message[*ap - 1]; if ((cp2 = skin(hfield("from", mp))) == NOSTR) cp2 = skin(nameof(mp, 2)); cp = copy(cp2, cp); *cp++ = ' '; --- 696,702 ----- mp = &message[*ap - 1]; #ifndef IGNOREFROM if ((cp2 = skin(hfield("from", mp))) == NOSTR) + #endif IGNOREFROM cp2 = skin(nameof(mp, 2)); cp = copy(cp2, cp); *cp++ = ' '; ********************************************************************* --peter gross hao!pag