- 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,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.

View File

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

View File

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