mirror of https://github.com/fail2ban/fail2ban
- Removed Python 2.4 code. Need more testing
git-svn-id: https://fail2ban.svn.sourceforge.net/svnroot/fail2ban/trunk@583 a942ae1a-1317-0410-a47c-b1dcaea8d6050.x
parent
e39d79b013
commit
c1f5c4d189
|
@ -4,9 +4,13 @@
|
||||||
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
||||||
|
|
||||||
=============================================================
|
=============================================================
|
||||||
Fail2Ban (version 0.8.0) 2007/05/03
|
Fail2Ban (version 0.9.0) 2007/??/??
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
|
ver. 0.9.0 (2007/??/??) - alpha
|
||||||
|
----------
|
||||||
|
- Removed Python 2.4 code. Need more testing
|
||||||
|
|
||||||
ver. 0.8.0 (2007/05/03) - stable
|
ver. 0.8.0 (2007/05/03) - stable
|
||||||
----------
|
----------
|
||||||
- Fixed RedHat init script. Thanks to Jonathan Underwood
|
- Fixed RedHat init script. Thanks to Jonathan Underwood
|
||||||
|
|
|
@ -39,14 +39,16 @@ class ConfigReader(SafeConfigParser):
|
||||||
SafeConfigParser.__init__(self)
|
SafeConfigParser.__init__(self)
|
||||||
self.__opts = None
|
self.__opts = None
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def setBaseDir(folderName):
|
def setBaseDir(folderName):
|
||||||
path = folderName.rstrip('/')
|
path = folderName.rstrip('/')
|
||||||
ConfigReader.BASE_DIRECTORY = path + '/'
|
ConfigReader.BASE_DIRECTORY = path + '/'
|
||||||
|
setBaseDir = staticmethod(setBaseDir)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def getBaseDir():
|
def getBaseDir():
|
||||||
return ConfigReader.BASE_DIRECTORY
|
return ConfigReader.BASE_DIRECTORY
|
||||||
|
getBaseDir = staticmethod(getBaseDir)
|
||||||
|
|
||||||
def read(self, filename):
|
def read(self, filename):
|
||||||
basename = ConfigReader.BASE_DIRECTORY + filename
|
basename = ConfigReader.BASE_DIRECTORY + filename
|
||||||
|
|
|
@ -40,13 +40,15 @@ class Configurator:
|
||||||
self.__fail2ban = Fail2banReader()
|
self.__fail2ban = Fail2banReader()
|
||||||
self.__jails = JailsReader()
|
self.__jails = JailsReader()
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def setBaseDir(folderName):
|
def setBaseDir(folderName):
|
||||||
ConfigReader.setBaseDir(folderName)
|
ConfigReader.setBaseDir(folderName)
|
||||||
|
setBaseDir = staticmethod(setBaseDir)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def getBaseDir():
|
def getBaseDir():
|
||||||
return ConfigReader.getBaseDir()
|
return ConfigReader.getBaseDir()
|
||||||
|
getBaseDir = staticmethod(getBaseDir)
|
||||||
|
|
||||||
def readEarly(self):
|
def readEarly(self):
|
||||||
self.__fail2ban.read()
|
self.__fail2ban.read()
|
||||||
|
|
|
@ -47,7 +47,7 @@ class CSocket:
|
||||||
self.__csock.close()
|
self.__csock.close()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def receive(sock):
|
def receive(sock):
|
||||||
msg = ''
|
msg = ''
|
||||||
while msg.rfind(CSocket.END_STRING) == -1:
|
while msg.rfind(CSocket.END_STRING) == -1:
|
||||||
|
@ -56,3 +56,4 @@ class CSocket:
|
||||||
raise RuntimeError, "socket connection broken"
|
raise RuntimeError, "socket connection broken"
|
||||||
msg = msg + chunk
|
msg = msg + chunk
|
||||||
return loads(msg)
|
return loads(msg)
|
||||||
|
receive = staticmethod(receive)
|
||||||
|
|
|
@ -129,7 +129,7 @@ class JailReader(ConfigReader):
|
||||||
stream.insert(0, ["add", self.__name, backend])
|
stream.insert(0, ["add", self.__name, backend])
|
||||||
return stream
|
return stream
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def splitAction(action):
|
def splitAction(action):
|
||||||
m = JailReader.actionCRE.match(action)
|
m = JailReader.actionCRE.match(action)
|
||||||
d = dict()
|
d = dict()
|
||||||
|
@ -165,3 +165,4 @@ class JailReader(ConfigReader):
|
||||||
except IndexError:
|
except IndexError:
|
||||||
logSys.error("Invalid argument %s in '%s'" % (p, m.group(2)))
|
logSys.error("Invalid argument %s in '%s'" % (p, m.group(2)))
|
||||||
return [m.group(1), d]
|
return [m.group(1), d]
|
||||||
|
splitAction = staticmethod(splitAction)
|
||||||
|
|
|
@ -26,7 +26,8 @@ __copyright__ = "Copyright (c) 2004 Cyril Jaquier"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import sys, string, os, pickle, re, logging, signal
|
import sys, string, os, pickle, re, logging, signal
|
||||||
import getopt, time, readline, shlex, socket
|
import getopt, time, shlex, socket
|
||||||
|
#import readline
|
||||||
|
|
||||||
# Inserts our own modules path first in the list
|
# Inserts our own modules path first in the list
|
||||||
# fix for bug #343821
|
# fix for bug #343821
|
||||||
|
@ -325,6 +326,11 @@ class Fail2banClient:
|
||||||
|
|
||||||
# Interactive mode
|
# Interactive mode
|
||||||
if self.__conf["interactive"]:
|
if self.__conf["interactive"]:
|
||||||
|
try:
|
||||||
|
import readline
|
||||||
|
except ImportError:
|
||||||
|
logSys.error("Readline not available")
|
||||||
|
return False
|
||||||
try:
|
try:
|
||||||
ret = True
|
ret = True
|
||||||
if len(args) > 0:
|
if len(args) > 0:
|
||||||
|
@ -357,11 +363,12 @@ class Fail2banClient:
|
||||||
self.__stream = self.__configurator.getConfigStream()
|
self.__stream = self.__configurator.getConfigStream()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def dumpConfig(cmd):
|
def dumpConfig(cmd):
|
||||||
for c in cmd:
|
for c in cmd:
|
||||||
print c
|
print c
|
||||||
return True
|
return True
|
||||||
|
dumpConfig = staticmethod(dumpConfig)
|
||||||
|
|
||||||
|
|
||||||
class ServerExecutionException(Exception):
|
class ServerExecutionException(Exception):
|
||||||
|
|
|
@ -79,7 +79,7 @@ class Fail2banRegex:
|
||||||
logging.getLogger("fail2ban").addHandler(self.__hdlr)
|
logging.getLogger("fail2ban").addHandler(self.__hdlr)
|
||||||
logging.getLogger("fail2ban").setLevel(logging.ERROR)
|
logging.getLogger("fail2ban").setLevel(logging.ERROR)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def dispVersion():
|
def dispVersion():
|
||||||
print "Fail2Ban v" + version
|
print "Fail2Ban v" + version
|
||||||
print
|
print
|
||||||
|
@ -89,8 +89,9 @@ class Fail2banRegex:
|
||||||
print
|
print
|
||||||
print "Written by Cyril Jaquier <lostcontrol@users.sourceforge.net>."
|
print "Written by Cyril Jaquier <lostcontrol@users.sourceforge.net>."
|
||||||
print "Many contributions by Yaroslav O. Halchenko <debian@onerussian.com>."
|
print "Many contributions by Yaroslav O. Halchenko <debian@onerussian.com>."
|
||||||
|
dispVersion = staticmethod(dispVersion)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def dispUsage():
|
def dispUsage():
|
||||||
print "Usage: "+sys.argv[0]+" [OPTIONS] <LOG> <REGEX>"
|
print "Usage: "+sys.argv[0]+" [OPTIONS] <LOG> <REGEX>"
|
||||||
print
|
print
|
||||||
|
@ -112,6 +113,7 @@ class Fail2banRegex:
|
||||||
print " filename path to a filter file (filter.d/sshd.conf)"
|
print " filename path to a filter file (filter.d/sshd.conf)"
|
||||||
print
|
print
|
||||||
print "Report bugs to <lostcontrol@users.sourceforge.net>"
|
print "Report bugs to <lostcontrol@users.sourceforge.net>"
|
||||||
|
dispUsage = staticmethod(dispUsage)
|
||||||
|
|
||||||
def getCmdLineOptions(self, optList):
|
def getCmdLineOptions(self, optList):
|
||||||
""" Gets the command line options
|
""" Gets the command line options
|
||||||
|
@ -124,9 +126,10 @@ class Fail2banRegex:
|
||||||
self.dispVersion()
|
self.dispVersion()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def logIsFile(value):
|
def logIsFile(value):
|
||||||
return os.path.isfile(value)
|
return os.path.isfile(value)
|
||||||
|
logIsFile = staticmethod(logIsFile)
|
||||||
|
|
||||||
def readRegex(self, value):
|
def readRegex(self, value):
|
||||||
if os.path.isfile(value):
|
if os.path.isfile(value):
|
||||||
|
|
|
@ -231,7 +231,7 @@ class Action:
|
||||||
# @param aInfo the properties
|
# @param aInfo the properties
|
||||||
# @return a string
|
# @return a string
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def replaceTag(query, aInfo):
|
def replaceTag(query, aInfo):
|
||||||
""" Replace tags in query
|
""" Replace tags in query
|
||||||
"""
|
"""
|
||||||
|
@ -241,6 +241,7 @@ class Action:
|
||||||
# New line
|
# New line
|
||||||
string = string.replace("<br>", '\n')
|
string = string.replace("<br>", '\n')
|
||||||
return string
|
return string
|
||||||
|
replaceTag = staticmethod(replaceTag)
|
||||||
|
|
||||||
##
|
##
|
||||||
# Executes a command with preliminary checks and substitutions.
|
# Executes a command with preliminary checks and substitutions.
|
||||||
|
@ -297,7 +298,7 @@ class Action:
|
||||||
# @param realCmd the command to execute
|
# @param realCmd the command to execute
|
||||||
# @return True if the command succeeded
|
# @return True if the command succeeded
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def executeCmd(realCmd):
|
def executeCmd(realCmd):
|
||||||
logSys.debug(realCmd)
|
logSys.debug(realCmd)
|
||||||
try:
|
try:
|
||||||
|
@ -312,3 +313,4 @@ class Action:
|
||||||
except OSError, e:
|
except OSError, e:
|
||||||
logSys.error("%s failed with %s" % (realCmd, e))
|
logSys.error("%s failed with %s" % (realCmd, e))
|
||||||
return False
|
return False
|
||||||
|
executeCmd = staticmethod(executeCmd)
|
||||||
|
|
|
@ -125,7 +125,7 @@ class BanManager:
|
||||||
# @param ticket the FailTicket
|
# @param ticket the FailTicket
|
||||||
# @return a BanTicket
|
# @return a BanTicket
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def createBanTicket(ticket):
|
def createBanTicket(ticket):
|
||||||
ip = ticket.getIP()
|
ip = ticket.getIP()
|
||||||
#lastTime = ticket.getTime()
|
#lastTime = ticket.getTime()
|
||||||
|
@ -133,6 +133,7 @@ class BanManager:
|
||||||
banTicket = BanTicket(ip, lastTime)
|
banTicket = BanTicket(ip, lastTime)
|
||||||
banTicket.setAttempt(ticket.getAttempt())
|
banTicket.setAttempt(ticket.getAttempt())
|
||||||
return banTicket
|
return banTicket
|
||||||
|
createBanTicket = staticmethod(createBanTicket)
|
||||||
|
|
||||||
##
|
##
|
||||||
# Add a ban ticket.
|
# Add a ban ticket.
|
||||||
|
|
|
@ -158,8 +158,7 @@ class DateDetector:
|
||||||
try:
|
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:
|
self.__templates.sort(lambda x, y: cmp(x.getHits(), y.getHits()))
|
||||||
cmp(x.getHits(), y.getHits()),
|
self.__templates.reverse()
|
||||||
reverse = True)
|
|
||||||
finally:
|
finally:
|
||||||
self.__lock.release()
|
self.__lock.release()
|
||||||
|
|
|
@ -54,13 +54,14 @@ class DateStrptime(DateTemplate):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
DateTemplate.__init__(self)
|
DateTemplate.__init__(self)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def convertLocale(date):
|
def convertLocale(date):
|
||||||
for t in DateStrptime.TABLE:
|
for t in DateStrptime.TABLE:
|
||||||
for m in DateStrptime.TABLE[t]:
|
for m in DateStrptime.TABLE[t]:
|
||||||
if date.find(m) >= 0:
|
if date.find(m) >= 0:
|
||||||
return date.replace(m, t)
|
return date.replace(m, t)
|
||||||
return date
|
return date
|
||||||
|
convertLocale = staticmethod(convertLocale)
|
||||||
|
|
||||||
def getDate(self, line):
|
def getDate(self, line):
|
||||||
date = None
|
date = None
|
||||||
|
|
|
@ -477,10 +477,11 @@ import socket, struct
|
||||||
|
|
||||||
class DNSUtils:
|
class DNSUtils:
|
||||||
|
|
||||||
DNS_CRE = re.compile("(?:(?:\w|-)+\.){2,}\w+")
|
#DNS_CRE = re.compile("(?:(?:\w|-)+\.){2,}\w+")
|
||||||
|
DNS_CRE = re.compile("\S+")
|
||||||
IP_CRE = re.compile("(?:\d{1,3}\.){3}\d{1,3}")
|
IP_CRE = re.compile("(?:\d{1,3}\.){3}\d{1,3}")
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def dnsToIp(dns):
|
def dnsToIp(dns):
|
||||||
""" Convert a DNS into an IP address using the Python socket module.
|
""" Convert a DNS into an IP address using the Python socket module.
|
||||||
Thanks to Kevin Drapel.
|
Thanks to Kevin Drapel.
|
||||||
|
@ -491,8 +492,9 @@ class DNSUtils:
|
||||||
logSys.warn("Unable to find a corresponding IP address for %s"
|
logSys.warn("Unable to find a corresponding IP address for %s"
|
||||||
% dns)
|
% dns)
|
||||||
return list()
|
return list()
|
||||||
|
dnsToIp = staticmethod(dnsToIp)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def textToDns(text):
|
def textToDns(text):
|
||||||
""" Search for possible DNS in an arbitrary text.
|
""" Search for possible DNS in an arbitrary text.
|
||||||
Thanks to Tom Pike.
|
Thanks to Tom Pike.
|
||||||
|
@ -502,8 +504,9 @@ class DNSUtils:
|
||||||
return match
|
return match
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
textToDns = staticmethod(textToDns)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def searchIP(text):
|
def searchIP(text):
|
||||||
""" Search if an IP address if directly available and return
|
""" Search if an IP address if directly available and return
|
||||||
it.
|
it.
|
||||||
|
@ -513,8 +516,9 @@ class DNSUtils:
|
||||||
return match
|
return match
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
searchIP = staticmethod(searchIP)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def isValidIP(string):
|
def isValidIP(string):
|
||||||
""" Return true if str is a valid IP
|
""" Return true if str is a valid IP
|
||||||
"""
|
"""
|
||||||
|
@ -524,8 +528,9 @@ class DNSUtils:
|
||||||
return True
|
return True
|
||||||
except socket.error:
|
except socket.error:
|
||||||
return False
|
return False
|
||||||
|
isValidIP = staticmethod(isValidIP)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def textToIp(text):
|
def textToIp(text):
|
||||||
""" Return the IP of DNS found in a given text.
|
""" Return the IP of DNS found in a given text.
|
||||||
"""
|
"""
|
||||||
|
@ -544,8 +549,9 @@ class DNSUtils:
|
||||||
for e in ip:
|
for e in ip:
|
||||||
ipList.append(e)
|
ipList.append(e)
|
||||||
return ipList
|
return ipList
|
||||||
|
textToIp = staticmethod(textToIp)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def cidr(i, n):
|
def cidr(i, n):
|
||||||
""" Convert an IP address string with a CIDR mask into a 32-bit
|
""" Convert an IP address string with a CIDR mask into a 32-bit
|
||||||
integer.
|
integer.
|
||||||
|
@ -553,15 +559,18 @@ class DNSUtils:
|
||||||
# 32-bit IPv4 address mask
|
# 32-bit IPv4 address mask
|
||||||
MASK = 0xFFFFFFFFL
|
MASK = 0xFFFFFFFFL
|
||||||
return ~(MASK >> n) & MASK & DNSUtils.addr2bin(i)
|
return ~(MASK >> n) & MASK & DNSUtils.addr2bin(i)
|
||||||
|
cidr = staticmethod(cidr)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def addr2bin(string):
|
def addr2bin(string):
|
||||||
""" Convert a string IPv4 address into an unsigned integer.
|
""" Convert a string IPv4 address into an unsigned integer.
|
||||||
"""
|
"""
|
||||||
return struct.unpack("!L", socket.inet_aton(string))[0]
|
return struct.unpack("!L", socket.inet_aton(string))[0]
|
||||||
|
addr2bin = staticmethod(addr2bin)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def bin2addr(addr):
|
def bin2addr(addr):
|
||||||
""" Convert a numeric IPv4 address into string n.n.n.n form.
|
""" Convert a numeric IPv4 address into string n.n.n.n form.
|
||||||
"""
|
"""
|
||||||
return socket.inet_ntoa(struct.pack("!L", addr))
|
return socket.inet_ntoa(struct.pack("!L", addr))
|
||||||
|
bin2addr = staticmethod(bin2addr)
|
||||||
|
|
|
@ -46,31 +46,34 @@ class MyTime:
|
||||||
#
|
#
|
||||||
# @param t the time to set or None
|
# @param t the time to set or None
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def setTime(t):
|
def setTime(t):
|
||||||
MyTime.myTime = t
|
MyTime.myTime = t
|
||||||
|
setTime = staticmethod(setTime)
|
||||||
|
|
||||||
##
|
##
|
||||||
# Equivalent to time.time()
|
# Equivalent to time.time()
|
||||||
#
|
#
|
||||||
# @return time.time() if setTime was called with None
|
# @return time.time() if setTime was called with None
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def time():
|
def time():
|
||||||
if MyTime.myTime == None:
|
if MyTime.myTime == None:
|
||||||
return time.time()
|
return time.time()
|
||||||
else:
|
else:
|
||||||
return MyTime.myTime
|
return MyTime.myTime
|
||||||
|
time = staticmethod(time)
|
||||||
|
|
||||||
##
|
##
|
||||||
# Equivalent to time.gmtime()
|
# Equivalent to time.gmtime()
|
||||||
#
|
#
|
||||||
# @return time.gmtime() if setTime was called with None
|
# @return time.gmtime() if setTime was called with None
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def gmtime():
|
def gmtime():
|
||||||
if MyTime.myTime == None:
|
if MyTime.myTime == None:
|
||||||
return time.gmtime()
|
return time.gmtime()
|
||||||
else:
|
else:
|
||||||
return time.gmtime(MyTime.myTime)
|
return time.gmtime(MyTime.myTime)
|
||||||
|
gmtime = staticmethod(gmtime)
|
||||||
|
|
|
@ -116,12 +116,13 @@ class SocketWorker(Thread):
|
||||||
self.__csock.close()
|
self.__csock.close()
|
||||||
logSys.debug("Connection closed")
|
logSys.debug("Connection closed")
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def __send(sock, msg):
|
def __send(sock, msg):
|
||||||
obj = dumps(msg, HIGHEST_PROTOCOL)
|
obj = dumps(msg, HIGHEST_PROTOCOL)
|
||||||
sock.send(obj + SSocket.END_STRING)
|
sock.send(obj + SSocket.END_STRING)
|
||||||
|
__send = staticmethod(__send)
|
||||||
|
|
||||||
@staticmethod
|
#@staticmethod
|
||||||
def __receive(sock):
|
def __receive(sock):
|
||||||
msg = ''
|
msg = ''
|
||||||
while msg.rfind(SSocket.END_STRING) == -1:
|
while msg.rfind(SSocket.END_STRING) == -1:
|
||||||
|
@ -130,6 +131,7 @@ class SocketWorker(Thread):
|
||||||
raise RuntimeError, "socket connection broken"
|
raise RuntimeError, "socket connection broken"
|
||||||
msg = msg + chunk
|
msg = msg + chunk
|
||||||
return loads(msg)
|
return loads(msg)
|
||||||
|
__receive = staticmethod(__receive)
|
||||||
|
|
||||||
|
|
||||||
class SSocketErrorException(Exception):
|
class SSocketErrorException(Exception):
|
||||||
|
|
|
@ -43,5 +43,5 @@ class ExecuteAction(unittest.TestCase):
|
||||||
self.__action.setActionBan("echo -n")
|
self.__action.setActionBan("echo -n")
|
||||||
self.__action.setActionCheck("[ -e /tmp/fail2ban.test ]")
|
self.__action.setActionCheck("[ -e /tmp/fail2ban.test ]")
|
||||||
|
|
||||||
self.assertTrue(self.__action.execActionBan(None))
|
self.failUnless(self.__action.execActionBan(None))
|
||||||
|
|
|
@ -34,7 +34,7 @@ class AddFailure(unittest.TestCase):
|
||||||
"""Call before every test case."""
|
"""Call before every test case."""
|
||||||
self.__ticket = BanTicket('193.168.0.128', 1167605999.0)
|
self.__ticket = BanTicket('193.168.0.128', 1167605999.0)
|
||||||
self.__banManager = BanManager()
|
self.__banManager = BanManager()
|
||||||
self.assertTrue(self.__banManager.addBanTicket(self.__ticket))
|
self.failUnless(self.__banManager.addBanTicket(self.__ticket))
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
"""Call after every test case."""
|
"""Call after every test case."""
|
||||||
|
@ -43,14 +43,14 @@ class AddFailure(unittest.TestCase):
|
||||||
self.assertEqual(self.__banManager.size(), 1)
|
self.assertEqual(self.__banManager.size(), 1)
|
||||||
|
|
||||||
def testAddDuplicate(self):
|
def testAddDuplicate(self):
|
||||||
self.assertFalse(self.__banManager.addBanTicket(self.__ticket))
|
self.failIf(self.__banManager.addBanTicket(self.__ticket))
|
||||||
self.assertEqual(self.__banManager.size(), 1)
|
self.assertEqual(self.__banManager.size(), 1)
|
||||||
|
|
||||||
def _testInListOK(self):
|
def _testInListOK(self):
|
||||||
ticket = BanTicket('193.168.0.128', 1167605999.0)
|
ticket = BanTicket('193.168.0.128', 1167605999.0)
|
||||||
self.assertTrue(self.__banManager.inBanList(ticket))
|
self.failUnless(self.__banManager.inBanList(ticket))
|
||||||
|
|
||||||
def _testInListNOK(self):
|
def _testInListNOK(self):
|
||||||
ticket = BanTicket('111.111.1.111', 1167605999.0)
|
ticket = BanTicket('111.111.1.111', 1167605999.0)
|
||||||
self.assertFalse(self.__banManager.inBanList(ticket))
|
self.failIf(self.__banManager.inBanList(ticket))
|
||||||
|
|
|
@ -43,19 +43,19 @@ class IgnoreIP(unittest.TestCase):
|
||||||
ipList = "127.0.0.1", "192.168.0.1", "255.255.255.255", "99.99.99.99"
|
ipList = "127.0.0.1", "192.168.0.1", "255.255.255.255", "99.99.99.99"
|
||||||
for ip in ipList:
|
for ip in ipList:
|
||||||
self.__filter.addIgnoreIP(ip)
|
self.__filter.addIgnoreIP(ip)
|
||||||
self.assertTrue(self.__filter.inIgnoreIPList(ip))
|
self.failUnless(self.__filter.inIgnoreIPList(ip))
|
||||||
# Test DNS
|
# Test DNS
|
||||||
self.__filter.addIgnoreIP("www.epfl.ch")
|
self.__filter.addIgnoreIP("www.epfl.ch")
|
||||||
self.assertTrue(self.__filter.inIgnoreIPList("128.178.50.12"))
|
self.failUnless(self.__filter.inIgnoreIPList("128.178.50.12"))
|
||||||
|
|
||||||
def testIgnoreIPNOK(self):
|
def testIgnoreIPNOK(self):
|
||||||
ipList = "", "999.999.999.999", "abcdef", "192.168.0."
|
ipList = "", "999.999.999.999", "abcdef", "192.168.0."
|
||||||
for ip in ipList:
|
for ip in ipList:
|
||||||
self.__filter.addIgnoreIP(ip)
|
self.__filter.addIgnoreIP(ip)
|
||||||
self.assertFalse(self.__filter.inIgnoreIPList(ip))
|
self.failIf(self.__filter.inIgnoreIPList(ip))
|
||||||
# Test DNS
|
# Test DNS
|
||||||
self.__filter.addIgnoreIP("www.epfl.ch")
|
self.__filter.addIgnoreIP("www.epfl.ch")
|
||||||
self.assertFalse(self.__filter.inIgnoreIPList("127.177.50.10"))
|
self.failIf(self.__filter.inIgnoreIPList("127.177.50.10"))
|
||||||
|
|
||||||
|
|
||||||
class LogFile(unittest.TestCase):
|
class LogFile(unittest.TestCase):
|
||||||
|
@ -74,7 +74,7 @@ class LogFile(unittest.TestCase):
|
||||||
# self.__filter.openLogFile(LogFile.FILENAME)
|
# self.__filter.openLogFile(LogFile.FILENAME)
|
||||||
|
|
||||||
def testIsModified(self):
|
def testIsModified(self):
|
||||||
self.assertTrue(self.__filter.isModified(LogFile.FILENAME))
|
self.failUnless(self.__filter.isModified(LogFile.FILENAME))
|
||||||
|
|
||||||
|
|
||||||
class GetFailures(unittest.TestCase):
|
class GetFailures(unittest.TestCase):
|
||||||
|
|
Loading…
Reference in New Issue