X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/exim-config/blobdiff_plain/7ab75d6f000cb2f27c85f9f38b597535efc5fa0b..1e5ccd7c52be79d1de45691a0bb46cbb1a686bf0:/vhost.m4 diff --git a/vhost.m4 b/vhost.m4 index 6a710cb..4c13c18 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,14 +40,16 @@ 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 @@ -56,11 +57,44 @@ SECTION(routers, virtual)m4_dnl ## be done in two passes, so that we can identify the correct user's spam ## threshold during address verification. FILTER_ROUTER(virtual_data, - <:VHOST_FILTER(redirect, data):>,, <: + <:VHOST_FILTER(data, redirect):>,, <: VHOST_USER:>) FILTER_ROUTER(virtual_file, - <:VHOST_FILTER(filter, file):>,, <: + <:VHOST_FILTER(file, filter):>,, <: VHOST_USER:>) +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 --------------------------------------------------