Merge pull request #1439 from yarikoptic/enh-ignoreipsplit:

ENH: splitcommaspace -> splitwords allow to split ignoreip entries with new lines
pull/1446/head^2
sebres 2016-05-23 15:35:41 +02:00
commit 9df7973e95
3 changed files with 15 additions and 13 deletions

View File

@ -34,7 +34,7 @@ from .filterreader import FilterReader
from .actionreader import ActionReader from .actionreader import ActionReader
from ..version import version from ..version import version
from ..helpers import getLogger from ..helpers import getLogger
from ..helpers import splitcommaspace from ..helpers import splitwords
# Gets the instance of the logger. # Gets the instance of the logger.
logSys = getLogger(__name__) logSys = getLogger(__name__)
@ -214,7 +214,7 @@ class JailReader(ConfigReader):
elif opt == "maxretry": elif opt == "maxretry":
stream.append(["set", self.__name, "maxretry", self.__opts[opt]]) stream.append(["set", self.__name, "maxretry", self.__opts[opt]])
elif opt == "ignoreip": elif opt == "ignoreip":
for ip in splitcommaspace(self.__opts[opt]): for ip in splitwords(self.__opts[opt]):
stream.append(["set", self.__name, "addignoreip", ip]) stream.append(["set", self.__name, "addignoreip", ip])
elif opt == "findtime": elif opt == "findtime":
stream.append(["set", self.__name, "findtime", self.__opts[opt]]) stream.append(["set", self.__name, "findtime", self.__opts[opt]])

View File

@ -128,12 +128,12 @@ def excepthook(exctype, value, traceback):
"Unhandled exception in Fail2Ban:", exc_info=True) "Unhandled exception in Fail2Ban:", exc_info=True)
return sys.__excepthook__(exctype, value, traceback) return sys.__excepthook__(exctype, value, traceback)
def splitcommaspace(s): def splitwords(s):
"""Helper to split on any comma or space """Helper to split words on any comma, space, or a new line
Returns empty list if input is empty (or None) and filters Returns empty list if input is empty (or None) and filters
out empty entries out empty entries
""" """
if not s: if not s:
return [] return []
return filter(bool, re.split('[ ,]', s)) return filter(bool, map(str.strip, re.split('[ ,\n]+', s)))

View File

@ -33,7 +33,7 @@ from glob import glob
from StringIO import StringIO from StringIO import StringIO
from ..helpers import formatExceptionInfo, mbasename, TraceBack, FormatterWithTraceBack, getLogger from ..helpers import formatExceptionInfo, mbasename, TraceBack, FormatterWithTraceBack, getLogger
from ..helpers import splitcommaspace from ..helpers import splitwords
from ..server.datetemplate import DatePatternRegex from ..server.datetemplate import DatePatternRegex
@ -56,13 +56,15 @@ class HelpersTest(unittest.TestCase):
# might be fragile due to ' vs " # might be fragile due to ' vs "
self.assertEqual(args, "('Very bad', None)") self.assertEqual(args, "('Very bad', None)")
def testsplitcommaspace(self): def testsplitwords(self):
self.assertEqual(splitcommaspace(None), []) self.assertEqual(splitwords(None), [])
self.assertEqual(splitcommaspace(''), []) self.assertEqual(splitwords(''), [])
self.assertEqual(splitcommaspace(' '), []) self.assertEqual(splitwords(' '), [])
self.assertEqual(splitcommaspace('1'), ['1']) self.assertEqual(splitwords('1'), ['1'])
self.assertEqual(splitcommaspace(' 1 2 '), ['1', '2']) self.assertEqual(splitwords(' 1 2 '), ['1', '2'])
self.assertEqual(splitcommaspace(' 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): class SetupTest(unittest.TestCase):