From 5e74499ffd2358d39cf6d4017fc66ce2e093eb6d Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 8 Sep 2022 15:49:57 +0200 Subject: provides details of failed regex compilation in the error message we throw in Regex-constructor (it's good to know what exactly is wrong) --- fail2ban/server/failregex.py | 6 +++--- fail2ban/tests/fail2banregextestcase.py | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'fail2ban') diff --git a/fail2ban/server/failregex.py b/fail2ban/server/failregex.py index 15a7699f..5cf18f80 100644 --- a/fail2ban/server/failregex.py +++ b/fail2ban/server/failregex.py @@ -145,9 +145,9 @@ class Regex: n = ALTNAME_CRE.match(k).group(1) self._altValues[k] = n self._altValues = list(self._altValues.items()) if len(self._altValues) else None - except sre_constants.error: - raise RegexException("Unable to compile regular expression '%s'" % - regex) + except sre_constants.error as e: + raise RegexException("Unable to compile regular expression '%s':\n%s" % + (regex, e)) # set fetch handler depending on presence of alternate tags: self.getGroups = self._getGroupsWithAlt if self._altValues else self._getGroups diff --git a/fail2ban/tests/fail2banregextestcase.py b/fail2ban/tests/fail2banregextestcase.py index 00808ddd..e6ef2707 100644 --- a/fail2ban/tests/fail2banregextestcase.py +++ b/fail2ban/tests/fail2banregextestcase.py @@ -133,6 +133,13 @@ class Fail2banRegexTest(LogCaptureTestCase): "test", r".** from $" )) self.assertLogged("Unable to compile regular expression") + self.assertLogged("multiple repeat", "at position 2", all=False); # details of failed compilation + self.pruneLog() + self.assertFalse(_test_exec( + "test", r"^(?:(?PA)|B)? (?(typo)...) from " + )) + self.assertLogged("Unable to compile regular expression") + self.assertLogged("unknown group name: 'typo'", "at position 23", all=False); # details of failed compilation def testWrongIngnoreRE(self): self.assertFalse(_test_exec( @@ -140,6 +147,7 @@ class Fail2banRegexTest(LogCaptureTestCase): "test", r".*? from $", r".**" )) self.assertLogged("Unable to compile regular expression") + self.assertLogged("multiple repeat", "at position 2", all=False); # details of failed compilation def testWrongFilterOptions(self): self.assertFalse(_test_exec( -- cgit v1.2.1