Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core
Commits:
5ae34e81 by Mark Sapiro at 2018-07-27T03:28:16Z
Import all acceptable_aliases as regexps.
- - - - -
55443b04 by Mark Sapiro at 2018-07-27T16:45:09Z
Merge branch 'import' into 'master'
Import all acceptable_aliases as regexps.
Closes #496
See merge request mailman/mailman!406
- - - - -
3 changed files:
- src/mailman/docs/NEWS.rst
- src/mailman/utilities/importer.py
- src/mailman/utilities/tests/test_import.py
Changes:
=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -10,6 +10,12 @@ Here is a history of user visible changes to Mailman.
3.3.0 -- "Tom Sawyer"
=====================
+(20xx-xx-xx)
+
+Command line
+------------
+* The ``mailman import21`` command properly converts all acceptable_aliases
+ to regexps. (Closes #496)
3.2.0 -- "La Villa Strangiato"
=====================================
src/mailman/utilities/importer.py
=====================================
@@ -351,12 +351,14 @@ def import_config_pck(mlist, config_dict):
if len(address) == 0:
continue
address = bytes_to_str(address)
- try:
- alias_set.add(address)
- except ValueError:
- # When .add() rejects this, the line probably contains a regular
- # expression. Make that explicit for MM3.
- alias_set.add('^' + address)
+ # All 2.1 acceptable aliases are regexps whether or not they start
+ # with '^' or contain '@'.
+ if not address.startswith('^'):
+ address = '^' + address
+ # This used to be in a try which would catch ValueError and add a '^',
+ # but .add() would not raise ValueError if address contained '@' and
+ # that needs the '^' too as it could be a regexp with an '@' in it.
+ alias_set.add(address)
# Handle header_filter_rules conversion to header_matches.
header_matches = IHeaderMatchList(mlist)
header_filter_rules = config_dict.get('header_filter_rules', [])
=====================================
src/mailman/utilities/tests/test_import.py
=====================================
@@ -265,7 +265,9 @@ class TestBasicImport(unittest.TestCase):
self.assertTrue(IBanManager(self._mlist).is_banned(addr))
def test_acceptable_aliases(self):
- # This used to be a plain-text field (values are newline-separated).
+ # This used to be a plain-text field (values are newline-separated)
+ # but values were interpreted as regexps even without '^' so we need
+ # to add the '^'.
aliases = ['[email protected]',
'[email protected]',
'non-ascii-\[email protected]',
@@ -273,7 +275,8 @@ class TestBasicImport(unittest.TestCase):
self._pckdict['acceptable_aliases'] = list_to_string(aliases)
self._import()
alias_set = IAcceptableAliasSet(self._mlist)
- self.assertEqual(sorted(alias_set.aliases), aliases)
+ self.assertEqual(sorted(alias_set.aliases),
+ [('^' + alias) for alias in aliases])
def test_acceptable_aliases_invalid(self):
# Values without an '@' sign used to be matched against the local
@@ -287,13 +290,23 @@ class TestBasicImport(unittest.TestCase):
def test_acceptable_aliases_as_list(self):
# In some versions of the pickle, this can be a list, not a string
- # (seen in the wild).
+ # (seen in the wild). We still need to add the '^'.
aliases = [b'[email protected]', b'[email protected]']
self._pckdict['acceptable_aliases'] = aliases
self._import()
alias_set = IAcceptableAliasSet(self._mlist)
self.assertEqual(sorted(alias_set.aliases),
- sorted(a.decode('utf-8') for a in aliases))
+ sorted(('^' + a.decode('utf-8')) for a in aliases))
+
+ def test_dont_add_caret_if_present(self):
+ # The 2.1 alias could have had a leading '^' even though not required.
+ aliases = ['^[email protected]',
+ '^alias2@.*',
+ ]
+ self._pckdict['acceptable_aliases'] = list_to_string(aliases)
+ self._import()
+ alias_set = IAcceptableAliasSet(self._mlist)
+ self.assertEqual(sorted(alias_set.aliases), aliases)
def test_info_non_ascii(self):
# info can contain non-ascii characters.
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/6aecc2d65dd37d06fac640dae62dc45c16901516...55443b04ff185ca908b1dcd8261d8b2d0f67626e
--
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/6aecc2d65dd37d06fac640dae62dc45c16901516...55443b04ff185ca908b1dcd8261d8b2d0f67626e
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org