From adefcf590683c26392ba2e5e4b2f1521343005d0 Mon Sep 17 00:00:00 2001
From: Nicolas KAROLAK <nicolas@karolak.fr>
Date: Mon, 29 Apr 2019 19:30:40 +0200
Subject: [PATCH] check that fail2ban is installed, disable warning on bans

---
 tests/test_fail2ban.py | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/tests/test_fail2ban.py b/tests/test_fail2ban.py
index 6d30a34e..fa2a9dab 100755
--- a/tests/test_fail2ban.py
+++ b/tests/test_fail2ban.py
@@ -1,13 +1,14 @@
 #!/usr/bin/env python3
+
 """
 Criticality: Low
 Checks the current state of the fail2ban service.
 """
 
 from pathlib import Path
+import subprocess
 import sys
 
-
 sys.path.append(str(Path(__file__).parents[1].resolve()))
 
 # pylint: disable=wrong-import-position
@@ -45,7 +46,9 @@ def get_service_state(name: str) -> tuple:
     else:
         u.log("Using dbus to get current state.")
         bus = dbus.SystemBus()
-        systemd = bus.get_object("org.freedesktop.systemd1", "/org/freedesktop/systemd1")
+        systemd = bus.get_object(
+            "org.freedesktop.systemd1", "/org/freedesktop/systemd1"
+        )
         manager = dbus.Interface(systemd, "org.freedesktop.systemd1.Manager")
         unit = manager.LoadUnit("{}.service".format(name))
         proxy = bus.get_object("org.freedesktop.systemd1", str(unit))
@@ -120,6 +123,10 @@ def check_jail_banned(name: str) -> int:
 def main():
     """Run all checks and exits with corresponding exit code."""
 
+    if subprocess.call(["which", "fail2ban-server"], stdout=subprocess.DEVNULL) != 0:
+        u.info("fail2ban not installed, skipping test")
+        exit(2)
+
     # init
     errors = 0
     warnings = 0
@@ -129,7 +136,7 @@ def main():
         u.warning("fail2ban is not running")
         warnings += 1
         # warning exit if not running
-        sys.exit(3)
+        exit(3)
     else:
         u.success("fail2ban is running")
 
@@ -139,15 +146,14 @@ def main():
         u.info("{} jail is running".format(jail))
         banned = check_jail_banned(jail)
         if banned > 0:
-            u.warning("there is {} banned host in {} jail".format(banned, jail))
-            warnings += 1
+            u.info("there is {} banned host in {} jail".format(banned, jail))
 
     if errors:
-        sys.exit(1)
+        exit(1)
     elif warnings:
-        sys.exit(3)
-    else:
-        sys.exit(0)
+        exit(3)
+
+    exit(0)
 
 
 if __name__ == "__main__":
-- 
GitLab