]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.8.11 v2.8.11
authorWietse Venema <wietse@porcupine.org>
Sun, 20 May 2012 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Sat, 10 Feb 2018 18:59:30 +0000 (13:59 -0500)
postfix/HISTORY
postfix/src/dnsblog/dnsblog.c
postfix/src/global/mail_version.h
postfix/src/postqueue/Makefile.in
postfix/src/postqueue/postqueue.c
postfix/src/tls/tls.h
postfix/src/tls/tls_client.c
postfix/src/tls/tls_server.c
postfix/src/util/events.c

index 180844492c9af580f8bf62e837065309859a2029..e5329fefe4e6096ee767a3e827ff984b54c94049 100644 (file)
@@ -16781,3 +16781,51 @@ Apologies for any names omitted.
        a patch by Victor Duchovni.  Files: proto/TLS_README.html,
        proto/postconf.proto, tls/tls.h, tls/tls_misc.c, tls/tls_client.c,
        tls/tls_server.c.
+
+20120425
+
+       Workaround: bugs in 10-year old gcc versions break compilation
+       with #ifdef inside a macro invocation (NOT: definition).
+       Files: tls/tls.h, tls/tls_client.c, tls/tls_server.c.
+
+20120516
+
+       Workaround: apparently, FreeBSD 8.3 kqueue notifications
+       sometimes break when a dnsblog(8) process loses an accept()
+       race on a shared socket, resulting in repeated "connect to
+       private/dnsblog service: Connection refused" warnings.  This
+       condition is unique to dnsblog(8). The postscreen(8) daemon
+       closes a postscreen-to-dnsblog connection as soon as it
+       receives a dnsblog(8) reply, resulting in hundreds or
+       thousands of connection requests per second.  All other
+       multi-server daemons such as anvil(8) or proxymap(8) have
+       connection lifetimes ranging from 5s to 1000s depending on
+       server load.  The workaround is for dnsblog to use the
+       single_server driver instead of the multi_server driver.
+       This one-line code change eliminates the accept() race
+       without any Postfix performance impact.  Problem reported
+       by Sahil Tandon.  File: dnsblog/dnsblog.c.
+
+20120517
+
+       Workaround: to avoid crashes when the OpenSSL library is
+       updated without "postfix reload", the Postfix TLS session
+       cache ID now includes the OpenSSL library version number.
+       Note: this problem cannot be fixed in tlsmgr(8). Code by
+       Victor Duchovni. Files: tls/tls_server.c, tls_client.c.
+
+20120520
+
+       Bugfix (introduced Postfix 2.4): the event_drain() function
+       was comparing bitmasks incorrectly causing the program to
+       always wait for the full time limit. This error affected
+       the unused postkick command, but only after s/fifo/unix/
+       in master.cf.  File: util/events.c.
+
+       Cleanup: laptop users have always been able to avoid
+       unnecessary disk spin-up by doing s/fifo/unix/ in master.cf
+       (this is currently not supported on Solaris systems).
+       However, to make this work reliably, the "postqueue -f"
+       command must wait until its requests have reached the pickup
+       and qmgr servers before closing the UNIX-domain request
+       sockets.  Files: postqueue/postqueue.c, postqueue/Makefile.in.
index 977a683476c415bf0550e888f8935d282ffac061..d2f6843a880ea61cb9326b6e110b23ee6443d561 100644 (file)
@@ -257,6 +257,7 @@ static void post_jail_init(char *unused_name, char **unused_argv)
     query = vstring_alloc(100);
     why = vstring_alloc(100);
     result = vstring_alloc(100);
+    var_use_limit = 0;
 }
 
 MAIL_VERSION_STAMP_DECLARE;
@@ -275,9 +276,9 @@ int     main(int argc, char **argv)
      */
     MAIL_VERSION_STAMP_ALLOCATE;
 
-    multi_server_main(argc, argv, dnsblog_service,
-                     MAIL_SERVER_TIME_TABLE, time_table,
-                     MAIL_SERVER_POST_INIT, post_jail_init,
-                     MAIL_SERVER_UNLIMITED,
-                     0);
+    single_server_main(argc, argv, dnsblog_service,
+                      MAIL_SERVER_TIME_TABLE, time_table,
+                      MAIL_SERVER_POST_INIT, post_jail_init,
+                      MAIL_SERVER_UNLIMITED,
+                      0);
 }
index 8ea48c921808c19a3208aad5a2807034319f6358..90f1367320d168dd232859d79c95503026277514 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      "20120424"
-#define MAIL_VERSION_NUMBER    "2.8.10"
+#define MAIL_RELEASE_DATE      "20120520"
+#define MAIL_VERSION_NUMBER    "2.8.11"
 
 #ifdef SNAPSHOT
 # define MAIL_VERSION_DATE     "-" MAIL_RELEASE_DATE
index 4e80a3c811f70a8f82032cb48cefce178e64ef02..3de971430e063f50f6093c5b4152dfca6b91d6c0 100644 (file)
@@ -61,6 +61,7 @@ postqueue.o: ../../include/argv.h
 postqueue.o: ../../include/attr.h
 postqueue.o: ../../include/clean_env.h
 postqueue.o: ../../include/connect.h
+postqueue.o: ../../include/events.h
 postqueue.o: ../../include/flush_clnt.h
 postqueue.o: ../../include/iostuff.h
 postqueue.o: ../../include/mail_conf.h
index 4dfedabb7d2a8d59e2524fe404f15a8264bef470..62db4d37dcc9e7374c9e3bf177ce377f70c4b82f 100644 (file)
 #include <safe.h>
 #include <connect.h>
 #include <valid_hostname.h>
+#include <events.h>
 
 /* Global library. */
 
@@ -351,6 +352,7 @@ static void flush_queue(void)
     if (mail_flush_maildrop() < 0)
        msg_fatal_status(EX_UNAVAILABLE,
                         "Cannot flush mail queue - mail system is down");
+    event_drain(2);
 }
 
 /* flush_site - flush mail for site */
index d20bf178cdbb0b062dedb082ed9491dfbc364c45..effb68650622b42ffd28ea8d7b042846e4ce9da5 100644 (file)
@@ -159,11 +159,15 @@ extern void tls_param_init(void);
 #define TLS_PROTOCOL_TLSv1_1   (1<<3)  /* TLSv1_1 */
 #else
 #define TLS_PROTOCOL_TLSv1_1   0       /* Unknown */
+#undef  SSL_OP_NO_TLSv1_1
+#define SSL_OP_NO_TLSv1_1      0L      /* Noop */
 #endif
 #ifdef SSL_TXT_TLSV1_2
 #define TLS_PROTOCOL_TLSv1_2   (1<<4)  /* TLSv1_2 */
 #else
 #define TLS_PROTOCOL_TLSv1_2   0       /* Unknown */
+#undef  SSL_OP_NO_TLSv1_2
+#define SSL_OP_NO_TLSv1_2      0L      /* Noop */
 #endif
 #define TLS_KNOWN_PROTOCOLS    \
        ( TLS_PROTOCOL_SSLv2 | TLS_PROTOCOL_SSLv3 | TLS_PROTOCOL_TLSv1 \
index daed8fc84f19d9c759b44dda62ce96740f696853..1709f9990d3a57c787d105148841e0d38fb4f26d 100644 (file)
@@ -783,6 +783,12 @@ TLS_SESS_STATE *tls_client_start(const TLS_CLIENT_START_PROPS *props)
        msg_info("%s: TLS cipher list \"%s\"", props->namaddr, cipher_list);
     vstring_sprintf_append(myserverid, "&c=%s", cipher_list);
 
+    /*
+     * Finally, salt the session key with the OpenSSL library version,
+     * (run-time, rather than compile-time, just in case that matters).
+     */
+    vstring_sprintf_append(myserverid, "&l=%ld", (long) SSLeay());
+
     /*
      * Allocate a new TLScontext for the new connection and get an SSL
      * structure. Add the location of TLScontext to the SSL to later retrieve
@@ -815,12 +821,8 @@ TLS_SESS_STATE *tls_client_start(const TLS_CLIENT_START_PROPS *props)
     if (protomask != 0)
        SSL_set_options(TLScontext->con,
                   ((protomask & TLS_PROTOCOL_TLSv1) ? SSL_OP_NO_TLSv1 : 0L)
-#ifdef SSL_OP_NO_TLSv1_1
             | ((protomask & TLS_PROTOCOL_TLSv1_1) ? SSL_OP_NO_TLSv1_1 : 0L)
-#endif
-#ifdef SSL_OP_NO_TLSv1_2
             | ((protomask & TLS_PROTOCOL_TLSv1_2) ? SSL_OP_NO_TLSv1_2 : 0L)
-#endif
                 | ((protomask & TLS_PROTOCOL_SSLv3) ? SSL_OP_NO_SSLv3 : 0L)
               | ((protomask & TLS_PROTOCOL_SSLv2) ? SSL_OP_NO_SSLv2 : 0L));
 
index ee995eb73f3337c5ba0a81f975950776e7a55c62..5195a80a9892c332e0be66648b7fb5eb851d305a 100644 (file)
@@ -181,9 +181,10 @@ static SSL_SESSION *get_server_session_cb(SSL *ssl, unsigned char *session_id,
 
 #define GEN_CACHE_ID(buf, id, len, service) \
     do { \
-       buf = vstring_alloc(2 * (len) + 1 + strlen(service) + 3); \
+       buf = vstring_alloc(2 * (len + strlen(service))); \
        hex_encode(buf, (char *) (id), (len)); \
        vstring_sprintf_append(buf, "&s=%s", (service)); \
+       vstring_sprintf_append(buf, "&l=%ld", (long) SSLeay()); \
     } while (0)
 
 
@@ -397,12 +398,8 @@ TLS_APPL_STATE *tls_server_init(const TLS_SERVER_INIT_PROPS *props)
     if (protomask != 0)
        SSL_CTX_set_options(server_ctx,
                   ((protomask & TLS_PROTOCOL_TLSv1) ? SSL_OP_NO_TLSv1 : 0L)
-#ifdef SSL_OP_NO_TLSv1_1
             | ((protomask & TLS_PROTOCOL_TLSv1_1) ? SSL_OP_NO_TLSv1_1 : 0L)
-#endif
-#ifdef SSL_OP_NO_TLSv1_2
             | ((protomask & TLS_PROTOCOL_TLSv1_2) ? SSL_OP_NO_TLSv1_2 : 0L)
-#endif
                 | ((protomask & TLS_PROTOCOL_SSLv3) ? SSL_OP_NO_SSLv3 : 0L)
               | ((protomask & TLS_PROTOCOL_SSLv2) ? SSL_OP_NO_SSLv2 : 0L));
 
index d79596f57bf3184835745761ebce3efc66bee033..5dcfe5d553fc9bf48bab970e1b04378565d860e0 100644 (file)
@@ -180,6 +180,7 @@ typedef fd_set EVENT_MASK;
 #define EVENT_MASK_SET(fd, mask)       FD_SET((fd), (mask))
 #define EVENT_MASK_ISSET(fd, mask)     FD_ISSET((fd), (mask))
 #define EVENT_MASK_CLR(fd, mask)       FD_CLR((fd), (mask))
+#define EVENT_MASK_CMP(m1, m2) memcmp((m1), (m2), EVENT_MASK_BYTE_COUNT(m1))
 #else
 
  /*
@@ -226,6 +227,8 @@ typedef struct {
        (EVENT_MASK_FD_BYTE((fd), (mask)) & EVENT_MASK_FD_BIT(fd))
 #define EVENT_MASK_CLR(fd, mask) \
        (EVENT_MASK_FD_BYTE((fd), (mask)) &= ~EVENT_MASK_FD_BIT(fd))
+#define EVENT_MASK_CMP(m1, m2) \
+       memcmp((m1)->data, (m2)->data, EVENT_MASK_BYTE_COUNT(m1))
 #endif
 
  /*
@@ -664,8 +667,7 @@ void    event_drain(int time_limit)
     max_time = event_present + time_limit;
     while (event_present < max_time
           && (event_timer_head.pred != &event_timer_head
-              || memcmp(&zero_mask, &event_xmask,
-                        EVENT_MASK_BYTE_COUNT(&zero_mask)) != 0)) {
+              || EVENT_MASK_CMP(&zero_mask, &event_xmask) != 0)) {
        event_loop(1);
 #if (EVENTS_STYLE != EVENTS_STYLE_SELECT)
        if (EVENT_MASK_BYTE_COUNT(&zero_mask)