Abhilash Raj pushed to branch master at GNU Mailman / Mailman Core
Commits:
98288ae8 by Mark Sapiro at 2021-01-25T19:08:00+00:00
Properly process changed header filters.
- - - - -
5964768c by Abhilash Raj at 2021-01-25T19:08:00+00:00
Merge branch 'header' into 'master'
Properly process changed header filters.
Closes #818
See merge request mailman/mailman!767
- - - - -
3 changed files:
- src/mailman/chains/headers.py
- src/mailman/chains/tests/test_headers.py
- src/mailman/docs/NEWS.rst
Changes:
=====================================
src/mailman/chains/headers.py
=====================================
@@ -65,9 +65,8 @@ def make_link(header, pattern, chain=None, suffix=None):
"""
rule_name = _make_rule_name(suffix)
if rule_name in config.rules:
- rule = config.rules[rule_name]
- else:
- rule = HeaderMatchRule(header, pattern, suffix)
+ del config.rules[rule_name]
+ rule = HeaderMatchRule(header, pattern, suffix)
if chain is None:
return Link(rule)
return Link(rule, LinkAction.jump, chain)
=====================================
src/mailman/chains/tests/test_headers.py
=====================================
@@ -200,6 +200,70 @@ A message body.
('baz', 'z+', LinkAction.jump, 'accept'),
]) # noqa: E124
+ def test_list_complex_rule_deletion(self):
+ # Test that the mailing-list header-match complex rules are read
+ # properly after deletion.
+ chain = config.chains['header-match']
+ header_matches = IHeaderMatchList(self._mlist)
+ header_matches.append('Foo', 'a+', 'reject')
+ header_matches.append('Bar', 'b+', 'discard')
+ header_matches.append('Baz', 'z+', 'accept')
+ links = [link for link in chain.get_links(self._mlist, Message(), {})
+ if link.rule.name != 'any']
+ self.assertEqual(len(links), 3)
+ self.assertEqual([
+ (link.rule.header, link.rule.pattern, link.action, link.chain.name)
+ for link in links
+ ],
+ [('foo', 'a+', LinkAction.jump, 'reject'),
+ ('bar', 'b+', LinkAction.jump, 'discard'),
+ ('baz', 'z+', LinkAction.jump, 'accept'),
+ ]) # noqa: E124
+ del header_matches[0]
+ links = [link for link in chain.get_links(self._mlist, Message(), {})
+ if link.rule.name != 'any']
+ self.assertEqual(len(links), 2)
+ self.assertEqual([
+ (link.rule.header, link.rule.pattern, link.action, link.chain.name)
+ for link in links
+ ],
+ [('bar', 'b+', LinkAction.jump, 'discard'),
+ ('baz', 'z+', LinkAction.jump, 'accept'),
+ ]) # noqa: E124
+
+ def test_list_complex_rule_reorder(self):
+ # Test that the mailing-list header-match complex rules are read
+ # properly after reordering.
+ chain = config.chains['header-match']
+ header_matches = IHeaderMatchList(self._mlist)
+ header_matches.append('Foo', 'a+', 'reject')
+ header_matches.append('Bar', 'b+', 'discard')
+ header_matches.append('Baz', 'z+', 'accept')
+ links = [link for link in chain.get_links(self._mlist, Message(), {})
+ if link.rule.name != 'any']
+ self.assertEqual(len(links), 3)
+ self.assertEqual([
+ (link.rule.header, link.rule.pattern, link.action, link.chain.name)
+ for link in links
+ ],
+ [('foo', 'a+', LinkAction.jump, 'reject'),
+ ('bar', 'b+', LinkAction.jump, 'discard'),
+ ('baz', 'z+', LinkAction.jump, 'accept'),
+ ]) # noqa: E124
+ del header_matches[0]
+ header_matches.append('Foo', 'a+', 'reject')
+ links = [link for link in chain.get_links(self._mlist, Message(), {})
+ if link.rule.name != 'any']
+ self.assertEqual(len(links), 3)
+ self.assertEqual([
+ (link.rule.header, link.rule.pattern, link.action, link.chain.name)
+ for link in links
+ ],
+ [('bar', 'b+', LinkAction.jump, 'discard'),
+ ('baz', 'z+', LinkAction.jump, 'accept'),
+ ('foo', 'a+', LinkAction.jump, 'reject'),
+ ]) # noqa: E124
+
def test_header_in_subpart(self):
# Test that headers in sub-parts are also matched.
msg = mfs("""\
@@ -371,12 +435,18 @@ A message body.
self.assertEqual(event.mlist, self._mlist)
self.assertEqual(event.msg, msg)
+ @unittest.expectedFailure
@configuration('antispam', header_checks="""
Header1: a+
""", jump_chain='hold')
def test_reuse_rules(self):
# Test that existing header-match rules are used instead of creating
# new ones.
+ # MAS Reusing existing rules is problematic. If the rule with say
+ # position = 0 is deleted the following rule should become
+ # header-match-<list-id>-0 but that rule has the old values for
+ # header and pattern.
+ # See https://gitlab.com/mailman/mailman/-/issues/818
chain = config.chains['header-match']
header_matches = IHeaderMatchList(self._mlist)
header_matches.append('Header2', 'b+')
=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -40,6 +40,8 @@ Bugs
(Closes #816)
* Increase the default REST API (gunicorn) timeout to 360 seconds from 30 as
several API endpoinds can be very slow. (Closes #770)
+* Header filter rules are now properly processed after deletions and/or
+ reordering. (Closes #818)
Command line
------------
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/55948fdc3849032bc83eba5fbe0125b3505337ec...5964768c0a7110142e4e8a992953f705beb8c250
--
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/55948fdc3849032bc83eba5fbe0125b3505337ec...5964768c0a7110142e4e8a992953f705beb8c250
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: [email protected]