diff --git a/fail2ban/client/jailreader.py b/fail2ban/client/jailreader.py index 56b8889c..c86c3153 100644 --- a/fail2ban/client/jailreader.py +++ b/fail2ban/client/jailreader.py @@ -34,7 +34,7 @@ from .filterreader import FilterReader from .actionreader import ActionReader from ..version import version from ..helpers import getLogger -from ..helpers import splitcommaspace +from ..helpers import splitwords # Gets the instance of the logger. logSys = getLogger(__name__) @@ -214,7 +214,7 @@ class JailReader(ConfigReader): elif opt == "maxretry": stream.append(["set", self.__name, "maxretry", self.__opts[opt]]) elif opt == "ignoreip": - for ip in splitcommaspace(self.__opts[opt]): + for ip in splitwords(self.__opts[opt]): stream.append(["set", self.__name, "addignoreip", ip]) elif opt == "findtime": stream.append(["set", self.__name, "findtime", self.__opts[opt]]) diff --git a/fail2ban/helpers.py b/fail2ban/helpers.py index 8e1b0e32..fc51a88e 100644 --- a/fail2ban/helpers.py +++ b/fail2ban/helpers.py @@ -128,12 +128,12 @@ def excepthook(exctype, value, traceback): "Unhandled exception in Fail2Ban:", exc_info=True) return sys.__excepthook__(exctype, value, traceback) -def splitcommaspace(s): - """Helper to split on any comma or space +def splitwords(s): + """Helper to split words on any comma, space, or a new line Returns empty list if input is empty (or None) and filters out empty entries """ if not s: return [] - return filter(bool, re.split('[ ,]', s)) + return filter(bool, map(str.strip, re.split('[ ,\n]', s))) diff --git a/fail2ban/tests/misctestcase.py b/fail2ban/tests/misctestcase.py index e28ce422..48074d53 100644 --- a/fail2ban/tests/misctestcase.py +++ b/fail2ban/tests/misctestcase.py @@ -33,7 +33,7 @@ from glob import glob from StringIO import StringIO from ..helpers import formatExceptionInfo, mbasename, TraceBack, FormatterWithTraceBack, getLogger -from ..helpers import splitcommaspace +from ..helpers import splitwords from ..server.datetemplate import DatePatternRegex @@ -56,13 +56,15 @@ class HelpersTest(unittest.TestCase): # might be fragile due to ' vs " self.assertEqual(args, "('Very bad', None)") - def testsplitcommaspace(self): - self.assertEqual(splitcommaspace(None), []) - self.assertEqual(splitcommaspace(''), []) - self.assertEqual(splitcommaspace(' '), []) - self.assertEqual(splitcommaspace('1'), ['1']) - self.assertEqual(splitcommaspace(' 1 2 '), ['1', '2']) - self.assertEqual(splitcommaspace(' 1, 2 , '), ['1', '2']) + def testsplitwords(self): + self.assertEqual(splitwords(None), []) + self.assertEqual(splitwords(''), []) + self.assertEqual(splitwords(' '), []) + self.assertEqual(splitwords('1'), ['1']) + self.assertEqual(splitwords(' 1 2 '), ['1', '2']) + self.assertEqual(splitwords(' 1, 2 , '), ['1', '2']) + self.assertEqual(splitwords(' 1\n 2'), ['1', '2']) + self.assertEqual(splitwords(' 1\n 2, 3'), ['1', '2', '3']) class SetupTest(unittest.TestCase):