###--------------------------------------------------------------------------
### 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=$local_part:>):>)
+USER_SPAMLIMIT_ROUTER(<:userv:>, <:$1:>,
+ <:$5SPAMLIMIT_USERV(<:SHQUOTE($local_part):>,
+ <:$2:>, <:$3:>, <:$4:>, <:user=$local_part:>):>):>)
+
+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,
- $local_part_prefix, $local_part, $local_part_suffix, $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),
- $local_part_prefix, $local_part, $local_part_suffix, $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 --------------------------------------------------