[Mailman-Users] Additional questions about ban_list
Mark Sapiro
mark at msapiro.net
Wed Oct 7 02:43:58 CEST 2015
On 10/06/2015 08:07 AM, Chris Nulk wrote:
>
> 1. The ban_list attribute is to help prevent unwanted people from
> subscribing to a list, however, I want to restrict who can subscribe to
> the list and ban anyone else. I have the regex for who I want to allow
> to subscribe but there isn't an allow_list attribute. Is there an easy
> way of allowing a regex to control who is able to subscribe? Or, is
> there a way to easily invert the regex logic and use it in ban_list? As
> an example (not the real regex), say I want to only allow @gmail.com to
> subscribe to the list but no one else.
As Aditya Jain replied, you can use Python RE negative lookahead
assertions to create regexps with "doesn't match" conditions. See
<https://docs.python.org/2/library/re.html#regular-expression-syntax>.
Although the posted regexp modified for gmail
^[^@]+@(?!(.*\.)?gmail\.com$)
will not match and hence allow, addresses like user at subdomain.gmail.com.
To allow only '@gmail.com' addresses, e.g. to ban all non-'@gmail.com'
addresses, use
^[^@]+@(?!gmail\.com$)
Often, if you have the regexp to allow, the regexp to ban may be as
simple as
^(?!the_allow_regexp)
> 2. An additional requirement is to restrict a subgroup of the addresses
> from subscribing. In short, I want to allow all @gmail.com addresses to
> subscribe except for a known subgroup. Now the known subgroup is in a
> Mailman list. So, can I use a Mailman list in the ban_list attribute
> similar to using a list in *_these_members attributes? Or, would I have
> to modify the code to allow using a Mailman list in the ban_list attribute?
Allowing @list_name in ban_list is a simple code modification if you
don't care if various 'error' log messages such as list references
itself or references non-existent list refer to
'subscribe_auto_approval' even if the error is in ban_list.
The change would be in this code in Mailman/Mail.List.py
def GetBannedPattern(self, email):
"""Returns matched entry in ban_list if email matches.
Otherwise returns None.
"""
return self.GetPattern(email, self.ban_list)
change the last line to
return self.GetPattern(email, self.ban_list, at_list=True)
Or, if you've installed the GLOBAL_BAN_LIST mod, make the change in each
of the two lines in
return (self.GetPattern(email, self.ban_list) or
self.GetPattern(email, mm_cfg.GLOBAL_BAN_LIST)
)
--
Mark Sapiro <mark at msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
More information about the Mailman-Users
mailing list