On Sat, 2005-02-12 at 00:00, Russell Stuart wrote:
> On Wed, 2005-02-09 at 21:28, Russell Stuart wrote:
> > Exim Version: 4.43 + exiscan
> > OS: Debian Sarge
> > Config files: http://www.lubemobile.com.au/ras/exim4
>
> It boils down to this: if you
> mark an address as unseen in the archive router, and then
> the message gets deferred, a recipient marked as "unseen"
> will be dropped.
Looking at the code again after some sleep, I think I isolated
the real trigger for the bug. In summary:
The pre-conditions for the bug are:
a. There is a router with both "unseen" and "one_time" set
which creates an additional recipient(s).
b. The message is sent in one batch over a transport which
returns DEFER.
If those preconditions are met, then:
a. The message is not delivered to the original recipient.
In my prior analysis I said the original message was being dropped
because it was being added to the "do not deliver" list in the -H
file. That was correct. I also said it added to that list because
the redirect router put it into the "addr_succeed" list. That was
wrong. The -H's non-deliver list is derived from the
"non-recipient" tree. The code that adds the "unseen" addresses
parent to the "non-recipient" tree, even though no deliveries have
taken place, is at approx line 6403 in deliver.c:
{
DEBUG(D_deliver) debug_printf("one_time: adding %s in place of %s\n",
otaddr->address, otaddr->parent->address);
receive_add_recipient(otaddr->address, t);
recipients_list[recipients_count-1].errors_to = otaddr->p.errors_address;
tree_add_nonrecipient(otaddr->parent->address);
update_spool = TRUE;
}
I won't be pursing this further as now I understand the original
cause, I can work around it. Thanks to all those who replied to
my original post.