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= addr=am...@swissonline.example -> chan=smtp, host=smtp.hispeed.ch, rcpt=am...@swissonline.example Thus, reply->recipient contains am...@swissonline.example. 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 == am...@swissonline.example. 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: cont...@amyca.example This can't happen unless someone has modified the source code, which voids the warranty and ends my free support.