From 1d6b546658b9bdbc74a190b7ea3ba6534aa40e44 Mon Sep 17 00:00:00 2001 From: sebres Date: Mon, 5 Sep 2016 16:37:32 +0200 Subject: [PATCH] sleep a little bit in error case (to get around time-related errors, e.g. something like log-rotate, etc.) --- fail2ban/server/filter.py | 5 ++++- fail2ban/tests/filtertestcase.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/fail2ban/server/filter.py b/fail2ban/server/filter.py index 6be71355..1f2950f3 100644 --- a/fail2ban/server/filter.py +++ b/fail2ban/server/filter.py @@ -29,6 +29,7 @@ import logging import os import re import sys +import time from .failmanager import FailManagerEmpty, FailManager from .ipdns import DNSUtils, IPAddr @@ -443,8 +444,10 @@ class Filter(JailThread): except Exception as e: logSys.error("Failed to process line: %r, caught exception: %r", line, e, exc_info=logSys.getEffectiveLevel()<=logging.DEBUG) - # incr error counter, stop processing this : + # incr error counter, stop processing (going idle) after 100th error : self.__errors += 1 + # sleep a little bit (to get around time-related errors): + time.sleep(self.sleeptime) if self.__errors >= 100: logSys.error("Too many errors at once (%s), going idle", self.__errors) self.__errors //= 2 diff --git a/fail2ban/tests/filtertestcase.py b/fail2ban/tests/filtertestcase.py index ee9f9fb0..2c9eddf3 100644 --- a/fail2ban/tests/filtertestcase.py +++ b/fail2ban/tests/filtertestcase.py @@ -605,6 +605,7 @@ class LogFileMonitor(LogCaptureTestCase): self.assertLogged('Unable to open %s' % self.name) def testErrorProcessLine(self): + self.filter.sleeptime /= 1000.0 ## produce error with not callable processLine: _org_processLine = self.filter.processLine self.filter.processLine = None