]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.4.14 v2.4.14
authorWietse Venema <wietse@porcupine.org>
Sun, 22 Mar 2009 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Sat, 10 Feb 2018 20:20:43 +0000 (15:20 -0500)
postfix/HISTORY
postfix/makedefs
postfix/src/global/cleanup_user.h
postfix/src/global/db_common.c
postfix/src/global/mail_version.h
postfix/src/milter/milter8.c
postfix/src/pickup/pickup.c
postfix/src/smtpd/smtpd.c
postfix/src/trivial-rewrite/resolve.c
postfix/src/util/sys_defs.h
postfix/src/util/valid_hostname.c

index ab8c1558a2625d1cdd4d916236523f5ed24e3a14..841767bf231698692c26e496b28b564b76eb8104 100644 (file)
@@ -13689,3 +13689,45 @@ Apologies for any names omitted.
 
        Bugfix: don't panic when an unexpected smtpd access map is
        specified. File: smtpd/smtpd_check.c.
+
+20090918
+
+       Bugfix (introduced Postfix 2.3): with Milter RCPT TO replies
+       turned off, there was no automatic flush-before-read on the
+       smtpd-to-milter stream, because the read was done on the
+       cleanup-to-milter stream. Problem reported by Stephen Warren.
+       File: milter/milter8.c.
+
+20091005
+
+       Bugfix: core dump while printing error message for malformed
+       %<letter> sequence in LDAP, MySQL or PostgreSQL configuration.
+       File: global/db_common.c. Fix by Victor Duchovni.
+
+20091209
+
+       Bugfix: sender_dependent_relayhost_maps did not reject an
+       empty lookup result, and did not recognize lookup errors,
+       thus treating errors as "not found". Problem found during
+       code maintenance. File: trivial-rewrite/resolve.c.
+
+20100107
+
+       Bugfix: the pickup daemon did not discard messages that
+       were requeued after all recipients were delivered (or
+       bounced), and the cleanup server tried to bounce such
+       messages. Files: pickup/pickup.c, global/cleanup_user.h.
+
+20100115
+
+       Bugfix: the valid_hostname() fuction did not set the
+       "non-numeric" flag after encountering the '-' character.
+       Reported by Jan Schampera.  File: util/valid_hostname.c.
+
+20100116
+
+       Workaround: as of Postfix 2.3 the VRFY command did not allow
+       a mailbox address inside <>, which broke expectations.  RFC
+       2821 (and 5321) is vague about the VRFY request format, but
+       spends lots of text on the reply format.  File: smtpd/smtpd.c.
+
index e8b07639fe4c59636614e047a71dbac12e563b95..b73f59d74c60de773e394e3d9f4193eae3311ddd 100644 (file)
@@ -130,6 +130,10 @@ case "$SYSTEM.$RELEASE" in
                ;;
   FreeBSD.6*)  SYSTYPE=FREEBSD6
                ;;
+  FreeBSD.7*)  SYSTYPE=FREEBSD7
+               ;;
+  FreeBSD.8*)  SYSTYPE=FREEBSD8
+               ;;
   OpenBSD.2*)  SYSTYPE=OPENBSD2
                ;;
   OpenBSD.3*)  SYSTYPE=OPENBSD3
index ede715d4147c5a1d1ee8ee088b52b438306b4446..587b7e0d13c0a2368ff57303147c0b56ae9bfa44 100644 (file)
@@ -64,7 +64,8 @@
   * These are set when we can't bounce even if we were asked to.
   */
 #define CLEANUP_STAT_MASK_CANT_BOUNCE \
-       (CLEANUP_STAT_BAD | CLEANUP_STAT_WRITE | CLEANUP_STAT_DEFER)
+       (CLEANUP_STAT_BAD | CLEANUP_STAT_WRITE | CLEANUP_STAT_DEFER \
+           | CLEANUP_STAT_RCPT)
 
  /*
   * These are set when we can't examine every record of a message.
index e04f36696bdbf56c4298e9bcd4ad2fa6680250d0..41c21a6def43fe0d17b53345e4c8c5c3b47381aa 100644 (file)
@@ -228,7 +228,7 @@ int     db_common_parse(DICT *dict, void **ctxPtr, const char *format, int query
                break;
            default:
                msg_fatal("db_common_parse: %s: Invalid %s template: %s",
-                         dict->name, query ? "query" : "result", format);
+                      ctx->dict->name, query ? "query" : "result", format);
            }
     return dynamic;
 }
index 62ab7bb6157afe46c138d4803a99653c3f298adc..0e7367b797d307d6d6de4e08db04a61248e7397d 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      "20090828"
-#define MAIL_VERSION_NUMBER    "2.4.13"
+#define MAIL_RELEASE_DATE      "20090322"
+#define MAIL_VERSION_NUMBER    "2.4.14"
 
 #ifdef SNAPSHOT
 # define MAIL_VERSION_DATE     "-" MAIL_RELEASE_DATE
index 952f2938f0f6c90a4e55f3d791bf7771e5032f85..56d9f0f2a3fa6c13b07c05f2786e90cb90f11780 100644 (file)
@@ -2420,6 +2420,13 @@ static int milter8_send(MILTER *m, VSTREAM *stream)
     if (msg_verbose)
        msg_info("%s: milter %s", myname, milter->m.name);
 
+    /*
+     * The next read on this Milter socket happens in a different process. It
+     * will not automatically flush the output buffer in this process.
+     */
+    if (milter->fp)
+       vstream_fflush(milter->fp);
+
     if (attr_print(stream, ATTR_FLAG_NONE,
                   ATTR_TYPE_STR, MAIL_ATTR_MILT_NAME, milter->m.name,
                   ATTR_TYPE_INT, MAIL_ATTR_MILT_VERS, milter->version,
index 153f36326fdac97cec5ed3c8abd87c6613be5a3a..3ac2649cd9f60f88d601206a2aa2ec72f28cd221 100644 (file)
@@ -194,10 +194,14 @@ static int cleanup_service_error_reason(PICKUP_INFO *info, int status,
     /*
      * XXX If the cleanup server gave a reason, then it was already logged.
      * Don't bother logging it another time.
+     * 
+     * XXX Discard a message without recipient. This can happen with "postsuper
+     * -r" when a message is already delivered (or bounced). The Postfix
+     * sendmail command rejects submissions without recipients.
      */
     if (reason == 0)
        msg_warn("%s: %s", info->path, cleanup_strerror(status));
-    return ((status & CLEANUP_STAT_BAD) ?
+    return ((status & (CLEANUP_STAT_BAD | CLEANUP_STAT_RCPT)) ?
            REMOVE_MESSAGE_FILE : KEEP_MESSAGE_FILE);
 }
 
index 8bb0a59528f8e43cc76ef471e0732f716cb06612..64b1f3fb7f5873afed95a7802ae95fd2a4022252 100644 (file)
@@ -2945,9 +2945,9 @@ static int vrfy_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
        smtpd_chat_reply(state, "501 5.1.3 Bad recipient address syntax");
        return (-1);
     }
-    /* Not: state->addr_buf */
+    /* Use state->addr_buf, with the unquoted result from extract_addr() */
     if (SMTPD_STAND_ALONE(state) == 0
-       && (err = smtpd_check_rcpt(state, argv[1].strval)) != 0) {
+       && (err = smtpd_check_rcpt(state, STR(state->addr_buf))) != 0) {
        smtpd_chat_reply(state, "%s", err);
        return (-1);
     }
index c67d186f2c2eb45b8e1c8c7b475275157400f56e..b2b8757500b8939a8e1c8252273eb7ea6c58ea1d 100644 (file)
@@ -509,9 +509,18 @@ static void resolve_addr(RES_CONTEXT *rp, char *sender, char *addr,
             */
            if (rp->snd_relay_info && *sender
                && (relay = mail_addr_find(rp->snd_relay_info, sender,
-                                          (char **) 0)) != 0)
+                                          (char **) 0)) != 0) {
+               if (*relay == 0) {
+                   msg_warn("%s: ignoring null lookup result for %s",
+                            rp->snd_relay_maps_name, sender);
+                   relay = rcpt_domain;
+               }
                vstring_strcpy(nexthop, relay);
-           else if (*RES_PARAM_VALUE(rp->relayhost))
+           } else if (dict_errno != 0) {
+               msg_warn("%s lookup failure", rp->snd_relay_maps_name);
+               *flags |= RESOLVE_FLAG_FAIL;
+               FREE_MEMORY_AND_RETURN;
+           } else if (*RES_PARAM_VALUE(rp->relayhost))
                vstring_strcpy(nexthop, RES_PARAM_VALUE(rp->relayhost));
            else
                vstring_strcpy(nexthop, rcpt_domain);
index 14ee3eef09352e6096c2f27268e16a5d61458a1f..64bd53895935582df4141533b24500f420e1ee41 100644 (file)
@@ -24,7 +24,8 @@
   * 4.4BSD and close derivatives.
   */
 #if defined(FREEBSD2) || defined(FREEBSD3) || defined(FREEBSD4) \
-    || defined(FREEBSD5) || defined(FREEBSD6) \
+    || defined(FREEBSD5) || defined(FREEBSD6) || defined(FREEBSD7) \
+    || defined(FREEBSD8) \
     || defined(BSDI2) || defined(BSDI3) || defined(BSDI4) \
     || defined(OPENBSD2) || defined(OPENBSD3) || defined(OPENBSD4) \
     || defined(NETBSD1) || defined(NETBSD2) || defined(NETBSD3) \
@@ -79,8 +80,8 @@
 
 /* __FreeBSD_version version is major+minor */
 
-#if __FreeBSD_version >= 200000
-#define HAS_DUPLEX_PIPE
+#if __FreeBSD_version >= 420000
+#define HAS_DUPLEX_PIPE                        /* 4.1 breaks with kqueue(2) */
 #endif
 
 #if __FreeBSD_version >= 220000
 #define SOCKOPT_SIZE   socklen_t
 #endif
 
+#if __FreeBSD_version >= 800107                /* safe; don't believe the experts */
+#define HAS_CLOSEFROM
+#endif
+
 /* OpenBSD version is year+month */
 
 #if OpenBSD >= 199805                  /* XXX */
@@ -1429,7 +1434,7 @@ typedef int pid_t;
   * sections above.
   */
 #ifndef PRINTFLIKE
-#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ == 3
+#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ >= 3
 #define PRINTFLIKE(x,y) __attribute__ ((format (printf, (x), (y))))
 #else
 #define PRINTFLIKE(x,y)
@@ -1437,7 +1442,7 @@ typedef int pid_t;
 #endif
 
 #ifndef SCANFLIKE
-#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ == 3
+#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ >= 3
 #define SCANFLIKE(x,y) __attribute__ ((format (scanf, (x), (y))))
 #else
 #define SCANFLIKE(x,y)
index 66ebdef5c62d96f860f0aaf381016483a00f0e19..1beeb9af404501425ba02561f08aef5602509971 100644 (file)
@@ -116,6 +116,7 @@ int     valid_hostname(const char *name, int gripe)
            }
            label_length = 0;
        } else if (ch == '-') {
+           non_numeric = 1;
            label_length++;
            if (label_length == 1 || cp[1] == 0 || cp[1] == '.') {
                if (gripe)