On 09/23/2010 03:48 PM, Victor Duchovni wrote:
> On Thu, Sep 23, 2010 at 03:36:27PM +0200, Alexander 'Leo' Bergolth wrote:
>> When the owner- alias IS configured correctly, HOW is delivery
>> distributed to multiple processes?
> 
> See the deliver_indirect() code. A new message is put in the queue,
> via cleanup(8). The mail logs typically show:
> 
>   postfix/local[pid]: old-queue-id: to=<alias>, ... forwarded as 
> <new-queue-id>
> 
> The code is in indirect.c and forward.c.

OK, now I know why my messages are not requeued.

First of all: The owner- alias IS REALLY set up correctly. :-)

But if members of the list are aliases themselves, requeuing via cleanup
won't work for them. Unfortunately, this is currently the case for my
recipients.

That's because deliver_switch() (with the correct owner- address set)
first calls deliver_alias(), which resolves the alias (which in my case
points to itself). But deliver_alias() also clears the owner attribute!
Then control flow returns back to deliver_switch(), but the owner-
address is still cleared.
... and the following condition won't match:

-------------------- 8< --------------------
    if (state.msg_attr.owner != 0
        && strcasecmp(state.msg_attr.owner, state.msg_attr.user) != 0)
        return (deliver_indirect(state));
-------------------- 8< --------------------


Here is the control flow that leads to the problem:

-------------------- 8< --------------------
deliver_recipient[9]: local rk recip lh...@example.com exten  deliver
an-a...@example.com exp_from rk
been_here: recipient 9 lh...@example.com: 0
[...]
owner: owner...@example.com
^^^^^^^^^^^^^^^ correctly set
[...]
deliver_switch[10]: local lhock recip lh...@example.com exten  deliver
an-a...@example.com exp_from rk

deliver_alias[11]: local lhock recip lh...@example.com exten  deliver
an-a...@example.com exp_from rk

-> finds lhock in ldap-aliases (lhock is an alias for itself)
-> resets msg_attr.owner (calls RESET_OWNER_ATTR)

deliver_resolve_tree[12]: local lhock recip lh...@example.com exten
deliver an-a...@example.com exp_from lhock

deliver_recipient[13]: local lhock recip lh...@example.com exten
deliver an-a...@example.com exp_from lhock
been_here: recipient 13 lh...@example.com: 0
[...]
owner: null
^^^^^^^^^^^ owner is cleared now

deliver_switch[14]: local lhock recip lh...@example.com exten  deliver
an-a...@example.com exp_from lhock

deliver_alias[15]: local lhock recip lh...@example.com exten  deliver
an-a...@example.com exp_from lhock

-> deliver_indirect() should be called here but owner is now null

deliver_dotforward[15]: local lhock recip lh...@example.com exten
deliver an-a...@example.com exp_from lhock
-------------------- 8< --------------------


This means that requeuing via cleanup(8) doesn't work for destination
addresses that are aliases. (Which is bad.)
For those recipients, delivery is done by the same local(8) process,
that's why I didn't see different queue ids.

Cheers,
--leo
-- 
e-mail   ::: Leo.Bergolth (at) wu.ac.at
fax      ::: +43-1-31336-906050
location ::: IT-Services | Vienna University of Economics | Austria

Reply via email to