> >     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 +tr...@newmta.example.com exten  deliver tr...@newmta.example.com 
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

Reply via email to