[exim] Re: Bug in exim

Top Page
Delete this message
Reply to this message
Author: Russell Stuart
Date:  
To: exim-users
Subject: [exim] Re: Bug in exim
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.