From 9f0b6382bf489003a169196a847c8fa8957ca5a7 Mon Sep 17 00:00:00 2001 From: sebres Date: Sun, 30 Mar 2025 01:10:28 +0100 Subject: [PATCH] idle must be before anything else in loop (to avoid endless errors if something continuously fails and filter will be placed to idle state after 100 unhandled errors) --- fail2ban/server/filtersystemd.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/fail2ban/server/filtersystemd.py b/fail2ban/server/filtersystemd.py index 9c94c0dd..fc894457 100644 --- a/fail2ban/server/filtersystemd.py +++ b/fail2ban/server/filtersystemd.py @@ -355,6 +355,14 @@ class FilterSystemd(JournalFilter): # pragma: systemd no cover while self.active: # wait for records (or for timeout in sleeptime seconds): try: + if self.idle: + # because journal.wait will returns immediately if we have records in journal, + # just wait a little bit here for not idle, to prevent hi-load: + if not Utils.wait_for(lambda: not self.active or not self.idle, + self.sleeptime * 10, self.sleeptime + ): + self.ticks += 1 + continue ## wait for entries using journal.wait: if wcode == journal.NOP and self.inOperation: ## todo: find better method as wait_for to break (e.g. notify) journal.wait(self.sleeptime), @@ -388,14 +396,6 @@ class FilterSystemd(JournalFilter): # pragma: systemd no cover logSys.log(logging.MSG, "[%s] Journal reader seems to be offline, reopen journal", self.jailName) self._reopenJournal() wcode = journal.NOP - if self.idle: - # because journal.wait will returns immediately if we have records in journal, - # just wait a little bit here for not idle, to prevent hi-load: - if not Utils.wait_for(lambda: not self.active or not self.idle, - self.sleeptime * 10, self.sleeptime - ): - self.ticks += 1 - continue self.__modified = 0 while self.active: logentry = None