Hi,

I have a user filter which has been (as far as I know!) working fine for many
years, which I'm revisiting now that it trips the taint checks after an
upgrade, as it involves `lsearch` lookups in files named after
$original_domain.

I receive e-mails to several domains to this user, and have one or more files
for each domain with the local part as key.

For example, I have an optional file $home/.mail/alias/$domain-bounce file
which lists local parts which should be bounced immediately, with a
$home/.mail/alias/default-bounce fallback, and the current test for that is:

if
   "${lookup{$original_local_part}lsearch{${if 
exists{$home/.mail/alias/$original_domain
-bounce}{$home/.mail/alias/$original_domain-bounce}{$home/.mail/alias/default-bounce}}}{
$value} {}}"
   matches "^(..*)\\$"
then
   pipe "$home/.mail/scripts/bounce-mail"
   finish
endif

My best effort at making it taint-safe (and a bit more readable) is:

   "${lookup {$original_local_part} \
     lsearch{\
       ${if exists{$home/.mail/alias/$original_domain-bounce} \
           {${lookup {$original_domain-bounce} dsearch,ret=full 
{$home/.mail/alias}}} \
           {$home/.mail/alias/default-bounce}}} \
     {$value} {}}"

It's annoyingly repetitive (and with several similar lookups I'm likely to make
a copy-paste error somewhere!), and wrapping the dsearch lookup with `if
exists` seems wrong, but seems necessary to avoid having the lsearch fail the
whole filter if this file doesn't exist.  A "dsearch with default on fail"
would help.

Am I missing some better way to do this?  I can change the way the lookup files
are organised if I have to, but I'd rather not to avoid accidentally breaking
anything!

Thanks,

Chris

-- 
## List details at https://lists.exim.org/mailman/listinfo/exim-users
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to