+## Utilities for collecting spam limits.
+m4_define(<:SPAMLIMIT_CHECK:>,
+ <:${if match{$1}{\N^-?[0-9]+$\N} {spam_limit=$1} {}}:>)
+
+m4_define(<:SPAMLIMIT_ROUTER:>,
+<:$1:
+ driver = redirect
+ data = :unknown:
+ verify_only = true
+ condition = ${if !eq{$acl_c_mode}{submission}}
+ condition = ${extract{spam_limit}{$address_data}{false}{true}}:>)
+
+m4_define(<:SPAMLIMIT_SET:>,
+ <:address_data = \
+ ${if def:address_data {$address_data}{}} \
+ $1:>)
+
+m4_define(<:SPAMLIMIT_LOOKUP:>,
+ <:condition = ${if exists{$1}}
+ SPAMLIMIT_SET(<:${lookup {$2$3$4@$5/$6} nwildlsearch {$1} \
+ {SPAMLIMIT_CHECK($value)}}:>):>)
+
+m4_define(<:SPAMLIMIT_USERV:>,
+ <:SPAMLIMIT_SET(<:${run {/usr/bin/timeout 5s \
+ userv CONF_userv_opts \
+ SHQUOTE($1) exim-spam-limit \
+ SHQUOTE($6) SHQUOTE($2) SHQUOTE($3) \
+ SHQUOTE($4) SHQUOTE(@$5)} \
+ {SPAMLIMIT_CHECK($value)}}:>):>)
+