]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.5-20190418
authorWietse Venema <wietse@porcupine.org>
Thu, 18 Apr 2019 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Sun, 28 Apr 2019 22:45:43 +0000 (18:45 -0400)
postfix/HISTORY
postfix/html/postconf.5.html
postfix/man/man5/postconf.5
postfix/proto/postconf.proto
postfix/src/global/mail_version.h
postfix/src/milter/test-milter.c
postfix/src/smtp/smtp_addr.c
postfix/src/smtpd/smtpd.c
postfix/src/util/printable.c
postfix/src/util/stringops.h
postfix/src/util/unix_dgram_connect.c

index 90eb4946c8897f0328706131bed963d5d8632bba..d8dacdcad65a1bb25f35308d7a97e6168c599ac5 100644 (file)
@@ -24219,3 +24219,24 @@ Apologies for any names omitted.
        could exhaust LMTP server resources, resulting in two-second
        pauses between email deliveries. This problem was investigated
        by Juliana Rodrigueiro. File: smtp/smtp_connect.c.
+
+20190331
+
+       Documentation: tlsext_padding is not a tls_ssl_options
+       feature. File: proto/postconf.proto.
+
+20190401
+
+       Portability: to avoid a compile-time error on Solaris, added
+       "#undef sun" to util/unix_dgram_connect.c.
+
+20190403
+
+       Bugfix (introduced: Postfix 2.3): a censoring filter broke
+       multiline Milter responses for header/body events. Problem
+       report by Andreas Thienemann. Files: util/printable.c,
+       util/stringops.h, smtpd/smtpd.c.
+
+       Bugfix (introduced: Postfix 3.3): "smtp_mx_address_limit = 0"
+       no longer meant 'unlimited'. Problem report by Luc Pardon.
+       File: smtp/smtp_addr.c.
index 88b8b87bf3fcdb8101b909e4036e51f0f231bbc0..6d2044d93cc2c94db908d4c1825b10facb3d73ed 100644 (file)
@@ -18890,9 +18890,6 @@ SSL_CTX_set_options(3).</dd>
 
 <dt><b>PRIORITIZE_CHACHA</b></dt> <dd>Postfix &ge; 3.4. See SSL_CTX_set_options(3).</dd>
 
-<dt><b>TLSEXT_PADDING</b></dt> <dd>Postfix &ge; 3.4. See
-SSL_CTX_set_options(3).</dd>
-
 </dl>
 
 <p> This feature is available in Postfix 2.11 and later.  </p>
index a97621d4db7806a6a508823de2f95b58535e742e..db745eaf55b6787439c99d09fa6707dba1c93af6 100644 (file)
@@ -13221,10 +13221,6 @@ Postfix
 .IP "\fBPRIORITIZE_CHACHA\fR"
 Postfix >= 3.4. See SSL_CTX_\fBset_options\fR(3).
 .br
-.IP "\fBTLSEXT_PADDING\fR"
-Postfix >= 3.4. See
-SSL_CTX_\fBset_options\fR(3).
-.br
 .br
 .PP
 This feature is available in Postfix 2.11 and later.
index 77a1baff819d6abb7c2ca4597edf827aadfba1be..9851adb77cbe42cc7bfc61dd347e68c355930639 100644 (file)
@@ -16130,9 +16130,6 @@ SSL_CTX_set_options(3).</dd>
 
 <dt><b>PRIORITIZE_CHACHA</b></dt> <dd>Postfix &ge; 3.4. See SSL_CTX_set_options(3).</dd>
 
-<dt><b>TLSEXT_PADDING</b></dt> <dd>Postfix &ge; 3.4. See
-SSL_CTX_set_options(3).</dd>
-
 </dl>
 
 <p> This feature is available in Postfix 2.11 and later.  </p>
index 61be3f1ed5fab03cfeef2d4fb3cffffdd4dd25e4..a7a5473f49f3b36886175cae4734324b7af07e82 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      "20190330"
+#define MAIL_RELEASE_DATE      "20190418"
 #define MAIL_VERSION_NUMBER    "3.5"
 
 #ifdef SNAPSHOT
index ac0d8e52ef629ac24400dbce1d97ffc24b014c00..0494ff0e70bf94dcc983b41b3f9ecc97965cdaeb 100644 (file)
@@ -18,7 +18,8 @@
 /*     Arguments (multiple alternatives are separated by "\fB|\fR"):
 /* .IP "\fB-a accept|tempfail|reject|discard|skip|\fIddd x.y.z text\fR"
 /*     Specifies a non-default reply for the MTA command specified
-/*     with \fB-c\fR. The default is \fBtempfail\fR.
+/*     with \fB-c\fR. The default is \fBtempfail\fR. The \fItext\fR
+/*     is repeated once, to produce multi-line reply text.
 /* .IP "\fB-A address\fR"
 /*     Add the specified recipient address (specify ESMTP parameters
 /*     separated by space). Multiple -A options are supported.
@@ -218,7 +219,7 @@ static int test_reply(SMFICTX *ctx, int code)
     if (code == SMFIR_REPLYCODE) {
        if (smfi_setmlreply(ctx, reply_code, reply_dsn, reply_message, reply_message, (char *) 0) == MI_FAILURE)
            fprintf(stderr, "smfi_setmlreply failed\n");
-       printf("test_reply %s\n", reply_code);
+       printf("test_reply %s\n\n", reply_code);
        return (reply_code[0] == '4' ? SMFIS_TEMPFAIL : SMFIS_REJECT);
     } else {
        printf("test_reply %d\n\n", code);
index f374adad52ee75552ae5481c56ab81e66e2e8447..2210ff7d81e033f1129d3a5beab681cece1a22ae 100644 (file)
@@ -623,7 +623,7 @@ DNS_RR *smtp_domain_addr(const char *name, DNS_RR **mxrr, int misc_flags,
            if (var_smtp_rand_addr)
                addr_list = dns_rr_shuffle(addr_list);
            addr_list = dns_rr_sort(addr_list, SMTP_COMPARE_ADDR(misc_flags));
-           if (var_smtp_balance_inet_proto)
+           if (var_smtp_mxaddr_limit > 0 && var_smtp_balance_inet_proto)
                addr_list = smtp_balance_inet_proto(addr_list, misc_flags,
                                                    var_smtp_mxaddr_limit);
        }
@@ -683,7 +683,7 @@ DNS_RR *smtp_host_addr(const char *host, int misc_flags, DSN_BUF *why)
        /* The following changes the order of equal-preference hosts. */
        if (inet_proto_info()->ai_family_list[1] != 0)
            addr_list = dns_rr_sort(addr_list, SMTP_COMPARE_ADDR(misc_flags));
-       if (var_smtp_balance_inet_proto)
+       if (var_smtp_mxaddr_limit > 0 && var_smtp_balance_inet_proto)
            addr_list = smtp_balance_inet_proto(addr_list, misc_flags,
                                                var_smtp_mxaddr_limit);
     }
index f3e107072a3ce96cade644f4213ea61a19b828a1..124449819e760af4c079cc1f22de07ef3e392dbb 100644 (file)
@@ -3528,6 +3528,11 @@ static int common_post_message_handling(SMTPD_STATE *state)
     int     saved_err;
     const CLEANUP_STAT_DETAIL *detail;
 
+#define IS_SMTP_REJECT(s) \
+       (((s)[0] == '4' || (s)[0] == '5') \
+        && ISDIGIT((s)[1]) && ISDIGIT((s)[2]) \
+        && ((s)[3] == '\0' || (s)[3] == ' ' || (s)[3] == '-'))
+
     if (state->err == CLEANUP_STAT_OK
        && SMTPD_STAND_ALONE(state) == 0
        && (err = smtpd_check_eod(state)) != 0) {
@@ -3598,7 +3603,10 @@ static int common_post_message_handling(SMTPD_STATE *state)
        if (state->err == 0) {
            why = vstring_alloc(10);
            state->err = mail_stream_finish(state->dest, why);
-           printable(STR(why), ' ');
+           if (IS_SMTP_REJECT(STR(why)))
+               printable_except(STR(why), ' ', "\r\n");
+           else
+               printable(STR(why), ' ');
        } else
            mail_stream_cleanup(state->dest);
        state->dest = 0;
@@ -3633,11 +3641,6 @@ static int common_post_message_handling(SMTPD_STATE *state)
      * 
      * See also: qmqpd.c
      */
-#define IS_SMTP_REJECT(s) \
-       (((s)[0] == '4' || (s)[0] == '5') \
-        && ISDIGIT((s)[1]) && ISDIGIT((s)[2]) \
-        && ((s)[3] == '\0' || (s)[3] == ' ' || (s)[3] == '-'))
-
     if (state->err == CLEANUP_STAT_OK) {
        state->error_count = 0;
        state->error_mask = 0;
index a37ff6306410478105b3416ed31b6407cd69978d..6c148fd0041a626056f0af2e26fb1a6019724c68 100644 (file)
 /*     char    *printable(buffer, replacement)
 /*     char    *buffer;
 /*     int     replacement;
+/*
+/*     char    *printable_except(buffer, replacement, except)
+/*     char    *buffer;
+/*     int     replacement;
+/*     const char *except;
 /* DESCRIPTION
 /*     printable() replaces non-printable characters
 /*     in its input with the given replacement.
@@ -24,6 +29,8 @@
 /* .IP replacement
 /*     Replacement value for characters in \fIbuffer\fR that do not
 /*     pass the ASCII isprint(3) test or that are not valid UTF8.
+/* .IP except
+/*     Null-terminated sequence of non-replaced ASCII characters.
 /* LICENSE
 /* .ad
 /* .fi
 /*     IBM T.J. Watson Research
 /*     P.O. Box 704
 /*     Yorktown Heights, NY 10598, USA
+/*
+/*     Wietse Venema
+/*     Google, Inc.
+/*     111 8th Avenue
+/*     New York, NY 10011, USA
 /*--*/
 
 /* System library. */
 
 #include "sys_defs.h"
 #include <ctype.h>
+#include <string.h>
 
 /* Utility library. */
 
 
 int util_utf8_enable = 0;
 
+/* printable -  binary compatibility */
+
+#undef printable
+
+char   *printable(char *, int);
+
 char   *printable(char *string, int replacement)
+{
+    return (printable_except(string, replacement, (char *) 0));
+}
+
+/* printable_except -  pass through printable or other preserved characters */
+
+char   *printable_except(char *string, int replacement, const char *except)
 {
     unsigned char *cp;
     int     ch;
@@ -57,7 +83,7 @@ char   *printable(char *string, int replacement)
      */
     cp = (unsigned char *) string;
     while ((ch = *cp) != 0) {
-       if (ISASCII(ch) && ISPRINT(ch)) {
+       if (ISASCII(ch) && (ISPRINT(ch) || (except && strchr(except, ch)))) {
            /* ok */
        } else if (util_utf8_enable && ch >= 194 && ch <= 254
                   && cp[1] >= 128 && cp[1] < 192) {
index c227b84600239f3f121033c9cc3fe27b48d53bac..c54a5268b82ee0480902e205586fb054b4acf735 100644 (file)
@@ -20,7 +20,7 @@
   * External interface.
   */
 extern int util_utf8_enable;
-extern char *printable(char *, int);
+extern char *printable_except(char *, int, const char *);
 extern char *neuter(char *, const char *, int);
 extern char *lowercase(char *);
 extern char *casefoldx(int, VSTRING *, const char *, ssize_t);
@@ -32,6 +32,9 @@ extern char *mystrtok(char **, const char *);
 extern char *mystrtokq(char **, const char *, const char *);
 extern char *translit(char *, const char *, const char *);
 
+#define printable(string, replacement) \
+       printable_except((string), (replacement), (char *) 0)
+
 #ifndef HAVE_BASENAME
 #define basename postfix_basename
 extern char *basename(const char *);
index b3492f73110c8ffe2e21f599386687754c334e33..83a035e76c2ef9140cf02f053a352b1debe2b585 100644 (file)
@@ -60,6 +60,7 @@
 int     unix_dgram_connect(const char *path, int block_mode)
 {
     const char myname[] = "unix_dgram_connect";
+#undef sun
     struct sockaddr_un sun;
     ssize_t path_len;
     int     sock;