Hello,
The following bug in exim 4.83 and 4.84 was supposed to be fixed in exim
4.85, however it is not fixed:
http://bugs.exim.org/show_bug.cgi?id=1533
Description: "There is a fixed-size buffer (128 chars) used during
headers_remove processing which truncates items after extraction from
the headers_remove list but before expansion. This results in an
expansion error, commonly "missing }", on anything complex."
This bug was reported by several Vexim and Exim4U configuration users
including Shamim Shahriar here:
https://lists.exim.org/lurker/message/20141005.202139.c8520628.en.html
Both Shamim and I have tested exim 4.85 and the bug remains for both of
us. That is, with the headers_remove statements, the mysql lookup will
only accommodate a very small length and discards anything beyond that
length.
My test resullts were as follows using double colons in the following
quote_mysql statement:
headers_remove = ${if >={$acl_m_spamscore}{${lookup mysql{select
users.sa_tag * 10 from users,domains \
where localpart = '${quote_mysql::$local_part}' \
and domain = '${quote_mysql::$domain}' \
and users.on_spamassassin = '1' \
and users.domain_id=domains.domain_id }{$value}fail}} \
{Subject}{${if eq{SPAMHEADERTYPE}{0}{X-Spam-Report}}} \
}
"exim -bd -d -oX 25" yields:
97120 message: virtual_domains router failed to expand "${if
>={$acl_m_spamscore}{${lookup mysql{select users.sa_tag * 10 from
users,domains where localpart = '${quote_mysql::$local_part}' and domain
= '${quote_mysql::$domain}' and users.on_spamassassin = '1' and
users.domain_id=domains.domain_id }{$value}fail}} {Subject}{${if
eq{${lookup{SpamHeaderType}lsearch{/etc/exim/exim4u_global_spam_virus}}}{0}{X-Spam-Report}}}
}": unknown variable name "local_pa"
97120 ----------- end verify ------------
97120 accept: condition test deferred in ACL "acl_check_rcpt"
97120 SMTP>> 451 Temporary local problem - please try later
So, in summary, the quote_mysql statement appears to truncate resulting
in "local_pa" instead of "local_part".
Shamim has done additional more comprehensive tests as well and usually
gets the following error:
"missing } at end of string inside "or{...}" condition"
FYI,
Gordon Dickens