summaryrefslogtreecommitdiff
path: root/fail2ban/server
diff options
context:
space:
mode:
authorLee Clemens <droid@lc-cs.com>2015-01-26 19:38:06 -0500
committerLee Clemens <droid@lc-cs.com>2015-01-26 19:38:06 -0500
commit486214585e131f8c442e4f3a710f066cae7ea1e8 (patch)
tree4cdad57b189eb7c194a8c40232b63d7581a9cf14 /fail2ban/server
parentdfe4d02f6540fdb6879500589da798b621ea5ff2 (diff)
downloadfail2ban-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.py27
-rw-r--r--fail2ban/server/filter.py8
-rw-r--r--fail2ban/server/filtersystemd.py5
-rw-r--r--fail2ban/server/jail.py16
-rw-r--r--fail2ban/server/jailthread.py12
-rw-r--r--fail2ban/server/server.py7
-rw-r--r--fail2ban/server/transmitter.py6
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)")