]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.11.4 v2.11.4
authorWietse Venema <wietse@porcupine.org>
Sun, 8 Feb 2015 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Mon, 9 Feb 2015 17:06:04 +0000 (12:06 -0500)
postfix/HISTORY
postfix/src/cleanup/cleanup_map1n.c
postfix/src/global/mail_version.h
postfix/src/global/tok822_tree.c
postfix/src/postconf/postconf_master.c
postfix/src/smtp/smtp_tls_policy.c

index 268d9d6246107c93980a9cb9758a474e1b59fa40..fd448c4ff7f36dc5b1ef1aac35fe8a0ab792f975 100644 (file)
@@ -19618,3 +19618,26 @@ Apologies for any names omitted.
        Cleanup: revert the workaround that places headers inserted
        with PREPEND actions or policy requests BELOW Postfix's own
        Received: message header. File: smtpd/smtpd.c.
+
+20141025
+
+       Bugfix (introduced: Postfix 2.11): core dump when
+       smtp_policy_maps specifies an invalid TLS level. Viktor
+       Dukhovni. File: smtp/smtp_tls_policy.c.
+
+20150106
+
+       Robustness: don't segfault due to excessive recursion after
+       a faulty configuration runs into the virtual_alias_recursion_limit.
+       File: global/tok822_tree.c.
+
+20150115
+
+       Safety: stop aliasing loops that exponentially increase the
+       address length with each iteration. Back-ported from Postfix
+       3.0. File: cleanup/cleanup_map1n.c.
+
+20150117
+
+       Cleanup: missing " in \%s\" in postconf(1) fatal error
+       messages. Iain Hibbert. File: postconf/postconf_master.c.
index 7f9919466e195679569033e812a9af3912b7c490..c5d17f4e4d3599609c6147ea8be9e1adc1c17169 100644 (file)
@@ -139,6 +139,15 @@ ARGV   *cleanup_map1n_internal(CLEANUP_STATE *state, const char *addr,
            if ((lookup = mail_addr_map(maps, STR(state->temp1), propagate)) != 0) {
                saved_lhs = mystrdup(argv->argv[arg]);
                for (i = 0; i < lookup->argc; i++) {
+                   if (strlen(lookup->argv[i]) > var_line_limit) {
+                       msg_warn("%s: unreasonable %s result %.300s... -- "
+                                "message not accepted, try again later",
+                            state->queue_id, maps->title, lookup->argv[i]);
+                       state->errs |= CLEANUP_STAT_DEFER;
+                       UPDATE(state->reason, "4.6.0 Alias expansion error");
+                       UNEXPAND(argv, addr);
+                       RETURN(argv);
+                   }
                    unquote_822_local(state->temp1, lookup->argv[i]);
                    if (i == 0) {
                        UPDATE(argv->argv[arg], STR(state->temp1));
index 1754f3bbf61399ec959ad71d398cb713031bfdf4..28261e1f25ae9f62ac7a8f45600ee51ec2a8df2a 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      "20141019"
-#define MAIL_VERSION_NUMBER    "2.11.3"
+#define MAIL_RELEASE_DATE      "20150208"
+#define MAIL_VERSION_NUMBER    "2.11.4"
 
 #ifdef SNAPSHOT
 #define MAIL_VERSION_DATE      "-" MAIL_RELEASE_DATE
index 16cec946a5afe588dc6bf7d037834939ce69545c..48d9d897ce4f9be6dcff5f0c200da2a627840b04 100644 (file)
@@ -259,11 +259,12 @@ TOK822 *tok822_sub_keep_after(TOK822 *t1, TOK822 *t2)
 
 TOK822 *tok822_free_tree(TOK822 *tp)
 {
-    if (tp) {
-       if (tp->next)
-           tok822_free_tree(tp->next);
+    TOK822 *next;
+
+    for (/* void */; tp != 0; tp = next) {
        if (tp->head)
            tok822_free_tree(tp->head);
+       next = tp->next;
        tok822_free(tp);
     }
     return (0);
index c409fedb73da56d18ff57d1296fb5f530f41f46a..21ade55746f7bc9718dc7192acc99878283bef97 100644 (file)
@@ -273,7 +273,7 @@ static void pcf_check_master_entry(ARGV *argv, const char *raw_text)
     for (field = PCF_MASTER_FLD_PRIVATE; field <= PCF_MASTER_FLD_CHROOT; field++) {
        cp = argv->argv[field];
        if (cp[1] != 0 || strchr(pcf_valid_bool_types, *cp) == 0)
-           pcf_fix_fatal("invalid %s field \%s\" in \"%s\"",
+           pcf_fix_fatal("invalid %s field \"%s\" in \"%s\"",
                          pcf_str_field_pattern(field), cp, raw_text);
     }
 
@@ -282,12 +282,12 @@ static void pcf_check_master_entry(ARGV *argv, const char *raw_text)
     if (len > 0 && cp[len - 1] == '?')
        len--;
     if (!(cp[0] == '-' && len == 1) && strspn(cp, "0123456789") != len)
-       pcf_fix_fatal("invalid " PCF_MASTER_NAME_WAKEUP " field \%s\" in \"%s\"",
+       pcf_fix_fatal("invalid " PCF_MASTER_NAME_WAKEUP " field \"%s\" in \"%s\"",
                      cp, raw_text);
 
     cp = argv->argv[PCF_MASTER_FLD_MAXPROC];
     if (strcmp("-", cp) != 0 && cp[strspn(cp, "0123456789")] != 0)
-       pcf_fix_fatal("invalid " PCF_MASTER_NAME_MAXPROC " field \%s\" in \"%s\"",
+       pcf_fix_fatal("invalid " PCF_MASTER_NAME_MAXPROC " field \"%s\" in \"%s\"",
                      cp, raw_text);
 }
 
index f280810e1e9c76e1e633442aa267386af257378c..b4c61e9687505a67a1f85fc9af648f998b16e311 100644 (file)
@@ -516,9 +516,11 @@ static void *policy_create(const char *unused_key, void *context)
     switch (site_level) {
     default:
        tls->level = site_level;
+       /* FALLTHROUGH */
     case TLS_LEV_NOTFOUND:
        break;
     case TLS_LEV_INVALID:
+       tls->level = site_level;
        return ((void *) tls);
     }