The Exim specification lies about how ${run ...} works. We have to fix
this in post-production.
###--------------------------------------------------------------------------
### Spam filtering.
###--------------------------------------------------------------------------
### Spam filtering.
+## The Exim documentation tells lies.
+##
+## : *${run{*<_command_>* *<_args_>*}{*<_string1_>*}{*<_string2_>*}}*
+## : The command and its arguments are first expanded separately, [...]
+##
+## They aren't. The whole command-and-args are expanded together, and then
+## split at unquoted spaces. This unpleasant hack sorts out the mess.
+m4_define(<:SHQUOTE:>, <:"${rxquote:$1}":>)
+
SECTION(global, policy)m4_dnl
spamd_address = CONF_spamd_address CONF_spamd_port
SECTION(global, policy)m4_dnl
spamd_address = CONF_spamd_address CONF_spamd_port
${if and {{!eq{$acl_c_mode}{submission}} \
{exists {CONF_userconf_dir/spam-limit.userv}}} \
{${run {timeout 5s -- \
${if and {{!eq{$acl_c_mode}{submission}} \
{exists {CONF_userconf_dir/spam-limit.userv}}} \
{${run {timeout 5s -- \
- userv $local_part exim-spam-limit \
- $sender_address \
- $local_part_prefix \
- $local_part \
- $local_part_suffix \
- @$domain} \
+ userv SHQUOTE($local_part) exim-spam-limit \
+ SHQUOTE($sender_address) \
+ SHQUOTE($local_part_prefix) \
+ SHQUOTE($local_part) \
+ SHQUOTE($local_part_suffix) \
+ SHQUOTE(@$domain)} \
{${if match{$value}{\N^-?[0-9]+$\N} \
{spam_limit=$value} \
{}}} \
{${if match{$value}{\N^-?[0-9]+$\N} \
{spam_limit=$value} \
{}}} \