2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-30 21:55:20 +00:00

postfix-3.6.2

This commit is contained in:
Wietse Venema
2021-07-24 00:00:00 -05:00
committed by Viktor Dukhovni
parent d4a4c518ae
commit cab3653e62
10 changed files with 80 additions and 9 deletions

View File

@@ -25571,3 +25571,44 @@ Apologies for any names omitted.
Typo (introduced: Postfix 3.4): silent_discard should be
silent-discard. File: proto/BDAT_README.html.
20210615
Bugfix (introduced: Postfix 3.4): the texthash: map
implementation did not support "postmap -F" behavior.
Reported by Christopher Gurnee, who also found the missing
code in the postmap source. File: util/dict_thash.c.
20210623
Bugfix (introduced: Postfix 3.6) false "Result too large"
(ERANGE) fatal errors in the compatibility_level parser,
because an strtol() call had no 'errno = 0' statement before
the call. Also fixed two older latent bugs of the same kind.
Problem reported by David Bohman. Files: global/compat_level.c,
postscreen/postscreen_tests.c, util/mac_expand.c.
20210705
Bugfix (introduced: Postfix 3.3): "null pointer read" error
in the cleanup daemon when "header_from_format = standard"
(the default as of Postfix 3.3) and email was submitted
with /usr/sbin/sendmail without From: header, and an all-space
full name was specified in 1) the password file, 2) with
"sendmail -F", or 3) with the NAME environment variable.
Found by Renaud Metrich. File: cleanup/cleanup_message.c.
20210708
Bugfix (introduced: 1999): the Postfix SMTP server was
sending all session transcripts to the error_notice_recipient,
instead of sending transcripts of bounced mail to the
bounce_notice_recipient. File: smtpd/smtpd_chat.c.
20210713
Bugfix (introduced: Postfix 2.4): false "too many reverse
jump" warnings in the showq daemon. The loop detection code
was comparing memory addresses instead of queue file names.
It now properly compares strings. Reported by Mehmet Avcioglu.
File: global/record.c.

View File

@@ -776,9 +776,12 @@ static void cleanup_header_done_callback(void *context)
} else {
token = tok822_alloc(TOK822_QSTRING, state->fullname);
}
tok822_externalize(state->temp2, token, TOK822_STR_NONE);
tok822_free(token);
vstring_sprintf_append(state->temp2, " <%s>",
if (token) {
tok822_externalize(state->temp2, token, TOK822_STR_NONE);
tok822_free(token);
vstring_strcat(state->temp2, " ");
}
vstring_sprintf_append(state->temp2, "<%s>",
vstring_str(state->temp1));
break;

View File

@@ -157,6 +157,7 @@ long compat_level_from_string(const char *str,
char *remainder;
start = str;
errno = 0;
major = strtol(start, &remainder, 10);
if (start < remainder && (*remainder == 0 || *remainder == '.')
&& errno != ERANGE && GOOD_MAJOR(major)) {

View File

@@ -20,8 +20,8 @@
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
#define MAIL_RELEASE_DATE "20210613"
#define MAIL_VERSION_NUMBER "3.6.1"
#define MAIL_RELEASE_DATE "20210724"
#define MAIL_VERSION_NUMBER "3.6.2"
#ifdef SNAPSHOT
#define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE

View File

@@ -323,7 +323,7 @@ int rec_get_raw(VSTREAM *stream, VSTRING *buf, ssize_t maxsize, int flags)
int rec_goto(VSTREAM *stream, const char *buf)
{
off_t offset;
static const char *saved_path;
static char *saved_path;
static off_t saved_offset;
static int reverse_count;
@@ -338,8 +338,10 @@ int rec_goto(VSTREAM *stream, const char *buf)
*/
#define REVERSE_JUMP_LIMIT 10000
if (saved_path != VSTREAM_PATH(stream)) {
saved_path = VSTREAM_PATH(stream);
if (saved_path == 0 || strcmp(saved_path, VSTREAM_PATH(stream)) != 0) {
if (saved_path)
myfree(saved_path);
saved_path = mystrdup(VSTREAM_PATH(stream));
reverse_count = 0;
saved_offset = 0;
}

View File

@@ -175,6 +175,7 @@ void psc_parse_tests(PSC_STATE *state,
* at the time that the cache entry was written.
*/
for (sp = time_stamps; sp < time_stamps + PSC_TINDX_COUNT; sp++) {
errno = 0;
*sp = strtoul(start, &cp, 10);
if (*start == 0 || (*cp != '\0' && *cp != ';') || errno == ERANGE)
*sp = PSC_TIME_STAMP_DISABLED;

View File

@@ -1301,6 +1301,7 @@ int var_reject_code;
int var_defer_code;
int var_smtpd_err_sleep;
int var_non_fqdn_code;
char *var_bounce_rcpt;
char *var_error_rcpt;
int var_smtpd_delay_reject;
char *var_rest_classes;
@@ -6431,6 +6432,7 @@ int main(int argc, char **argv)
VAR_EOD_CHECKS, DEF_EOD_CHECKS, &var_eod_checks, 0, 0,
VAR_MAPS_RBL_DOMAINS, DEF_MAPS_RBL_DOMAINS, &var_maps_rbl_domains, 0, 0,
VAR_RBL_REPLY_MAPS, DEF_RBL_REPLY_MAPS, &var_rbl_reply_maps, 0, 0,
VAR_BOUNCE_RCPT, DEF_ERROR_RCPT, &var_bounce_rcpt, 1, 0,
VAR_ERROR_RCPT, DEF_ERROR_RCPT, &var_error_rcpt, 1, 0,
VAR_REST_CLASSES, DEF_REST_CLASSES, &var_rest_classes, 0, 0,
VAR_CANONICAL_MAPS, DEF_CANONICAL_MAPS, &var_canonical_maps, 0, 0,

View File

@@ -316,7 +316,8 @@ void smtpd_chat_notify(SMTPD_STATE *state)
#define INDENT 4
notice = post_mail_fopen_nowait(mail_addr_double_bounce(),
var_error_rcpt,
(state->error_mask & MAIL_ERROR_BOUNCE) ?
var_bounce_rcpt : var_error_rcpt,
MAIL_SRC_MASK_NOTIFY, NULL_TRACE_FLAGS,
SMTPUTF8_FLAG_NONE, NO_QUEUE_ID);
if (notice == 0) {

View File

@@ -46,6 +46,7 @@
/* Utility library. */
#include <msg.h>
#include <mymalloc.h>
#include <iostuff.h>
#include <vstring.h>
#include <stringops.h>
@@ -179,6 +180,24 @@ DICT *dict_thash_open(const char *path, int open_flags, int dict_flags)
msg_warn("%s, line %d: record is in \"key: value\" format;"
" is this an alias file?", path, lineno);
/*
* Optionally treat the value as a filename, and replace the value
* with the BASE64-encoded content of the named file.
*/
if (dict_flags & DICT_FLAG_SRC_RHS_IS_FILE) {
VSTRING *base64_buf;
char *err;
if ((base64_buf = dict_file_to_b64(dict, value)) == 0) {
err = dict_file_get_error(dict);
msg_warn("%s, line %d: %s: skipping this entry",
VSTREAM_PATH(fp), lineno, err);
myfree(err);
continue;
}
value = vstring_str(base64_buf);
}
/*
* Store the value under the key. Handle duplicates
* appropriately. XXX Move this into dict_ht, but 1) that map

View File

@@ -274,6 +274,7 @@ static long atol_or_die(const char *strval)
long result;
char *remainder;
errno = 0;
result = strtol(strval, &remainder, 10);
if (*strval == 0 /* can't happen */ || *remainder != 0 || errno == ERANGE)
msg_fatal("mac_exp_eval: bad conversion: %s", strval);