From 61f1ae2cd94ece9e452e8fd02dbdf4d2f91f85e2 Mon Sep 17 00:00:00 2001 From: Bernd Wurst Date: Tue, 14 Mar 2017 15:44:40 +0100 Subject: [PATCH] Add configurable mode that whitelists only senders IP addresses instead of triplets --- filters/greylist.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/filters/greylist.py b/filters/greylist.py index ffc1eb7..614e4c4 100644 --- a/filters/greylist.py +++ b/filters/greylist.py @@ -42,6 +42,7 @@ sendersPassedTTL = 60 * 60 * 24 * 36 sendersNotPassedTTL = 60 * 60 * 24 greylistTime = 300 +onlySendersIP = False _IPv4Regex = re.compile('^(\d+\.\d+\.\d+)\.\d+$') @@ -113,6 +114,22 @@ def doFilter(bodyFile, controlFileList): _sendersPassed.purge() _sendersNotPassed.purge() + if onlySendersIP: + found = False + addrMd5 = hashlib.md5(sendersIPNetwork) + addrdigest = addrMd5.hexdigest() + _sendersPassed.lock() + try: + if _sendersPassed.has_key(addrdigest): + _Debug('address found in the Passed db') + _sendersPassed[addrdigest] = time.time() + found = True + finally: + _sendersPassed.unlock() + + if found: + return '' + # Create a new MD5 object. The sender/recipient/IP triplets will # be stored in the db in the form of an MD5 digest. senderMd5 = hashlib.md5(sender) @@ -152,7 +169,12 @@ def doFilter(bodyFile, controlFileList): biggestTimeToGo = timeToGo else: _Debug('triplet in NotPassed db is now passed') - _sendersPassed[cdigest] = time.time() + if onlySendersIP: + addrMd5 = hashlib.md5(sendersIPNetwork) + addrdigest = addrMd5.hexdigest() + _sendersPassed[addrdigest] = time.time() + else: + _sendersPassed[cdigest] = time.time() del(_sendersNotPassed[cdigest]) elif _sendersPassed.has_key(cdigest): _Debug('triplet found in the Passed db')