On Mon, Oct 27, 2025 at 8:48 AM Marc MERLIN via Exim-users <
[email protected]> wrote:

> So, I finally did the exim4 upgrade that brought tainting and has now
> broken my mailman config.
>
> I understand why tainting and the basics, but in the case of the mailman
> transport I wrote 20+ years ago, it is safe and I'd like to untaint
> local_part.
>
> Note that require_files encsures that local_part can't be random crap
> or the filematch would fail and the transport would never be called.
> Still, I tried to untaint with address_data and pass it to transport,
> but it's still tainted
>
> I lost 6H on this upgrade today and I'm now down until I downgrade exim
> and pin it back to an old version I'll never upgrade again.
> Before I go there, is there a fix to
> 22:29:56 1895290   ** [email protected] F=<[email protected]>
> R=mm21_main_director T=mm21_transport: Tainted arg 2 for mm21_transport
> transport command: 'testlist'
> ?
>
> What I have is:
> .ifdef MAILMAN_HOME
> # We want this router first in case we have a list named something like
> # mailman-owner
> mm21_main_director:
>   debug_print = "R: mm21_main_director for $local_part@$domain"
>   driver = accept
>   # Explicitly untaint by capturing the validated local_part
>   address_data = ${sg{${lc:$local_part}}{^([a-zA-Z0-9_.-]+)\$}{\$1}}
>   # Condition to validate $local_part against safe characters and untaint
> it
>   # We'll allow listname+foo addressing, but not for other admin addresses
>   local_part_suffix = +*
>   local_part_suffix_optional
>   require_files = MAILMAN_HOME/lists/${lc::$local_part}/config.pck
>   transport = mm21_transport
>
> mm21_director:
>   debug_print = "R: mm21_director for $local_part@$domain"
>   driver = accept
>   # Explicitly untaint by capturing the validated local_part
>   address_data = ${sg{${lc:$local_part}}{^([a-zA-Z0-9_.-]+)\$}{\$1}}
>   require_files = MAILMAN_HOME/lists/${lc::$local_part}/config.pck
>   address_data = ${sg{${lc:$local_part}}{^([a-zA-Z0-9_.-]+)\$}{\$1}}
>   transport = mm21_transport
> .endif
>
>
> mm21_transport:
>   debug_print = "T: mm21_transport for $local_part@$domain"
>   driver = pipe
>   # In case you wonder, substr_2 removes the leading '-'
>   # and the regex removes optional +foo=hostname that can be after -bounce
>   # (if you use VERP) -- Marc
>   command = MAILMAN_WRAP "${if
> def:local_part_suffix{${substr_2:{${sg{${lc:$local_part_suffix}}{\\\\\+.*}{}}}}{post}}"
> ${lc:$address_data}
>   current_directory = MAILMAN_HOME
>   home_directory = MAILMAN_HOME
>   user = MAILMAN_UID
>   group = MAILMAN_GID
> .endif
>

Hello Marc,

Long time!

Here are my MM21 bits (which I commented out when I moved to MM3).
I had no issues with Exim 4.9x:

MACROS:
MAILMAN_HOME=/usr/local/mailman2
MAILMAN_WRAP=MAILMAN_HOME/mail/mailman
MAILMAN_USER=mailman
MAILMAN_GROUP=Debian-exim


mailman_router:
  driver                 = accept
  local_parts         = dsearch,filter=dir;MAILMAN_HOME/lists
  require_files       = MAILMAN_HOME/lists/$local_part_data/config.pck
  local_part_suffix = -bounces : -bounces+* : \
                               -confirm+* : -join : -leave : \
                              -owner : -request : -admin
  local_part_suffix_optional
  domains           = +mm_domains
  transport          = mailman_transport

mailman_transport:
  driver             = pipe
  command      = MAILMAN_WRAP \
                         '${if def:local_part_suffix \
                         {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} \
                         {post}}' \
                         ${lc:$local_part_data}
  current_directory = MAILMAN_HOME
  home_directory    = MAILMAN_HOME
  user                     = MAILMAN_USER
  group                   = MAILMAN_GROUP



PS: Also, If you need any help moving to Mailman3, just hola :)

Adiós

-- 
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
 In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]

-- 
## 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/

Reply via email to