From 46dee1bd9adfad0eb09e8108dde8ddcf25479aeb Mon Sep 17 00:00:00 2001 From: Cyril Jaquier Date: Thu, 7 Sep 2006 21:00:44 +0000 Subject: [PATCH] - Improved checking when parsing the configuration git-svn-id: https://fail2ban.svn.sourceforge.net/svnroot/fail2ban/trunk@336 a942ae1a-1317-0410-a47c-b1dcaea8d605 --- client/actionreader.py | 2 +- client/configreader.py | 11 +++++++++-- client/filterreader.py | 2 +- client/jailreader.py | 19 ++++++++++++++----- client/jailsreader.py | 11 +++++++---- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/client/actionreader.py b/client/actionreader.py index 348cb3bf..d069fc39 100644 --- a/client/actionreader.py +++ b/client/actionreader.py @@ -51,7 +51,7 @@ class ActionReader(ConfigReader): return self.name def read(self): - ConfigReader.read(self, "action.d/" + self.file) + return ConfigReader.read(self, "action.d/" + self.file) def getOptions(self, pOpts): opts = [["string", "actionstart", ""], diff --git a/client/configreader.py b/client/configreader.py index ca4303fa..d9322aff 100644 --- a/client/configreader.py +++ b/client/configreader.py @@ -24,7 +24,7 @@ __date__ = "$Date$" __copyright__ = "Copyright (c) 2004 Cyril Jaquier" __license__ = "GPL" -import logging +import logging, os from ConfigParser import * # Gets the instance of the logger. @@ -53,7 +53,14 @@ class ConfigReader(SafeConfigParser): global basedir basename = basedir + filename logSys.debug("Reading " + basename) - SafeConfigParser.read(self, [basename + ".conf", basename + ".local"]) + bConf = basename + ".conf" + bLocal = basename + ".local" + if os.path.exists(bConf) or os.path.exists(bLocal): + SafeConfigParser.read(self, [bConf, bLocal]) + return True + else: + logSys.error(bConf + " and " + bLocal + " do not exist") + return False ## # Read the options. diff --git a/client/filterreader.py b/client/filterreader.py index fbf3146f..e746292d 100644 --- a/client/filterreader.py +++ b/client/filterreader.py @@ -50,7 +50,7 @@ class FilterReader(ConfigReader): return self.name def read(self): - ConfigReader.read(self, "filter.d/" + self.file) + return ConfigReader.read(self, "filter.d/" + self.file) def getOptions(self, pOpts): opts = [["string", "timeregex", None], diff --git a/client/jailreader.py b/client/jailreader.py index 3483582a..986f3645 100644 --- a/client/jailreader.py +++ b/client/jailreader.py @@ -67,20 +67,29 @@ class JailReader(ConfigReader): if self.isEnabled(): # Read filter self.filter = FilterReader(self.opts["filter"], self.name) - self.filter.read() - self.filter.getOptions(self.opts) + ret = self.filter.read() + if ret: + self.filter.getOptions(self.opts) + else: + logSys.error("Unable to read the filter") + return False # Read action for act in self.opts["action"].split('\n'): try: splitAct = JailReader.splitAction(act) action = ActionReader(splitAct, self.name) - action.read() - action.getOptions(self.opts) - self.actions.append(action) + ret = action.read() + if ret: + action.getOptions(self.opts) + self.actions.append(action) + else: + raise AttributeError("Unable to read action") except AttributeError, e: logSys.error("Error in action definition " + act) logSys.debug(e) + return False + return True def convert(self): stream = [["add", self.name]] diff --git a/client/jailsreader.py b/client/jailsreader.py index 7515597b..e94e0c3a 100644 --- a/client/jailsreader.py +++ b/client/jailsreader.py @@ -47,10 +47,13 @@ class JailsReader(ConfigReader): for sec in self.sections(): jail = JailReader(sec) jail.read() - jail.getOptions() - if jail.isEnabled(): - # We only add enabled jails - self.jails.append(jail) + ret = jail.getOptions() + if ret: + if jail.isEnabled(): + # We only add enabled jails + self.jails.append(jail) + else: + logSys.error("Errors in jail '" + sec + "'. Skipping...") def getFilterOptions(self, file): filter = FilterReader(file)