We can't set `tls_dh_min_bits' from an expansion. So set up multiple
transports for different thresholds.
## 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
## 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
+## `domains.conf' file. Annoyingly, the `tls_dh_min_bits' setting isn't
+## expanded before use, so we can't set it the obvious way. Instead, encode
+## it into the transport name. This is very unpleasant, of course.
+m4_define(<:SMTP_TRANS_DHBITS:>,
+ <:driver = smtp
hosts_try_auth = *
hosts_require_tls = DOMKV(tls-peer-ca, {*}{})
hosts_require_auth = \
hosts_try_auth = *
hosts_require_tls = DOMKV(tls-peer-ca, {*}{})
hosts_require_auth = \
{$value} \
{${expand:$value}}}} \
{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
+ tls_dh_min_bits = $1
+ tls_tempfail_tryclear = true:>)m4_dnl
+smtp:
+ SMTP_TRANS_DHBITS(1020)
+smtp_dhbits_1024:
+ SMTP_TRANS_DHBITS(1020)
+smtp_dhbits_2048:
+ SMTP_TRANS_DHBITS(2046)
## Transport to a local SMTP server; use TLS and perform client
## authentication.
## Transport to a local SMTP server; use TLS and perform client
## authentication.
SECTION(routers, route)m4_dnl
## If we're a front-end for some other domain, or we have special information
SECTION(routers, route)m4_dnl
## If we're a front-end for some other domain, or we have special information
-## about the domain, then pass stuff along as instructed.
+## about the domain, then pass stuff along as instructed. The hack for the
+## `transport' is very nasty; see the commentary for `smtp'.
virtual_route:
driver = manualroute
self = fail
virtual_route:
driver = manualroute
self = fail
condition = DOMKV(route, {true}{false})
route_data = <;DOMKV(route)
same_domain_copy_routing = true
condition = DOMKV(route, {true}{false})
route_data = <;DOMKV(route)
same_domain_copy_routing = true
+ transport = DOMKV(tls-min-dh-bits, {smtp_dhbits_$value}{smtp})
no_more
SECTION(routers, virtual)m4_dnl
no_more
SECTION(routers, virtual)m4_dnl