flush jail in database: bulk remove of all IPs in the database (e. g. reload --unban).

pull/2014/head
sebres 7 years ago
parent 1e39c2600c
commit 2c69c0e7e5

@ -450,7 +450,7 @@ class Actions(JailThread, Mapping):
"""
log = True
if actions is None:
logSys.debug("Flush ban list")
logSys.debug(" Flush ban list")
lst = self.__banManager.flushBanList()
else:
log = False # don't log "[jail] Unban ..." if removing actions only.
@ -465,16 +465,16 @@ class Actions(JailThread, Mapping):
else:
unbactions[name] = action
actions = unbactions
# flush the database also:
if db and self._jail.database is not None:
logSys.debug(" Flush jail in database")
self._jail.database.delBan(self._jail)
# unban each ticket with non-flasheable actions:
for ticket in lst:
# delete ip from database also:
if db and self._jail.database is not None:
ip = str(ticket.getIP())
self._jail.database.delBan(self._jail, ip)
# unban ip:
self.__unBan(ticket, actions=actions, log=log)
cnt += 1
logSys.debug("Unbanned %s, %s ticket(s) in %r",
logSys.debug(" Unbanned %s, %s ticket(s) in %r",
cnt, self.__banManager.size(), self._jail.name)
return cnt

@ -533,20 +533,26 @@ class Fail2BanDb(object):
ticket.getData()))
@commitandrollback
def delBan(self, cur, jail, ip):
"""Delete a ban from the database.
def delBan(self, cur, jail, *args):
"""Delete a single or multiple tickets from the database.
Parameters
----------
jail : Jail
Jail in which the ban has occurred.
ip : str
IP to be removed.
Jail in which the ticket(s) should be removed.
args : list of IP
IPs to be removed, if not given all tickets of jail will be removed.
"""
queryArgs = (jail.name, str(ip));
cur.execute(
"DELETE FROM bans WHERE jail = ? AND ip = ?",
queryArgs);
query = "DELETE FROM bans WHERE jail = ?"
queryArgs = [jail.name];
if not len(args):
cur.execute(query, queryArgs);
return
query += " AND ip = ?"
queryArgs.append('');
for ip in args:
queryArgs[1] = str(ip);
cur.execute(query, queryArgs);
@commitandrollback
def _getBans(self, cur, jail=None, bantime=None, ip=None):

Loading…
Cancel
Save