To be more specific: the check_recipient_rcpt_maps() function is called multiple places, but the call that fails in this case is in the one at the bottom of smtpd_check_rcpt().
On Tue, Jun 14, 2016 at 6:28 PM, Russell Yanofsky <r...@yanofsky.org> wrote: > Hi, > > I think there is a bug in handling of sender_dependent_default_transport_maps > within smtpd when default_transport is set to error:... > > I'm configuring postfix as follows using default_transport and > sender_dependent_default_transport_maps to reject all external > outgoing mail, unless the envelope sender comes from a particular > domain (yanofsky.org): > > default_transport = error:External delivery disabled > sender_dependent_default_transport_maps = inline:{ > @yanofsky.org=smtp:[smtp-relay.gmail.com]:587 } > > This works correctly for messages sent locally though the sendmail > command. But it doesn't work for messages that come in through smtpd. > The problem is that smtpd rejects all external outgoing messages after > the RCPT command, even when the sender is from @yanofsky.org. > > Looking at the smtpd source code, the problem seems to be that instead > of smtpd calling the resolve_clnt_query_from() function which takes > the sender into account, it always calls the resolve_clnt_query() > function, which ignores the message sender. > > The exact point of failure happens in the > strcmp(STR(reply->transport), MAIL_SERVICE_ERROR) check inside the > check_rcpt_maps() function when it is called by > check_recipient_rcpt_maps(), which is called by smtpd_check_rcpt(), > > The problem looks like it could be straightforward to fix if the > resolve_clnt_query() call inside smtpd were changed to > resolve_clnt_query_from(), but I haven't tried making this change yet, > and I don't know what other effects this might have. > > Other notes: I'm running postfix-3.1.1, and the exact smtpd failure message > is: > > Jun 14 17:40:51 jumpy postfix/smtpd[31276]: NOQUEUE: reject: RCPT from > jumpy[2600:3c03::f03c:91ff:fe55:105d]: 550 5.1.1 > <russ+t...@yanofsky.org>: Recipient address rejected: External > delivery disabled; from=<russ+t...@yanofsky.org> > to=<russ+t...@yanofsky.org> proto=ESMTP helo=<jumpy>