]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.12-20141201
authorWietse Venema <wietse@porcupine.org>
Mon, 1 Dec 2014 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Mon, 1 Dec 2014 16:18:56 +0000 (11:18 -0500)
14 files changed:
postfix/HISTORY
postfix/README_FILES/MILTER_README
postfix/html/MILTER_README.html
postfix/html/postconf.5.html
postfix/man/man5/postconf.5
postfix/proto/MILTER_README.html
postfix/proto/postconf.proto
postfix/src/dns/dns_lookup.c
postfix/src/dns/dns_rr_eq_sa.c
postfix/src/dns/dns_rr_eq_sa.ref
postfix/src/dns/dns_sa_to_rr.c
postfix/src/dns/dns_sa_to_rr.ref
postfix/src/global/mail_version.h
postfix/src/smtpd/smtpd_check.c

index 0c816b905eb018ddfcc340ce76eefa7228b14240..77e7b778b6204a145e57e2ca1f59da972bd7fea3 100644 (file)
@@ -20860,11 +20860,25 @@ Apologies for any names omitted.
 20141130
 
        Cleanup: when searching multiple DNS record types for a
-       specific name, and the result status is not DNS_OK, return
-       the rcode and diagnostic text for that status instead of
-       the last rcode and last diagnostic text.
+       specific name, and not all queries return the same result
+       status, do not blindly return the last query's rcode and
+       diagnostic text.  Instead, return rcode and text that is
+       consistent with the aggregate result status.
 
        Cleanup: un-broke several smtpd regression tests (work in
        progress, with three more to go).  Files: smtpd/smtpd_check.c,
        smtpd/smtpd_server.{in,ref}, smtpd/smtpd_exp.{in,ref}.
        smtpd/smtpd_dnswl.{in,ref}.
+
+       Documentation: added note on Milter-signing bounces.
+
+20141201
+
+       Bugfix (introduced: 20141130): memory leak. File: dns_lookup.c.
+
+       Cleanup: un-broke several dns regression tests by sorting
+       getaddrinfo() results by address family. Files: dns/dns_rr_eq_sa.c,
+       dns/dns_rr_eq_sa.ref, dns/dns_sa_to_rr.c, dns/dns_sa_to_rr.ref.
+
+       Cleanup: missing #ifdef in smtpd_check test driver. File:
+       smtpd/smtpd_check.c.
index 1e2216af22b2b5c2282a5bb594515255bf914d7b..6f8f7c9f9961146d4472520870c2b5fcfdbf1d33 100644 (file)
@@ -247,7 +247,22 @@ must not REJECT or TEMPFAIL simulated RCPT TO commands. When a
 non_smtpd_milters application REJECTs or TEMPFAILs a recipient, Postfix will
 report a configuration error, and mail will stay in the queue.
 
-None of this is a problem for mail filters that digitally sign mail.
+S\bSi\big\bgn\bni\bin\bng\bg i\bin\bnt\bte\ber\brn\bna\bal\bll\bly\by-\b-g\bge\ben\bne\ber\bra\bat\bte\bed\bd b\bbo\bou\bun\bnc\bce\be m\bme\bes\bss\bsa\bag\bge\bes\bs
+
+Postfix normally does not apply content filters to mail that is generated
+internally such as bounces or Postmaster notifications. Filtering internally-
+generated bounces would result in loss of mail when a filter rejects a message,
+as the resulting double-bounce message would almost certainly also be blocked.
+
+To sign Postfix's own bounce messages, enable filtering of internally-generated
+bounces (line 2 below), and don't reject any internally-generated bounces with
+non_smtpd_milters, header_checks or body_checks (lines 3-5 below).
+
+    1 /etc/postfix/main.cf:
+    2     internal_mail_filter_classes = bounce
+    3     non_smtpd_milters = don't reject internally-generated bounces
+    4     header_checks = don't reject internally-generated bounces
+    5     body_checks = don't reject internally-generated bounces
 
 M\bMi\bil\blt\bte\ber\br e\ber\brr\bro\bor\br h\bha\ban\bnd\bdl\bli\bin\bng\bg
 
@@ -590,11 +605,6 @@ the CONTENT_INSPECTION_README document for a discussion.
     commands. When this rule is violated, Postfix will report a configuration
     error, and mail will stay in the queue.
 
-  * Postfix currently does not apply content filters to mail that is forwarded
-    or aliased internally, or to mail that is generated internally such as
-    bounces or Postmaster notifications. This may be a problem when you want to
-    apply a signing Milter to such mail.
-
   * When you use the before-queue content filter for incoming SMTP mail (see
     SMTPD_PROXY_README), Milter applications have access only to the SMTP
     command information; they have no access to the message header or body, and
index dcb5defeb4306e9814c2734c9ac3995fd4633ec9..2bbc43b0b0cbf08c0742a61b0343cd5660410c63 100644 (file)
@@ -428,8 +428,28 @@ commands.  When a <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters<
 a recipient, Postfix will report a configuration error, and mail
 will stay in the queue.  </p>
 
-<p> None of this is a problem for mail filters that digitally sign
-mail. </p>
+<h4> Signing internally-generated bounce messages </h4>
+
+<li> <p> Postfix normally does not apply content filters to mail
+that is generated internally such as bounces or Postmaster
+notifications. Filtering internally-generated bounces would result
+in loss of mail when a filter rejects a message, as the resulting
+double-bounce message would almost certainly also be blocked. </p>
+
+<p>  To sign Postfix's own bounce messages, enable filtering of
+internally-generated bounces (line 2 below), and don't reject any
+internally-generated bounces with <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters</a>, <a href="postconf.5.html#header_checks">header_checks</a>
+or <a href="postconf.5.html#body_checks">body_checks</a> (lines 3-5 below).  </p>
+
+<blockquote>
+<pre>
+1 /etc/postfix/<a href="postconf.5.html">main.cf</a>:
+2     <a href="postconf.5.html#internal_mail_filter_classes">internal_mail_filter_classes</a> = bounce
+3     <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters</a> = <i>don't reject internally-generated bounces</i>
+4     <a href="postconf.5.html#header_checks">header_checks</a> = <i>don't reject internally-generated bounces</i>
+5     <a href="postconf.5.html#body_checks">body_checks</a> = <i>don't reject internally-generated bounces</i>
+</pre>
+</blockquote>
 
 <h3><a name="errors">Milter error handling</a></h3>
 
@@ -885,12 +905,6 @@ TEMPFAIL simulated RCPT TO commands. When this rule is violated,
 Postfix will report a configuration error, and mail will stay in
 the queue.  </p>
 
-<li> <p> Postfix currently does not apply content filters to mail
-that is forwarded or aliased internally, or to mail that is generated
-internally such as bounces or Postmaster notifications. This may
-be a problem when you want to apply a signing Milter to such mail.
-</p>
-
 <li> <p> When you use the before-queue content filter for incoming
 SMTP mail (see <a href="SMTPD_PROXY_README.html">SMTPD_PROXY_README</a>), Milter applications have access
 only to the SMTP command information; they have no access to the
index b8e3b0188a98444db4c343f2f79ca613b83f9b7c..73b4aac5b472cb474ecc4c97ee98f405db8fedec 100644 (file)
@@ -10333,18 +10333,21 @@ implemented.  </p>
 
 <ul>
 
-<li> <p> The <a href="postconf.5.html#smtp_dns_reply_filter">smtp_dns_reply_filter</a> and <a href="postconf.5.html#lmtp_dns_reply_filter">lmtp_dns_reply_filter</a> features
-are used only for Postfix SMTP or LMTP client DNS lookups of MX,
-A, and AAAAA records to locate a remote SMTP or LMTP server, including
-lookups that are made to implement the features <a href="postconf.5.html#reject_unverified_sender">reject_unverified_sender</a>
-and <a href="postconf.5.html#reject_unverified_recipient">reject_unverified_recipient</a>. </p>
+<li> <p> Postfix DNS reply filters have no effect on implicit DNS
+lookups through nsswitch.conf or equivalent mechanisms.  </p>
 
-<li> <p> The Postfix SMTP or LMTP client defers mail delivery when
+<li> <p> The Postfix SMTP and LMTP client use <a href="postconf.5.html#smtp_dns_reply_filter">smtp_dns_reply_filter</a>
+and <a href="postconf.5.html#lmtp_dns_reply_filter">lmtp_dns_reply_filter</a> only to locate a remote SMTP or LMTP
+server (record types MX, A, and AAAAA).  These lookups are also
+made to implement the features <a href="postconf.5.html#reject_unverified_sender">reject_unverified_sender</a> and
+<a href="postconf.5.html#reject_unverified_recipient">reject_unverified_recipient</a>.  </p>
+
+<li> <p> The Postfix SMTP and LMTP client defer mail delivery when
 a filter removes all lookup results from a successful query.  </p>
 
-<li> <p> The <a href="postconf.5.html#smtpd_dns_reply_filter">smtpd_dns_reply_filter</a> feature is used only for Postfix
-SMTP server DNS lookups of MX, A, AAAAA, and TXT records to implement
-the features <a href="postconf.5.html#reject_unknown_helo_hostname">reject_unknown_helo_hostname</a>, <a href="postconf.5.html#reject_unknown_sender_domain">reject_unknown_sender_domain</a>,
+<li> <p> Postfix SMTP server uses <a href="postconf.5.html#smtpd_dns_reply_filter">smtpd_dns_reply_filter</a> only to
+look up MX, A, AAAAA, and TXT records to implement the features
+<a href="postconf.5.html#reject_unknown_helo_hostname">reject_unknown_helo_hostname</a>, <a href="postconf.5.html#reject_unknown_sender_domain">reject_unknown_sender_domain</a>,
 <a href="postconf.5.html#reject_unknown_recipient_domain">reject_unknown_recipient_domain</a>, reject_rbl_*, and reject_rhsbl_*.
 </p>
 
@@ -10352,9 +10355,6 @@ the features <a href="postconf.5.html#reject_unknown_helo_hostname">reject_unkno
 delivery when a filter removes all lookup results from a successful
 query.  </p>
 
-<li> <p> Implicit DNS lookups through nsswitch.conf or equivalent
-mechanisms are not filtered.  </p>
-
 </ul>
 
 <p> Example: ignore Google AAAA records in Postfix SMTP client DNS
index d39d6925166691dfce72b6a1445401c2a8e31fd2..29253cc4c35744e8ef303b290eb90b16eec87b3c 100644 (file)
@@ -6394,26 +6394,26 @@ implemented.
 .PP
 Notes:
 .IP \(bu
-The smtp_dns_reply_filter and lmtp_dns_reply_filter features
-are used only for Postfix SMTP or LMTP client DNS lookups of MX,
-A, and AAAAA records to locate a remote SMTP or LMTP server, including
-lookups that are made to implement the features reject_unverified_sender
-and reject_unverified_recipient.
+Postfix DNS reply filters have no effect on implicit DNS
+lookups through nsswitch.conf or equivalent mechanisms.
 .IP \(bu
-The Postfix SMTP or LMTP client defers mail delivery when
+The Postfix SMTP and LMTP client use smtp_dns_reply_filter
+and lmtp_dns_reply_filter only to locate a remote SMTP or LMTP
+server (record types MX, A, and AAAAA).  These lookups are also
+made to implement the features reject_unverified_sender and
+reject_unverified_recipient.
+.IP \(bu
+The Postfix SMTP and LMTP client defer mail delivery when
 a filter removes all lookup results from a successful query.
 .IP \(bu
-The smtpd_dns_reply_filter feature is used only for Postfix
-SMTP server DNS lookups of MX, A, AAAAA, and TXT records to implement
-the features reject_unknown_helo_hostname, reject_unknown_sender_domain,
+Postfix SMTP server uses smtpd_dns_reply_filter only to
+look up MX, A, AAAAA, and TXT records to implement the features
+reject_unknown_helo_hostname, reject_unknown_sender_domain,
 reject_unknown_recipient_domain, reject_rbl_*, and reject_rhsbl_*.
 .IP \(bu
 The Postfix SMTP server logs a warning or defers mail
 delivery when a filter removes all lookup results from a successful
 query.
-.IP \(bu
-Implicit DNS lookups through nsswitch.conf or equivalent
-mechanisms are not filtered.
 .br
 .PP
 Example: ignore Google AAAA records in Postfix SMTP client DNS
index 27984feca481fbda3026e257689d146c2b37a6ae..5b634c0dc974d9f99cbdd482bf987cf87ac8e6f6 100644 (file)
@@ -428,8 +428,28 @@ commands.  When a non_smtpd_milters application REJECTs or TEMPFAILs
 a recipient, Postfix will report a configuration error, and mail
 will stay in the queue.  </p>
 
-<p> None of this is a problem for mail filters that digitally sign
-mail. </p>
+<h4> Signing internally-generated bounce messages </h4>
+
+<li> <p> Postfix normally does not apply content filters to mail
+that is generated internally such as bounces or Postmaster
+notifications. Filtering internally-generated bounces would result
+in loss of mail when a filter rejects a message, as the resulting
+double-bounce message would almost certainly also be blocked. </p>
+
+<p>  To sign Postfix's own bounce messages, enable filtering of
+internally-generated bounces (line 2 below), and don't reject any
+internally-generated bounces with non_smtpd_milters, header_checks
+or body_checks (lines 3-5 below).  </p>
+
+<blockquote>
+<pre>
+1 /etc/postfix/main.cf:
+2     internal_mail_filter_classes = bounce
+3     non_smtpd_milters = <i>don't reject internally-generated bounces</i>
+4     header_checks = <i>don't reject internally-generated bounces</i>
+5     body_checks = <i>don't reject internally-generated bounces</i>
+</pre>
+</blockquote>
 
 <h3><a name="errors">Milter error handling</a></h3>
 
@@ -885,12 +905,6 @@ TEMPFAIL simulated RCPT TO commands. When this rule is violated,
 Postfix will report a configuration error, and mail will stay in
 the queue.  </p>
 
-<li> <p> Postfix currently does not apply content filters to mail
-that is forwarded or aliased internally, or to mail that is generated
-internally such as bounces or Postmaster notifications. This may
-be a problem when you want to apply a signing Milter to such mail.
-</p>
-
 <li> <p> When you use the before-queue content filter for incoming
 SMTP mail (see SMTPD_PROXY_README), Milter applications have access
 only to the SMTP command information; they have no access to the
index 8816efc870173ab01f4c7c82ad896df5cba3257c..0502e60ea56282ce428cfd2b53817aab2ad05bc4 100644 (file)
@@ -16331,18 +16331,21 @@ implemented.  </p>
 
 <ul>
 
-<li> <p> The smtp_dns_reply_filter and lmtp_dns_reply_filter features
-are used only for Postfix SMTP or LMTP client DNS lookups of MX,
-A, and AAAAA records to locate a remote SMTP or LMTP server, including
-lookups that are made to implement the features reject_unverified_sender
-and reject_unverified_recipient. </p>
+<li> <p> Postfix DNS reply filters have no effect on implicit DNS
+lookups through nsswitch.conf or equivalent mechanisms.  </p>
 
-<li> <p> The Postfix SMTP or LMTP client defers mail delivery when
+<li> <p> The Postfix SMTP and LMTP client use smtp_dns_reply_filter
+and lmtp_dns_reply_filter only to locate a remote SMTP or LMTP
+server (record types MX, A, and AAAAA).  These lookups are also
+made to implement the features reject_unverified_sender and
+reject_unverified_recipient.  </p>
+
+<li> <p> The Postfix SMTP and LMTP client defer mail delivery when
 a filter removes all lookup results from a successful query.  </p>
 
-<li> <p> The smtpd_dns_reply_filter feature is used only for Postfix
-SMTP server DNS lookups of MX, A, AAAAA, and TXT records to implement
-the features reject_unknown_helo_hostname, reject_unknown_sender_domain,
+<li> <p> Postfix SMTP server uses smtpd_dns_reply_filter only to
+look up MX, A, AAAAA, and TXT records to implement the features
+reject_unknown_helo_hostname, reject_unknown_sender_domain,
 reject_unknown_recipient_domain, reject_rbl_*, and reject_rhsbl_*.
 </p>
 
@@ -16350,9 +16353,6 @@ reject_unknown_recipient_domain, reject_rbl_*, and reject_rhsbl_*.
 delivery when a filter removes all lookup results from a successful
 query.  </p>
 
-<li> <p> Implicit DNS lookups through nsswitch.conf or equivalent
-mechanisms are not filtered.  </p>
-
 </ul>
 
 <p> Example: ignore Google AAAA records in Postfix SMTP client DNS
index 3618550cef9f26b936a99390ee9edc5006b7b1b3..076c65177ef00caf140cd953bf96768f5cf83b7f 100644 (file)
@@ -801,7 +801,7 @@ int     dns_lookup_rl(const char *name, unsigned flags, DNS_RR **rrlist,
            hpref_rcode = *rcode; \
        if (why && status != DNS_OK) \
            vstring_strcpy(hpref_rtext ? hpref_rtext : \
-                          vstring_alloc(VSTRING_LEN(why)), \
+                          (hpref_rtext = vstring_alloc(VSTRING_LEN(why))), \
                           vstring_str(why)); \
     } while (0)
 
index baecab7908f34579a0d83922e9e88841246d1bc3..67b0f97f4891030f23def7c5351bfbeaf26225f5 100644 (file)
@@ -77,9 +77,11 @@ int     dns_rr_eq_sa(DNS_RR *rr, struct sockaddr * sa)
   * Stand-alone test program.
   */
 #ifdef TEST
+#include <stdlib.h>
 #include <vstream.h>
 #include <myaddrinfo.h>
 #include <inet_proto.h>
+#include <mymalloc.h>
 
 static const char *myname;
 
@@ -88,6 +90,14 @@ static NORETURN usage(void)
     msg_fatal("usage: %s hostname address", myname);
 }
 
+static int compare_family(const void *a, const void *b)
+{
+    struct addrinfo *resa = *(struct addrinfo **) a;
+    struct addrinfo *resb = *(struct addrinfo **) b;
+
+    return (resa->ai_family - resb->ai_family);
+}
+
 int     main(int argc, char **argv)
 {
     MAI_HOSTADDR_STR hostaddr;
@@ -95,6 +105,8 @@ int     main(int argc, char **argv)
     struct addrinfo *res0;
     struct addrinfo *res1;
     struct addrinfo *res;
+    struct addrinfo **resv;
+    size_t  len, n;
     int     aierr;
 
     myname = argv[0];
@@ -116,19 +128,26 @@ int     main(int argc, char **argv)
 
        if ((aierr = hostname_to_sockaddr(argv[0], (char *) 0, 0, &res0)) != 0)
            msg_fatal("host name %s: %s", argv[0], MAI_STRERROR(aierr));
-       for (res = res0; res != 0; res = res->ai_next) {
-           SOCKADDR_TO_HOSTADDR(res->ai_addr, res->ai_addrlen,
+              for (len = 0, res = res0; res != 0; res = res->ai_next)
+            len += 1;
+        resv = (struct addrinfo **) mymalloc(len * sizeof(*resv));
+        for (len = 0, res = res0; res != 0; res = res->ai_next)
+            resv[len++] = res;
+        qsort((void *) resv, len, sizeof(*resv), compare_family);
+        for (n = 0; n < len; n++) {
+           SOCKADDR_TO_HOSTADDR(resv[n]->ai_addr, resv[n]->ai_addrlen,
                                 &hostaddr, (MAI_SERVPORT_STR *) 0, 0);
            vstream_printf("%s =?= %s\n", hostaddr.buf, argv[1]);
            vstream_printf("tested by function: %s\n",
-                          dns_rr_eq_sa(rr, res->ai_addr) ?
+                          dns_rr_eq_sa(rr, resv[n]->ai_addr) ?
                           "yes" : "no");
            vstream_printf("tested by macro:    %s\n",
-                          DNS_RR_EQ_SA(rr, res->ai_addr) ?
+                          DNS_RR_EQ_SA(rr, resv[n]->ai_addr) ?
                           "yes" : "no");
        }
        dns_rr_free(rr);
        freeaddrinfo(res0);
+       myfree((void *) resv);
        vstream_fflush(VSTREAM_OUT);
        argv += 1;
     }
index 668726692b33030e747b097b1c9dcd2789951e81..75fb0c3d42e775ea56534ef345ab7656662f7532 100644 (file)
@@ -1,24 +1,24 @@
-2604:8d00:189::2 =?= 168.100.189.2
-tested by function: no
-tested by macro:    no
 168.100.189.2 =?= 168.100.189.2
 tested by function: yes
 tested by macro:    yes
-2604:8d00:189::2 =?= 168.100.189.3
+2604:8d00:189::2 =?= 168.100.189.2
 tested by function: no
 tested by macro:    no
 168.100.189.2 =?= 168.100.189.3
 tested by function: no
 tested by macro:    no
+2604:8d00:189::2 =?= 168.100.189.3
+tested by function: no
+tested by macro:    no
+168.100.189.2 =?= 2604:8d00:189::2
+tested by function: no
+tested by macro:    no
 2604:8d00:189::2 =?= 2604:8d00:189::2
 tested by function: yes
 tested by macro:    yes
-168.100.189.2 =?= 2604:8d00:189::2
+168.100.189.2 =?= 2604:8d00:189::3
 tested by function: no
 tested by macro:    no
 2604:8d00:189::2 =?= 2604:8d00:189::3
 tested by function: no
 tested by macro:    no
-168.100.189.2 =?= 2604:8d00:189::3
-tested by function: no
-tested by macro:    no
index 8a0e157223be979f92a0df4300c8109d4f761544..6b9efcc170ffd82c4e39c267222a7835f40844d6 100644 (file)
@@ -50,7 +50,7 @@
 
 /* dns_sa_to_rr - socket address to resource record */
 
-DNS_RR *dns_sa_to_rr(const char *hostname, unsigned pref, struct sockaddr * sa)
+DNS_RR *dns_sa_to_rr(const char *hostname, unsigned pref, struct sockaddr *sa)
 {
 #define DUMMY_TTL      0
 
@@ -74,9 +74,11 @@ DNS_RR *dns_sa_to_rr(const char *hostname, unsigned pref, struct sockaddr * sa)
   * Stand-alone test program.
   */
 #ifdef TEST
+#include <stdlib.h>
 #include <vstream.h>
 #include <myaddrinfo.h>
 #include <inet_proto.h>
+#include <mymalloc.h>
 
 static const char *myname;
 
@@ -85,11 +87,21 @@ static NORETURN usage(void)
     msg_fatal("usage: %s hostname", myname);
 }
 
+static int compare_family(const void *a, const void *b)
+{
+    struct addrinfo *resa = *(struct addrinfo **) a;
+    struct addrinfo *resb = *(struct addrinfo **) b;
+
+    return (resa->ai_family - resb->ai_family);
+}
+
 int     main(int argc, char **argv)
 {
     MAI_HOSTADDR_STR hostaddr;
     struct addrinfo *res0;
     struct addrinfo *res;
+    struct addrinfo **resv;
+    size_t  len, n;
     DNS_RR *rr;
     int     aierr;
 
@@ -102,8 +114,14 @@ int     main(int argc, char **argv)
     while (*++argv) {
        if ((aierr = hostname_to_sockaddr(argv[0], (char *) 0, 0, &res0)) != 0)
            msg_fatal("%s: %s", argv[0], MAI_STRERROR(aierr));
-       for (res = res0; res != 0; res = res->ai_next) {
-           if ((rr = dns_sa_to_rr(argv[0], 0, res->ai_addr)) == 0)
+       for (len = 0, res = res0; res != 0; res = res->ai_next)
+           len += 1;
+       resv = (struct addrinfo **) mymalloc(len * sizeof(*resv));
+       for (len = 0, res = res0; res != 0; res = res->ai_next)
+           resv[len++] = res;
+       qsort((void *) resv, len, sizeof(*resv), compare_family);
+       for (n = 0; n < len; n++) {
+           if ((rr = dns_sa_to_rr(argv[0], 0, resv[n]->ai_addr)) == 0)
                msg_fatal("dns_sa_to_rr: %m");
            if (dns_rr_to_pa(rr, &hostaddr) == 0)
                msg_fatal("dns_rr_to_pa: %m");
@@ -112,6 +130,7 @@ int     main(int argc, char **argv)
            dns_rr_free(rr);
        }
        freeaddrinfo(res0);
+       myfree((void *) resv);
     }
     return (0);
 }
index 0b67b74e23388b89459aa4ebbf8c23749267483e..86c022d56a6aecc8832bf4ef2761f113d1e9948a 100644 (file)
@@ -1,2 +1,2 @@
-spike.porcupine.org -> 2604:8d00:189::2
 spike.porcupine.org -> 168.100.189.2
+spike.porcupine.org -> 2604:8d00:189::2
index 17c960c6b3c53e3a3b663ab435f8cc6163d57bcf..3509a6058236a89833849a008ff1ab89ff2e584a 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20141130"
+#define MAIL_RELEASE_DATE      "20141201"
 #define MAIL_VERSION_NUMBER    "2.12"
 
 #ifdef SNAPSHOT
index 3237ca0f7e4237479190b1e759c597016eba67f1..476bcfed00fd21be0056612e54e37666e85e9ca8 100644 (file)
@@ -6183,10 +6183,12 @@ int     main(int argc, char **argv)
 #define FREE_STRING(s) { if (s) myfree(s); }
     FREE_STRING(state.helo_name);
     FREE_STRING(state.sender);
+#ifdef USE_TLS
     if (state.tls_context) {
        FREE_STRING(state.tls_context->peer_cert_fprint);
        myfree((char *) state.tls_context);
     }
+#endif
     exit(0);
 }