From b28fea4d41b036f4bb23c56e8d3b4de4f76a14e3 Mon Sep 17 00:00:00 2001 From: Lee Clemens Date: Tue, 3 Feb 2015 20:19:39 -0500 Subject: [PATCH 1/2] Clarify filter.DNSUtils functions' terminology and add unittests --- fail2ban/server/filter.py | 30 +++++++++++++----------------- fail2ban/tests/filtertestcase.py | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/fail2ban/server/filter.py b/fail2ban/server/filter.py index 8b1642b4..12379cd0 100644 --- a/fail2ban/server/filter.py +++ b/fail2ban/server/filter.py @@ -367,8 +367,8 @@ class Filter(JailThread): "(?<=b)1+", bin(DNSUtils.addr2bin(s[1]))).group()) s[1] = long(s[1]) try: - a = DNSUtils.cidr(s[0], s[1]) - b = DNSUtils.cidr(ip, s[1]) + a = DNSUtils.addr2bin(s[0], cidr=s[1]) + b = DNSUtils.addr2bin(ip, cidr=s[1]) except Exception: # Check if IP in DNS ips = DNSUtils.dnsToIp(i) @@ -913,22 +913,18 @@ class DNSUtils: return ipList @staticmethod - def cidr(i, n): - """ Convert an IP address string with a CIDR mask into a 32-bit - integer. + def addr2bin(ipstring, cidr=None): + """ Convert a string IPv4 address into binary form. + If cidr is supplied, return the network address for the given block """ - # 32-bit IPv4 address mask - MASK = 0xFFFFFFFFL - return ~(MASK >> n) & MASK & DNSUtils.addr2bin(i) + if cidr is None: + return struct.unpack("!L", socket.inet_aton(ipstring))[0] + else: + MASK = 0xFFFFFFFFL + return ~(MASK >> cidr) & MASK & DNSUtils.addr2bin(ipstring) @staticmethod - def addr2bin(string): - """ Convert a string IPv4 address into an unsigned integer. + def bin2addr(ipbin): + """ Convert a binary IPv4 address into string n.n.n.n form. """ - return struct.unpack("!L", socket.inet_aton(string))[0] - - @staticmethod - def bin2addr(addr): - """ 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", ipbin)) diff --git a/fail2ban/tests/filtertestcase.py b/fail2ban/tests/filtertestcase.py index 812a02cf..8fa13dfa 100644 --- a/fail2ban/tests/filtertestcase.py +++ b/fail2ban/tests/filtertestcase.py @@ -1026,6 +1026,22 @@ class DNSUtilsTests(unittest.TestCase): res = DNSUtils.ipToName('10.0.0.0') self.assertEqual(res, None) + def testAddr2bin(self): + res = DNSUtils.addr2bin('10.0.0.0') + self.assertEqual(res, 167772160L) + res = DNSUtils.addr2bin('10.0.0.0', cidr=None) + self.assertEqual(res, 167772160L) + res = DNSUtils.addr2bin('10.0.0.0', cidr=32L) + self.assertEqual(res, 167772160L) + res = DNSUtils.addr2bin('10.0.0.1', cidr=32L) + self.assertEqual(res, 167772161L) + res = DNSUtils.addr2bin('10.0.0.1', cidr=31L) + self.assertEqual(res, 167772160L) + + def testBin2addr(self): + res = DNSUtils.bin2addr(167772160L) + self.assertEqual(res, '10.0.0.0') + class JailTests(unittest.TestCase): def testSetBackend_gh83(self): From ed71a7cd22a36db288b5e83125137211dc549f0a Mon Sep 17 00:00:00 2001 From: Lee Clemens Date: Tue, 3 Feb 2015 20:23:25 -0500 Subject: [PATCH 2/2] Update ChangeLog --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index d2686386..d67bad93 100644 --- a/ChangeLog +++ b/ChangeLog @@ -66,6 +66,7 @@ ver. 0.9.2 (2014/XX/XXX) - wanna-be-released warnings (gh-934) * action.d/{sendmail-*,xarf-login-attack}.conf - report local timezone not UTC time/zone. Closes gh-911 + * Renamed some DNSUtils functions in filter.py, added unittests ver. 0.9.1 (2014/10/29) - better, faster, stronger