diff options
author | Lee Clemens <droid@lc-cs.com> | 2015-01-26 19:38:06 -0500 |
---|---|---|
committer | Lee Clemens <droid@lc-cs.com> | 2015-01-26 19:38:06 -0500 |
commit | 486214585e131f8c442e4f3a710f066cae7ea1e8 (patch) | |
tree | 4cdad57b189eb7c194a8c40232b63d7581a9cf14 /fail2ban/server | |
parent | dfe4d02f6540fdb6879500589da798b621ea5ff2 (diff) | |
download | fail2ban-486214585e131f8c442e4f3a710f066cae7ea1e8.tar.gz |
Update extended status to accept additional argument, flavor
Default to as-in behavior, or flavor=="basic"
Diffstat (limited to 'fail2ban/server')
-rw-r--r-- | fail2ban/server/actions.py | 27 | ||||
-rw-r--r-- | fail2ban/server/filter.py | 8 | ||||
-rw-r--r-- | fail2ban/server/filtersystemd.py | 5 | ||||
-rw-r--r-- | fail2ban/server/jail.py | 16 | ||||
-rw-r--r-- | fail2ban/server/jailthread.py | 12 | ||||
-rw-r--r-- | fail2ban/server/server.py | 7 | ||||
-rw-r--r-- | fail2ban/server/transmitter.py | 6 |
7 files changed, 28 insertions, 53 deletions
diff --git a/fail2ban/server/actions.py b/fail2ban/server/actions.py index f4d5c18b..3a1c9579 100644 --- a/fail2ban/server/actions.py +++ b/fail2ban/server/actions.py @@ -370,22 +370,21 @@ class Actions(JailThread, Mapping): self._jail.name, name, aInfo, e, exc_info=logSys.getEffectiveLevel()<=logging.DEBUG) - @property - def status(self): + def status(self, flavor="basic"): """Status of current and total ban counts and current banned IP list. """ - ret = [("Currently banned", self.__banManager.size()), + # TODO: Allow this list to be printed as 'status' output + supported_flavors = ["basic", "cymru"] + if flavor is None or flavor not in supported_flavors: + logSys.warning("Unsupported extended jail status flavor %r. Supported: %s" % (flavor, supported_flavors)) + # Always print this information (basic) + ret = [("Currently banned", self.__banManager.size()), ("Total banned", self.__banManager.getBanTotal()), ("Banned IP list", self.__banManager.getBanList())] - return ret - - @property - def statusExtended(self): - """Jail status plus banned IPs' ASN, Country and RIR - """ - cymru_info = self.__banManager.getBanListExtendedCymruInfo() - ret = self.status +\ - [("Banned ASN list", self.__banManager.geBanListExtendedASN(cymru_info)), - ("Banned Country list", self.__banManager.geBanListExtendedCountry(cymru_info)), - ("Banned RIR list", self.__banManager.geBanListExtendedRIR(cymru_info))] + if flavor == "cymru": + cymru_info = self.__banManager.getBanListExtendedCymruInfo() + ret += \ + [("Banned ASN list", self.__banManager.geBanListExtendedASN(cymru_info)), + ("Banned Country list", self.__banManager.geBanListExtendedCountry(cymru_info)), + ("Banned RIR list", self.__banManager.geBanListExtendedRIR(cymru_info))] return ret diff --git a/fail2ban/server/filter.py b/fail2ban/server/filter.py index c886bf35..71b08a2d 100644 --- a/fail2ban/server/filter.py +++ b/fail2ban/server/filter.py @@ -529,8 +529,7 @@ class Filter(JailThread): logSys.error(e) return failList - @property - def status(self): + def status(self, flavor="basic"): """Status of failures detected by filter. """ ret = [("Currently failed", self.failManager.size()), @@ -686,11 +685,10 @@ class FileFilter(Filter): db.updateLog(self.jail, container) return True - @property - def status(self): + def status(self, flavor="basic"): """Status of Filter plus files being monitored. """ - ret = super(FileFilter, self).status + ret = super(FileFilter, self).status(flavor=flavor) path = [m.getFileName() for m in self.getLogPath()] ret.append(("File list", path)) return ret diff --git a/fail2ban/server/filtersystemd.py b/fail2ban/server/filtersystemd.py index 3a42f61c..d1150c57 100644 --- a/fail2ban/server/filtersystemd.py +++ b/fail2ban/server/filtersystemd.py @@ -259,9 +259,8 @@ class FilterSystemd(JournalFilter): # pragma: systemd no cover or "jailless") +" filter terminated") return True - @property - def status(self): - ret = super(FilterSystemd, self).status + def status(self, flavor="basic"): + ret = super(FilterSystemd, self).status(flavor=flavor) ret.append(("Journal matches", [" + ".join(" ".join(match) for match in self.__matches)])) return ret diff --git a/fail2ban/server/jail.py b/fail2ban/server/jail.py index df28945e..0271a190 100644 --- a/fail2ban/server/jail.py +++ b/fail2ban/server/jail.py @@ -174,22 +174,12 @@ class Jail: self.filter.idle = value self.actions.idle = value - @property - def status(self): + def status(self, flavor="basic"): """The status of the jail. """ return [ - ("Filter", self.filter.status), - ("Actions", self.actions.status), - ] - - @property - def statusExtended(self): - """The extended status of the jail. - """ - return [ - ("Filter", self.filter.status), - ("Actions", self.actions.statusExtended), + ("Filter", self.filter.status(flavor=flavor)), + ("Actions", self.actions.status(flavor=flavor)), ] def putFailTicket(self, ticket): diff --git a/fail2ban/server/jailthread.py b/fail2ban/server/jailthread.py index 123a2891..e4186739 100644 --- a/fail2ban/server/jailthread.py +++ b/fail2ban/server/jailthread.py @@ -26,7 +26,7 @@ __license__ = "GPL" import sys from threading import Thread -from abc import abstractproperty, abstractmethod +from abc import abstractmethod from ..helpers import excepthook @@ -66,18 +66,12 @@ class JailThread(Thread): excepthook(*sys.exc_info()) self.run = run_with_except_hook - @abstractproperty - def status(self): # pragma: no cover - abstract + @abstractmethod + def status(self, flavor="basic"): # pragma: no cover - abstract """Abstract - Should provide status information. """ pass - @abstractproperty - def statusExtended(self): # pragma: no cover - abstract - """Abstract - Should provide extended status information. - """ - pass - def start(self): """Sets active flag and starts thread. """ diff --git a/fail2ban/server/server.py b/fail2ban/server/server.py index c8840608..d57f2cce 100644 --- a/fail2ban/server/server.py +++ b/fail2ban/server/server.py @@ -320,11 +320,8 @@ class Server: finally: self.__lock.release() - def statusJail(self, name): - return self.__jails[name].status - - def statusJailExtended(self, name): - return self.__jails[name].statusExtended + def statusJail(self, name, flavor="basic"): + return self.__jails[name].status(flavor=flavor) # Logging diff --git a/fail2ban/server/transmitter.py b/fail2ban/server/transmitter.py index 05498646..58663590 100644 --- a/fail2ban/server/transmitter.py +++ b/fail2ban/server/transmitter.py @@ -335,8 +335,6 @@ class Transmitter: return self.__server.statusJail(name) elif len(command) == 2: name = command[0] - if command[1] == "extended": - return self.__server.statusJailExtended(name) - else: - raise Exception("Invalid command (invalid status extension)") + flavor = command[1] + return self.__server.statusJail(name, flavor=flavor) raise Exception("Invalid command (no status)") |