]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.3-RC6 v2.3-RC6
authorWietse Venema <wietse@porcupine.org>
Wed, 5 Jul 2006 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Sat, 10 Feb 2018 20:36:59 +0000 (15:36 -0500)
29 files changed:
postfix/HISTORY
postfix/README_FILES/MILTER_README
postfix/README_FILES/TLS_README
postfix/html/MILTER_README.html
postfix/html/TLS_README.html
postfix/html/bounce.8.html
postfix/man/man8/bounce.8
postfix/proto/MILTER_README.html
postfix/proto/TLS_README.html
postfix/src/bounce/bounce.c
postfix/src/bounce/bounce_notify_util.c
postfix/src/cleanup/cleanup_milter.c
postfix/src/global/is_header.c
postfix/src/global/mail_version.h
postfix/src/milter/milter8.c
postfix/src/milter/test-milter.c
postfix/src/smtp/Makefile.in
postfix/src/smtp/smtp.h
postfix/src/smtp/smtp_connect.c
postfix/src/smtp/smtp_proto.c
postfix/src/smtpd/Makefile.in
postfix/src/tls/Makefile.in
postfix/src/tls/tls.h
postfix/src/tls/tls_client.c
postfix/src/tls/tls_mgr.c
postfix/src/tls/tls_misc.c
postfix/src/tls/tls_server.c
postfix/src/tlsmgr/Makefile.in
postfix/src/tlsmgr/tlsmgr.c

index 3e27f5426a172d08de724ba6def4d829f38d6d5b..53c0959cd6a4b0c875d0d475aa7ef4aad187bfb3 100644 (file)
@@ -12430,7 +12430,7 @@ Apologies for any names omitted.
        header and the rest of the message, violating the draft
        domainkeys spec.
 
-20070602
+20060702
 
        Cleanup: more graceful handling of queue file read/write
        errors while processing milter message modification requests.
@@ -12450,8 +12450,31 @@ Apologies for any names omitted.
        Bugfix: the Milter client skipped zero-length body lines.
        File: milter/milter8.c.
 
+       Feature (just this one): RFC 3834 "Auto-Submitted:" message
+       header in DSNs.  File: bounce/bounce_notify_util.c.
+
+20060705
+
+       Portability: LP64 systems required a few ssize_t->int casts
+       in debug logging statements.  Files: milter/test_milter.c,
+       cleanup/cleanup_milter.c.
+
+       Cleanup: comments, error messages, and crumbling interfaces.
+
 Wish list:
 
+       The usage of TLScontext->cache_type is not clear. It specifies
+       a TLS session cache name, but it is sometimes used as an
+       indicator whether or not TLS session caching is available.
+       In reality, that decision is made by the tlsmgr process,
+       and in response to initialization errors in a TLS server
+       or client process.
+
+       Postfix TLS library code should copy any strings that it
+       receives from the application, instead of passing them
+       around as pointers. TLScontext->cache_type is a case in
+       point.
+
        In the SMTPD policy client (encode or strip) non-printable
        non-ASCII in (TLS or all) attributes.
 
@@ -12461,9 +12484,6 @@ Wish list:
        Introduce structured API for tls_server_mumble() just like
        with smtp(8): this eliminates ever-growing lists of arguments.
 
-       With (non)delivery notifications, prepend an "Auto-Submitted:
-       auto-replied" header, as per RFC 3834.
-
        Defer delivery when a SASL password exists but the server
        does not offer SASL authentication, as mail might otherwise
        be bounced. This may become an issue now that Postfix will
@@ -12480,7 +12500,8 @@ Wish list:
        Sendmail. Likewise, addresses in add/delete requests should
        be internalized before updating the queue file.
 
-       Check that UINT32 == in choice is ok (i.e. LP64 UNIX).
+       Check that "UINT32 == unsigned int" choice is ok (i.e. LP64
+       UNIX).
 
        Fix milter_argv() so it does not forget how much memory it
        has.
@@ -12489,9 +12510,6 @@ Wish list:
        while it is configured in an SMTP server that runs before
        the smtpd_proxy filter.
 
-       Don't send xforward attributes to every site that announces
-       xforward support.
-
        The sendmail command should not return non-std exit status
        after fatal error in some internal library routine.
 
@@ -12499,20 +12517,10 @@ Wish list:
 
        Keep whitespace between label and ":"?
 
-       Make XCLIENT/XFORWARD future proof: send xtext and accept
-       old non-xtext.
-
        Make the map case folding/locking options configurable, if
        not at run-time then at least at compile time so we get
        consistent behavior across applications.
 
-       Investigate if it is feasible to eliminate cleanup(8) from
-       the path of mail that is forwarded or generated internally.
-       Good: we don't want header rewriting or content inspection.
-       Bad: we still need virtual aliasing, even when mail is
-       forwarded internally. This almost seems to imply that we
-       do virtual aliasing earlier?
-
        Investigate what it would take to eliminate oqmgr, and to
        make the old behavior configurable in a unified queue
        manager.  This would shave another 2.7 KLOC from the source
@@ -12525,7 +12533,7 @@ Wish list:
 
        Softbounce fallback-to-ISP for SOHO users. This requires
        playing with with the soft_error test in the smtp_trouble.c
-       module, and a way to avoid trying direct-to-MX-backup.
+       module, and a way to avoid trying direct-to-backup-MX.
 
        select -> kqueue, epoll, /dev/poll, poll() ...
 
@@ -12535,7 +12543,8 @@ Wish list:
        access rule.
 
        Centralize main.cf parameter input so that defaults work
-       consistently.
+       consistently. What about parameter names that are prefixed
+       with mail delivery transport names?
 
        Fix default time unit handling so that we can have a default
        bounce lifetime of $maximal_queue_lifetime, without causing
@@ -12551,8 +12560,6 @@ Wish list:
        Remove defer(8) and trace(8) references and man pages. These
        are services not program names.
 
-       dsb_formal -> dsb_form_all, dsb_status -> dsb_form_status
-
        Is it safe to cache a connection after it has been used for
        more than some number of address verification probes?
 
@@ -12569,13 +12576,6 @@ Wish list:
        Low: replace_sender/replace_recipient actions in access
        maps?
 
-       Feature: need "soft-bounce before fall-back relay" for SOHO
-       type operations, so they can send direct mail without having
-       to route everything through a provider.
-
-       Med: disable header address rewriting after XCLIENT?
-       Introduce a better concept of original submission?
-
        Low: configurable order of local(8) delivery methods.
 
        Med: local and remote source port and IP address for smtpd
@@ -12625,8 +12625,6 @@ Wish list:
 
        Low: configurable internal/system locking method.
 
-       Low: make sure CCARGS -I options come at the end.
-
        Low: add INSTALL section for pre-existing Postfix systems.
 
        Low: add INSTALL section for pre-existing RPM Postfixes.
@@ -12658,7 +12656,7 @@ Wish list:
        Med: postsuper -r should do something with recipients in
        bounce logfiles, to make sure the sender will be notified.
        To be perfectly safe, no process other than the queue manager
-       should move a queue file from the active queue.
+       should move a queue file away from the active queue.
 
        This could involve tagging a queue file, and use up another
        permission bit.
index 82ef3bac785905f0d59749c96af387dc72d5d6f4..05e0436a5f657c9f7ccdb8e0f00f7839ccce0631 100644 (file)
@@ -451,7 +451,7 @@ Milter applications make assumptions that aren't true in a Postfix environment.
 L\bLi\bim\bmi\bit\bta\bat\bti\bio\bon\bns\bs
 
 This section lists limitations of the Postfix Milter implementation. Some
-limitations will be removed disappear as support is extended over time. Of
+limitations will be removed as the implementation is extended over time. Of
 course the usual limitations of before-queue filtering will always apply. See
 the CONTENT_INSPECTION_README document for a discussion.
 
index 868615078ff0f3bdf3799569ffb86750ef7fa310..488ff6e64eb0e52abbd09145590f720322e2ade1 100644 (file)
@@ -1197,10 +1197,9 @@ configuration is repaired, encryption will be used.
 
 The new policy table is specified via the smtp_tls_policy_maps parameter. This
 lists optional lookup tables with the Postfix SMTP client TLS security policy
-by next-hop destination. It supersedes the obsolete smtp_tls_per_site
-parameter. When $smtp_tls_policy_maps is not empty, the smtp_tls_per_site
-parameter is ignored (a warning is written to the logs if it is also non-
-empty).
+by next-hop destination. When $smtp_tls_policy_maps is not empty, the obsolete
+smtp_tls_per_site parameter is ignored (a warning is written to the logs if
+both parameter values are non-empty).
 
 The TLS policy table is indexed by the full next-hop destination, which is
 either the recipient domain, or the verbatim next-hop specified in the
index acfe5fae36a1cb23cd3ce9966f0fb7816ab985ae..b53a258b9679fbdadeda741790080a6e1265109e 100644 (file)
@@ -714,7 +714,7 @@ will dump core when you do this. </p>
 <h2><a name="limitations">Limitations</a></h2>
 
 <p> This section lists limitations of the Postfix Milter implementation.
-Some limitations will be removed disappear as support is extended
+Some limitations will be removed as the implementation is extended
 over time. Of course the usual limitations of before-queue filtering
 will always apply. See the <a href="CONTENT_INSPECTION_README.html">CONTENT_INSPECTION_README</a> document for
 a discussion. </p>
index 05e39eb5f2974cb1cbd57723e99c1fc2cbacc1b1..2d5f8518109d5c3cfd717aa3fb54827f72cdfcf8 100644 (file)
@@ -1636,10 +1636,10 @@ will be used. </p>
 
 <p> The new policy table is specified via the <a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a>
 parameter. This lists optional lookup tables with the Postfix SMTP client
-TLS security policy by next-hop destination. It supersedes the obsolete
-<a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> parameter. When $<a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a> is not empty,
-the <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> parameter is ignored (a warning is written to the
-logs if it is also non-empty). </p>
+TLS security policy by next-hop destination. When $<a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a>
+is not empty, the obsolete <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> parameter is ignored
+(a warning is written to the logs if both parameter values are
+non-empty).  </p>
 
 <p> The TLS policy table is indexed by the full next-hop destination,
 which is either the recipient domain, or the verbatim next-hop
index da749a9916a2677abe4226b59e9e3bea4479bec3..f50ef12244731d5675c9c554b4e24351bfd3cb20 100644 (file)
@@ -43,10 +43,11 @@ BOUNCE(8)                                                            BOUNCE(8)
 
 <b>STANDARDS</b>
        <a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a> (ARPA Internet Text Messages)
+       <a href="http://www.faqs.org/rfcs/rfc2045.html">RFC 2045</a> (Format of Internet Message Bodies)
        <a href="http://www.faqs.org/rfcs/rfc2822.html">RFC 2822</a> (ARPA Internet Text Messages)
        <a href="http://www.faqs.org/rfcs/rfc3462.html">RFC 3462</a> (Delivery Status Notifications)
        <a href="http://www.faqs.org/rfcs/rfc3464.html">RFC 3464</a> (Delivery Status Notifications)
-       <a href="http://www.faqs.org/rfcs/rfc2045.html">RFC 2045</a> (Format of Internet Message Bodies)
+       <a href="http://www.faqs.org/rfcs/rfc3834.html">RFC 3834</a> (Auto-Submitted: message header)
 
 <b>DIAGNOSTICS</b>
        Problems and transactions are logged to <b>syslogd</b>(8).
index 8d5d0e30c76b87e0346d591393eebf807b463882..ab5e86583e6caa2047e8b8031a626d1fef937fd3 100644 (file)
@@ -41,10 +41,11 @@ themselves, and that depend on retry logic in their own client.
 .na
 .nf
 RFC 822 (ARPA Internet Text Messages)
+RFC 2045 (Format of Internet Message Bodies)
 RFC 2822 (ARPA Internet Text Messages)
 RFC 3462 (Delivery Status Notifications)
 RFC 3464 (Delivery Status Notifications)
-RFC 2045 (Format of Internet Message Bodies)
+RFC 3834 (Auto-Submitted: message header)
 .SH DIAGNOSTICS
 .ad
 .fi
index b82d770ab79c6d87362b4c0c331cbbc00694dbf5..acd6dddfdc79445ff8c6d0da608e662fd6bfa9df 100644 (file)
@@ -714,7 +714,7 @@ will dump core when you do this. </p>
 <h2><a name="limitations">Limitations</a></h2>
 
 <p> This section lists limitations of the Postfix Milter implementation.
-Some limitations will be removed disappear as support is extended
+Some limitations will be removed as the implementation is extended
 over time. Of course the usual limitations of before-queue filtering
 will always apply. See the CONTENT_INSPECTION_README document for
 a discussion. </p>
index 461a00c3003e76c501fb2eb36893f28e5a5dcc1b..8a17a962314668ed8de1788efcea7817e72c1329 100644 (file)
@@ -1636,10 +1636,10 @@ will be used. </p>
 
 <p> The new policy table is specified via the smtp_tls_policy_maps
 parameter. This lists optional lookup tables with the Postfix SMTP client
-TLS security policy by next-hop destination. It supersedes the obsolete
-smtp_tls_per_site parameter. When $smtp_tls_policy_maps is not empty,
-the smtp_tls_per_site parameter is ignored (a warning is written to the
-logs if it is also non-empty). </p>
+TLS security policy by next-hop destination. When $smtp_tls_policy_maps
+is not empty, the obsolete smtp_tls_per_site parameter is ignored
+(a warning is written to the logs if both parameter values are
+non-empty).  </p>
 
 <p> The TLS policy table is indexed by the full next-hop destination,
 which is either the recipient domain, or the verbatim next-hop
index 67042f3f6fc8b8e2518e6d20be4acc1af14b907e..d9fe163b5d9e2f4c51b4ce8e642c7d84b0f6225b 100644 (file)
 /*     themselves, and that depend on retry logic in their own client.
 /* STANDARDS
 /*     RFC 822 (ARPA Internet Text Messages)
+/*     RFC 2045 (Format of Internet Message Bodies)
 /*     RFC 2822 (ARPA Internet Text Messages)
 /*     RFC 3462 (Delivery Status Notifications)
 /*     RFC 3464 (Delivery Status Notifications)
-/*     RFC 2045 (Format of Internet Message Bodies)
+/*     RFC 3834 (Auto-Submitted: message header)
 /* DIAGNOSTICS
 /*     Problems and transactions are logged to \fBsyslogd\fR(8).
 /* CONFIGURATION PARAMETERS
index 39dc887e77694fdfbb111116b823607cace9d9b2..44a91ab55b308319dfdbd4e30fef969e39de9e33 100644 (file)
@@ -453,6 +453,12 @@ int     bounce_header(VSTREAM *bounce, BOUNCE_INFO *bounce_info,
                            STR(quote_822_local(bounce_info->buf, dest)),
                            postmaster_copy);
 
+    /*
+     * Auto-Submitted header, as per RFC 3834.
+     */
+    post_mail_fprintf(bounce, "Auto-Submitted: %s", postmaster_copy ?
+                     "auto-generated" : "auto-replied");
+
     /*
      * MIME header. Use 8bit encoding when either the bounced message or the
      * template requires it.
index 6c865f52bbad5bf0765a6a9ebd7f0569f4661bcb..3cf7194cf19519e4dabba21a54902cf59ff22979 100644 (file)
@@ -415,7 +415,7 @@ static off_t cleanup_find_header(CLEANUP_STATE *state, ssize_t index,
     } \
     if (msg_verbose > 1) \
        msg_info("%s: read: %ld: %.*s", myname, (long) curr_offset, \
-                LEN(buf) > 30 ? 30 : LEN(buf), STR(buf)); \
+                LEN(buf) > 30 ? 30 : (int) LEN(buf), STR(buf)); \
     if (rec_type == REC_TYPE_DTXT) \
        continue; \
     if (rec_type != REC_TYPE_NORM && rec_type != REC_TYPE_CONT \
@@ -575,7 +575,7 @@ static const char *cleanup_patch_header(CLEANUP_STATE *state,
     cleanup_out_header(state, buf);
     if (msg_verbose > 1)
        msg_info("%s: %ld: write %.*s", myname, (long) new_hdr_offset,
-                LEN(buf) > 30 ? 30 : LEN(buf), STR(buf));
+                LEN(buf) > 30 ? 30 : (int) LEN(buf), STR(buf));
 
     /*
      * Optionally, save the existing text record or pointer record that will
@@ -585,7 +585,7 @@ static const char *cleanup_patch_header(CLEANUP_STATE *state,
        CLEANUP_OUT_BUF(state, rec_type, old_rec_buf);
        if (msg_verbose > 1)
            msg_info("%s: write %.*s", myname, LEN(old_rec_buf) > 30 ?
-                    30 : LEN(old_rec_buf), STR(old_rec_buf));
+                    30 : (int) LEN(old_rec_buf), STR(old_rec_buf));
     }
 
     /*
@@ -607,7 +607,7 @@ static const char *cleanup_patch_header(CLEANUP_STATE *state,
        }
        if (msg_verbose > 1)
            msg_info("%s: %ld: read %.*s", myname, (long) read_offset,
-                    LEN(buf) > 30 ? 30 : LEN(buf), STR(buf));
+                    LEN(buf) > 30 ? 30 : (int) LEN(buf), STR(buf));
        if (rec_type != REC_TYPE_NORM && rec_type != REC_TYPE_CONT
            && rec_type != REC_TYPE_PTR && rec_type != REC_TYPE_DTXT)
            msg_panic("%s: non-text/ptr record type %d in header, file %s",
@@ -626,7 +626,7 @@ static const char *cleanup_patch_header(CLEANUP_STATE *state,
        CLEANUP_OUT_BUF(state, rec_type, buf);
        if (msg_verbose > 1)
            msg_info("%s: %ld: write %.*s", myname, (long) write_offset,
-                    LEN(buf) > 30 ? 30 : LEN(buf), STR(buf));
+                    LEN(buf) > 30 ? 30 : (int) LEN(buf), STR(buf));
        /* Update cached location of "append header" pointer record. */
        if (saved_read_offset == state->append_hdr_pt_offset)
            state->append_hdr_pt_offset = write_offset;
index 1bf93a4c63a30fc6cfc95a8bd0825a1d7dff5b7c..891e1372e37e2d9eadfae4881d7aeb60b897f86f 100644 (file)
@@ -87,5 +87,6 @@ ssize_t is_header_buf(const char *str, ssize_t str_len)
            return ((state == IN_CHAR || state == IN_CHAR_SPACE) ? len : 0);
        }
     }
+    /* Redundant return for future proofing. */
     return (0);
 }
index 94189cc2ec6d2f75ac559c0a63c06a2ccacd51bf..f4e82e63dc2a2e6378a490e146797b7d9efeeb66 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      "20060704"
-#define MAIL_VERSION_NUMBER    "2.3-RC5"
+#define MAIL_RELEASE_DATE      "20060705"
+#define MAIL_VERSION_NUMBER    "2.3-RC6"
 
 #define VAR_MAIL_VERSION       "mail_version"
 #define DEF_MAIL_VERSION       MAIL_VERSION_NUMBER
index ccb833fd69c09c4210175c24161dc9ce49998be3..bf0753f7e2df538609cf5c2a62db1abe4d6235dc 100644 (file)
@@ -744,7 +744,7 @@ static int vmilter8_write_cmd(MILTER8 *milter, int command, ssize_t data_len,
     VSTRING *buf;
     const char *str;
     const char **cpp;
-    unsigned char ch;
+    char    ch;
 
     /*
      * Deliver the packet.
@@ -1281,9 +1281,9 @@ static const char *milter8_event(MILTER8 *milter, int event,
         * Get here when the reply was followed by data bytes that weren't
         * supposed to be there.
         */
-       msg_warn("milter %s: reply %s was followed by %d data bytes",
+       msg_warn("milter %s: reply %s was followed by %ld data bytes",
        milter->m.name, (smfir_name = str_name_code(smfir_table, cmd)) != 0 ?
-                smfir_name : "unknown", data_len);
+                smfir_name : "unknown", (long) data_len);
        milter8_comm_error(milter);
        return (milter->def_reply);
     }
index 65c79ede02332519273ff4c4014b89189564c976..f11962a44e1175b323d8f128e7e2cfbd3022ea8f 100644 (file)
@@ -207,7 +207,7 @@ static sfsistat test_body(SMFICTX *ctx, unsigned char *data, size_t data_len)
     if (verbose == 0)
        printf("test_body %ld bytes\n", (long) data_len);
     else
-       printf("%.*s", data_len, data);
+       printf("%.*s", (int) data_len, data);
     return (test_reply(ctx, test_body_reply));
 }
 
index 8b781b4a175c10f4cac9cdebecaba9dc1a8b2971..dad89aae9ed4cfc715b3af0dac583faf0baebd08 100644 (file)
@@ -111,6 +111,7 @@ levels.o: ../../include/match_list.h
 levels.o: ../../include/match_ops.h
 levels.o: ../../include/msg.h
 levels.o: ../../include/msg_stats.h
+levels.o: ../../include/name_code.h
 levels.o: ../../include/name_mask.h
 levels.o: ../../include/recipient_list.h
 levels.o: ../../include/resolve_clnt.h
@@ -182,6 +183,7 @@ smtp_addr.o: ../../include/msg.h
 smtp_addr.o: ../../include/msg_stats.h
 smtp_addr.o: ../../include/myaddrinfo.h
 smtp_addr.o: ../../include/mymalloc.h
+smtp_addr.o: ../../include/name_code.h
 smtp_addr.o: ../../include/name_mask.h
 smtp_addr.o: ../../include/own_inet_addr.h
 smtp_addr.o: ../../include/recipient_list.h
@@ -218,6 +220,7 @@ smtp_chat.o: ../../include/match_ops.h
 smtp_chat.o: ../../include/msg.h
 smtp_chat.o: ../../include/msg_stats.h
 smtp_chat.o: ../../include/mymalloc.h
+smtp_chat.o: ../../include/name_code.h
 smtp_chat.o: ../../include/name_mask.h
 smtp_chat.o: ../../include/post_mail.h
 smtp_chat.o: ../../include/recipient_list.h
@@ -256,6 +259,7 @@ smtp_connect.o: ../../include/msg.h
 smtp_connect.o: ../../include/msg_stats.h
 smtp_connect.o: ../../include/myaddrinfo.h
 smtp_connect.o: ../../include/mymalloc.h
+smtp_connect.o: ../../include/name_code.h
 smtp_connect.o: ../../include/name_mask.h
 smtp_connect.o: ../../include/own_inet_addr.h
 smtp_connect.o: ../../include/recipient_list.h
@@ -290,6 +294,7 @@ smtp_map11.o: ../../include/match_list.h
 smtp_map11.o: ../../include/match_ops.h
 smtp_map11.o: ../../include/msg.h
 smtp_map11.o: ../../include/msg_stats.h
+smtp_map11.o: ../../include/name_code.h
 smtp_map11.o: ../../include/name_mask.h
 smtp_map11.o: ../../include/quote_822_local.h
 smtp_map11.o: ../../include/quote_flags.h
@@ -376,6 +381,7 @@ smtp_rcpt.o: ../../include/match_ops.h
 smtp_rcpt.o: ../../include/msg.h
 smtp_rcpt.o: ../../include/msg_stats.h
 smtp_rcpt.o: ../../include/mymalloc.h
+smtp_rcpt.o: ../../include/name_code.h
 smtp_rcpt.o: ../../include/name_mask.h
 smtp_rcpt.o: ../../include/recipient_list.h
 smtp_rcpt.o: ../../include/resolve_clnt.h
@@ -405,6 +411,7 @@ smtp_reuse.o: ../../include/match_ops.h
 smtp_reuse.o: ../../include/msg.h
 smtp_reuse.o: ../../include/msg_stats.h
 smtp_reuse.o: ../../include/mymalloc.h
+smtp_reuse.o: ../../include/name_code.h
 smtp_reuse.o: ../../include/name_mask.h
 smtp_reuse.o: ../../include/recipient_list.h
 smtp_reuse.o: ../../include/resolve_clnt.h
@@ -435,6 +442,7 @@ smtp_sasl_glue.o: ../../include/match_ops.h
 smtp_sasl_glue.o: ../../include/msg.h
 smtp_sasl_glue.o: ../../include/msg_stats.h
 smtp_sasl_glue.o: ../../include/mymalloc.h
+smtp_sasl_glue.o: ../../include/name_code.h
 smtp_sasl_glue.o: ../../include/name_mask.h
 smtp_sasl_glue.o: ../../include/recipient_list.h
 smtp_sasl_glue.o: ../../include/resolve_clnt.h
@@ -466,6 +474,7 @@ smtp_sasl_proto.o: ../../include/match_ops.h
 smtp_sasl_proto.o: ../../include/msg.h
 smtp_sasl_proto.o: ../../include/msg_stats.h
 smtp_sasl_proto.o: ../../include/mymalloc.h
+smtp_sasl_proto.o: ../../include/name_code.h
 smtp_sasl_proto.o: ../../include/name_mask.h
 smtp_sasl_proto.o: ../../include/recipient_list.h
 smtp_sasl_proto.o: ../../include/resolve_clnt.h
@@ -529,6 +538,7 @@ smtp_state.o: ../../include/match_ops.h
 smtp_state.o: ../../include/msg.h
 smtp_state.o: ../../include/msg_stats.h
 smtp_state.o: ../../include/mymalloc.h
+smtp_state.o: ../../include/name_code.h
 smtp_state.o: ../../include/name_mask.h
 smtp_state.o: ../../include/recipient_list.h
 smtp_state.o: ../../include/resolve_clnt.h
@@ -559,6 +569,7 @@ smtp_trouble.o: ../../include/match_list.h
 smtp_trouble.o: ../../include/match_ops.h
 smtp_trouble.o: ../../include/msg.h
 smtp_trouble.o: ../../include/msg_stats.h
+smtp_trouble.o: ../../include/name_code.h
 smtp_trouble.o: ../../include/name_mask.h
 smtp_trouble.o: ../../include/recipient_list.h
 smtp_trouble.o: ../../include/resolve_clnt.h
@@ -588,6 +599,7 @@ smtp_unalias.o: ../../include/match_ops.h
 smtp_unalias.o: ../../include/msg.h
 smtp_unalias.o: ../../include/msg_stats.h
 smtp_unalias.o: ../../include/myaddrinfo.h
+smtp_unalias.o: ../../include/name_code.h
 smtp_unalias.o: ../../include/name_mask.h
 smtp_unalias.o: ../../include/recipient_list.h
 smtp_unalias.o: ../../include/resolve_clnt.h
index 648737377f9d3f41526a6dd22f69a3255c506a97..af397d711d12c21429cbb6fac3e31d5c1d61fa30 100644 (file)
@@ -330,6 +330,15 @@ extern int smtp_quit(SMTP_STATE *);
 #define CACHE_THIS_SESSION_UNTIL(when) \
        (session->expire_time = (when))
 
+ /*
+  * Encapsulate the following so that we don't expose details of of
+  * connection management and error handling to the SMTP protocol engine.
+  */
+#define RETRY_AS_PLAINTEXT do { \
+       session->tls_retry_plain = 1; \
+       state->misc_flags &= ~SMTP_MISC_FLAG_FINAL_SERVER; \
+    } while (0)
+
  /*
   * smtp_chat.c
   */
index 41880cffb622990ab336cef7e8ec4e47eb8a4825..b8fbde19f5af7237b83e7b37e4b7313de26e30ad 100644 (file)
@@ -856,7 +856,8 @@ static void smtp_connect_remote(SMTP_STATE *state, const char *nexthop,
 
                    /*
                     * When an opportunistic TLS handshake fails, try the
-                    * same address again, with TLS disabled.
+                    * same address again, with TLS disabled. See also the
+                    * RETRY_AS_PLAINTEXT macro.
                     */
                    if ((retry_plain = session->tls_retry_plain) != 0) {
                        --addr_count;
index e42825164fd8ccdd1f7c676255c68f9a1139e969..8256b8c9a4f59508fef4193ad6aee6d812b2e5b2 100644 (file)
@@ -679,22 +679,22 @@ static int smtp_start_tls(SMTP_STATE *state)
      * 
      * - Expiration code would need to selectively delete sessions from a list -
      * Re-use code would need to decode many sessions and choose the best -
-     * Store code would needs to choose between replace and append.
+     * Store code would need to choose between replace and append.
      * 
      * Note: checking the compatibility of re-activated sessions against the
      * cipher requirements of the session under construction requires us to
      * store the cipher name in the session cache with the passivated session
-     * object, the name is not available when the session is revived until
-     * the handshake is complete, which is too late.
+     * object. But the name is not available when the session is revived
+     * until the handshake is complete, which is too late.
      * 
-     * XXX: When cached ciphers are reloaded, their cipher is not available via
+     * XXX: When a cached session is reloaded, its cipher is not available via
      * documented APIs until the handshake completes. We need to filter out
      * sessions that use the wrong ciphers, but may not peek at the
      * undocumented session->cipher_id and cipher->id structure members.
      * 
      * Since cipherlists are typically shared by many domains, we include the
      * cipherlist in the session cache lookup key. This avoids false
-     * positives results from the session cache.
+     * positives from the TLS session cache.
      * 
      * To support mutually incompatible protocol/cipher combinations, our
      * session key must include both the protocol and the cipherlist.
@@ -738,10 +738,8 @@ static int smtp_start_tls(SMTP_STATE *state)
         * Specifically, this session is not final, don't defer any
         * recipients yet.
         */
-       if (session->tls_level == TLS_LEV_MAY) {
-           session->tls_retry_plain = 1;
-           state->misc_flags &= ~SMTP_MISC_FLAG_FINAL_SERVER;
-       }
+       if (session->tls_level == TLS_LEV_MAY)
+           RETRY_AS_PLAINTEXT;
        return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
                               SMTP_RESP_FAKE(&fake, "4.7.5"),
                               "Cannot start TLS: handshake failure"));
index 84d57fdb97f08a20ae8cd682bba6c9a2e73b1469..868965acbbc1d2dff4e0547035e3e888b19810c7 100644 (file)
@@ -211,6 +211,7 @@ smtpd_chat.o: ../../include/milter.h
 smtpd_chat.o: ../../include/msg.h
 smtpd_chat.o: ../../include/myaddrinfo.h
 smtpd_chat.o: ../../include/mymalloc.h
+smtpd_chat.o: ../../include/name_code.h
 smtpd_chat.o: ../../include/name_mask.h
 smtpd_chat.o: ../../include/post_mail.h
 smtpd_chat.o: ../../include/rec_type.h
@@ -263,6 +264,7 @@ smtpd_check.o: ../../include/msg_stats.h
 smtpd_check.o: ../../include/myaddrinfo.h
 smtpd_check.o: ../../include/mymalloc.h
 smtpd_check.o: ../../include/namadr_list.h
+smtpd_check.o: ../../include/name_code.h
 smtpd_check.o: ../../include/name_mask.h
 smtpd_check.o: ../../include/own_inet_addr.h
 smtpd_check.o: ../../include/rec_type.h
@@ -298,6 +300,7 @@ smtpd_milter.o: ../../include/mail_params.h
 smtpd_milter.o: ../../include/mail_stream.h
 smtpd_milter.o: ../../include/milter.h
 smtpd_milter.o: ../../include/myaddrinfo.h
+smtpd_milter.o: ../../include/name_code.h
 smtpd_milter.o: ../../include/name_mask.h
 smtpd_milter.o: ../../include/sys_defs.h
 smtpd_milter.o: ../../include/tls.h
@@ -318,6 +321,7 @@ smtpd_peer.o: ../../include/milter.h
 smtpd_peer.o: ../../include/msg.h
 smtpd_peer.o: ../../include/myaddrinfo.h
 smtpd_peer.o: ../../include/mymalloc.h
+smtpd_peer.o: ../../include/name_code.h
 smtpd_peer.o: ../../include/name_mask.h
 smtpd_peer.o: ../../include/sock_addr.h
 smtpd_peer.o: ../../include/stringops.h
@@ -363,6 +367,7 @@ smtpd_sasl_glue.o: ../../include/milter.h
 smtpd_sasl_glue.o: ../../include/msg.h
 smtpd_sasl_glue.o: ../../include/myaddrinfo.h
 smtpd_sasl_glue.o: ../../include/mymalloc.h
+smtpd_sasl_glue.o: ../../include/name_code.h
 smtpd_sasl_glue.o: ../../include/name_mask.h
 smtpd_sasl_glue.o: ../../include/stringops.h
 smtpd_sasl_glue.o: ../../include/sys_defs.h
@@ -387,6 +392,7 @@ smtpd_sasl_proto.o: ../../include/milter.h
 smtpd_sasl_proto.o: ../../include/msg.h
 smtpd_sasl_proto.o: ../../include/myaddrinfo.h
 smtpd_sasl_proto.o: ../../include/mymalloc.h
+smtpd_sasl_proto.o: ../../include/name_code.h
 smtpd_sasl_proto.o: ../../include/name_mask.h
 smtpd_sasl_proto.o: ../../include/stringops.h
 smtpd_sasl_proto.o: ../../include/sys_defs.h
@@ -413,6 +419,7 @@ smtpd_state.o: ../../include/milter.h
 smtpd_state.o: ../../include/msg.h
 smtpd_state.o: ../../include/myaddrinfo.h
 smtpd_state.o: ../../include/mymalloc.h
+smtpd_state.o: ../../include/name_code.h
 smtpd_state.o: ../../include/name_mask.h
 smtpd_state.o: ../../include/sys_defs.h
 smtpd_state.o: ../../include/tls.h
@@ -439,6 +446,7 @@ smtpd_xforward.o: ../../include/milter.h
 smtpd_xforward.o: ../../include/msg.h
 smtpd_xforward.o: ../../include/myaddrinfo.h
 smtpd_xforward.o: ../../include/mymalloc.h
+smtpd_xforward.o: ../../include/name_code.h
 smtpd_xforward.o: ../../include/name_mask.h
 smtpd_xforward.o: ../../include/sys_defs.h
 smtpd_xforward.o: ../../include/tls.h
index 0a1695f60f77c551629fd17ba8320190b41612e6..0210029ddd13302dda777660407de61df026daf6 100644 (file)
@@ -89,6 +89,7 @@ depend: $(MAKES)
 # do not edit below this line - it is generated by 'make depend'
 tls_bio_ops.o: ../../include/iostuff.h
 tls_bio_ops.o: ../../include/msg.h
+tls_bio_ops.o: ../../include/name_code.h
 tls_bio_ops.o: ../../include/name_mask.h
 tls_bio_ops.o: ../../include/sys_defs.h
 tls_bio_ops.o: ../../include/vbuf.h
@@ -97,6 +98,7 @@ tls_bio_ops.o: ../../include/vstring.h
 tls_bio_ops.o: tls.h
 tls_bio_ops.o: tls_bio_ops.c
 tls_certkey.o: ../../include/msg.h
+tls_certkey.o: ../../include/name_code.h
 tls_certkey.o: ../../include/name_mask.h
 tls_certkey.o: ../../include/sys_defs.h
 tls_certkey.o: ../../include/vbuf.h
@@ -108,6 +110,7 @@ tls_client.o: ../../include/argv.h
 tls_client.o: ../../include/mail_params.h
 tls_client.o: ../../include/msg.h
 tls_client.o: ../../include/mymalloc.h
+tls_client.o: ../../include/name_code.h
 tls_client.o: ../../include/name_mask.h
 tls_client.o: ../../include/stringops.h
 tls_client.o: ../../include/sys_defs.h
@@ -118,6 +121,7 @@ tls_client.o: tls.h
 tls_client.o: tls_client.c
 tls_client.o: tls_mgr.h
 tls_dh.o: ../../include/msg.h
+tls_dh.o: ../../include/name_code.h
 tls_dh.o: ../../include/name_mask.h
 tls_dh.o: ../../include/sys_defs.h
 tls_dh.o: ../../include/vbuf.h
@@ -139,6 +143,7 @@ tls_mgr.o: tls_mgr.c
 tls_mgr.o: tls_mgr.h
 tls_misc.o: ../../include/msg.h
 tls_misc.o: ../../include/mymalloc.h
+tls_misc.o: ../../include/name_code.h
 tls_misc.o: ../../include/name_mask.h
 tls_misc.o: ../../include/stringops.h
 tls_misc.o: ../../include/sys_defs.h
@@ -175,6 +180,7 @@ tls_prng_file.o: ../../include/mymalloc.h
 tls_prng_file.o: ../../include/sys_defs.h
 tls_prng_file.o: tls_prng.h
 tls_prng_file.o: tls_prng_file.c
+tls_rsa.o: ../../include/name_code.h
 tls_rsa.o: ../../include/name_mask.h
 tls_rsa.o: ../../include/sys_defs.h
 tls_rsa.o: ../../include/vbuf.h
@@ -196,6 +202,7 @@ tls_scache.o: ../../include/vstring.h
 tls_scache.o: tls_scache.c
 tls_scache.o: tls_scache.h
 tls_seed.o: ../../include/msg.h
+tls_seed.o: ../../include/name_code.h
 tls_seed.o: ../../include/name_mask.h
 tls_seed.o: ../../include/sys_defs.h
 tls_seed.o: ../../include/vbuf.h
@@ -210,6 +217,7 @@ tls_server.o: ../../include/hex_code.h
 tls_server.o: ../../include/mail_params.h
 tls_server.o: ../../include/msg.h
 tls_server.o: ../../include/mymalloc.h
+tls_server.o: ../../include/name_code.h
 tls_server.o: ../../include/name_mask.h
 tls_server.o: ../../include/stringops.h
 tls_server.o: ../../include/sys_defs.h
@@ -221,6 +229,7 @@ tls_server.o: tls_mgr.h
 tls_server.o: tls_server.c
 tls_session.o: ../../include/msg.h
 tls_session.o: ../../include/mymalloc.h
+tls_session.o: ../../include/name_code.h
 tls_session.o: ../../include/name_mask.h
 tls_session.o: ../../include/sys_defs.h
 tls_session.o: ../../include/vbuf.h
@@ -230,6 +239,7 @@ tls_session.o: tls.h
 tls_session.o: tls_session.c
 tls_stream.o: ../../include/iostuff.h
 tls_stream.o: ../../include/msg.h
+tls_stream.o: ../../include/name_code.h
 tls_stream.o: ../../include/name_mask.h
 tls_stream.o: ../../include/sys_defs.h
 tls_stream.o: ../../include/vbuf.h
@@ -239,6 +249,7 @@ tls_stream.o: tls.h
 tls_stream.o: tls_stream.c
 tls_verify.o: ../../include/msg.h
 tls_verify.o: ../../include/mymalloc.h
+tls_verify.o: ../../include/name_code.h
 tls_verify.o: ../../include/name_mask.h
 tls_verify.o: ../../include/sys_defs.h
 tls_verify.o: ../../include/vbuf.h
index d69e3479bf99d41de2b0381558bbd6555fd5c670..f33e067a2e5d8639953948776237956ebb5c660e 100644 (file)
@@ -119,7 +119,7 @@ extern NAME_CODE tls_cipher_level_table[];
     name_code(tls_cipher_level_table, NAME_CODE_FLAG_NONE, (str))
 
 #define TLS_END_EXCLUDE ((char *)0)
-extern char *tls_cipher_list(int,...);
+extern const char *tls_cipher_list(int,...);
 
  /*
   * tls_client.c
index 4b9f9942e0733878625b7ef4a674dd258689e90b..e5c19c76bb61c6f6537193def3c92185f6a42c92 100644 (file)
@@ -6,11 +6,11 @@
 /* SYNOPSIS
 /*     #include <tls.h>
 /*
-/*     SSL_CTX *tls_client_init(props)
-/*     const tls_client_init_props *props;
+/*     SSL_CTX *tls_client_init(init_props)
+/*     const tls_client_init_props *init_props;
 /*
-/*     TLScontext_t *tls_client_start(props)
-/*     const tls_client_start_props *props;
+/*     TLScontext_t *tls_client_start(start_props)
+/*     const tls_client_start_props *start_props;
 /*
 /*     void    tls_client_stop(client_ctx, stream, failure, TLScontext)
 /*     SSL_CTX *client_ctx;
 
 static SSL_SESSION *load_clnt_session(TLScontext_t *TLScontext)
 {
+    const char *myname = "load_clnt_session";
     SSL_SESSION *session = 0;
     VSTRING *session_data = vstring_alloc(2048);
 
@@ -167,7 +168,8 @@ static SSL_SESSION *load_clnt_session(TLScontext_t *TLScontext)
      * server SSL context.
      */
     if (TLScontext->cache_type == 0)
-       msg_panic("null client session cache type in session lookup");
+       msg_panic("%s: null client session cache type in session lookup",
+                 myname);
 
     /*
      * Look up and activate the SSL_SESSION object. Errors are non-fatal,
@@ -195,6 +197,7 @@ static SSL_SESSION *load_clnt_session(TLScontext_t *TLScontext)
 
 static int new_client_session_cb(SSL *ssl, SSL_SESSION *session)
 {
+    const char *myname = "new_client_session_cb";
     TLScontext_t *TLScontext;
     VSTRING *session_data;
 
@@ -204,7 +207,7 @@ static int new_client_session_cb(SSL *ssl, SSL_SESSION *session)
      * null at this point.
      */
     if ((TLScontext = SSL_get_ex_data(ssl, TLScontext_index)) == 0)
-       msg_panic("null TLScontext in new session callback");
+       msg_panic("%s: null TLScontext in new session callback", myname);
 
     /*
      * We only get here if the cache_type is not empty. This callback is not
@@ -212,7 +215,8 @@ static int new_client_session_cb(SSL *ssl, SSL_SESSION *session)
      * server SSL context.
      */
     if (TLScontext->cache_type == 0)
-       msg_panic("null session cache type in new session callback");
+       msg_panic("%s: null session cache type in new session callback",
+                 myname);
 
     if (TLScontext->log_level >= 2)
        msg_info("save session %s to %s cache",
@@ -465,6 +469,9 @@ static int match_hostname(const char *peerid, ARGV *cmatch_argv,
     int     idlen;
     int     patlen;
 
+    /*
+     * Match the peerid against each pattern until we find a match.
+     */
     for (i = 0; i < cmatch_argv->argc; ++i) {
        sub = 0;
        if (!strcasecmp(cmatch_argv->argv[i], "nexthop"))
@@ -483,19 +490,21 @@ static int match_hostname(const char *peerid, ARGV *cmatch_argv,
        }
 
        /*
-        * Sub-domain match, peerid is any sub-domain of pattern.
+        * Sub-domain match: peerid is any sub-domain of pattern.
         */
-       if (sub)
+       if (sub) {
            if ((idlen = strlen(peerid)) > (patlen = strlen(pattern)) + 1
                && peerid[idlen - patlen - 1] == '.'
                && !strcasecmp(peerid + (idlen - patlen), pattern))
                return (1);
            else
                continue;
+       }
 
        /*
-        * NOT sub-domain match, but "*.domain.tld" in peerid matches any
-        * host.domain.tld in the pattern.
+        * Exact match and initial "*" match. The initial "*" in a peerid
+        * matches exactly one hostname component, under the condition that
+        * the peerid contains multiple hostname components.
         */
        if (!strcasecmp(peerid, pattern)
            || (peerid[0] == '*' && peerid[1] == '.' && peerid[2] != 0
@@ -509,7 +518,7 @@ static int match_hostname(const char *peerid, ARGV *cmatch_argv,
 /* verify_extract_peer - verify peer name and extract peer information */
 
 static void verify_extract_peer(const char *nexthop, const char *hname,
-                                       char *certmatch, X509 *peercert,
+                                     const char *certmatch, X509 *peercert,
                                        TLScontext_t *TLScontext)
 {
     int     i;
@@ -666,7 +675,7 @@ TLScontext_t *tls_client_start(const tls_client_start_props *props)
      */
     if (!BIO_new_bio_pair(&TLScontext->internal_bio, TLS_BIO_BUFSIZE,
                          &TLScontext->network_bio, TLS_BIO_BUFSIZE)) {
-       msg_info("Could not obtain BIO_pair");
+       msg_warn("Could not obtain BIO_pair");
        tls_print_errors();
        tls_free_context(TLScontext);
        return (0);
index 84cd775611021713c88c518eca65fd0ce70cd023..a0b089488cc5ac0272a5ce6d05d631d34ecd6722 100644 (file)
@@ -327,8 +327,10 @@ int     main(int unused_ac, char **av)
 
     while (vstring_fgets_nonl(inbuf, VSTREAM_IN)) {
        argv = argv_split(STR(inbuf), " \t\r\n");
-       if (argv->argc == 0)
+       if (argv->argc == 0) {
+           argv_free(argv);
            continue;
+       }
 
 #define COMMAND(argv, str, len) \
     (strcasecmp(argv->argv[0], str) == 0 && argv->argc == len)
@@ -336,7 +338,7 @@ int     main(int unused_ac, char **av)
        if (COMMAND(argv, "policy", 2)) {
            int     cachable;
 
-           status = tls_mgr_policy(argv[2], &cachable);
+           status = tls_mgr_policy(argv->argv[1], &cachable);
            vstream_printf("status=%d cachable=%d\n", status, cachable);
        } else if (COMMAND(argv, "seed", 2)) {
            VSTRING *buf = vstring_alloc(10);
@@ -351,15 +353,16 @@ int     main(int unused_ac, char **av)
        } else if (COMMAND(argv, "lookup", 3)) {
            VSTRING *buf = vstring_alloc(10);
 
-           status = tls_mgr_lookup(argv[1], argv->argv[2], buf);
+           status = tls_mgr_lookup(argv->argv[1], argv->argv[2], buf);
            vstream_printf("status=%d session=%.*s\n",
                           status, LEN(buf), STR(buf));
+           vstring_free(buf);
        } else if (COMMAND(argv, "update", 4)) {
-           status = tls_mgr_update(argv[1], argv->argv[2],
+           status = tls_mgr_update(argv->argv[1], argv->argv[2],
                                    argv->argv[3], strlen(argv->argv[3]));
            vstream_printf("status=%d\n", status);
        } else if (COMMAND(argv, "delete", 3)) {
-           status = tls_mgr_delete(argv[1], argv->argv[2]);
+           status = tls_mgr_delete(argv->argv[1], argv->argv[2]);
            vstream_printf("status=%d\n", status);
        } else {
            vstream_printf("usage:\n"
@@ -370,9 +373,8 @@ int     main(int unused_ac, char **av)
                           "delete smtpd|smtp|lmtp cache_id\n");
        }
        vstream_fflush(VSTREAM_OUT);
-    }
-    if (argv)
        argv_free(argv);
+    }
 
     vstring_free(inbuf);
     return (0);
index 456651161c4a564916e43fd0f8b76ca1e846fa0b..65ba5e4f8eea90bc79f711d1f49fbaf1c4609e30 100644 (file)
@@ -18,6 +18,9 @@
 /*
 /*     long    tls_bug_bits()
 /*
+/*     const char *tls_cipher_list(grade, ...)
+/*     int     grade;
+/*
 /*     void    tls_print_errors()
 /*
 /*     void    tls_info_callback(ssl, where, ret)
 /*     for the run-time library. Some of the bug work-arounds are
 /*     not appropriate for some library versions.
 /*
+/*     tls_cipher_list() generates a cipher list from the specified
+/*     grade, minus any ciphers specified via a null-terminated
+/*     list of string-valued exclusions. The result is overwritten
+/*     upon each call.
+/*
 /*     tls_print_errors() queries the OpenSSL error stack,
 /*     logs the error messages, and clears the error stack.
 /*
@@ -156,7 +164,7 @@ typedef struct {
 
 /* tls_cipher_list - Cipherlist for given grade, less exclusions */
 
-char   *tls_cipher_list(int level,...)
+const char *tls_cipher_list(int grade,...)
 {
     const char *myname = "tls_cipher_list";
     static VSTRING *buf;
@@ -169,7 +177,7 @@ char   *tls_cipher_list(int level,...)
     buf = buf ? buf : vstring_alloc(10);
     VSTRING_RESET(buf);
 
-    switch (level) {
+    switch (grade) {
     case TLS_CIPHER_HIGH:
        vstring_strcpy(buf, var_tls_high_clist);
        break;
@@ -188,13 +196,13 @@ char   *tls_cipher_list(int level,...)
     case TLS_CIPHER_NONE:
        return 0;
     default:
-       msg_panic("%s: invalid cipher level: %d", myname, level);
+       msg_panic("%s: invalid cipher grade: %d", myname, grade);
     }
 
     if (VSTRING_LEN(buf) == 0)
        msg_panic("%s: empty cipherlist", myname);
 
-    va_start(ap, level);
+    va_start(ap, grade);
     while ((exclude = va_arg(ap, char *)) != 0) {
        if (*exclude == '\0')
            continue;
index 76e90efce263e6f8b46a6f377d601dab041137c0..bc7e8aefa0bb4f9c1be179ca2716c62c5690ed7f 100644 (file)
@@ -145,13 +145,14 @@ static SSL_SESSION *get_server_session_cb(SSL *ssl, unsigned char *session_id,
                                                  int session_id_length,
                                                  int *unused_copy)
 {
+    const char *myname = "get_server_session_cb";
     TLScontext_t *TLScontext;
     VSTRING *cache_id;
     VSTRING *session_data = vstring_alloc(2048);
     SSL_SESSION *session = 0;
 
     if ((TLScontext = SSL_get_ex_data(ssl, TLScontext_index)) == 0)
-       msg_panic("null TLScontext in session lookup callback");
+       msg_panic("%s: null TLScontext in session lookup callback", myname);
 
 #define HEX_CACHE_ID(id, len) \
     hex_encode(vstring_alloc(2 * (len) + 1), (char *) (id), (len))
@@ -207,12 +208,13 @@ static void uncache_session(SSL_CTX *ctx, TLScontext_t *TLScontext)
 
 static int new_server_session_cb(SSL *ssl, SSL_SESSION *session)
 {
+    const char *myname = "new_server_session_cb";
     VSTRING *cache_id;
     TLScontext_t *TLScontext;
     VSTRING *session_data;
 
     if ((TLScontext = SSL_get_ex_data(ssl, TLScontext_index)) == 0)
-       msg_panic("null TLScontext in new session callback");
+       msg_panic("%s: null TLScontext in new session callback", myname);
 
     cache_id = HEX_CACHE_ID(session->session_id, session->session_id_length);
 
@@ -476,16 +478,16 @@ SSL_CTX *tls_server_init(const tls_server_props *props)
        SSL_CTX_sess_set_new_cb(server_ctx, new_server_session_cb);
 
        /*
-        * OpenSSL ignores timed-out sessions, we need to set the internal
-        * cache timeut at least as high as the external cache timeout. This
+        * OpenSSL ignores timed-out sessions. We need to set the internal
+        * cache timeout at least as high as the external cache timeout. This
         * applies even if no internal cache is used.
         */
        SSL_CTX_set_timeout(server_ctx, props->scache_timeout);
     } else {
 
        /*
-        * If we have no external cache, disable all caching, no use wasting
-        * client memory resources with sessions they are unlikely to be able
+        * If we have no external cache, disable all caching. No use wasting
+        * server memory resources with sessions they are unlikely to be able
         * to reuse.
         */
        SSL_CTX_set_session_cache_mode(server_ctx, SSL_SESS_CACHE_OFF);
@@ -535,13 +537,13 @@ TLScontext_t *tls_server_start(SSL_CTX *server_ctx, VSTREAM *stream,
     TLScontext->cache_type = SSL_CTX_get_ex_data(server_ctx, TLSscache_index);
 
     if ((TLScontext->con = (SSL *) SSL_new(server_ctx)) == NULL) {
-       msg_info("Could not allocate 'TLScontext->con' with SSL_new()");
+       msg_warn("Could not allocate 'TLScontext->con' with SSL_new()");
        tls_print_errors();
        tls_free_context(TLScontext);
        return (0);
     }
     if (!SSL_set_ex_data(TLScontext->con, TLScontext_index, TLScontext)) {
-       msg_info("Could not set application data for 'TLScontext->con'");
+       msg_warn("Could not set application data for 'TLScontext->con'");
        tls_print_errors();
        tls_free_context(TLScontext);
        return (0);
@@ -572,7 +574,7 @@ TLScontext_t *tls_server_start(SSL_CTX *server_ctx, VSTREAM *stream,
      */
     if (!BIO_new_bio_pair(&TLScontext->internal_bio, TLS_BIO_BUFSIZE,
                          &TLScontext->network_bio, TLS_BIO_BUFSIZE)) {
-       msg_info("Could not obtain BIO_pair");
+       msg_warn("Could not obtain BIO_pair");
        tls_print_errors();
        tls_free_context(TLScontext);
        return (0);
index 4ee4ddd88a3ff1e8227cb155d80c400e53c236b3..68cbe886c96d9d8a1e9373b2b65a07bffaf7beee 100644 (file)
@@ -71,6 +71,7 @@ tlsmgr.o: ../../include/mail_server.h
 tlsmgr.o: ../../include/master_proto.h
 tlsmgr.o: ../../include/msg.h
 tlsmgr.o: ../../include/mymalloc.h
+tlsmgr.o: ../../include/name_code.h
 tlsmgr.o: ../../include/name_mask.h
 tlsmgr.o: ../../include/stringops.h
 tlsmgr.o: ../../include/sys_defs.h
index dd2d6e8bc75b81bd282684dfde9c1ab886e0af25..bb483fa4dec974719a6a266da43485a875c48b46 100644 (file)
@@ -739,12 +739,15 @@ static void tlsmgr_pre_init(char *unused_name, char **unused_argv)
     /*
      * If nothing else works then at least this will get us a few bits of
      * entropy.
+     * 
+     * XXX This is our first call into the OpenSSL library. We should find out
+     * if this can be moved to the post-jail initialization phase, without
+     * breaking compatibility with existing installations.
      */
     GETTIMEOFDAY(&tv);
     tv.tv_sec ^= getpid();
     RAND_seed(&tv, sizeof(struct timeval));
 
-
     /*
      * Open the external entropy source. We will not be able to open it again
      * after we are sent to chroot jail, so we keep it open. Errors are not