mirror of https://github.com/fail2ban/fail2ban
bug fix: option 'dbpurgeage' was never set (always default) by start of fail2ban, because of invalid sorting of options ('dbfile' should be always set before other database options) / closes #1048, closes #1050
parent
17472a8b56
commit
8a37a46fbb
|
@ -53,18 +53,14 @@ class Fail2banReader(ConfigReader):
|
||||||
self.__opts = ConfigReader.getOptions(self, "Definition", opts)
|
self.__opts = ConfigReader.getOptions(self, "Definition", opts)
|
||||||
|
|
||||||
def convert(self):
|
def convert(self):
|
||||||
|
# Ensure logtarget/level set first so any db errors are captured
|
||||||
|
# Also dbfile should be set before all other database options.
|
||||||
|
# So adding order indices into items, to be stripped after sorting, upon return
|
||||||
|
order = {"syslogsocket":0, "loglevel":1, "logtarget":2,
|
||||||
|
"dbfile":50, "dbpurgeage":51}
|
||||||
stream = list()
|
stream = list()
|
||||||
for opt in self.__opts:
|
for opt in self.__opts:
|
||||||
if opt == "loglevel":
|
if opt in order:
|
||||||
stream.append(["set", "loglevel", self.__opts[opt]])
|
stream.append((order[opt], ["set", opt, self.__opts[opt]]))
|
||||||
elif opt == "logtarget":
|
return [opt[1] for opt in sorted(stream)]
|
||||||
stream.append(["set", "logtarget", self.__opts[opt]])
|
|
||||||
elif opt == "syslogsocket":
|
|
||||||
stream.append(["set", "syslogsocket", self.__opts[opt]])
|
|
||||||
elif opt == "dbfile":
|
|
||||||
stream.append(["set", "dbfile", self.__opts[opt]])
|
|
||||||
elif opt == "dbpurgeage":
|
|
||||||
stream.append(["set", "dbpurgeage", self.__opts[opt]])
|
|
||||||
# Ensure logtarget/level set first so any db errors are captured
|
|
||||||
return sorted(stream, reverse=True)
|
|
||||||
|
|
||||||
|
|
|
@ -67,10 +67,10 @@ class Server:
|
||||||
'FreeBSD': '/var/run/log',
|
'FreeBSD': '/var/run/log',
|
||||||
'Linux': '/dev/log',
|
'Linux': '/dev/log',
|
||||||
}
|
}
|
||||||
|
self.setSyslogSocket("auto")
|
||||||
# Set logging level
|
# Set logging level
|
||||||
self.setLogLevel("INFO")
|
self.setLogLevel("INFO")
|
||||||
self.setLogTarget("STDOUT")
|
self.setLogTarget("STDOUT")
|
||||||
self.setSyslogSocket("auto")
|
|
||||||
|
|
||||||
def __sigTERMhandler(self, signum, frame):
|
def __sigTERMhandler(self, signum, frame):
|
||||||
logSys.debug("Caught signal %d. Exiting" % signum)
|
logSys.debug("Caught signal %d. Exiting" % signum)
|
||||||
|
|
|
@ -632,10 +632,11 @@ class JailsReaderTest(LogCaptureTestCase):
|
||||||
% (option, commands))
|
% (option, commands))
|
||||||
|
|
||||||
# Set up of logging should come first
|
# Set up of logging should come first
|
||||||
self.assertEqual(find_set('logtarget'), 1)
|
self.assertEqual(find_set('syslogsocket'), 0)
|
||||||
self.assertEqual(find_set('loglevel'), 2)
|
self.assertEqual(find_set('loglevel'), 1)
|
||||||
|
self.assertEqual(find_set('logtarget'), 2)
|
||||||
# then dbfile should be before dbpurgeage
|
# then dbfile should be before dbpurgeage
|
||||||
self.assertGreater(find_set('dbpurgeage'), find_set('dbfile'))
|
self.assertTrue(find_set('dbpurgeage') > find_set('dbfile'))
|
||||||
|
|
||||||
# and there is logging information left to be passed into the
|
# and there is logging information left to be passed into the
|
||||||
# server
|
# server
|
||||||
|
|
Loading…
Reference in New Issue