]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.8-20221006
authorWietse Venema <wietse@porcupine.org>
Thu, 6 Oct 2022 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Fri, 7 Oct 2022 14:39:34 +0000 (10:39 -0400)
postfix/HISTORY
postfix/WISHLIST
postfix/makedefs
postfix/src/global/mail_version.h
postfix/src/global/verify.c
postfix/src/oqmgr/qmgr_message.c
postfix/src/postqueue/postqueue.c
postfix/src/qmgr/qmgr_message.c
postfix/src/util/sys_defs.h

index a650537fde66c60fc3907a94cca6dfbd98a359a6..d9724778e53a7c93f46fc4f97e260fa138eb6a86 100644 (file)
@@ -26592,3 +26592,35 @@ Apologies for any names omitted.
        Updated the postscreen_dnsbl_sites documentation, based
        on questions on the postfix-users mailing list.  File:
        proto/postconf.proto.
+
+20220905
+
+       Cleanup: uninitialized verify_append() request status in case
+       of a null original recipient address. File: global/verify.c.
+
+20220907
+
+       Support for Linux 6.x. Eray Aslan. Files: makedefs,
+       util/sys_defs.h.
+
+20220930
+
+       Documented the use of the JSON LINES format in the postqueue(1)
+       manpage. File: postqueue/postqueue.c.
+
+20221006
+
+       Bugfix (introduced: Postfix 3.7). A message could falsely
+       be flagged as corrupt with "warning: Unexpected record type
+       'X'. Such messages were moved to the "corrupt" queue
+       directory, where they may still be found.
+
+       This could happen for messages with 500 or more recipients,
+       or with fewer recipients on a busy mail server. Problem
+       reported by Frank Brendel, reproduced by John Alex. Files:
+       qmgr/qmgr_message.c, oqmgr/qmgr_message.c.
+
+       A file in the "corrupt" queue directory may be inspected
+       with the command "postcat /var/spool/postfix/corrupt/<filename>.
+       If delivery of the file is still desired, the file can be
+       moved back to /var/spool/postfix/incoming.
index 6738649a9dff317c0582fded1e4cad9c4c518805..6a736d434f5992f72340003e1f7aada6f524bac7 100644 (file)
@@ -9,11 +9,15 @@ Wish list:
        Scan Postfix code with github.com/googleprojectzero/weggli
        (depends on "rust").
 
-       Migrate masquerade_domains from ARGV to STRING_LIST.
+       Migrate masquerade_domains from ARGV to STRING_LIST, or
+       deprecate this feature because it breaks table-driven address
+       validation.
 
-       Enforce var_line_limit in util/attr_scan*c.
+       Enforce var_line_limit in util/attr_scan*c. This is needed if
+       we want to expose Postfix RPC protocols externally.
 
-       Investigate clang-format compatibility compared to indent.
+       Investigate clang-format compatibility as a possible migration
+       away from indent. This requires that the output is stable.
 
        Can tests use LD_PRELOAD to inject fake modules such as
        fake_dns(3), fake_msg(3), fake_myaddrinfo(3) and so on?
@@ -28,17 +32,25 @@ Wish list:
 
        WARN_IF_REJECT like prefix that disables the error counter increment.
 
-       postscreen_dnsbl_sites is evaluated in the reverse order, breaking
-       expectations when different reply patterns have different weights.
-       We need a compatibility_level feature to correct this.
+       Consider migrating Postfix server sockets from directory
+       $queue_directory/public to $queue_directory/protected. The
+       directory $queue_directory/public can then be used for
+       non-Postfix listeners (one subdirectory per application).
 
        FILTER_README needs some text on multi-instance implementations,
        and existing multi-instance references need to be updated.
 
        Fix code that still uses "long" for data_size and data_offset,
-       and that uses "%ld" in sscanf().
+       and sscanf("%ld or strtou?l()). This seems relevant for 32-bit
+       systems. This would use a new REC_TYPE_OFFS with a corresponding
+       data type of off_t, using off_cvt() for conversion from string,
+       and new code to convert off_t to string.
 
        A smart query service for live Postfix tables that outputs JSON?
+       If the idea is to introspect on a running Postfix system, this
+       involves adding an RPC endpoint to specific Postfix services.
+       That could work for single-instance services like qmgr, verify,
+       postscreen.
 
        JSON logging?
 
index 2839f3a8a89b35a227d1135ffd34a75c26329876..9e061b379c43235eb4c3c42dfcdea2cd2239e214 100644 (file)
@@ -627,7 +627,8 @@ EOF
                : ${SHLIB_ENV="LD_LIBRARY_PATH=`pwd`/lib"}
                : ${PLUGIN_LD="${CC-gcc} -shared"}
                ;;
- Linux.[345].*)        SYSTYPE=LINUX$RELEASE_MAJOR
+    Linux.[3456].*)
+               SYSTYPE=LINUX$RELEASE_MAJOR
                case "$CCARGS" in
                 *-DNO_DB*) ;;
                 *-DHAS_DB*) ;;
index 820708a2ded0dab7aa1b7edf4bc4ed95a8c47e4a..302518aca6bebb3d963f64f1f9be3fd88d281210 100644 (file)
@@ -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      "20220816"
+#define MAIL_RELEASE_DATE      "20221006"
 #define MAIL_VERSION_NUMBER    "3.8"
 
 #ifdef SNAPSHOT
index cfb5648592d7a99746e84bcca3df211b30281667..2ce091a5d5758a775ed5322bd4ad181b804ce259 100644 (file)
@@ -108,6 +108,8 @@ int     verify_append(const char *queue_id, MSG_STATS *stats,
        if (recipient->orig_addr[0])
            req_stat = verify_clnt_update(recipient->orig_addr, vrfy_stat,
                                          my_dsn.reason);
+       else
+           req_stat = VRFY_STAT_OK;
        /* Two verify updates for one verify request! */
        if (req_stat == VRFY_STAT_OK
            && strcmp(recipient->address, recipient->orig_addr) != 0)
index 96409ceb7f6af4184892fb05e4ff5e8139437328..b885264a20d049c125b3700ea663868ac104b44f 100644 (file)
@@ -465,9 +465,15 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
                        message->rflags |= QMGR_READ_FLAG_SEEN_ALL_NON_RCPT;
                        break;
                    }
-                   /* Examine non-recipient records in extracted segment. */
-                   if (vstream_fseek(message->fp, message->data_offset
-                                     + message->data_size, SEEK_SET) < 0)
+
+                   /*
+                    * Examine non-recipient records in the extracted
+                    * segment. Note that this skips to the message start
+                    * record, because the handler for that record changes
+                    * the expectations for allowed record types.
+                    */
+                   if (vstream_fseek(message->fp, message->data_offset,
+                                     SEEK_SET) < 0)
                        msg_fatal("seek file %s: %m", VSTREAM_PATH(message->fp));
                    continue;
                }
index 09e5bcaf86bab6465085f38cb2f06990fb6a123a..ca8bcd3488d690944072dcfe15e0b4cb641dfb95 100644 (file)
 /*
 /*     This feature is available with Postfix version 2.4 and later.
 /* .IP "\fB-j\fR"
-/*     Produce a queue listing in JSON format, based on output
-/*     from the showq(8) daemon.  The result is a stream of zero
-/*     or more JSON objects, one per queue file.  Each object is
-/*     followed by a newline character to support simple streaming
-/*     parsers. See "\fBJSON OBJECT FORMAT\fR" below for details.
+/*     Produce a queue listing in JSON LINES format, based on
+/*     output from the showq(8) daemon. See "\fBJSON OBJECT
+/*     FORMAT\fR" below for details.
 /*
 /*     This feature is available in Postfix 3.1 and later.
 /* .IP \fB-p\fR
index 8b5631d41fc60441c6ce76e8934096642a07672e..79143f3d3edbea5dfb813c6aa728a0ee198c33a4 100644 (file)
@@ -505,9 +505,15 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
                        message->rflags |= QMGR_READ_FLAG_SEEN_ALL_NON_RCPT;
                        break;
                    }
-                   /* Examine non-recipient records in extracted segment. */
-                   if (vstream_fseek(message->fp, message->data_offset
-                                     + message->data_size, SEEK_SET) < 0)
+
+                   /*
+                    * Examine non-recipient records in the extracted
+                    * segment. Note that this skips to the message start
+                    * record, because the handler for that record changes
+                    * the expectations for allowed record types.
+                    */
+                   if (vstream_fseek(message->fp, message->data_offset,
+                                     SEEK_SET) < 0)
                        msg_fatal("seek file %s: %m", VSTREAM_PATH(message->fp));
                    continue;
                }
index c9ebc3375b3a5646a4de3b03ba029cd843fa0604..37e460f9ccf363b3c38c276de07481d8785a442e 100644 (file)
@@ -751,7 +751,8 @@ extern int initgroups(const char *, int);
  /*
   * LINUX.
   */
-#if defined(LINUX2) || defined(LINUX3) || defined(LINUX4) || defined(LINUX5)
+#if defined(LINUX2) || defined(LINUX3) || defined(LINUX4) || defined(LINUX5) \
+       || defined(LINUX6)
 #define SUPPORTED
 #define UINT32_TYPE    unsigned int
 #define UINT16_TYPE    unsigned short