diff options
Diffstat (limited to 'fail2ban/server/jail.py')
-rw-r--r-- | fail2ban/server/jail.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/fail2ban/server/jail.py b/fail2ban/server/jail.py index 7e05a025..e70eaddd 100644 --- a/fail2ban/server/jail.py +++ b/fail2ban/server/jail.py @@ -28,7 +28,7 @@ import Queue from .actions import Actions from ..client.jailreader import JailReader -from ..helpers import getLogger +from ..helpers import getLogger, MyTime # Gets the instance of the logger. logSys = getLogger(__name__) @@ -194,7 +194,7 @@ class Jail(object): Used by filter to add a failure for banning. """ self.__queue.put(ticket) - if not ticket.getRestored() and self.database is not None: + if not ticket.restored and self.database is not None: self.database.addBan(self, ticket) def getFailTicket(self): @@ -203,7 +203,8 @@ class Jail(object): Used by actions to get a failure for banning. """ try: - return self.__queue.get(False) + ticket = self.__queue.get(False) + return ticket except Queue.Empty: return False @@ -217,7 +218,17 @@ class Jail(object): #logSys.debug('restored ticket: %s', ticket) if not self.filter.inIgnoreIPList(ticket.getIP(), log_ignore=True): # mark ticked was restored from database - does not put it again into db: - ticket.setRestored(True) + ticket.restored = True + # correct start time / ban time (by the same end of ban): + btm = ticket.getBanTime(forbantime) + diftm = MyTime.time() - ticket.getTime() + if btm != -1 and diftm > 0: + btm -= diftm + # ignore obsolete tickets: + if btm != -1 and btm <= 0: + continue + ticket.setTime(MyTime.time()) + ticket.setBanTime(btm) self.putFailTicket(ticket) except Exception as e: # pragma: no cover logSys.error('%s', e, exc_info=logSys.getEffectiveLevel()<=logging.DEBUG) |