On Mon, Mar 11, 2019 at 11:48:56PM +0100, A. Schulze wrote: > I assume the changes behavior is dovecot/pigeonhole now using the advertised > "CHUNKING" extension.
Yes. > Reason: "Data command rejected: Multi-recipient bounce" while there is > clearly only one recipient. > > Mar 11 23:27:54 dili postfix-smo/submission/smtpd[22427]: 44JCRG5tYPzCqt2: > reject: BDAT from signing-milter.org[84.200.211.109]: 550 5.5.3 <DATA>: > Data command rejected: Multi-recipient bounce; from=<> to=<m...@example.org> > proto=ESMTP helo=<signing-milter.org> > since years I have "smtpd_data_restrictions = > reject_multi_recipient_bounce,reject_unauth_pipelining,permit" > Must that be adjusted with 3.4.x? Your no-BDAT work-around is sufficient until the code is updated along lines below: -- Viktor. --- a/src/smtpd/smtpd.h +++ b/src/smtpd/smtpd.h @@ -259,6 +259,10 @@ extern void smtpd_state_reset(SMTPD_STATE *); #define SMTPD_CMD_XFORWARD "XFORWARD" #define SMTPD_CMD_UNKNOWN "UNKNOWN" +#define SMTPD_IN_BODY(state) \ + (strcmp((state)->where, SMTPD_CMD_DATA) == 0 || \ + strcmp((state)->where, SMTPD_CMD_BDAT) == 0) + /* * Representation of unknown and non-existent client information. Throughout * Postfix, we use the "unknown" string value for unknown client information --- a/src/smtpd/smtpd_check.c +++ b/src/smtpd/smtpd_check.c @@ -4582,8 +4582,8 @@ static int generic_checks(SMTPD_STATE *state, ARGV *restrictions, if (state->recipient && *state->recipient) status = check_recipient_rcpt_maps(state, state->recipient); } else if (strcasecmp(name, REJECT_MUL_RCPT_BOUNCE) == 0) { - if (state->sender && *state->sender == 0 && state->rcpt_count - > (strcmp(state->where, SMTPD_CMD_DATA) ? 0 : 1)) + if (state->sender && *state->sender == 0 + && state->rcpt_count > (SMTPD_IN_BODY(state) ? 1 : 0)) status = smtpd_check_reject(state, MAIL_ERROR_POLICY, var_mul_rcpt_code, "5.5.3", "<%s>: %s rejected: Multi-recipient bounce",