Issues with VERP in local part and reusing local part for a pipe transport (tainted arg)

Felix Schäfer via Exim-users <[email protected]>
Newsgroups gmane.mail.exim.user
Message-ID <[email protected]>
Hello,

(Sent from my private Gmail address as our uni mail server isn’t fond of the CNAME for lists.exim.org)

We are using exim with a sympa mailing list server and have mostly managed to use a dynamic exim configuration for this, i.e. we do not generate a list of addresses out of sympa up front but check the validity of list email addresses on reception with require-files checking the existence of a mailing list at that address.

We have not yet managed to get bounce addresses with VERP working. Those are of the form

[email protected] <mailto:[email protected]>

Unfortunately I have not been able to create a config in which the local_part is untainted and can be reused for a pipe transport.

In broad strokes, our router and transport currently look like this:

sympa_list_bounce:
debug_print = "R: sympa_list_bounce for ${local_part_prefix}${local_part}@$domain"
driver = accept
domains = +sympa_domains
local_parts = ${if bool_lax{${lookup {${if match{$local_part}{\N^.+==([^=]+)$\N} {$1}{$local_part}}} dsearch {SYMPA_EXPL/${domain_data}}}} {${local_part}}}
local_part_prefix = bounce+
require_files = +SYMPA_EXPL/${lc::$domain_data}/${if match{$local_part}{\N^.+==([^=]+)$\N} {$1}{$local_part}}/config
retry_use_local_part
transport = sympa_bounce

sympa_bounce:
driver = pipe
command = "SYMPA_BOUNCE ${local_part_prefix}${local_part_data}\@${domain_data}"
return_fail_output
user = sympa

A few details:
- SYMPA_BOUNCE is the executable to which the message should be passed
- SYMPA+EXPL is the folder in which sympa keeps list configs in the form lists.ourdomain/thelist/config and some other files in the same folder
- sympa_domains has a list of domains that are, well, domains where sympa mailing lists exist

I now am a little stuck. Extending the prefix with prefix until the list name with for example local_part_prefix = *== would give me a local part that I don’t need to slice up before using it, but I don’t know how I then could ensure that the local part starts with bounce+ and it would be similarly tainted, correct?

The local_parts stanza is theoretically not necessary as the validity of the address is already checked in the require_files. We however use local_parts = dsearch;SYMPA_EXPL/${domain_data} or something similar in other routers to untaint the local_part. Here though the local_parts test returns a tainted string which I guess is the reason why the transport returns with the tainted arg error?

Does anyone have a suggestion how to solve this?

Thank you,

Felix Schäfer
Admin der FSInfo der TU Dortmund

-- 
## subscription configuration (requires account):
##   https://lists.exim.org/mailman3/postorius/lists/exim-users.lists.exim.org/
## unsubscribe (doesn't require an account):
##   [email protected]
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.