2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-30 05:38:06 +00:00

postfix-3.6-20200620

This commit is contained in:
Wietse Venema 2020-06-20 00:00:00 -05:00 committed by Viktor Dukhovni
parent c22bee85a2
commit 4e73f79cd5
11 changed files with 49 additions and 10 deletions

View File

@ -24867,3 +24867,35 @@ Apologies for any names omitted.
sent a TLSv1.3 HelloRetryRequest (HRR) to a remote SMTP sent a TLSv1.3 HelloRetryRequest (HRR) to a remote SMTP
client. Reported by Ján Máté, fixed by Viktor Dukhovni. client. Reported by Ján Máté, fixed by Viktor Dukhovni.
File: tls/tls_misc.c. File: tls/tls_misc.c.
20200617
Bugfix (introduced: Postfix 3.4): the connection_reuse
attribute in smtp_tls_policy_maps resulted in an "invalid
attribute name" error. Fix by Thorsten Habich. File:
smtp/smtp_tls_policy.c.
20200618
Documentation: documented that smtp_line_length_limit=0
disables the feature, and made this more explicit in the
code by using the ENFORCING_SIZE_LIMIT macro. Files:
proto/postconf.proto, smtp/smtp_proto.c.
20200619
Bugfix (introduced: Postfix 3.4): SMTP over TLS connection
reuse was broken for configurations that use explicit trust
anchors. Reported by Thorsten Habich. Cause: the tlsproxy
client was sending a zero certificate length. File:
tls/tls_proxy_client_print.c.
Bugfix: posttls-finger reported a conflict betwen -X and
-r when only -X was used. File: posttls-finger/posttls-finger.c.
20200620
Bugfix (introduced: Postfix 3.4): SMTP over TLS connection
reuse was broken for configurations that use explicit trust
anchors. Reported by Thorsten Habich. Fixed by calling DANE
initialization unconditionally (WTF). File: tlsproxy/tlsproxy.c.

View File

@ -1,5 +1,8 @@
Wish list: Wish list:
Move the tls_dane_avail() and DANE-requested test into
tls_client_start().
DNS wrapper class, like XSASL, to support different stub DNS wrapper class, like XSASL, to support different stub
resolvers without contaminating Postfix programs with the resolvers without contaminating Postfix programs with the
idiosyncracies of stub resolvers. Handle differences in idiosyncracies of stub resolvers. Handle differences in

View File

@ -11285,7 +11285,7 @@ The maximal length of message header and body lines that Postfix
will send via SMTP. This limit does not include the <CR><LF> will send via SMTP. This limit does not include the <CR><LF>
at the end of each line. Longer lines are broken by inserting at the end of each line. Longer lines are broken by inserting
"<CR><LF><SPACE>", to minimize the damage to MIME "<CR><LF><SPACE>", to minimize the damage to MIME
formatted mail. formatted mail. Specify zero to disable this limit.
</p> </p>
<p> <p>

View File

@ -7117,7 +7117,7 @@ The maximal length of message header and body lines that Postfix
will send via SMTP. This limit does not include the <CR><LF> will send via SMTP. This limit does not include the <CR><LF>
at the end of each line. Longer lines are broken by inserting at the end of each line. Longer lines are broken by inserting
"<CR><LF><SPACE>", to minimize the damage to MIME "<CR><LF><SPACE>", to minimize the damage to MIME
formatted mail. formatted mail. Specify zero to disable this limit.
.PP .PP
The Postfix limit of 998 characters not including <CR><LF> The Postfix limit of 998 characters not including <CR><LF>
is consistent with the SMTP limit of 1000 characters including is consistent with the SMTP limit of 1000 characters including

View File

@ -4400,7 +4400,7 @@ The maximal length of message header and body lines that Postfix
will send via SMTP. This limit does not include the &lt;CR&gt;&lt;LF&gt; will send via SMTP. This limit does not include the &lt;CR&gt;&lt;LF&gt;
at the end of each line. Longer lines are broken by inserting at the end of each line. Longer lines are broken by inserting
"&lt;CR&gt;&lt;LF&gt;&lt;SPACE&gt;", to minimize the damage to MIME "&lt;CR&gt;&lt;LF&gt;&lt;SPACE&gt;", to minimize the damage to MIME
formatted mail. formatted mail. Specify zero to disable this limit.
</p> </p>
<p> <p>

View File

@ -20,7 +20,7 @@
* Patches change both the patchlevel and the release date. Snapshots have no * Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only. * patchlevel; they change the release date only.
*/ */
#define MAIL_RELEASE_DATE "20200610" #define MAIL_RELEASE_DATE "20200620"
#define MAIL_VERSION_NUMBER "3.6" #define MAIL_VERSION_NUMBER "3.6"
#ifdef SNAPSHOT #ifdef SNAPSHOT

View File

@ -1988,7 +1988,7 @@ static void parse_options(STATE *state, int argc, char *argv[])
msg_fatal("bad '-a' option value: %s", state->options.addr_pref); msg_fatal("bad '-a' option value: %s", state->options.addr_pref);
#ifdef USE_TLS #ifdef USE_TLS
if (state->tlsproxy_mode && state->reconnect) if (state->tlsproxy_mode && state->reconnect >= 0)
msg_fatal("The -X and -r options are mutually exclusive"); msg_fatal("The -X and -r options are mutually exclusive");
#endif #endif

View File

@ -1179,7 +1179,8 @@ static void smtp_text_out(void *context, int rec_type,
if (state->space_left == var_smtp_line_limit if (state->space_left == var_smtp_line_limit
&& data_left > 0 && *data_start == '.') && data_left > 0 && *data_start == '.')
smtp_fputc('.', session->stream); smtp_fputc('.', session->stream);
if (var_smtp_line_limit > 0 && data_left >= state->space_left) { if (ENFORCING_SIZE_LIMIT(var_smtp_line_limit)
&& data_left >= state->space_left) {
smtp_fputs(data_start, state->space_left, session->stream); smtp_fputs(data_start, state->space_left, session->stream);
data_start += state->space_left; data_start += state->space_left;
data_left -= state->space_left; data_left -= state->space_left;

View File

@ -389,6 +389,7 @@ static void tls_policy_lookup_one(SMTP_TLS_POLICY *tls, int *site_level,
WHERE, name, val); WHERE, name, val);
INVALID_RETURN(tls->why, site_level); INVALID_RETURN(tls->why, site_level);
} }
continue;
} }
msg_warn("%s: invalid attribute name: \"%s\"", WHERE, name); msg_warn("%s: invalid attribute name: \"%s\"", WHERE, name);
INVALID_RETURN(tls->why, site_level); INVALID_RETURN(tls->why, site_level);

View File

@ -213,6 +213,7 @@ static int tls_proxy_client_certs_print(ATTR_PRINT_COMMON_FN print_fn,
i2d_X509(tp->cert, &bp); i2d_X509(tp->cert, &bp);
if ((char *) bp - STR(buf) != len) if ((char *) bp - STR(buf) != len)
msg_panic("i2d_X509 failed to encode certificate"); msg_panic("i2d_X509 failed to encode certificate");
vstring_set_payload_size(buf, len);
ret = print_fn(fp, flags | ATTR_FLAG_MORE, ret = print_fn(fp, flags | ATTR_FLAG_MORE,
SEND_ATTR_DATA(TLS_ATTR_CERT, LEN(buf), STR(buf)), SEND_ATTR_DATA(TLS_ATTR_CERT, LEN(buf), STR(buf)),
ATTR_TYPE_END); ATTR_TYPE_END);
@ -258,6 +259,7 @@ static int tls_proxy_client_pkeys_print(ATTR_PRINT_COMMON_FN print_fn,
i2d_PUBKEY(tp->pkey, &bp); i2d_PUBKEY(tp->pkey, &bp);
if ((char *) bp - STR(buf) != len) if ((char *) bp - STR(buf) != len)
msg_panic("i2d_PUBKEY failed to encode public key"); msg_panic("i2d_PUBKEY failed to encode public key");
vstring_set_payload_size(buf, len);
ret = print_fn(fp, flags | ATTR_FLAG_MORE, ret = print_fn(fp, flags | ATTR_FLAG_MORE,
SEND_ATTR_DATA(TLS_ATTR_PKEY, LEN(buf), STR(buf)), SEND_ATTR_DATA(TLS_ATTR_PKEY, LEN(buf), STR(buf)),
ATTR_TYPE_END); ATTR_TYPE_END);

View File

@ -997,12 +997,12 @@ static int tlsp_client_start_pre_handshake(TLSP_STATE *state)
state->client_start_props->ctx = state->appl_state; state->client_start_props->ctx = state->appl_state;
state->client_start_props->fd = state->ciphertext_fd; state->client_start_props->fd = state->ciphertext_fd;
/* These predicates and warning belong inside tls_client_start(). */ /* These predicates and warning belong inside tls_client_start(). */
if (!TLS_DANE_BASED(state->client_start_props->tls_level) if (!tls_dane_avail() /* mandatory side effects!! */
|| tls_dane_avail()) &&TLS_DANE_BASED(state->client_start_props->tls_level))
state->tls_context = tls_client_start(state->client_start_props);
else
msg_warn("%s: DANE requested, but not available", msg_warn("%s: DANE requested, but not available",
state->client_start_props->namaddr); state->client_start_props->namaddr);
else
state->tls_context = tls_client_start(state->client_start_props);
if (state->tls_context != 0) if (state->tls_context != 0)
return (TLSP_STAT_OK); return (TLSP_STAT_OK);