mirror of https://github.com/fail2ban/fail2ban
- Moved every locking statements in a try..finally block
git-svn-id: https://fail2ban.svn.sourceforge.net/svnroot/fail2ban/trunk@553 a942ae1a-1317-0410-a47c-b1dcaea8d6050.x
parent
f02a915de1
commit
6426cf75aa
|
@ -13,6 +13,7 @@ ver. 0.?.? (2007/??/??) - ???
|
||||||
- Added new filters/actions. Thanks to Yaroslav Halchenko
|
- Added new filters/actions. Thanks to Yaroslav Halchenko
|
||||||
- Added Suse init script and modified gentoo-initd. Thanks to
|
- Added Suse init script and modified gentoo-initd. Thanks to
|
||||||
Christian Rauch
|
Christian Rauch
|
||||||
|
- Moved every locking statements in a try..finally block
|
||||||
|
|
||||||
ver. 0.7.7 (2007/02/08) - release candidate
|
ver. 0.7.7 (2007/02/08) - release candidate
|
||||||
----------
|
----------
|
||||||
|
|
|
@ -62,9 +62,11 @@ class BanManager:
|
||||||
# @param value the time
|
# @param value the time
|
||||||
|
|
||||||
def setBanTime(self, value):
|
def setBanTime(self, value):
|
||||||
self.__lock.acquire()
|
try:
|
||||||
self.__banTime = int(value)
|
self.__lock.acquire()
|
||||||
self.__lock.release()
|
self.__banTime = int(value)
|
||||||
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
##
|
##
|
||||||
# Get the ban time.
|
# Get the ban time.
|
||||||
|
@ -85,9 +87,11 @@ class BanManager:
|
||||||
# @param value total number
|
# @param value total number
|
||||||
|
|
||||||
def setBanTotal(self, value):
|
def setBanTotal(self, value):
|
||||||
self.__lock.acquire()
|
try:
|
||||||
self.__banTotal = value
|
self.__lock.acquire()
|
||||||
self.__lock.release()
|
self.__banTotal = value
|
||||||
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
##
|
##
|
||||||
# Get the total number of banned address.
|
# Get the total number of banned address.
|
||||||
|
|
|
@ -42,44 +42,48 @@ class DateDetector:
|
||||||
self.__defTemplate = DateStrptime()
|
self.__defTemplate = DateStrptime()
|
||||||
|
|
||||||
def addDefaultTemplate(self):
|
def addDefaultTemplate(self):
|
||||||
# standard
|
try:
|
||||||
template = DateStrptime()
|
self.__lock.acquire()
|
||||||
template.setName("Month Day Hour:Minute:Second")
|
# standard
|
||||||
template.setRegex("^\S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2}")
|
template = DateStrptime()
|
||||||
template.setPattern("%b %d %H:%M:%S")
|
template.setName("Month Day Hour:Minute:Second")
|
||||||
self.__templates.append(template)
|
template.setRegex("^\S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2}")
|
||||||
# asctime
|
template.setPattern("%b %d %H:%M:%S")
|
||||||
template = DateStrptime()
|
self.__templates.append(template)
|
||||||
template.setName("Weekday Month Day Hour:Minute:Second Year")
|
# asctime
|
||||||
template.setRegex("\S{3} \S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2} \d{4}")
|
template = DateStrptime()
|
||||||
template.setPattern("%a %b %d %H:%M:%S %Y")
|
template.setName("Weekday Month Day Hour:Minute:Second Year")
|
||||||
self.__templates.append(template)
|
template.setRegex("\S{3} \S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2} \d{4}")
|
||||||
# simple date
|
template.setPattern("%a %b %d %H:%M:%S %Y")
|
||||||
template = DateStrptime()
|
self.__templates.append(template)
|
||||||
template.setName("Year/Month/Day Hour:Minute:Second")
|
# simple date
|
||||||
template.setRegex("\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}")
|
template = DateStrptime()
|
||||||
template.setPattern("%Y/%m/%d %H:%M:%S")
|
template.setName("Year/Month/Day Hour:Minute:Second")
|
||||||
self.__templates.append(template)
|
template.setRegex("\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}")
|
||||||
# Apache format [31/Oct/2006:09:22:55 -0000]
|
template.setPattern("%Y/%m/%d %H:%M:%S")
|
||||||
template = DateStrptime()
|
self.__templates.append(template)
|
||||||
template.setName("Day/Month/Year:Hour:Minute:Second")
|
# Apache format [31/Oct/2006:09:22:55 -0000]
|
||||||
template.setRegex("\d{2}/\S{3}/\d{4}:\d{2}:\d{2}:\d{2}")
|
template = DateStrptime()
|
||||||
template.setPattern("%d/%b/%Y:%H:%M:%S")
|
template.setName("Day/Month/Year:Hour:Minute:Second")
|
||||||
self.__templates.append(template)
|
template.setRegex("\d{2}/\S{3}/\d{4}:\d{2}:\d{2}:\d{2}")
|
||||||
# Exim 2006-12-21 06:43:20
|
template.setPattern("%d/%b/%Y:%H:%M:%S")
|
||||||
template = DateStrptime()
|
self.__templates.append(template)
|
||||||
template.setName("Year-Month-Day Hour:Minute:Second")
|
# Exim 2006-12-21 06:43:20
|
||||||
template.setRegex("\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}")
|
template = DateStrptime()
|
||||||
template.setPattern("%Y-%m-%d %H:%M:%S")
|
template.setName("Year-Month-Day Hour:Minute:Second")
|
||||||
self.__templates.append(template)
|
template.setRegex("\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}")
|
||||||
# TAI64N
|
template.setPattern("%Y-%m-%d %H:%M:%S")
|
||||||
template = DateTai64n()
|
self.__templates.append(template)
|
||||||
template.setName("TAI64N")
|
# TAI64N
|
||||||
self.__templates.append(template)
|
template = DateTai64n()
|
||||||
# Epoch
|
template.setName("TAI64N")
|
||||||
template = DateEpoch()
|
self.__templates.append(template)
|
||||||
template.setName("Epoch")
|
# Epoch
|
||||||
self.__templates.append(template)
|
template = DateEpoch()
|
||||||
|
template.setName("Epoch")
|
||||||
|
self.__templates.append(template)
|
||||||
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
def getTemplates(self):
|
def getTemplates(self):
|
||||||
return self.__templates
|
return self.__templates
|
||||||
|
@ -100,14 +104,15 @@ class DateDetector:
|
||||||
if self.__defTemplate.isValid():
|
if self.__defTemplate.isValid():
|
||||||
return self.__defTemplate.matchDate(line)
|
return self.__defTemplate.matchDate(line)
|
||||||
else:
|
else:
|
||||||
self.__lock.acquire()
|
try:
|
||||||
for template in self.__templates:
|
self.__lock.acquire()
|
||||||
match = template.matchDate(line)
|
for template in self.__templates:
|
||||||
if not match == None:
|
match = template.matchDate(line)
|
||||||
self.__lock.release()
|
if not match == None:
|
||||||
return match
|
return match
|
||||||
self.__lock.release()
|
return None
|
||||||
return None
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
def getTime(self, line):
|
def getTime(self, line):
|
||||||
if self.__defTemplate.isValid():
|
if self.__defTemplate.isValid():
|
||||||
|
@ -117,19 +122,20 @@ class DateDetector:
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
self.__lock.acquire()
|
try:
|
||||||
for template in self.__templates:
|
self.__lock.acquire()
|
||||||
try:
|
for template in self.__templates:
|
||||||
date = template.getDate(line)
|
try:
|
||||||
if date == None:
|
date = template.getDate(line)
|
||||||
continue
|
if date == None:
|
||||||
template.incHits()
|
continue
|
||||||
self.__lock.release()
|
template.incHits()
|
||||||
return date
|
return date
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
self.__lock.release()
|
return None
|
||||||
return None
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
def getUnixTime(self, line):
|
def getUnixTime(self, line):
|
||||||
date = self.getTime(line)
|
date = self.getTime(line)
|
||||||
|
@ -143,8 +149,11 @@ class DateDetector:
|
||||||
# in this object and thus should be called from time to time.
|
# in this object and thus should be called from time to time.
|
||||||
|
|
||||||
def sortTemplate(self):
|
def sortTemplate(self):
|
||||||
self.__lock.acquire()
|
try:
|
||||||
logSys.debug("Sorting the template list")
|
self.__lock.acquire()
|
||||||
self.__templates.sort(cmp = lambda x, y: cmp(x.getHits(), y.getHits()),
|
logSys.debug("Sorting the template list")
|
||||||
reverse=True)
|
self.__templates.sort(cmp = lambda x, y:
|
||||||
self.__lock.release()
|
cmp(x.getHits(), y.getHits()),
|
||||||
|
reverse = True)
|
||||||
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
|
@ -42,9 +42,11 @@ class FailManager:
|
||||||
self.__failTotal = 0
|
self.__failTotal = 0
|
||||||
|
|
||||||
def setFailTotal(self, value):
|
def setFailTotal(self, value):
|
||||||
self.__lock.acquire()
|
try:
|
||||||
self.__failTotal = value
|
self.__lock.acquire()
|
||||||
self.__lock.release()
|
self.__failTotal = value
|
||||||
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
def getFailTotal(self):
|
def getFailTotal(self):
|
||||||
try:
|
try:
|
||||||
|
@ -54,9 +56,11 @@ class FailManager:
|
||||||
self.__lock.release()
|
self.__lock.release()
|
||||||
|
|
||||||
def setMaxRetry(self, value):
|
def setMaxRetry(self, value):
|
||||||
self.__lock.acquire()
|
try:
|
||||||
self.__maxRetry = value
|
self.__lock.acquire()
|
||||||
self.__lock.release()
|
self.__maxRetry = value
|
||||||
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
def getMaxRetry(self):
|
def getMaxRetry(self):
|
||||||
try:
|
try:
|
||||||
|
@ -66,9 +70,11 @@ class FailManager:
|
||||||
self.__lock.release()
|
self.__lock.release()
|
||||||
|
|
||||||
def setMaxTime(self, value):
|
def setMaxTime(self, value):
|
||||||
self.__lock.acquire()
|
try:
|
||||||
self.__maxTime = value
|
self.__lock.acquire()
|
||||||
self.__lock.release()
|
self.__maxTime = value
|
||||||
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
def getMaxTime(self):
|
def getMaxTime(self):
|
||||||
try:
|
try:
|
||||||
|
@ -78,20 +84,22 @@ class FailManager:
|
||||||
self.__lock.release()
|
self.__lock.release()
|
||||||
|
|
||||||
def addFailure(self, ticket):
|
def addFailure(self, ticket):
|
||||||
self.__lock.acquire()
|
try:
|
||||||
ip = ticket.getIP()
|
self.__lock.acquire()
|
||||||
unixTime = ticket.getTime()
|
ip = ticket.getIP()
|
||||||
if self.__failList.has_key(ip):
|
unixTime = ticket.getTime()
|
||||||
fData = self.__failList[ip]
|
if self.__failList.has_key(ip):
|
||||||
fData.inc()
|
fData = self.__failList[ip]
|
||||||
fData.setLastTime(unixTime)
|
fData.inc()
|
||||||
else:
|
fData.setLastTime(unixTime)
|
||||||
fData = FailData()
|
else:
|
||||||
fData.inc()
|
fData = FailData()
|
||||||
fData.setLastTime(unixTime)
|
fData.inc()
|
||||||
self.__failList[ip] = fData
|
fData.setLastTime(unixTime)
|
||||||
self.__failTotal += 1
|
self.__failList[ip] = fData
|
||||||
self.__lock.release()
|
self.__failTotal += 1
|
||||||
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
def size(self):
|
def size(self):
|
||||||
try:
|
try:
|
||||||
|
@ -101,12 +109,14 @@ class FailManager:
|
||||||
self.__lock.release()
|
self.__lock.release()
|
||||||
|
|
||||||
def cleanup(self, time):
|
def cleanup(self, time):
|
||||||
self.__lock.acquire()
|
try:
|
||||||
tmp = self.__failList.copy()
|
self.__lock.acquire()
|
||||||
for item in tmp:
|
tmp = self.__failList.copy()
|
||||||
if tmp[item].getLastTime() < time - self.__maxTime:
|
for item in tmp:
|
||||||
self.__delFailure(item)
|
if tmp[item].getLastTime() < time - self.__maxTime:
|
||||||
self.__lock.release()
|
self.__delFailure(item)
|
||||||
|
finally:
|
||||||
|
self.__lock.release()
|
||||||
|
|
||||||
def __delFailure(self, ip):
|
def __delFailure(self, ip):
|
||||||
if self.__failList.has_key(ip):
|
if self.__failList.has_key(ip):
|
||||||
|
@ -129,4 +139,3 @@ class FailManager:
|
||||||
|
|
||||||
class FailManagerEmpty(Exception):
|
class FailManagerEmpty(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in New Issue