Marcial Rion:
> > Yes. I need to correlate what local(8) forwards against what cleanup(8)
> > receives.
> >
> > Wietse
> >
> Here you go with the correlated logs (local -v and cleanup -v):
>
> http://www.copypaste.at/276
What you have can happen only with modified Postfix code.
Wietse
Anonymized with
amyca.ch -> amyca.example
swissonline.ch -> swissonline.example
In deliver_resolve_tree we have:
tok822_resolve(addr, &reply);
In tok822_resolve we have at the end:
if (msg_verbose)
msg_info("tok822_resolve: from=%s addr=%s -> chan=%s, host=%s, rcpt=%s",
sender,
vstring_str(intern_form), vstring_str(reply->transport),
vstring_str(reply->nexthop), vstring_str(reply->recipient));
vstring_free(intern_form);
}
(note: vstring_free() etc. overwrite deallocated memory with 0xff bytes)
Output:
Jan 30 07:26:46 amyca postfix/local[16559]: tok822_resolve:
from= [email protected] -> chan=smtp, host=smtp.hispeed.ch,
[email protected]
Thus, reply->recipient contains [email protected].
Back in deliver_resolve_tree we have:
if (reply.flags & RESOLVE_FLAG_FAIL) {
/* not applicable. */
} else if (reply.flags & RESOLVE_FLAG_ERROR) {
/* not applicable. */
} else {
if (state.msg_attr.unmatched) {
/* not applicable - there is no address extension */
}
state.msg_attr.rcpt.address = STR(reply.recipient);
Thus, state.msg_attr.rcpt.address == [email protected].
Then we have in deliver_resolve_tree:
if (strcmp(state.msg_attr.relay, STR(reply.transport)) == 0) {
status = deliver_recipient(state, usr_attr);
} else {
status = deliver_indirect(state);
In deliver_indirect we have:
int deliver_indirect(LOCAL_STATE state)
{
if (msg_verbose)
msg_info("deliver_indirect: %s", state.msg_attr.rcpt.address);
Output:
Jan 30 07:26:46 amyca postfix/local[16559]: deliver_indirect:
[email protected]
This can't happen unless someone has modified the source code,
which voids the warranty and ends my free support.