[net.bugs.4bsd] sendmail can lose forwarded mail

jeff@fluke.UUCP (Jeff Stearns) (12/14/83)

Index:	usr.lib/sendmail 4.2BSD

Description:
	Under certain conditions, sendmail will discard mail which is to be
	forwarded to another machine.

Repeat-By:
	Let there be two machines A and B, connected by ethernet.
	Let there be a user U with accounts on both machines.
	On machine A, let this user have a ~/.forward file which redirects
	mail to "U@B"
	Now have U log in on machine B and send mail to "U@A".
	The mail will be discarded upon receipt at machine A.

-------------------------------------------------------------------------------
	I have some additional clues.  Here's an (electronically enhanced)
	syslog transcript produced by the daemon sendmail which received the
	letter at machine A.  (I added the syslog() calls beginning with `--'
	in order to produce additional debugging information.)

	Note that the letter is never passed to any outgoing mailer for
	forwarding or delivery.

		/*
		 * Sendmail hears an incoming ethernet letter.
		 * It forks to read and process the letter.
		 */
	7588 sendmail: connected, pid=7588
	7588 sendmail: : openx
	7588 sendmail: AA07588: assigned id
	7589 sendmail: : openx
		/*
		 * The incoming letter is received via SMTP at machine A, and is
		 * assigned a queue id.
		 */
	7589 sendmail: AA07589: assigned id
	7589 sendmail: AA07589: from=<jeff@tc-jeff>, size=172, class=0
	7589 sendmail: --sendall: e=83080 mode=b
		/*
		 * The received message is deposited in the mail queue.
		 */
	7589 sendmail: AA07589: queueup, qf=qfAA07589, df=dfAA07589
		/*
		 * A child is forked to deliver the message in the background.
	 	 */
	7593 sendmail: in background, pid=7593
	7593 sendmail: --sendall: Run through list and send everything...
	7593 sendmail: ----sendall: mode=b
	7593 sendmail: ----sendall: calling deliver(83080, 163716)
		/*
		 * The child discovers that QDONTSEND is asserted for the
		 * recipient, so it makes no attempt to deliver the letter.
		 * (I don't know *why* QDONTSEND is set on this envelope.)
		 */
	7593 sendmail: --deliver, first user=`jeff' (QDONTSEND)
	7593 sendmail: ----sendall: mode=b
	7593 sendmail: ----sendall: calling deliver(83080, 163844)
	7593 sendmail: --deliver, first user=`jeff@tc-jeff' (QDONTSEND)
		/*
		 * The child now REMOVES THE LETTER FROM THE MAIL QUEUE!
		 */
	7593 sendmail: dropenvelope, id=AA07589, flags=0, pid=7593
	7593 sendmail: AA07589: unlink dfAA07589
	7593 sendmail: AA07589: unlink qfAA07589
	7589 sendmail: finis, pid=7589
		/*
		 * The parent removes the lock file, and everything's gone.
		 */
	7588 sendmail: AA07588: unlock
	7588 sendmail: AA07588: unlink lfAA07588

Fix:
	I know of none.  Clearing the `e' (expensive mailer) flag for the ether
	and local mailers does not help.
-- 
	Jeff Stearns
	John Fluke Mfg. Co.  (206) 356-5064
	P.O. Box C9090  Everett WA  98043
	...!decvax!microsoft!fluke!jeff

rpw3@fortune.UUCP (12/16/83)

#R:vax4:-125600:fortune:2000006:000:751
fortune!rpw3    Dec 15 14:22:00 1983

**Flame on**
Please, please don't assume that "metoo" is just a test feature. I, for
one, have it set since it is more useful to filter my own messages back
when I receive them (to print, to file, etc.), rather than to passively
collect them in a "file copy" (record=) with no filtering.

Also, my state of mind while sending an isolated message is not the
same as when I sit down to read/reply/print/file a batch of mail/news.
It is helpful to have have ALL of the discussion (including your own)
in one stream. (Yes, we use 'notes', but this is a multimedia shop.)
**Flame off**

Rob Warnock

UUCP:	{sri-unix,amd70,hpda,harpo,ihnp4,allegra}!fortune!rpw3
DDD:	(415)595-8444
USPS:	Fortune Systems Corp, 101 Twin Dolphins Drive, Redwood City, CA 94065

essick@uiuccsb.UUCP (12/16/83)

#R:vax4:-125600:uiuccsb:6300005:000:752
uiuccsb!essick    Dec 15 15:49:00 1983

	This sounds like the effects of a "don't get into an infinite 
forwarding loop" clause in sendmail.

	Since I haven't looked any farther than the 4.1C documentation
for sendmail, I can't offer any prepackaged solutions. This behavior
solves the "I'm gone; call me in two weeks" auto-mail-answering
problem. 

	This problem might be corrected by changing the way
infinite loops are detected from the outgoing edge where we can
say "is this going somewhere it has been" to the incoming
edge where we can say "have we seen this before and does it
have the same destination as the last time we saw it".
Note that this solution breaks down in the "I'm gone; call me" case
since the bouncing letters are new messages.

-- Ray Essick, University of Illinois

rpw3@fortune.UUCP (12/19/83)

#R:vax4:-125600:fortune:2000007:000:1249
fortune!rpw3    Dec 19 00:00:00 1983

Hmmmm... the infinite loop problem. I have two suggestions, neither of
which may be ultimately useful becasue implementing them might break
too much old software, but...

1. Yell, scream, demand, insist that systems supply guaranteed universally
   unique I.D.'s on messages. Then you can at least detect loops at the
   cost of caching "recently" seen I.D.'s). [One of the main reasons
   Ethernet has 48 bit addresses, BTW]

2. Having done #1, look at the so-called "hot potato" routing algorithms
   (and friends) that were popular a few years back (especially in
   military work). In particular, there was a PhD thesis by a guy named
   Tajibnakis (sp?) at Univ. Michigan which analyzed an algorithm which
   guaranteed that every site would see every message and no link would
   see it more than twice.  Yea, I know that's better suited to USENET
   ans BB's than to mail, but the real point is: Go back and dig up
   some of the old store-and-fwd routing literature. An awful lot was
   done on that before ARPAnet-style (fully connected all the time)
   became popular.

Rob Warnock

UUCP:	{sri-unix,amd70,hpda,harpo,ihnp4,allegra}!fortune!rpw3
DDD:	(415)595-8444
USPS:	Fortune Systems Corp, 101 Twin Dolphins Drive, Redwood City, CA 94065

mark@cbosgd.UUCP (Mark Horton) (12/22/83)

Sounds like the "metoo" business may be getting involved.
If you send to a mailing list and you're on it, it won't
send you a copy.  A .forward is just a mailing list with
only one person on it.  If I'm right, it only matters for
cases involving sending yourself mail in useless ways,
but won't affect real mail.  Of course, people tend to
send themselves test messages, and that can cause alarm.