> > if (*var_mailbox_transport) {
> > state.msg_attr.rcpt.offset = -1L;
> > *statusp = deliver_pass(MAIL_CLASS_PRIVATE, var_mailbox_transport,
> > state.request, &state.msg_attr.rcpt);
> > return (YES);
> > }
>
> Apparently, var_mailbox_transport is not set, and therefore, the
> address is looked up in the UNIX system account database. I won't
> speculate about possible causes for this.
In this case we should see a similar log entry with 'deliver_mailbox' too:
Feb 16 15:10:24 NEWMTA postfix/local[6860]: deliver_dotforward[7]: local +trash
recip [email protected] exten deliver [email protected]
exp_from trash
However we don't. Look the end of deliver_switch():
if (deliver_dotforward(state, usr_attr, &status) == 0
&& deliver_mailbox(state, usr_attr, &status) == 0)
status = deliver_unknown(state, usr_attr);
Function deliver_dotforward() returns with nonzero (i.e. YES)
therefore deliver_mailbox() is not called at all.
The above lines were the same in 2.7 so the difference
must be in deliver_dotforward().
@@ -126,7 +127,15 @@
* Skip non-existing users. The mailbox delivery routine will catch the
* error.
*/
- if ((mypwd = mypwnam(state.msg_attr.user)) == 0)
+ if ((errno = mypwnam_err(state.msg_attr.user, &mypwd)) != 0) {
+ msg_warn("error looking up passwd info for %s: %m",
+ state.msg_attr.user);
+ dsb_simple(state.msg_attr.why, "4.0.0", "user lookup error");
+ *statusp = defer_append(BOUNCE_FLAGS(state.request),
+ BOUNCE_ATTR(state.msg_attr));
+ return (YES);
+ }
+ if (mypwd == 0)
return (NO);
I guess the new mypwnam_err() cannot do the check therefore
deliver_dotforward() returns immediately with YES.
Tomorrow I track down what mypwnam_err() does. :-)
Regards
Gabor