mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-22 18:07:41 +00:00
postfix-3.9-20231112
This commit is contained in:
parent
702c621b1e
commit
17dbfb9b8b
@ -27440,11 +27440,14 @@ Apologies for any names omitted.
|
|||||||
|
|
||||||
20231006
|
20231006
|
||||||
|
|
||||||
Cleanup: attempt to log the SASL username after authentication
|
Usability: the Postfix SMTP server now attempts to log the
|
||||||
failure. This appends ", sasl_username=xxx" to SASL authentication
|
SASL username after authentication failure. In Postfix
|
||||||
failure logging. Based on code by Jozsef Kadlecsik. Files:
|
logging, this appends ", sasl_username=xxx" after the reason
|
||||||
xsasl/xsasl_server.c, xsasl/xsasl_cyrus_server.c,
|
for SASL authentication failure. The logging replaces an
|
||||||
smtpd/smtpd_sasl_glue.c.
|
unavailable reason with "(reason unavailable)", and replaces
|
||||||
|
an unavailable sasl_username with "(unavailable)". Based
|
||||||
|
on code by Jozsef Kadlecsik. Files: xsasl/xsasl_server.c,
|
||||||
|
xsasl/xsasl_cyrus_server.c, smtpd/smtpd_sasl_glue.c.
|
||||||
|
|
||||||
20231008
|
20231008
|
||||||
|
|
||||||
@ -27520,3 +27523,33 @@ Apologies for any names omitted.
|
|||||||
|
|
||||||
Cleanup: explicit %.100s limits for client-controlled strings
|
Cleanup: explicit %.100s limits for client-controlled strings
|
||||||
in SASL error logging. File: smtpd/smtpd_sasl_glue.c.
|
in SASL error logging. File: smtpd/smtpd_sasl_glue.c.
|
||||||
|
|
||||||
|
20231102
|
||||||
|
|
||||||
|
Bugfix (defect introduced: Postfix 2.3, date 20051222): the
|
||||||
|
Dovecot auth client did not reset the 'reason' from a
|
||||||
|
previous Dovecot auth service response, before parsing the
|
||||||
|
next Dovecot auth server response. Reported by Stephan
|
||||||
|
Bosch, File: xsasl/xsasl_dovecot_server.c.
|
||||||
|
|
||||||
|
20231105
|
||||||
|
|
||||||
|
Cleanup: Postfix SMTP server response with an empty
|
||||||
|
authentication failure reason. File: smtpd/smtpd_sasl_glue.c.
|
||||||
|
|
||||||
|
Cleanup: proxymap error message when the service name is
|
||||||
|
not "proxymap" or "proxywrite". File: proxymap/proxymap.c.
|
||||||
|
|
||||||
|
20231109
|
||||||
|
|
||||||
|
Portability: MariaDB emulates MySQL >= 5.7.6, but does not
|
||||||
|
implement mysql_real_escape_string_quote(). Fix by Levente
|
||||||
|
Birta. File: global/dict_mysql.c.
|
||||||
|
|
||||||
|
Portability: more precise MYSQL_VERSION_ID check. File:
|
||||||
|
global/dict_mysql.c.
|
||||||
|
|
||||||
|
20231112
|
||||||
|
|
||||||
|
Robustness: don't loop on an 'unfinished' queue file that
|
||||||
|
still has its all-zero SIZE record. File: postcat/postcat.c.
|
||||||
|
@ -8,9 +8,10 @@ Wish list:
|
|||||||
|
|
||||||
postfix-install should mention makedefs.out.
|
postfix-install should mention makedefs.out.
|
||||||
|
|
||||||
In valid_utf8_string.c, add tests for over-long encodings
|
Propagate information about parsed daemon command-line
|
||||||
and surrogates. Can we add tests for 4-byte encodings with
|
options to service callback functions. With this, a proxywrite
|
||||||
strings that are displayable?
|
server can enforce a process limit of 1 without duplicating
|
||||||
|
libmaster's command-line parsing code.
|
||||||
|
|
||||||
Add a pre-release check for '.' instead of ','. Generalize
|
Add a pre-release check for '.' instead of ','. Generalize
|
||||||
from grep '[a-zA-Z0-9]\. *[a-z]' proto/*|egrep -v
|
from grep '[a-zA-Z0-9]\. *[a-z]' proto/*|egrep -v
|
||||||
|
@ -85,7 +85,7 @@ POSTCAT(1) POSTCAT(1)
|
|||||||
figuration files.
|
figuration files.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#import_environment">import_environment</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#import_environment">import_environment</a> (see 'postconf -d' output)</b>
|
||||||
The list of environment parameters that a privileged Postfix
|
The list of environment variables that a privileged Postfix
|
||||||
process will import from a non-Postfix parent process, or
|
process will import from a non-Postfix parent process, or
|
||||||
name=value environment overrides.
|
name=value environment overrides.
|
||||||
|
|
||||||
|
@ -3799,7 +3799,8 @@ filtered with the character set that is specified with the
|
|||||||
<dd>The address extension delimiter that was found in the recipient
|
<dd>The address extension delimiter that was found in the recipient
|
||||||
address (Postfix 2.11 and later), or the 'first' delimiter specified
|
address (Postfix 2.11 and later), or the 'first' delimiter specified
|
||||||
with the system-wide recipient address extension delimiter (Postfix
|
with the system-wide recipient address extension delimiter (Postfix
|
||||||
3.5.22, 3.5.12, 3.7.8, 3.8.3 and later), or the system-wide recipient
|
3.5.22, 3.6.12, 3.7.8, 3.8.3 and later). Historically, this was
|
||||||
|
always the system-wide recipient
|
||||||
address extension delimiter (Postfix 2.10 and earlier). </dd>
|
address extension delimiter (Postfix 2.10 and earlier). </dd>
|
||||||
|
|
||||||
<dt><b>${name?value}</b></dt>
|
<dt><b>${name?value}</b></dt>
|
||||||
|
@ -88,7 +88,7 @@ The text below provides only a parameter summary. See
|
|||||||
The default location of the Postfix main.cf and master.cf
|
The default location of the Postfix main.cf and master.cf
|
||||||
configuration files.
|
configuration files.
|
||||||
.IP "\fBimport_environment (see 'postconf -d' output)\fR"
|
.IP "\fBimport_environment (see 'postconf -d' output)\fR"
|
||||||
The list of environment parameters that a privileged Postfix
|
The list of environment variables that a privileged Postfix
|
||||||
process will import from a non\-Postfix parent process, or name=value
|
process will import from a non\-Postfix parent process, or name=value
|
||||||
environment overrides.
|
environment overrides.
|
||||||
.IP "\fBqueue_directory (see 'postconf -d' output)\fR"
|
.IP "\fBqueue_directory (see 'postconf -d' output)\fR"
|
||||||
|
@ -2417,7 +2417,8 @@ The entire recipient localpart.
|
|||||||
The address extension delimiter that was found in the recipient
|
The address extension delimiter that was found in the recipient
|
||||||
address (Postfix 2.11 and later), or the 'first' delimiter specified
|
address (Postfix 2.11 and later), or the 'first' delimiter specified
|
||||||
with the system\-wide recipient address extension delimiter (Postfix
|
with the system\-wide recipient address extension delimiter (Postfix
|
||||||
3.5.22, 3.5.12, 3.7.8, 3.8.3 and later), or the system\-wide recipient
|
3.5.22, 3.6.12, 3.7.8, 3.8.3 and later). Historically, this was
|
||||||
|
always the system\-wide recipient
|
||||||
address extension delimiter (Postfix 2.10 and earlier).
|
address extension delimiter (Postfix 2.10 and earlier).
|
||||||
.br
|
.br
|
||||||
.IP "\fB${name?value}\fR"
|
.IP "\fB${name?value}\fR"
|
||||||
|
@ -1783,7 +1783,8 @@ forward_expansion_filter parameter. </p>
|
|||||||
<dd>The address extension delimiter that was found in the recipient
|
<dd>The address extension delimiter that was found in the recipient
|
||||||
address (Postfix 2.11 and later), or the 'first' delimiter specified
|
address (Postfix 2.11 and later), or the 'first' delimiter specified
|
||||||
with the system-wide recipient address extension delimiter (Postfix
|
with the system-wide recipient address extension delimiter (Postfix
|
||||||
3.5.22, 3.5.12, 3.7.8, 3.8.3 and later), or the system-wide recipient
|
3.5.22, 3.6.12, 3.7.8, 3.8.3 and later). Historically, this was
|
||||||
|
always the system-wide recipient
|
||||||
address extension delimiter (Postfix 2.10 and earlier). </dd>
|
address extension delimiter (Postfix 2.10 and earlier). </dd>
|
||||||
|
|
||||||
<dt><b>${name?value}</b></dt>
|
<dt><b>${name?value}</b></dt>
|
||||||
|
@ -210,7 +210,7 @@ static void dict_mysql_quote(DICT *dict, const char *name, VSTRING *result)
|
|||||||
|
|
||||||
if (dict_mysql->active_host == 0)
|
if (dict_mysql->active_host == 0)
|
||||||
msg_panic("dict_mysql_quote: no active host");
|
msg_panic("dict_mysql_quote: no active host");
|
||||||
#if defined(MYSQL_VERSION_ID) && MYSQL_VERSION_ID >= 50700
|
#if MYSQL_VERSION_ID >= 50706 && !defined(MARIADB_VERSION_ID)
|
||||||
mysql_real_escape_string_quote(dict_mysql->active_host->db,
|
mysql_real_escape_string_quote(dict_mysql->active_host->db,
|
||||||
vstring_end(result), name, len, '\'');
|
vstring_end(result), name, len, '\'');
|
||||||
#else
|
#else
|
||||||
|
@ -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 "20231030"
|
#define MAIL_RELEASE_DATE "20231112"
|
||||||
#define MAIL_VERSION_NUMBER "3.9"
|
#define MAIL_VERSION_NUMBER "3.9"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
/* The default location of the Postfix main.cf and master.cf
|
/* The default location of the Postfix main.cf and master.cf
|
||||||
/* configuration files.
|
/* configuration files.
|
||||||
/* .IP "\fBimport_environment (see 'postconf -d' output)\fR"
|
/* .IP "\fBimport_environment (see 'postconf -d' output)\fR"
|
||||||
/* The list of environment parameters that a privileged Postfix
|
/* The list of environment variables that a privileged Postfix
|
||||||
/* process will import from a non-Postfix parent process, or name=value
|
/* process will import from a non-Postfix parent process, or name=value
|
||||||
/* environment overrides.
|
/* environment overrides.
|
||||||
/* .IP "\fBqueue_directory (see 'postconf -d' output)\fR"
|
/* .IP "\fBqueue_directory (see 'postconf -d' output)\fR"
|
||||||
@ -274,7 +274,7 @@ static void postcat(VSTREAM *fp, VSTRING *buffer, int flags)
|
|||||||
break;
|
break;
|
||||||
/* Optimization: skip to extracted segment marker. */
|
/* Optimization: skip to extracted segment marker. */
|
||||||
if (do_print == 0 && (flags & PC_FLAG_PRINT_ENV)
|
if (do_print == 0 && (flags & PC_FLAG_PRINT_ENV)
|
||||||
&& data_offset >= 0 && data_size >= 0
|
&& data_offset > 0 && data_size >= 0
|
||||||
&& vstream_fseek(fp, data_offset + data_size, SEEK_SET) < 0)
|
&& vstream_fseek(fp, data_offset + data_size, SEEK_SET) < 0)
|
||||||
msg_fatal("seek error: %m");
|
msg_fatal("seek error: %m");
|
||||||
}
|
}
|
||||||
@ -289,7 +289,7 @@ static void postcat(VSTREAM *fp, VSTRING *buffer, int flags)
|
|||||||
PRINT_MARKER(flags, fp, offset, rec_type, "MESSAGE CONTENTS");
|
PRINT_MARKER(flags, fp, offset, rec_type, "MESSAGE CONTENTS");
|
||||||
/* Optimization: skip to extracted segment marker. */
|
/* Optimization: skip to extracted segment marker. */
|
||||||
if ((flags & PC_MASK_PRINT_TEXT) == 0
|
if ((flags & PC_MASK_PRINT_TEXT) == 0
|
||||||
&& data_offset >= 0 && data_size >= 0
|
&& data_offset > 0 && data_size >= 0
|
||||||
&& vstream_fseek(fp, data_offset + data_size, SEEK_SET) < 0)
|
&& vstream_fseek(fp, data_offset + data_size, SEEK_SET) < 0)
|
||||||
msg_fatal("seek error: %m");
|
msg_fatal("seek error: %m");
|
||||||
/* Update the state machine, even when skipping. */
|
/* Update the state machine, even when skipping. */
|
||||||
|
@ -753,7 +753,7 @@ static void post_jail_init(char *service_name, char **unused_argv)
|
|||||||
proxy_writer = 1;
|
proxy_writer = 1;
|
||||||
else if (strcmp(service_name, MAIL_SERVICE_PROXYMAP) != 0)
|
else if (strcmp(service_name, MAIL_SERVICE_PROXYMAP) != 0)
|
||||||
msg_fatal("service name must be one of %s or %s",
|
msg_fatal("service name must be one of %s or %s",
|
||||||
MAIL_SERVICE_PROXYMAP, MAIL_SERVICE_PROXYMAP);
|
MAIL_SERVICE_PROXYWRITE, MAIL_SERVICE_PROXYMAP);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pre-allocate buffers.
|
* Pre-allocate buffers.
|
||||||
|
@ -344,18 +344,20 @@ int smtpd_sasl_authenticate(SMTPD_STATE *state,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (status != XSASL_AUTH_DONE) {
|
if (status != XSASL_AUTH_DONE) {
|
||||||
|
const char *reason = (*STR(state->sasl_reply) ? STR(state->sasl_reply) :
|
||||||
|
"(reason unavailable)");
|
||||||
|
|
||||||
sasl_username = xsasl_server_get_username(state->sasl_server);
|
sasl_username = xsasl_server_get_username(state->sasl_server);
|
||||||
msg_warn("%s: SASL %.100s authentication failed: %s, sasl_username=%.100s",
|
msg_warn("%s: SASL %.100s authentication failed: %s, sasl_username=%.100s",
|
||||||
state->namaddr, sasl_method, *STR(state->sasl_reply) ?
|
state->namaddr, sasl_method, reason,
|
||||||
STR(state->sasl_reply) : "(reason unavailable)",
|
|
||||||
sasl_username ? sasl_username : "(unavailable)");
|
sasl_username ? sasl_username : "(unavailable)");
|
||||||
/* RFC 4954 Section 6. */
|
/* RFC 4954 Section 6. */
|
||||||
if (status == XSASL_AUTH_TEMP)
|
if (status == XSASL_AUTH_TEMP)
|
||||||
smtpd_chat_reply(state, "454 4.7.0 Temporary authentication failure: %s",
|
smtpd_chat_reply(state, "454 4.7.0 Temporary authentication failure: %s",
|
||||||
STR(state->sasl_reply));
|
reason);
|
||||||
else
|
else
|
||||||
smtpd_chat_reply(state, "535 5.7.8 Error: authentication failed: %s",
|
smtpd_chat_reply(state, "535 5.7.8 Error: authentication failed: %s",
|
||||||
STR(state->sasl_reply));
|
reason);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
/* RFC 4954 Section 6. */
|
/* RFC 4954 Section 6. */
|
||||||
|
@ -543,6 +543,8 @@ static void xsasl_dovecot_parse_reply_args(XSASL_DOVECOT_SERVER *server,
|
|||||||
myfree(server->username);
|
myfree(server->username);
|
||||||
server->username = 0;
|
server->username = 0;
|
||||||
}
|
}
|
||||||
|
VSTRING_RESET(reply);
|
||||||
|
VSTRING_TERMINATE(reply);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note: TAB is part of the Dovecot protocol and must not appear in
|
* Note: TAB is part of the Dovecot protocol and must not appear in
|
||||||
|
Loading…
x
Reference in New Issue
Block a user