Skip to content

Commit

Permalink
postfix-3.5-20191019
Browse files Browse the repository at this point in the history
  • Loading branch information
wietse-postfix authored and Viktor Dukhovni committed Nov 9, 2019
1 parent 0f05229 commit fff75d3
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 9 deletions.
14 changes: 14 additions & 0 deletions postfix/HISTORY
Original file line number Diff line number Diff line change
Expand Up @@ -24437,3 +24437,17 @@ Apologies for any names omitted.
smtp/smtp_rcpt.c, tls/tls_certkey.c, util/nbbio.c,
util/vstream_tweak.c.

20191014

Bugfix (introduced: Postfix 2.8): don't gratuitously enable
all after-220 tests when only one such test is enabled.
This made selective tests impossible with 'good' clients.
File: postscreen/postscreen_smtpd.c.

Bugfix: the 20180903 postscreen fix for a misleading
"PIPELINING after BDAT" warning looked at the wrong variable.
The warning now says "BDAT without valid RCPT", and the
error is no longer treated as a command PIPELINING error
(but sending BDAT is still a client error, because postscreen
rejects all RCPT commands and does not announce PIPELINING
support). File: postscreen/postscreen_smtpd.c.
6 changes: 6 additions & 0 deletions postfix/WISHLIST
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ Wish list:
See also postscreen even-driven client for policy delegation
below.

smtp_line_length_limit can insert a line break in the middle
of a multi-byte character (which is not necessarily UTF-8,
so we can't simply look at the 8th bit). Also, note that a
multi-byte character may span queue file record boundaries,
for example if line_length_limit == smtp_line_length_limit.

Replace ad-hoc code for pipe(8) flags handling, with
infrastructure that was built for smtp(8).

Expand Down
2 changes: 1 addition & 1 deletion postfix/src/global/mail_version.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
#define MAIL_RELEASE_DATE "20191013"
#define MAIL_RELEASE_DATE "20191019"
#define MAIL_VERSION_NUMBER "3.5"

#ifdef SNAPSHOT
Expand Down
22 changes: 14 additions & 8 deletions postfix/src/postscreen/postscreen_smtpd.c
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,8 @@ static int psc_data_cmd(PSC_STATE *state, char *args)
* never see DATA from a legitimate client, because 1) the server rejects
* every recipient, and 2) the server does not announce PIPELINING.
*/
msg_info("DATA without valid RCPT from [%s]:%s",
PSC_CLIENT_ADDR_PORT(state));
if (PSC_SMTPD_NEXT_TOKEN(args) != 0)
PSC_CLEAR_EVENT_DROP_SESSION_STATE(state,
psc_smtpd_time_event,
Expand Down Expand Up @@ -620,6 +622,8 @@ static int psc_bdat_cmd(PSC_STATE *state, char *args)
* client, because 1) the server rejects every recipient, and 2) the
* server does not announce PIPELINING.
*/
msg_info("BDAT without valid RCPT from [%s]:%s",
PSC_CLIENT_ADDR_PORT(state));
if (state->ehlo_discard_mask & EHLO_MASK_CHUNKING)
PSC_CLEAR_EVENT_DROP_SESSION_STATE(state,
psc_smtpd_time_event,
Expand Down Expand Up @@ -1033,7 +1037,7 @@ static void psc_smtpd_read_event(int event, void *context)
}
}
/* Command PIPELINING test. */
if ((state->flags & PSC_SMTPD_CMD_FLAG_HAS_PAYLOAD) == 0
if ((cmdp->flags & PSC_SMTPD_CMD_FLAG_HAS_PAYLOAD) == 0
&& (state->flags & PSC_STATE_MASK_PIPEL_TODO_SKIP)
== PSC_STATE_FLAG_PIPEL_TODO && !PSC_SMTPD_BUFFER_EMPTY(state)) {
printable(command, '?');
Expand Down Expand Up @@ -1172,16 +1176,18 @@ void psc_smtpd_tests(PSC_STATE *state)
state->read_state = PSC_SMTPD_CMD_ST_ANY;

/*
* Opportunistically make postscreen more useful by turning on the
* pipelining and non-SMTP command tests when a pre-handshake test
* failed, or when some deep test is configured as enabled.
* Disable all after-220 tests when we need to reply with 421 and hang up
* after reading the next SMTP client command.
*
* XXX Make "opportunistically" configurable for each test.
* Opportunistically make postscreen more useful, by turning on all
* after-220 tests when a bad client failed a before-220 test.
*
* Otherwise, only apply the explicitly-configured after-220 tests.
*/
if ((state->flags & PSC_STATE_FLAG_SMTPD_X21) == 0) {
state->flags |= PSC_STATE_MASK_SMTPD_TODO;
} else {
if (state->flags & PSC_STATE_FLAG_SMTPD_X21) {
state->flags &= ~PSC_STATE_MASK_SMTPD_TODO;
} else if (state->flags & PSC_STATE_MASK_ANY_FAIL) {
state->flags |= PSC_STATE_MASK_SMTPD_TODO;
}

/*
Expand Down

0 comments on commit fff75d3

Please sign in to comment.