Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.2 9/18/84; site uw-beaver
Path: utzoo!watmath!clyde!burl!ulysses!mhuxr!mhuxn!mhuxj!houxm!vax135!cornell!uw-beaver!yenbut
From: yenbut@uw-beaver (Voradesh Yenbut)
Newsgroups: net.unix-wizards
Subject: Re: 4.2 lost mail
Message-ID: <276@uw-beaver>
Date: Fri, 21-Dec-84 15:43:44 EST
Article-I.D.: uw-beave.276
Posted: Fri Dec 21 15:43:44 1984
Date-Received: Sat, 22-Dec-84 03:15:52 EST
References: <6079@brl-tgr.ARPA> <> <1942@nsc.UUCP> <369@haring.UUCP> <1379@dalcs.UUCP>
Organization: U of Washington Computer Science
Lines: 50

> []
> 	We also have experienced the "lost mail" syndrome. It only happens
> on queued mail. I, however, have noticed the following events:
> 
> Mail is sent to multiple recipients (both local and remote).
> The mail is queued (a single copy, of course) due to the load average.
> The mail is received by all non-local recipients and is never seen again
> locally.
> 
> Its got to be the gremlins eh?
> 
> 				Ray

I found that sendmail, compiled with DBM defined, does not call initaliases()
before it processes queued mails.  So, it will fail when looking for an alias
name of a local recipient.  As quoted from Version.c of sendmail,

> D 4.16	83/10/16 16:08:08	eric	382	381
> MRs:	
> Postpone opening the alias DBM file until after the fork in srvrsmtp so
> that the alias database is as current as possible; thanks to dagobah!efo
> (Eben Ostby) for this one.

it looks like sendmail version 4.16 and above may have this kind of problem.
My fix in queue.c is as follows:

==================================================================
  SCCSID(@(#)queue.c	4.2		3/11/84	(no queueing));

*** /tmp/,RCSt1002663	Fri Dec 21 12:02:11 1984
--- queue.c	Mon Dec  3 09:35:01 1984
***************
*** 256,261
  		/* child -- double fork */
  		if (fork() != 0)
  			exit(EX_OK);
  	}
  # ifdef LOG
  	if (LogLevel > 11)

--- 258,266 -----
  		/* child -- double fork */
  		if (fork() != 0)
  			exit(EX_OK);
+ 
+ 		/* open the alias database */
+ 		initaliases(AliasFile, FALSE);
  	}
  # ifdef LOG
  	if (LogLevel > 11)