From: Mark Wooding Date: Mon, 28 Sep 2015 09:19:17 +0000 (+0100) Subject: user-spam.m4: Look up spam limit for lots of recipient. X-Git-Url: https://git.distorted.org.uk/~mdw/exim-config/commitdiff_plain/ff58aaf82eac878ec33382788e2af0a12d53ba31 user-spam.m4: Look up spam limit for lots of recipient. If the envelope recipient has been changed by forwarding or aliasing then look up a spam limit using all of the recipient addresses available to us at the time. This is particularly important for users of forwarding services such as that provided by `odin.gg'. --- diff --git a/user-spam.m4 b/user-spam.m4 index ac1e7d0..1b47f15 100644 --- a/user-spam.m4 +++ b/user-spam.m4 @@ -25,29 +25,48 @@ DIVERT(null) ###-------------------------------------------------------------------------- ### User-configurable spam thresholds. +m4_define(<:USER_SPAMLIMIT_ROUTER:>, +<:SPAMLIMIT_ROUTER(fetch_spam_limit_$1_$2) + check_local_user + local_part_suffix = CONF_user_suffix_list + local_part_suffix_optional = true + $3:>) + +m4_define(<:USER_SPAMLIMIT_ROUTERS:>, +<:USER_SPAMLIMIT_ROUTER(<:lookup:>, <:$1:>, + <:$5SPAMLIMIT_LOOKUP(<:CONF_userconf_dir/spam-limit:>, + <:$2:>, <:$3:>, <:$4:>):>) +USER_SPAMLIMIT_ROUTER(<:userv:>, <:$1:>, + <:$5SPAMLIMIT_USERV(<:SHQUOTE($local_part):>, + <:$2:>, <:$3:>, <:$4:>):>):>) + m4_define(<:CURRENT_LOCAL_PART:>, <:$local_part_prefix$local_part$local_part_suffix:>) +m4_define(<:ORIGINAL_ADDRESS:>, <:$original_local_part@$original_domain:>) +m4_define(<:PARENT_ADDRESS:>, <:$parent_local_part@$parent_domain:>) +m4_define(<:CURRENT_ADDRESS:>, <:CURRENT_LOCAL_PART@$domain:>) + SECTION(routers, allspam)m4_dnl ## If we're verifying an address and the recipient has a `~/.mail/spam-limit' ## file, then look up the recipient and sender addresses to find a plausible ## limit and insert it into the `address_data' where the RCPT ACL can find ## it. This router always declines, so it doesn't affect the overall outcome ## of the verification. -SPAMLIMIT_ROUTER(fetch_spam_limit_lookup) - check_local_user - local_part_suffix = CONF_user_suffix_list - local_part_suffix_optional = true - SPAMLIMIT_LOOKUP(CONF_userconf_dir/spam-limit, - CURRENT_LOCAL_PART, $domain, $sender_address) - -SPAMLIMIT_ROUTER(fetch_spam_limit_userv) - check_local_user - local_part_suffix = CONF_user_suffix_list - local_part_suffix_optional = true - condition = ${if exists{CONF_userconf_dir/spam-limit.userv}} - SPAMLIMIT_USERV(SHQUOTE($local_part), - CURRENT_LOCAL_PART, $domain, $sender_address) +## +## As a result of forwarding and aliasing, the original envelope recipient +## may have been set a while ago, so we'll search through the history until +## we find a match. +USER_SPAMLIMIT_ROUTERS(<:original:>, + <:$original_local_part:>, <:$original_domain:>, <:$sender_address:>, + <:condition = ${if !eq{ORIGINAL_ADDRESS}{PARENT_ADDRESS}} +:>) +USER_SPAMLIMIT_ROUTERS(<:parent:>, + <:$parent_local_part:>, <:$parent_domain:>, <:$sender_address:>, + <:condition = ${if !eq{PARENT_ADDRESS}{CURRENT_ADDRESS}} +:>) +USER_SPAMLIMIT_ROUTERS(<:current:>, + <:CURRENT_LOCAL_PART:>, <:$domain:>, <:$sender_address:>) DIVERT(null) ###----- That's all, folks --------------------------------------------------