X-Git-Url: https://git.distorted.org.uk/~mdw/exim-config/blobdiff_plain/51ef8484987fd1828e8874f2a333214814373ca4..043a914faccd94618840dae1c66ff48b1ed3ac80:/vhost.m4 diff --git a/vhost.m4 b/vhost.m4 index 603b238..f98b904 100644 --- a/vhost.m4 +++ b/vhost.m4 @@ -24,14 +24,13 @@ m4_define(<:VHOST:>, <:domains = ${if exists{CONF_sysconf_dir/domains.conf} \ {partial0-lsearch; CONF_sysconf_dir/domains.conf} \ - {}} - condition = DOMKV($1):>) + {}}:>) m4_define(<:VHOST_FILTER:>, <:FILTER_BASE - VHOST(<:$1:>) + VHOST + condition = DOMKV($2, {true}{false}) router_home_directory = DOMKV(home, {$value} fail) - more = ${if bool{DOMKV(final, {$value}{true})} {false} {true}} - $2 = ${expand:DOMKV($1, {$value} fail)}:>) + $1 = ${expand:DOMKV($2)}:>) m4_define(<:VHOST_USER:>, <:user = DOMKV(owner, {$value}{CONF_filter_user}) errors_to = DOMKV(errors_to, {$value} fail):>) @@ -41,35 +40,61 @@ m4_define(<:VHOST_USER:>, 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. -route: +## 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 - VHOST(route) - route_data = DOMKV(route, {$value} fail) + VHOST + condition = DOMKV(route, {true}{false}) + route_data = <;DOMKV(route) same_domain_copy_routing = true - transport = smtp + transport = DOMKV(tls-min-dh-bits, {smtp_dhbits_$value}{smtp}) no_more SECTION(routers, virtual)m4_dnl ## Remap recipients according to the virtual host's instructions. This must ## be done in two passes, so that we can identify the correct user's spam ## threshold during address verification. -virtual_verify_data: - VHOST_FILTER(redirect, data) - FILTER_VERIFY -virtual_verify_file: - VHOST_FILTER(filter, file) - FILTER_VERIFY +FILTER_ROUTER(virtual_data, + <:VHOST_FILTER(data, redirect):>,, <: + VHOST_USER:>) +FILTER_ROUTER(virtual_file, + <:VHOST_FILTER(file, filter):>,, <: + VHOST_USER:>) -virtual_filter_data: - VHOST_FILTER(redirect, data) - VHOST_USER - FILTER_TRANSPORTS -virtual_filter_file: - VHOST_FILTER(filter, file) - VHOST_USER - FILTER_TRANSPORTS +SECTION(routers, virtual-spam)m4_dnl +## If we're dealing with a virtual host, see if we have special spam-limit +## rules to apply. +SPAMLIMIT_ROUTER(virtual_spam_limit_lookup) + VHOST + condition = DOMKV(spam-limit-file, {true}{false}) + SPAMLIMIT_LOOKUP(DOMKV(spam-limit-file), + $local_part, $domain, $sender_address) +SPAMLIMIT_ROUTER(virtual_spam_limit_userv) + VHOST + condition = DOMKV(spam-limit-userv, {true}{false}) + SPAMLIMIT_USERV(DOMKV(spam-limit-userv), + $local_part, $domain, $sender_address) + +SECTION(routers, virtual-tail)m4_dnl +## Last ditch effort for required local parts. This is a bit strange because +## we should only try this for `final' domains -- where we're not going to +## route using the system-wide rules -- and we want the router to decline if +## the local part isn't one of our required set so that routing as a whole +## fails. +virtual_endstop: + VHOST + condition = DOMKV(final, {$value}{true}) + driver = redirect + no_more + data = ${if match_local_part{$local_part}{+required} \ + {DOMKV(errors_to, \ + {$value} \ + {DOMKV(owner, \ + {$value} \ + {postmaster})})} \ + {:unknown:}} DIVERT(null) ###----- That's all, folks --------------------------------------------------