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 -- mailman-checkins@python.org To unsubscribe send an email to mailman-checkins-le...@python.org https://mail.python.org/mailman3/lists/mailman-checkins.python.org/ Member address: arch...@jab.org