diff --git a/fail2ban/client/fail2banreader.py b/fail2ban/client/fail2banreader.py index 9b12bba7..709f4b5d 100644 --- a/fail2ban/client/fail2banreader.py +++ b/fail2ban/client/fail2banreader.py @@ -53,18 +53,14 @@ class Fail2banReader(ConfigReader): self.__opts = ConfigReader.getOptions(self, "Definition", opts) 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() for opt in self.__opts: - if opt == "loglevel": - stream.append(["set", "loglevel", self.__opts[opt]]) - elif opt == "logtarget": - 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) + if opt in order: + stream.append((order[opt], ["set", opt, self.__opts[opt]])) + return [opt[1] for opt in sorted(stream)] diff --git a/fail2ban/server/server.py b/fail2ban/server/server.py index 58857986..6d19544d 100644 --- a/fail2ban/server/server.py +++ b/fail2ban/server/server.py @@ -67,10 +67,10 @@ class Server: 'FreeBSD': '/var/run/log', 'Linux': '/dev/log', } + self.setSyslogSocket("auto") # Set logging level self.setLogLevel("INFO") self.setLogTarget("STDOUT") - self.setSyslogSocket("auto") def __sigTERMhandler(self, signum, frame): logSys.debug("Caught signal %d. Exiting" % signum) diff --git a/fail2ban/tests/clientreadertestcase.py b/fail2ban/tests/clientreadertestcase.py index 25633a19..00128c33 100644 --- a/fail2ban/tests/clientreadertestcase.py +++ b/fail2ban/tests/clientreadertestcase.py @@ -632,10 +632,11 @@ class JailsReaderTest(LogCaptureTestCase): % (option, commands)) # Set up of logging should come first - self.assertEqual(find_set('logtarget'), 1) - self.assertEqual(find_set('loglevel'), 2) + self.assertEqual(find_set('syslogsocket'), 0) + self.assertEqual(find_set('loglevel'), 1) + self.assertEqual(find_set('logtarget'), 2) # 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 # server