auth.m4, base.m4: Client authentication machinery.
[exim-config] / base.m4
diff --git a/base.m4 b/base.m4
index 90fcca6..523e475 100644 (file)
--- a/base.m4
+++ b/base.m4
@@ -88,6 +88,18 @@ qualify_domain = CONF_master_domain
 SECTION(global, bounce)m4_dnl
 delay_warning = 1h : 24h : 2d
 
+SECTION(global, tls)m4_dnl
+tls_certificate = CONF_sysconf_dir/server.cert
+tls_privatekey = CONF_sysconf_dir/server.key
+tls_advertise_hosts = ${if exists {CONF_sysconf_dir/server.key} {*}{}}
+tls_dhparam = CONF_ca_dir/dh-param-2048.pem
+tls_require_ciphers = ${if or {{={$received_port}{CONF_submission_port}} \
+                              {match_ip {$sender_host_address}{+trusted}}} \
+                          {CONF_good_ciphers} \
+                          {CONF_acceptable_ciphers}}
+tls_verify_certificates = CONF_ca_dir/ca.cert
+tls_verify_hosts = ${if eq{$acl_c_mode}{submission} {} {+allnets}}
+
 DIVERT(null)
 ###--------------------------------------------------------------------------
 ### Access control lists.
@@ -333,12 +345,29 @@ m4_define(<:USER_DELIVERY:>,
        return_path_add = true:>)
 
 SECTION(transports)m4_dnl
-## A standard transport for remote delivery.  Try to do TLS, and don't worry
-## too much if it's not very secure: the alternative is sending in plaintext
-## anyway.
+## A standard transport for remote delivery.  By default, try to do TLS, and
+## don't worry too much if it's not very secure: the alternative is sending
+## in plaintext anyway.  But all of this can be overridden from the
+## `domains.conf' file.
 smtp:
        driver = smtp
-       tls_require_ciphers = CONF_acceptable_ciphers
+       hosts_try_auth = *
+       hosts_require_tls = DOMKV(tls-peer-ca, {*}{})
+       hosts_require_auth = \
+               ${if bool {DOMKV(require-auth, {$value}{false})} {*}{}}
+       tls_certificate = DOMKV(tls-certificate, {${expand:$value}}fail)
+       tls_privatekey = DOMKV(tls-private-key, {${expand:$value}}fail)
+       tls_verify_certificates = DOMKV(tls-peer-ca, {${expand:$value}}fail)
+       tls_require_ciphers = \
+               DOMKV(tls-ciphers,
+                     {${extract {${expand:$value}} \
+                                { good = CONF_good_ciphers \
+                                  any = CONF_acceptable_ciphers } \
+                                {$value} \
+                                {${expand:$value}}}} \
+                     {CONF_acceptable_ciphers})
+       ## Can't set this to an expansion. :-(
+       m4_dnl tls_dh_min_bits = DOMKV(dh-min-bits, {$value}{1020})
        tls_dh_min_bits = 1020
        tls_tempfail_tryclear = true