]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.3.14 v2.3.14
authorWietse Venema <wietse@porcupine.org>
Thu, 31 Jan 2008 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Sat, 10 Feb 2018 21:08:39 +0000 (16:08 -0500)
postfix/HISTORY
postfix/src/global/mail_version.h
postfix/src/milter/milter8.c
postfix/src/oqmgr/qmgr_entry.c
postfix/src/pipe/pipe.c
postfix/src/qmgr/qmgr_entry.c
postfix/src/smtp/smtp_proto.c
postfix/src/util/vstream.c
postfix/src/xsasl/xsasl_dovecot_server.c

index 8c6547b4e84cd1dccbdeddf1c751a876dd48fd78..eea5f97ec82336f3b60039c1b9e578eb1892714c 100644 (file)
@@ -13088,3 +13088,39 @@ Apologies for any names omitted.
        rate of delivery attempts when the queue file system is
        mounted with "noatime".  File: flush/flush.c. Back-port
        from Postfix 2.4/2.5.
+
+20071030
+
+       Bugfix (introduced Postfix 2.3): Postfix mistakenly enforced
+       the 64kbyte limit (for sending body parts TO Milter
+       applications) also while receiving packets FROM Milter
+       applications.  The limit is now at least 1GB.  File:
+       milter/milter8.c.
+
+20071202
+
+       Bugfix (introduced Postfix 2.2): don't update the back-to-back
+       delivery time stamp while deferring mail. File: *qmgr/qmgr_entry.c.
+
+20071211
+
+       Bugfix (introduced 19980315): the "write" equivalent of
+       bugfix 20030104. File: util/vstream.c.
+
+20071213
+
+       Bugfix (introduced Postfix 2.3): the SMTP client never
+       marked corrupt files as corrupt. Victor Duchovni. File:
+       smtp/smtp_proto.c.
+
+20071229
+
+       Bugfix: the Milter client did not replace the Postfix-specific
+       form for unknown host names by the Sendmail-specific form.
+       File: milter/milter8.c.
+
+20080104
+
+       Workaround: minor change to the Dovecot AUTH request to
+       prevent dovecot-auth memory wastage. Timo Sirainen.  File:
+       xsasl/xsasl_dovecot_server.c.
index 24997fdcb41060cf0f0eb8819ff9296002fd8ea2..fe691c943a7394fdc37ed71bcdf07ef974492275 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      "20071017"
-#define MAIL_VERSION_NUMBER    "2.3.13"
+#define MAIL_RELEASE_DATE      "20080131"
+#define MAIL_VERSION_NUMBER    "2.3.14"
 
 #ifdef SNAPSHOT
 # define MAIL_VERSION_DATE     "-" MAIL_RELEASE_DATE
index ee5fadeac1f04dfa79ebba8de5b9f33e1704973b..2870adedb7aa82eaaacc412aa3073c312ea2781d 100644 (file)
@@ -63,6 +63,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <limits.h>                    /* INT_MAX */
 
 #ifndef SHUT_RDWR
 #define SHUT_RDWR      2
@@ -280,7 +281,7 @@ typedef struct {
  /*
   * We don't accept insane amounts of data.
   */
-#define XXX_MAX_DATA   (MILTER_CHUNK_SIZE * 2)
+#define XXX_MAX_DATA   (INT_MAX / 2)
 #define XXX_TIMEOUT    10
 
 #ifndef USE_LIBMILTER_INCLUDES
@@ -1624,6 +1625,17 @@ static const char *milter8_conn_event(MILTER *m,
     const char *myname = "milter8_conn_event";
     MILTER8 *milter = (MILTER8 *) m;
     int     port;
+    const char *sm_name;
+    char   *ptr = 0;
+    const char *resp;
+
+    /*
+     * Need a global definition for "unknown" host name or address that is
+     * shared by smtpd, cleanup and libmilter.
+     */
+#define XXX_UNKNOWN    "unknown"
+#define STR_EQ(x,y)    (strcmp((x), (y)) == 0)
+#define STR_NE(x,y)    (strcmp((x), (y)) != 0)
 
     /*
      * XXX Sendmail 8 libmilter closes the MTA-to-filter socket when it finds
@@ -1655,40 +1667,51 @@ static const char *milter8_conn_event(MILTER *m,
            port = 0;
        }
        milter->state = MILTER8_STAT_ENVELOPE;
+       /* Transform unknown hostname from Postfix to Sendmail form. */
+       sm_name = (STR_NE(client_name, XXX_UNKNOWN) ? client_name :
+                  STR_EQ(client_addr, XXX_UNKNOWN) ? client_name :
+                  (ptr = concatenate("[", client_addr, "]", (char *) 0)));
        switch (addr_family) {
        case AF_INET:
-           return (milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
-                                 DONT_SKIP_REPLY, macros,
-                                 MILTER8_DATA_STRING, client_name,
-                                 MILTER8_DATA_OCTET, SMFIA_INET,
-                                 MILTER8_DATA_NSHORT, htons(port),
-                                 MILTER8_DATA_STRING, client_addr,
-                                 MILTER8_DATA_END));
+           resp = milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
+                                DONT_SKIP_REPLY, macros,
+                                MILTER8_DATA_STRING, sm_name,
+                                MILTER8_DATA_OCTET, SMFIA_INET,
+                                MILTER8_DATA_NSHORT, htons(port),
+                                MILTER8_DATA_STRING, client_addr,
+                                MILTER8_DATA_END);
+           break;
 #ifdef HAS_IPV6
        case AF_INET6:
-           return (milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
-                                 DONT_SKIP_REPLY, macros,
-                                 MILTER8_DATA_STRING, client_name,
-                                 MILTER8_DATA_OCTET, SMFIA_INET6,
-                                 MILTER8_DATA_NSHORT, htons(port),
-                                 MILTER8_DATA_STRING, client_addr,
-                                 MILTER8_DATA_END));
+           resp = milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
+                                DONT_SKIP_REPLY, macros,
+                                MILTER8_DATA_STRING, sm_name,
+                                MILTER8_DATA_OCTET, SMFIA_INET6,
+                                MILTER8_DATA_NSHORT, htons(port),
+                                MILTER8_DATA_STRING, client_addr,
+                                MILTER8_DATA_END);
+           break;
 #endif
        case AF_UNIX:
-           return (milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
-                                 DONT_SKIP_REPLY, macros,
-                                 MILTER8_DATA_STRING, client_name,
-                                 MILTER8_DATA_OCTET, SMFIA_UNIX,
-                                 MILTER8_DATA_NSHORT, htons(0),
-                                 MILTER8_DATA_STRING, client_addr,
-                                 MILTER8_DATA_END));
+           resp = milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
+                                DONT_SKIP_REPLY, macros,
+                                MILTER8_DATA_STRING, sm_name,
+                                MILTER8_DATA_OCTET, SMFIA_UNIX,
+                                MILTER8_DATA_NSHORT, htons(0),
+                                MILTER8_DATA_STRING, client_addr,
+                                MILTER8_DATA_END);
+           break;
        default:
-           return (milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
-                                 DONT_SKIP_REPLY, macros,
-                                 MILTER8_DATA_STRING, client_name,
-                                 MILTER8_DATA_OCTET, SMFIA_UNKNOWN,
-                                 MILTER8_DATA_END));
+           resp = milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
+                                DONT_SKIP_REPLY, macros,
+                                MILTER8_DATA_STRING, sm_name,
+                                MILTER8_DATA_OCTET, SMFIA_UNKNOWN,
+                                MILTER8_DATA_END);
+           break;
        }
+       if (ptr != 0)
+           myfree(ptr);
+       return (resp);
     default:
        msg_panic("%s: milter %s: bad state %d",
                  myname, milter->m.name, milter->state);
index ccffdb0b080c985282e2e961c31555d8eedcffec..df433f6308169a3ebfbf740865c3486a5fa4e985 100644 (file)
@@ -203,7 +203,8 @@ void    qmgr_entry_done(QMGR_ENTRY *entry, int which)
     /*
      * Maintain back-to-back delivery status.
      */
-    queue->last_done = event_time();
+    if (which == QMGR_QUEUE_BUSY)
+       queue->last_done = event_time();
 
     /*
      * When the in-core queue for this site is empty and when this site is
index 086370263a2cdad949ebec9bddc2af3ef3b17c39..d15ef9bbc7d78c0c2b3334b8bd2e48867bcfedbd 100644 (file)
@@ -840,7 +840,7 @@ static void get_service_attr(PIPE_ATTR *attr, char **argv)
        /*
         * null_sender=string
         */
-       else if (strncasecmp("null_sender=", *argv, sizeof("eol=") - 1) == 0) {
+       else if (strncasecmp("null_sender=", *argv, sizeof("null_sender=") - 1) == 0) {
            vstring_strcpy(attr->null_sender, *argv + sizeof("null_sender=") - 1);
        }
 
index 58c278bfd0cec94bbdd3ad0e6e363486e1307594..2788e9127fe41138b0a85ef31835425473aa2139 100644 (file)
@@ -276,7 +276,8 @@ void    qmgr_entry_done(QMGR_ENTRY *entry, int which)
     /*
      * Maintain back-to-back delivery status.
      */
-    queue->last_done = event_time();
+    if (which == QMGR_QUEUE_BUSY)
+       queue->last_done = event_time();
 
     /*
      * When the in-core queue for this site is empty and when this site is
index 1bd4e55cda539cf38ea43dafafc05e526ead1986..f6821c47a9f05d562eb3fd92492f99f6005b6807 100644 (file)
@@ -1710,7 +1710,7 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
                fail_status = smtp_mesg_fail(state, DSN_BY_LOCAL_MTA,
                                             SMTP_RESP_FAKE(&fake, "5.3.0"),
                                             "unreadable mail queue entry");
-               if (fail_status == 0)
+               if (state->status == 0)
                    (void) mark_corrupt(state->src);
                RETURN(fail_status);
            }
index ed857b3e3a5fed7c2b2952a272594571e0786b30..dd4d3e2552167f8c84fef78e6745c8924c3a732e 100644 (file)
@@ -477,6 +477,7 @@ static void vstream_buf_init(VBUF *bp, int flags)
 
 static void vstream_buf_alloc(VBUF *bp, ssize_t len)
 {
+    VSTREAM *stream = VBUF_TO_APPL(bp, VSTREAM, buf);
     ssize_t used = bp->ptr - bp->data;
     const char *myname = "vstream_buf_alloc";
 
@@ -492,10 +493,15 @@ static void vstream_buf_alloc(VBUF *bp, ssize_t len)
     bp->data = (unsigned char *)
        (bp->data ? myrealloc((char *) bp->data, len) : mymalloc(len));
     bp->len = len;
-    if (bp->flags & VSTREAM_FLAG_READ)
+    if (bp->flags & VSTREAM_FLAG_READ) {
        bp->ptr = bp->data + used;
-    else
+       if (bp->flags & VSTREAM_FLAG_DOUBLE)
+           VSTREAM_SAVE_STATE(stream, read_buf, read_fd);
+    } else {
        VSTREAM_BUF_AT_OFFSET(bp, used);
+       if (bp->flags & VSTREAM_FLAG_DOUBLE)
+           VSTREAM_SAVE_STATE(stream, write_buf, write_fd);
+    }
 }
 
 /* vstream_buf_wipe - reset buffer to initial state */
@@ -663,11 +669,8 @@ static int vstream_buf_get_ready(VBUF *bp)
      * allocation gives the application a chance to override the default
      * buffering policy.
      */
-    if (bp->data == 0) {
+    if (bp->data == 0)
        vstream_buf_alloc(bp, VSTREAM_BUFSIZE);
-       if (bp->flags & VSTREAM_FLAG_DOUBLE)
-           VSTREAM_SAVE_STATE(stream, read_buf, read_fd);
-    }
 
     /*
      * If the stream is double-buffered and the write buffer is not empty,
index 47b6bc98479cc107e0f640e8c3a82cabec6f9df9..817dde73c21371a5827f17b620922a3a2490b50e 100644 (file)
@@ -453,7 +453,7 @@ int     xsasl_dovecot_server_first(XSASL_SERVER *xp, const char *sasl_method,
        /* send the request */
        server->last_request_id = ++server->impl->request_id_counter;
        vstream_fprintf(server->impl->sasl_stream,
-                       "AUTH\t%u\t%s\tservice=%s",
+                       "AUTH\t%u\t%s\tservice=%s\tnologin",
                        server->last_request_id, sasl_method,
                        server->service);
        if (init_response) {