]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.5.12 v3.5.12
authorWietse Venema <wietse@porcupine.org>
Sat, 24 Jul 2021 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Sun, 25 Jul 2021 18:20:36 +0000 (14:20 -0400)
postfix/HISTORY
postfix/src/cleanup/cleanup_message.c
postfix/src/global/mail_version.h
postfix/src/global/record.c
postfix/src/postscreen/postscreen_tests.c
postfix/src/smtpd/smtpd.c
postfix/src/smtpd/smtpd_chat.c
postfix/src/util/dict_thash.c
postfix/src/util/mac_expand.c

index 9c36cb4a9468b3d8f6674babac18678c2f422b10..a0fd045b2ac573bb04cb18ae048ee7e5c9d55252 100644 (file)
@@ -24948,3 +24948,42 @@ Apologies for any names omitted.
        an earlier supported version, or when sharing Postfix 3.6
        configuration files with an earlier supported Postfix
        version. File: global/mail_params.c.
+
+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: 1999, Postfix 2.11) latent false "Result too
+       large" (ERANGE) errors because an strtol() call had no 'errno
+       = 0' statement before the call. Back-ported from Postfix 3.6.
+       Files: 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.
index 391c7119fe39a03341888c3a13f054b9f802e012..902642f19382eaaa2bb4aef7f3bf699ade905d58 100644 (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;
 
index a3bc58ea59f98017a9e0b9190d146bfe3adb4486..45b679d8d7d69b6e83371b9598c3881ccd263c24 100644 (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.5.11"
+#define MAIL_RELEASE_DATE      "20210724"
+#define MAIL_VERSION_NUMBER    "3.5.12"
 
 #ifdef SNAPSHOT
 #define MAIL_VERSION_DATE      "-" MAIL_RELEASE_DATE
index 1dc9b757f2e0250f8ab516c8c928b1905a5e9cc3..80cb1ac3b3c7e3cde7c56ceb720bd09e11832d21 100644 (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;
 
@@ -336,11 +336,12 @@ int     rec_goto(VSTREAM *stream, const char *buf)
      * is likely to insert 10000 message headers, but someone might append
      * 10000 recipients.
      */
-#define STREQ(x,y) ((x) == (y) && strcmp((x), (y)) == 0)
 #define REVERSE_JUMP_LIMIT     10000
 
-    if (!STREQ(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;
     }
index 80cbc97d68591b2d9fe9ff7623029c4c9450d8b8..21ebde8a3c7210c5d0df5d442c81eb5e63582e9a 100644 (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;
index da7227f7492f8a63bac876729234fc5b6133c7a0..a6c12993dc1432ec747f37898b960bdcc4366621 100644 (file)
@@ -1291,6 +1291,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;
@@ -6418,6 +6419,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,
index 63795b86152de39157dc12a404bfed960fec6ee5..c172ab3d15ae1da5aa3b87042cd758ed62a52963 100644 (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) {
index a121ead35518390e3abf12edbd087e649e9e6133..5012fb9e2739a1dbb35f89b89db976508d042265 100644 (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
index 8ba0071bc57a0d21dfac1f7464a2914ad7dabd15..1679e5e0f276213aa7bc95e42513c117ca1c2a7c 100644 (file)
@@ -226,6 +226,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);