]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.0.5 v3.0.5
authorWietse Venema <wietse@porcupine.org>
Sun, 15 May 2016 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Sun, 15 May 2016 21:05:54 +0000 (17:05 -0400)
15 files changed:
postfix/HISTORY
postfix/conf/header_checks
postfix/html/header_checks.5.html
postfix/html/postscreen.8.html
postfix/makedefs
postfix/man/man5/header_checks.5
postfix/man/man8/postscreen.8
postfix/proto/header_checks
postfix/src/cleanup/cleanup.h
postfix/src/cleanup/cleanup_addr.c
postfix/src/cleanup/cleanup_envelope.c
postfix/src/cleanup/cleanup_milter.c
postfix/src/global/mail_version.h
postfix/src/postscreen/postscreen.c
postfix/src/util/sys_defs.h

index 201080f784d89a7f94325cfe2023be24a1cbd3e4..d56d40eb29e9b4525a0c5471283f7e0d2c9c8887 100644 (file)
@@ -21739,3 +21739,25 @@ Apologies for any names omitted.
        Documentation (introduced: Postfix 3.0): wrong paramester
        name in lmtp_address_verify_target description. File:
        proto/posconf.proto
+
+20160310
+
+       Bugfix (introduced: Postfix 2.6): the Milter SMFIR_CHGFROM
+       (replace sender) request lost the sender_bcc_maps address.
+       Fixed by moving some record keeping to the sender output
+       function.  Files: cleanup/cleanup_envelope.c,
+       cleanup/cleanup_addr.c, cleanup/cleanup_milter.c,
+       cleanup/cleanup.h, regression tests.
+
+20160410
+
+       Bugfix (introduced: Postfix 2.6): the "bad filetype"
+       header_checks pattern falsely rejected Content-Mumble headers
+       with ``name="example"; x-apple-part-url="example.com"''.
+       Fixed by respecting the ";" separator between content
+       attribute values.  Reported by Cedric Knight.  File:
+       proto/header_checks.
+
+20160515
+
+       Portability: OpenBSD 6.0. Files: makedefs, util/sys_defs.h.
index 90fd45421251a86bd4363ca5829575e7eb386c47..188cc9ccf645205f03b73061d3f6801ac5681381 100644 (file)
 #            header_checks = pcre:/etc/postfix/header_checks.pcre
 # 
 #        /etc/postfix/header_checks.pcre:
-#            /^Content-(Disposition|Type).*name\s*=\s*"?(.*(\.|=2E)(
+#            /^Content-(Disposition|Type).*name\s*=\s*"?([^;]*(\.|=2E)(
 #              ade|adp|asp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|
 #              hlp|ht[at]|
 #              inf|ins|isp|jse?|lnk|md[betw]|ms[cipt]|nws|
index b47c60fb88a53177030d200e64d31b97465e7f16..58f3fd8aa990f2a7df206a5463a6493df9ec2eea 100644 (file)
@@ -415,7 +415,7 @@ HEADER_CHECKS(5)                                              HEADER_CHECKS(5)
            <a href="postconf.5.html#header_checks">header_checks</a> = <a href="pcre_table.5.html">pcre</a>:/etc/postfix/header_checks.pcre
 
        /etc/postfix/header_checks.<a href="pcre_table.5.html">pcre</a>:
-           /^Content-(Disposition|Type).*name\s*=\s*"?(.*(\.|=2E)(
+           /^Content-(Disposition|Type).*name\s*=\s*"?([^;]*(\.|=2E)(
              ade|adp|asp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|
              hlp|ht[at]|
              inf|ins|isp|jse?|lnk|md[betw]|ms[cipt]|nws|
index ccf9a30466df0363c4dc3402da4ba87bb3e29fd9..d4948b370b61ef7045ed5cad690406248c2e5cf7 100644 (file)
@@ -81,10 +81,10 @@ POSTSCREEN(8)                                                    POSTSCREEN(8)
 
        The  optional "after 220 server greeting" tests involve <a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s
        built-in SMTP protocol engine. When these tests succeed,  <a href="postscreen.8.html"><b>postscreen</b>(8)</a>
-       adds  the client to the temporary whitelist, but it cannot not hand off
-       the "live" connection to a Postfix SMTP server process in the middle of
-       a session.  Instead, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> defers attempts to deliver mail with
-       a 4XX status, and waits for the client to disconnect.  When the  client
+       adds  the client to the temporary whitelist, but it cannot hand off the
+       "live" connection to a Postfix SMTP server process in the middle  of  a
+       session.  Instead, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> defers attempts to deliver mail with a
+       4XX status, and waits for the client to disconnect.   When  the  client
        connects  again, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will allow the client to talk to a Post-
        fix SMTP server process (provided that the  whitelist  status  has  not
        expired).   <a href="postscreen.8.html"><b>postscreen</b>(8)</a>  mitigates  the  impact of this limitation by
index dbdc091dba17d13a7be23bbcce66878e3eb12402..318d76db7ea16694f9ab0976ae6cca54ba156a3f 100644 (file)
@@ -284,6 +284,15 @@ case "$SYSTEM.$RELEASE" in
                : ${SHLIB_ENV="LD_LIBRARY_PATH=`pwd`/lib"}
                : ${PLUGIN_LD="${CC} -shared"}
                ;;
+  OpenBSD.6*)  SYSTYPE=OPENBSD6
+               : ${CC=cc}
+               : ${SHLIB_SUFFIX=.so.1.0}
+               : ${SHLIB_CFLAGS=-fPIC}
+               : ${SHLIB_LD="${CC} -shared"' -Wl,-soname,${LIB}'}
+               : ${SHLIB_RPATH='-Wl,-rpath,${SHLIB_DIR}'}
+               : ${SHLIB_ENV="LD_LIBRARY_PATH=`pwd`/lib"}
+               : ${PLUGIN_LD="${CC} -shared"}
+               ;;
   ekkoBSD.1*)  SYSTYPE=EKKOBSD1
                ;;
    NetBSD.1*)  SYSTYPE=NETBSD1
index 6549b7304c9978ccb72aee8bbd515105128e7fb8..034967c78f88ed18d2ab786f4d5863e36da280c2 100644 (file)
@@ -438,7 +438,7 @@ sub\-expressions is to recognize Windows CLSID strings.
     header_checks = pcre:/etc/postfix/header_checks.pcre
 
 /etc/postfix/header_checks.pcre:
-    /^Content\-(Disposition|Type).*name\es*=\es*"?(.*(\e.|=2E)(
+    /^Content\-(Disposition|Type).*name\es*=\es*"?([^;]*(\e.|=2E)(
       ade|adp|asp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|
       hlp|ht[at]|
       inf|ins|isp|jse?|lnk|md[betw]|ms[cipt]|nws|
index 4a9e855632e679895d7e66cfabc4730096f711b2..505502615f2824494075e0932b6036c8117c508b 100644 (file)
@@ -93,7 +93,7 @@ traffic from dial\-up and residential networks.
 The optional "after 220 server greeting" tests involve
 \fBpostscreen\fR(8)'s built\-in SMTP protocol engine. When
 these tests succeed, \fBpostscreen\fR(8) adds the client
-to the temporary whitelist, but it cannot not hand off the
+to the temporary whitelist, but it cannot hand off the
 "live" connection to a Postfix SMTP server process in the
 middle of a session.  Instead, \fBpostscreen\fR(8) defers
 attempts to deliver mail with a 4XX status, and waits for
index b51e182f9ddba3ede62ca74d30ef8c8c10723843..2399b4770f4574917c87cd639639352eb88aaf3d 100644 (file)
 #          header_checks = pcre:/etc/postfix/header_checks.pcre
 #
 #      /etc/postfix/header_checks.pcre:
-#          /^Content-(Disposition|Type).*name\es*=\es*"?(.*(\e.|=2E)(
+#          /^Content-(Disposition|Type).*name\es*=\es*"?([^;]*(\e.|=2E)(
 #            ade|adp|asp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|
 #            hlp|ht[at]|
 #            inf|ins|isp|jse?|lnk|md[betw]|ms[cipt]|nws|
index 9bd7f1b87a9a4ad35a4981f94af0444ea72b1902..409aa1b892762bed946ca29cfef50224ec04d6ea 100644 (file)
@@ -289,7 +289,7 @@ extern void cleanup_out_recipient(CLEANUP_STATE *, const char *, int, const char
  /*
   * cleanup_addr.c.
   */
-extern void cleanup_addr_sender(CLEANUP_STATE *, const char *);
+extern off_t cleanup_addr_sender(CLEANUP_STATE *, const char *);
 extern void cleanup_addr_recipient(CLEANUP_STATE *, const char *);
 extern void cleanup_addr_bcc_dsn(CLEANUP_STATE *, const char *, const char *, int);
 
index f889e1a60ec9559ed944c566cb6d8b3711f83052..b6396ada860e8b6840458a1db7552c20be95af0f 100644 (file)
@@ -6,7 +6,7 @@
 /* SYNOPSIS
 /*     #include <cleanup.h>
 /*
-/*     void    cleanup_addr_sender(state, addr)
+/*     off_t   cleanup_addr_sender(state, addr)
 /*     CLEANUP_STATE *state;
 /*     const char *addr;
 /*
@@ -29,7 +29,8 @@
 /*     sender/recipient auto bcc address generation.
 /*
 /*     cleanup_addr_sender() processes sender envelope information and updates
-/*     state->sender.
+/*     state->sender. The result value is the offset of the record that
+/*     follows the sender record if milters are enabled, otherwise zero.
 /*
 /*     cleanup_addr_recipient() processes recipient envelope information
 /*     and updates state->recip.
@@ -81,6 +82,7 @@
 /* Global library. */
 
 #include <rec_type.h>
+#include <record.h>
 #include <cleanup_user.h>
 #include <mail_params.h>
 #include <ext_prop.h>
 
 /* cleanup_addr_sender - process envelope sender record */
 
-void    cleanup_addr_sender(CLEANUP_STATE *state, const char *buf)
+off_t   cleanup_addr_sender(CLEANUP_STATE *state, const char *buf)
 {
+    const char myname[] = "cleanup_addr_sender";
     VSTRING *clean_addr = vstring_alloc(100);
+    off_t   after_sender_offs = 0;
     const char *bcc;
+    size_t  len;
 
     /*
      * Note: an unqualified envelope address is for all practical purposes
@@ -148,6 +153,15 @@ void    cleanup_addr_sender(CLEANUP_STATE *state, const char *buf)
     if (state->sender)                         /* XXX Can't happen */
        myfree(state->sender);
     state->sender = mystrdup(STR(clean_addr)); /* Used by Milter client */
+    /* Fix 20160310: Moved from cleanup_envelope.c. */
+    if (state->milters || cleanup_milters) {
+       /* Make room to replace sender. */
+       if ((len = LEN(clean_addr)) < REC_TYPE_PTR_PAYL_SIZE)
+           rec_pad(state->dst, REC_TYPE_PTR, REC_TYPE_PTR_PAYL_SIZE - len);
+       /* Remember the after-sender record offset. */
+       if ((after_sender_offs = vstream_ftell(state->dst)) < 0)
+           msg_fatal("%s: vstream_ftell %s: %m:", myname, cleanup_path);
+    }
     if ((state->flags & CLEANUP_FLAG_BCC_OK)
        && *STR(clean_addr)
        && cleanup_send_bcc_maps) {
@@ -162,6 +176,7 @@ void    cleanup_addr_sender(CLEANUP_STATE *state, const char *buf)
        }
     }
     vstring_free(clean_addr);
+    return after_sender_offs;
 }
 
 /* cleanup_addr_recipient - process envelope recipient */
index 261542ba81da64f8554411d561ae4a3caf70a834..c169a96566fb6ef5ca5fe46c8fe168051197cf97 100644 (file)
@@ -379,6 +379,8 @@ static void cleanup_envelope_process(CLEANUP_STATE *state, int type,
        return;
     }
     if (type == REC_TYPE_FROM) {
+       off_t after_sender_offs;
+
        /* Allow only one instance. */
        if (state->sender != 0) {
            msg_warn("%s: message rejected: multiple envelope sender records",
@@ -391,14 +393,10 @@ static void cleanup_envelope_process(CLEANUP_STATE *state, int type,
            if ((state->sender_pt_offset = vstream_ftell(state->dst)) < 0)
                msg_fatal("%s: vstream_ftell %s: %m:", myname, cleanup_path);
        }
-       cleanup_addr_sender(state, buf);
+       after_sender_offs = cleanup_addr_sender(state, buf);
        if (state->milters || cleanup_milters) {
-           /* Make room to replace sender. */
-           if ((len = strlen(state->sender)) < REC_TYPE_PTR_PAYL_SIZE)
-               rec_pad(state->dst, REC_TYPE_PTR, REC_TYPE_PTR_PAYL_SIZE - len);
            /* Remember the after-sender record offset. */
-           if ((state->sender_pt_target = vstream_ftell(state->dst)) < 0)
-               msg_fatal("%s: vstream_ftell %s: %m:", myname, cleanup_path);
+           state->sender_pt_target = after_sender_offs;
        }
        if (cleanup_milters != 0
            && state->milters == 0
index cc60f3595370d4d4f26469a83f4b14b516f8537c..24edbcca9eb7adddf0e9ba376bf3073ec355587e 100644 (file)
@@ -1325,6 +1325,7 @@ static const char *cleanup_chg_from(void *context, const char *ext_from,
     const char *myname = "cleanup_chg_from";
     CLEANUP_STATE *state = (CLEANUP_STATE *) context;
     off_t   new_sender_offset;
+    off_t   after_sender_offs;
     int     addr_count;
     TOK822 *tree;
     TOK822 *tp;
@@ -1388,10 +1389,11 @@ static const char *cleanup_chg_from(void *context, const char *ext_from,
        }
     }
     tok822_free_tree(tree);
-    cleanup_addr_sender(state, STR(int_sender_buf));
+    after_sender_offs = cleanup_addr_sender(state, STR(int_sender_buf));
     vstring_free(int_sender_buf);
     cleanup_out_format(state, REC_TYPE_PTR, REC_TYPE_PTR_FORMAT,
                       (long) state->sender_pt_target);
+    state->sender_pt_target = after_sender_offs;
 
     /*
      * Overwrite the original sender record with the pointer to the new
@@ -2565,6 +2567,20 @@ int     main(int unused_argc, char **argv)
                var_milt_head_checks = mystrdup(argv->argv[1]);
                cleanup_milter_header_checks_init(state);
            }
+       } else if (strcmp(argv->argv[0], "sender_bcc_maps") == 0) {
+           if (argv->argc != 2) {
+               msg_warn("bad sender_bcc_maps argument count: %ld",
+                        (long) argv->argc);
+           } else {
+               if (cleanup_send_bcc_maps)
+                   maps_free(cleanup_send_bcc_maps);
+               cleanup_send_bcc_maps =
+                   maps_create("sender_bcc_maps", argv->argv[1],
+                               DICT_FLAG_LOCK | DICT_FLAG_FOLD_FIX
+                               | DICT_FLAG_UTF8_REQUEST);
+               state->flags |= CLEANUP_FLAG_BCC_OK;
+               var_rcpt_delim = "";
+           }
        } else {
            msg_warn("bad command: %s", argv->argv[0]);
        }
index 33bca0029d5c6457b25d9875fc8f43e6bb064cb8..964aa2b47ce0ba4cc47dc275f089b863c59fcedc 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      "20160221"
-#define MAIL_VERSION_NUMBER    "3.0.4"
+#define MAIL_RELEASE_DATE      "20160515"
+#define MAIL_VERSION_NUMBER    "3.0.5"
 
 #ifdef SNAPSHOT
 #define MAIL_VERSION_DATE      "-" MAIL_RELEASE_DATE
index 6a257bf5b07d73b4d12fa378c47c9b9b96d84e81..e4ea94cb6d04bdf3460383de8d87dcbeca875e73 100644 (file)
@@ -79,7 +79,7 @@
 /*     The optional "after 220 server greeting" tests involve
 /*     \fBpostscreen\fR(8)'s built-in SMTP protocol engine. When
 /*     these tests succeed, \fBpostscreen\fR(8) adds the client
-/*     to the temporary whitelist, but it cannot not hand off the
+/*     to the temporary whitelist, but it cannot hand off the
 /*     "live" connection to a Postfix SMTP server process in the
 /*     middle of a session.  Instead, \fBpostscreen\fR(8) defers
 /*     attempts to deliver mail with a 4XX status, and waits for
index 5b381af4032c2e651cbc338b00bd39e5a80fcc51..949855c7cba868e62c168413e3e8e7bbb0316327 100644 (file)
@@ -28,7 +28,7 @@
     || defined(FREEBSD8) || defined(FREEBSD9) || defined(FREEBSD10) \
     || defined(BSDI2) || defined(BSDI3) || defined(BSDI4) \
     || defined(OPENBSD2) || defined(OPENBSD3) || defined(OPENBSD4) \
-    || defined(OPENBSD5) \
+    || defined(OPENBSD5) || defined(OPENBSD6) \
     || defined(NETBSD1) || defined(NETBSD2) || defined(NETBSD3) \
     || defined(NETBSD4) || defined(NETBSD5) || defined(NETBSD6) \
     || defined(NETBSD7) \