- 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-b1dcaea8d605
0.x
Cyril Jaquier 2007-02-25 23:53:22 +00:00
parent f02a915de1
commit 6426cf75aa
4 changed files with 123 additions and 100 deletions

View File

@ -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
---------- ----------

View File

@ -62,8 +62,10 @@ class BanManager:
# @param value the time # @param value the time
def setBanTime(self, value): def setBanTime(self, value):
try:
self.__lock.acquire() self.__lock.acquire()
self.__banTime = int(value) self.__banTime = int(value)
finally:
self.__lock.release() self.__lock.release()
## ##
@ -85,8 +87,10 @@ class BanManager:
# @param value total number # @param value total number
def setBanTotal(self, value): def setBanTotal(self, value):
try:
self.__lock.acquire() self.__lock.acquire()
self.__banTotal = value self.__banTotal = value
finally:
self.__lock.release() self.__lock.release()
## ##

View File

@ -42,6 +42,8 @@ class DateDetector:
self.__defTemplate = DateStrptime() self.__defTemplate = DateStrptime()
def addDefaultTemplate(self): def addDefaultTemplate(self):
try:
self.__lock.acquire()
# standard # standard
template = DateStrptime() template = DateStrptime()
template.setName("Month Day Hour:Minute:Second") template.setName("Month Day Hour:Minute:Second")
@ -80,6 +82,8 @@ class DateDetector:
template = DateEpoch() template = DateEpoch()
template.setName("Epoch") template.setName("Epoch")
self.__templates.append(template) 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:
try:
self.__lock.acquire() self.__lock.acquire()
for template in self.__templates: for template in self.__templates:
match = template.matchDate(line) match = template.matchDate(line)
if not match == None: if not match == None:
self.__lock.release()
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,6 +122,7 @@ class DateDetector:
except ValueError: except ValueError:
return None return None
else: else:
try:
self.__lock.acquire() self.__lock.acquire()
for template in self.__templates: for template in self.__templates:
try: try:
@ -124,12 +130,12 @@ class DateDetector:
if date == None: if date == None:
continue continue
template.incHits() template.incHits()
self.__lock.release()
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):
try:
self.__lock.acquire() self.__lock.acquire()
logSys.debug("Sorting the template list") logSys.debug("Sorting the template list")
self.__templates.sort(cmp = lambda x, y: cmp(x.getHits(), y.getHits()), self.__templates.sort(cmp = lambda x, y:
cmp(x.getHits(), y.getHits()),
reverse = True) reverse = True)
finally:
self.__lock.release() self.__lock.release()

View File

@ -42,8 +42,10 @@ class FailManager:
self.__failTotal = 0 self.__failTotal = 0
def setFailTotal(self, value): def setFailTotal(self, value):
try:
self.__lock.acquire() self.__lock.acquire()
self.__failTotal = value self.__failTotal = value
finally:
self.__lock.release() self.__lock.release()
def getFailTotal(self): def getFailTotal(self):
@ -54,8 +56,10 @@ class FailManager:
self.__lock.release() self.__lock.release()
def setMaxRetry(self, value): def setMaxRetry(self, value):
try:
self.__lock.acquire() self.__lock.acquire()
self.__maxRetry = value self.__maxRetry = value
finally:
self.__lock.release() self.__lock.release()
def getMaxRetry(self): def getMaxRetry(self):
@ -66,8 +70,10 @@ class FailManager:
self.__lock.release() self.__lock.release()
def setMaxTime(self, value): def setMaxTime(self, value):
try:
self.__lock.acquire() self.__lock.acquire()
self.__maxTime = value self.__maxTime = value
finally:
self.__lock.release() self.__lock.release()
def getMaxTime(self): def getMaxTime(self):
@ -78,6 +84,7 @@ class FailManager:
self.__lock.release() self.__lock.release()
def addFailure(self, ticket): def addFailure(self, ticket):
try:
self.__lock.acquire() self.__lock.acquire()
ip = ticket.getIP() ip = ticket.getIP()
unixTime = ticket.getTime() unixTime = ticket.getTime()
@ -91,6 +98,7 @@ class FailManager:
fData.setLastTime(unixTime) fData.setLastTime(unixTime)
self.__failList[ip] = fData self.__failList[ip] = fData
self.__failTotal += 1 self.__failTotal += 1
finally:
self.__lock.release() self.__lock.release()
def size(self): def size(self):
@ -101,11 +109,13 @@ class FailManager:
self.__lock.release() self.__lock.release()
def cleanup(self, time): def cleanup(self, time):
try:
self.__lock.acquire() self.__lock.acquire()
tmp = self.__failList.copy() tmp = self.__failList.copy()
for item in tmp: for item in tmp:
if tmp[item].getLastTime() < time - self.__maxTime: if tmp[item].getLastTime() < time - self.__maxTime:
self.__delFailure(item) self.__delFailure(item)
finally:
self.__lock.release() self.__lock.release()
def __delFailure(self, ip): def __delFailure(self, ip):
@ -129,4 +139,3 @@ class FailManager:
class FailManagerEmpty(Exception): class FailManagerEmpty(Exception):
pass pass