diff -Nru pypolicyd-spf-1.3.1/CHANGES pypolicyd-spf-1.3.2/CHANGES --- pypolicyd-spf-1.3.1/CHANGES 2014-06-04 05:06:33.000000000 +0000 +++ pypolicyd-spf-1.3.2/CHANGES 2015-08-13 02:46:58.000000000 +0000 @@ -4,6 +4,17 @@ # ! = Changed something significant, or removed a feature # * = Fixed a bug, or made a minor improvement +--- 1.3.2 (2015-08-12) + * Fix python3 incompatibility in cases where HELO name is somehow missing + (LP: #1184102) + * Updated README to mention the minimum ipaddr version, if needed, is 2.1.10 + (LP: #1229862) + * Fix up header caching (LP: #1422325) + * Fix and refactor for simplicity detection of Authserv_Id missing from + configuration (LP: #1484239) + * Add try/except around SPF record queries of No_Mail option to avoid errors + on bogus TXT records + --- 1.3.1 (2014-06-14) * Fix case where, when run with python3 the policy server would choke on email addresses that contained non-ascii characters (LP: #1325579) diff -Nru pypolicyd-spf-1.3.1/debian/changelog pypolicyd-spf-1.3.2/debian/changelog --- pypolicyd-spf-1.3.1/debian/changelog 2016-07-07 22:14:08.000000000 +0000 +++ pypolicyd-spf-1.3.2/debian/changelog 2016-07-07 22:14:08.000000000 +0000 @@ -1,8 +1,21 @@ -pypolicyd-spf (1.3.1-1~ubuntu14.04.1) trusty-backports; urgency=medium +pypolicyd-spf (1.3.2-1~ubuntu14.04.1) trusty-backports; urgency=medium - * No-change backport to trusty (LP: #1326409) + * No-change backport to trusty (LP: #1600028) - -- Scott Kitterman Wed, 04 Jun 2014 11:00:21 -0400 + -- Scott Kitterman Thu, 07 Jul 2016 18:01:38 -0400 + +pypolicyd-spf (1.3.2-1) unstable; urgency=medium + + * New upstream release + - Multiple bug fixes (See CHANGES for details) + - Update debian/copyright + - Refresh patches + * Rename logcheck file so it gets used (Closes: #751137) + * Promote python3-authres from Suggests to Depends (Closes: #794307) + * Drop unneeded dh_usrlocal override + * Bump standards version to 3.9.6 without further change + + -- Scott Kitterman Wed, 12 Aug 2015 23:22:34 -0400 pypolicyd-spf (1.3.1-1) unstable; urgency=medium diff -Nru pypolicyd-spf-1.3.1/debian/control pypolicyd-spf-1.3.2/debian/control --- pypolicyd-spf-1.3.1/debian/control 2016-07-07 22:14:08.000000000 +0000 +++ pypolicyd-spf-1.3.2/debian/control 2016-07-07 22:14:08.000000000 +0000 @@ -4,7 +4,7 @@ Maintainer: Scott Kitterman Uploaders: Python Applications Packaging Team Build-Depends: debhelper (>= 8.1.0), python3, quilt (>= 0.46-7) -Standards-Version: 3.9.5 +Standards-Version: 3.9.6 Homepage: https://launchpad.net/pypolicyd-spf Vcs-Svn: svn://anonscm.debian.org/python-apps/packages/pypolicyd-spf/trunk/ Vcs-Browser: http://anonscm.debian.org/viewvc/python-apps/packages/pypolicyd-spf/trunk/ @@ -12,8 +12,7 @@ Package: postfix-policyd-spf-python Architecture: all -Depends: ${python3:Depends}, ${misc:Depends}, python3-spf (>= 2.0.9), postfix, adduser -Suggests: python3-authres +Depends: ${python3:Depends}, ${misc:Depends}, python3-spf (>= 2.0.9), postfix, adduser, python3-authres Description: Postfix policy server for SPF checking postfix-policyd-spf-python is a full featured Postfix policy engine for SPF checking. It includes a variety of whitelisting mechanisms and policy diff -Nru pypolicyd-spf-1.3.1/debian/copyright pypolicyd-spf-1.3.2/debian/copyright --- pypolicyd-spf-1.3.1/debian/copyright 2016-07-07 22:14:08.000000000 +0000 +++ pypolicyd-spf-1.3.2/debian/copyright 2016-07-07 22:14:08.000000000 +0000 @@ -4,7 +4,7 @@ It was downloaded from http://www.openspf.net/Software Copyright Holder: -Copyright © 2007-2012 Scott Kitterman +Copyright © 2007-2015 Scott Kitterman Portions Copyright © 2004-2005, Sean Reifschneider, tummy.com, ltd. Portions Copyright © 2003-2004 Meng Weng Wong diff -Nru pypolicyd-spf-1.3.1/debian/patches/install-conf-fix.patch pypolicyd-spf-1.3.2/debian/patches/install-conf-fix.patch --- pypolicyd-spf-1.3.1/debian/patches/install-conf-fix.patch 2016-07-07 22:14:08.000000000 +0000 +++ pypolicyd-spf-1.3.2/debian/patches/install-conf-fix.patch 2016-07-07 22:14:08.000000000 +0000 @@ -1,10 +1,10 @@ This patch is to integrate with the package namespace for Debian and derived distributions. It has not gone, and does not need to go, upstream. -Index: pypolicyd-spf-1.3/policyd-spf +Index: pypolicyd-spf-1.3.2/policyd-spf =================================================================== ---- pypolicyd-spf-1.3.orig/policyd-spf 2014-05-10 02:09:24.606811977 -0400 -+++ pypolicyd-spf-1.3/policyd-spf 2014-05-10 02:09:24.598811977 -0400 -@@ -631,7 +631,7 @@ +--- pypolicyd-spf-1.3.2.orig/policyd-spf 2015-08-12 23:18:58.107294072 -0400 ++++ pypolicyd-spf-1.3.2/policyd-spf 2015-08-12 23:18:58.103294072 -0400 +@@ -651,7 +651,7 @@ ################################################### # load config file {{{1 # Default location: @@ -13,10 +13,10 @@ if len(sys.argv) > 1: if sys.argv[1] in ( '-?', '--help', '-h' ): print('usage: policyd-spf []') -Index: pypolicyd-spf-1.3/policyd-spf.1 +Index: pypolicyd-spf-1.3.2/policyd-spf.1 =================================================================== ---- pypolicyd-spf-1.3.orig/policyd-spf.1 2014-05-10 02:09:24.606811977 -0400 -+++ pypolicyd-spf-1.3/policyd-spf.1 2014-05-10 02:09:24.598811977 -0400 +--- pypolicyd-spf-1.3.2.orig/policyd-spf.1 2015-08-12 23:18:58.107294072 -0400 ++++ pypolicyd-spf-1.3.2/policyd-spf.1 2015-08-12 23:18:58.103294072 -0400 @@ -145,12 +145,13 @@ $ policyd-spf \-h (Display usage message) @@ -53,10 +53,10 @@ 2. Configure the Postfix policy service in /etc/postfix/main.cf: -Index: pypolicyd-spf-1.3/policyd-spf.conf.5 +Index: pypolicyd-spf-1.3.2/policyd-spf.conf.5 =================================================================== ---- pypolicyd-spf-1.3.orig/policyd-spf.conf.5 2014-05-10 02:09:24.606811977 -0400 -+++ pypolicyd-spf-1.3/policyd-spf.conf.5 2014-05-10 02:09:24.598811977 -0400 +--- pypolicyd-spf-1.3.2.orig/policyd-spf.conf.5 2015-08-12 23:18:58.107294072 -0400 ++++ pypolicyd-spf-1.3.2/policyd-spf.conf.5 2015-08-12 23:18:58.107294072 -0400 @@ -138,7 +138,7 @@ .SH "USAGE" .IX Header "USAGE" @@ -75,10 +75,10 @@ Additionally, whitelisting certain IP addresses from SPF checks is supported. This man page and the sample configuration file show the format to use. -Index: pypolicyd-spf-1.3/setup.py +Index: pypolicyd-spf-1.3.2/setup.py =================================================================== ---- pypolicyd-spf-1.3.orig/setup.py 2014-05-10 02:09:24.606811977 -0400 -+++ pypolicyd-spf-1.3/setup.py 2014-05-10 02:09:24.602811977 -0400 +--- pypolicyd-spf-1.3.2.orig/setup.py 2015-08-12 23:18:58.107294072 -0400 ++++ pypolicyd-spf-1.3.2/setup.py 2015-08-12 23:18:58.107294072 -0400 @@ -15,9 +15,9 @@ scripts = ['policyd-spf'], data_files=[(os.path.join('share', 'man', 'man1'), diff -Nru pypolicyd-spf-1.3.1/debian/postfix-policyd-spf-python-logcheck pypolicyd-spf-1.3.2/debian/postfix-policyd-spf-python-logcheck --- pypolicyd-spf-1.3.1/debian/postfix-policyd-spf-python-logcheck 1970-01-01 00:00:00.000000000 +0000 +++ pypolicyd-spf-1.3.2/debian/postfix-policyd-spf-python-logcheck 2016-07-07 22:14:08.000000000 +0000 @@ -0,0 +1,2 @@ ++^\w{3} [ :0-9]{11} [._[:alnum:]-]+ policyd-spf\[[0-9]+\]: (Pass|Neutral|None|Softfail|Fail|Temperror|Permerror); identity=(helo|mailfrom); client-ip=[0-9a-f.:]+; helo=.*; envelope-from=.*; receiver= + diff -Nru pypolicyd-spf-1.3.1/debian/postfix-policyd-spf-python.logcheck pypolicyd-spf-1.3.2/debian/postfix-policyd-spf-python.logcheck --- pypolicyd-spf-1.3.1/debian/postfix-policyd-spf-python.logcheck 2016-07-07 22:14:08.000000000 +0000 +++ pypolicyd-spf-1.3.2/debian/postfix-policyd-spf-python.logcheck 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ policyd-spf\[[0-9]+\]: (Pass|Neutral|None|Softfail|Fail|Temperror|Permerror); identity=(helo|mailfrom); client-ip=[0-9a-f.:]+; helo=.*; envelope-from=.*; receiver= - diff -Nru pypolicyd-spf-1.3.1/debian/rules pypolicyd-spf-1.3.2/debian/rules --- pypolicyd-spf-1.3.1/debian/rules 2016-07-07 22:14:08.000000000 +0000 +++ pypolicyd-spf-1.3.2/debian/rules 2016-07-07 22:14:08.000000000 +0000 @@ -8,13 +8,10 @@ override_dh_auto_install: python3 $(CURDIR)/setup.py install --install-layout=deb --root $(CURDIR)/debian/postfix-policyd-spf-python # Install logcheck filter - dh_install debian/postfix-policyd-spf-python.logcheck etc/logcheck/ignore.d.server + dh_install debian/postfix-policyd-spf-python-logcheck etc/logcheck/ignore.d.server dh_install override_dh_auto_clean: python3 $(CURDIR)/setup.py clean rm -rf $(CURDIR)/build -override_dh_usrlocal: - dh_usrlocal - dh_python3 diff -Nru pypolicyd-spf-1.3.1/PKG-INFO pypolicyd-spf-1.3.2/PKG-INFO --- pypolicyd-spf-1.3.1/PKG-INFO 2014-06-04 06:14:28.000000000 +0000 +++ pypolicyd-spf-1.3.2/PKG-INFO 2015-08-13 03:10:49.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: pypolicyd-spf -Version: 1.3.1 +Version: 1.3.2 Summary: pypolicyd-spf SPF Postfix policy server implemented in Python. Home-page: https://launchpad.net/pypolicyd-spf Author: Scott Kitterman diff -Nru pypolicyd-spf-1.3.1/policyd-spf pypolicyd-spf-1.3.2/policyd-spf --- pypolicyd-spf-1.3.1/policyd-spf 2014-06-04 05:08:50.000000000 +0000 +++ pypolicyd-spf-1.3.2/policyd-spf 2015-08-13 02:45:08.000000000 +0000 @@ -8,7 +8,7 @@ # # # pypolicyd-spf -# Copyright © 2007-14, Scott Kitterman +# Copyright © 2007-15, Scott Kitterman ''' Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,14 +23,13 @@ limitations under the License. ''' -__version__ = "1.3.1: Jun 4, 2014" +__version__ = "1.3.2: August 12, 2015" testing = True import syslog import os import sys -import string import re import socket import spf @@ -404,7 +403,7 @@ # First do HELO check # if no helo name sent, use domain from sender for later use. if not helo: - foo = string.split(sender, '@', 1) + foo = sender.split('@', 1) if len(foo) < 2: helo = 'unknown' else: helo = foo[1] else: @@ -439,22 +438,22 @@ logdata = str(helo_result[0]) + "; " + spfDetail syslog.syslog(logdata) header = '' + if debugLevel >= 3: + headerdata = 'Header type: ' + str(configData.get('Header_Type')) + '; Authres ID (for AR): ' + str(configData.get('Authserv_Id')) + syslog.syslog(headerdata) if 'SPF' in configData.get('Header_Type') and 'AR' in configData.get('Header_Type'): syslog.syslog(syslog.LOG_ERR, 'Header_Type includes both SPF and AR - invalid configuration.') raise SyntaxError('Header_Type includes both SPF and AR - invalid configuration.') if 'SPF' in configData.get('Header_Type'): header = 'Received-SPF: '+ helo_result[0] + ' (' + helo_result[1] +') ' + spfDetail elif 'AR' in configData.get('Header_Type'): - try: - header += str(authres.AuthenticationResultsHeader(authserv_id = configData.get('Authserv_Id'), - results = [authres.SPFAuthenticationResult(result = helo_result[0], - result_comment = helo_result[1], - smtp_helo = helo, smtp_helo_comment = - 'client-ip={0}; helo={1}; envelope-from={2}; receiver={3}'.format(ip, helo, header_sender, data.get('recipient', '')))])) - except TypeError as x: - if str(x).startswith('sequence item 2'): - syslog.syslog(syslog.LOG_ERR, 'Authserv_Id not set for authentication results header - invalid configuration.') - raise SyntaxError('Authserv_Id not set for authentication results header - invalid configuration.') + if not configData.get('Authserv_Id'): + raise SyntaxError('Authserv_Id not set for authentication results header - invalid configuration.') + header += str(authres.AuthenticationResultsHeader(authserv_id = str(configData.get('Authserv_Id')), + results = [authres.SPFAuthenticationResult(result = helo_result[0], + result_comment = helo_result[1], + smtp_helo = helo, smtp_helo_comment = + 'client-ip={0}; helo={1}; envelope-from={2}; receiver={3}'.format(ip, helo, header_sender, data.get('recipient', '')))])) helo_result.append(header) helo_result.append(peruser) helo_result.append(helo_result[3]) @@ -468,8 +467,12 @@ if helo_result[3] == 'reject': if configData.get('No_Mail'): # If only rejecting on "v=spf1 -all", we need to know now - q = spf.query(i='127.0.0.1', s='localhost', h='unknown', receiver=socket.gethostname()) - record = q.dns_spf(helo) + try: + q = spf.query(i='127.0.0.1', s='localhost', h='unknown', receiver=socket.gethostname()) + record = q.dns_spf(helo) + except: + # If the query errored some how, we know it's not "v=spf1 -all" + record = '' if record != "v=spf1 -all": if last_action != 'prepend': # Prepend instead of reject if it's not a no mail record @@ -477,23 +480,27 @@ else: return(( 'dunno', 'Header already pre-pended', instance_dict )) if helo_result[3] == 'reject': # It may not anymore - header = "Message rejected due to: " + helo_result[1] + \ + helo_result[4] = "Message rejected due to: " + helo_result[1] + \ ". Please see http://www.openspf.net/Why?s=helo;id=" \ + helo + ";ip=" + ip + ";r=" + data.get('recipient') - return(( 'reject', header, instance_dict )) + return(( 'reject', helo_result[4], instance_dict )) if helo_result[3] == 'defer': - header = "Message deferred due to: " + helo_result[1] + \ + helo_result[4] = "Message deferred due to: " + helo_result[1] + \ ". Please see http://www.openspf.net/Why?s=helo;id=" + helo + \ ";ip=" + ip + ";r=" + data.get('recipient') - return(( 'defer', header, instance_dict )) + return(( 'defer', helo_result[4], instance_dict )) # Second do Mail From Check if sender == '': if configData.get('HELO_reject') != 'No_Check': if helo_result[3] == 'reject': if configData.get('No_Mail'): # If only rejecting on "v=spf1 -all", we need to know now - q = spf.query(i='127.0.0.1', s='localhost', h='unknown', receiver=socket.gethostname()) - record = q.dns_spf(helo) + try: + q = spf.query(i='127.0.0.1', s='localhost', h='unknown', receiver=socket.gethostname()) + record = q.dns_spf(helo) + except: + # If the query errored some how, we know it's not "v=spf1 -all" + record = '' if record != "v=spf1 -all": if last_action != 'prepend': # Prepend instead of reject if it's not a no mail record @@ -501,17 +508,17 @@ else: return(( 'dunno', 'Header already pre-pended', instance_dict )) if helo_result[3] == 'reject': # It may not anymore - header = "Message rejected due to: " + helo_result[1] + \ + helo_result[4] = "Message rejected due to: " + helo_result[1] + \ ". Please see http://www.openspf.net/Why?s=helo;id=" + helo + \ ";ip=" + ip + ";r=" + data.get('recipient') if helo_result[3] == 'defer': - header = "Message deferred due to: " + helo_result[1] + \ + helo_result[4] = "Message deferred due to: " + helo_result[1] + \ ". Please see http://www.openspf.net/Why?s=helo;id=" + helo + \ ";ip=" + ip + ";r=" + data.get('recipient') if HELO_pass_restriction and helo_result[0] == 'Pass': restrict_name = HELO_pass_restriction return('result_only', restrict_name, instance_dict) - return(( helo_result[3], header, instance_dict )) + return(( helo_result[3], helo_result[4], instance_dict )) else: if configData.get('Mail_From_reject') != 'No_Check': res = spf.check2(ip, sender, helo, querytime=configData.get('Lookup_Time')) @@ -526,6 +533,7 @@ if mfrom_result[0] in mfrom_resultpolicy[poss_actions]: action = poss_actions mfrom_result.append(action) + mfrom_result.append('') if local['local_mfrom']: mfrom_result[1] = 'Receiver policy for SPF ' + mfrom_result[0] if mfrom_result[0] == 'None': @@ -537,24 +545,24 @@ if debugLevel >= 1: logdata = str(mfrom_result[0]) + "; " + spfDetail syslog.syslog(logdata) - header = '' + if debugLevel >= 3: + headerdata = 'Header type: ' + str(configData.get('Header_Type')) + '; Authres ID (for AR): ' + str(configData.get('Authserv_Id')) + syslog.syslog(headerdata) if 'SPF' in configData.get('Header_Type') and 'AR' in configData.get('Header_Type'): syslog.syslog(syslog.LOG_ERR, 'Header_Type includes both SPF and AR - invalid configuration.') raise SyntaxError('Header_Type includes both SPF and AR - invalid configuration.') + header = '' if 'SPF' in configData.get('Header_Type'): header = 'Received-SPF: '+ mfrom_result[0] + ' (' + mfrom_result[1] +') ' + spfDetail elif 'AR' in configData.get('Header_Type'): - try: - header += str(authres.AuthenticationResultsHeader(authserv_id = configData.get('Authserv_Id'), - results = [authres.SPFAuthenticationResult(result = mfrom_result[0], - result_comment = mfrom_result[1], - smtp_mailfrom = spf.split_email(sender,'example.com')[1], smtp_mailfrom_comment = - 'client-ip={0}; helo={1}; envelope-from={2}; receiver={3}'.format(ip, helo, sender, data.get('recipient', '')))])) - except TypeError as x: - if str(x).startswith('sequence item 2'): - syslog.syslog(syslog.LOG_ERR, 'Authserv_Id not set for authentication results header - invalid configuration.') - raise SyntaxError('Authserv_Id not set for authentication results header - invalid configuration.') - mfrom_result.append(header) + if not configData.get('Authserv_Id'): + raise SyntaxError('Authserv_Id not set for authentication results header - invalid configuration.') + header += str(authres.AuthenticationResultsHeader(authserv_id = str(configData.get('Authserv_Id')), + results = [authres.SPFAuthenticationResult(result = mfrom_result[0], + result_comment = mfrom_result[1], + smtp_mailfrom = spf.split_email(sender,'example.com')[1], smtp_mailfrom_comment = + 'client-ip={0}; helo={1}; envelope-from={2}; receiver={3}'.format(ip, helo, sender, data.get('recipient', '')))])) + mfrom_result[4] = header mfrom_result.append(peruser) mfrom_result.append(mfrom_result[3]) if not found_instance or foundinstance[5]: @@ -570,8 +578,12 @@ if mfrom_result[3] == 'reject': if configData.get('No_Mail'): # If only rejecting on "v=spf1 -all", we need to know now - q = spf.query(i='127.0.0.1', s='localhost', h='unknown', receiver=socket.gethostname()) - record = q.dns_spf(sender) + try: + q = spf.query(i='127.0.0.1', s='localhost', h='unknown', receiver=socket.gethostname()) + record = q.dns_spf(sender) + except: + # If the query errored some how, we know it's not "v=spf1 -all" + record = '' if record != "v=spf1 -all": if last_action != 'prepend': # Prepend instead of reject if it's not a no mail record @@ -579,17 +591,21 @@ else: return(( 'dunno', 'Header already pre-pended', instance_dict )) if mfrom_result[3] == 'reject': # It may not be anymore - header = "Message rejected due to: " + mfrom_result[1] + \ + mfrom_result[4] = "Message rejected due to: " + mfrom_result[1] + \ ". Please see http://www.openspf.net/Why?s=mfrom;id=" + sender + \ ";ip=" + ip + ";r=" + data.get('recipient') - return(( 'reject', header, instance_dict )) + return(( 'reject', mfrom_result[4], instance_dict )) if mfrom_result[3] == 'defer': - header = "Message deferred due to: " + mfrom_result[1] + \ + mfrom_result[4] = "Message deferred due to: " + mfrom_result[1] + \ ". Please see http://www.openspf.net/Why?s=mfrom;id=" + sender + \ ";ip=" + ip + ";r=" + data.get('recipient') - return(( 'defer', header, instance_dict )) + return(( 'defer', mfrom_result[4], instance_dict )) if mfrom_result[3] != 'dunno' or helo_result[3] =='dunno': if last_action != 'prepend': + if mfrom_result[4]: + header = mfrom_result[4] + else: + header = helo_result[4] return(( 'prepend', header, instance_dict )) else: return(( 'dunno', 'Header already pre-pended', instance_dict )) @@ -598,8 +614,12 @@ if helo_result[3] == 'reject': if configData.get('No_Mail'): # If only rejecting on "v=spf1 -all", we need to know now - q = spf.query(i='127.0.0.1', s='localhost', h='unknown', receiver=socket.gethostname()) - record = q.dns_spf(helo) + try: + q = spf.query(i='127.0.0.1', s='localhost', h='unknown', receiver=socket.gethostname()) + record = q.dns_spf(helo) + except: + # If the query errored some how, we know it's not "v=spf1 -all" + record = '' if record != "v=spf1 -all": if last_action != 'prepend': # Prepend instead of reject if it's not a no mail record @@ -607,17 +627,17 @@ else: return(( 'dunno', 'Header already pre-pended', instance_dict )) if helo_result[3] == 'reject': # It may not anymore - header = "Message rejected due to: " + helo_result[1] + \ + helo_result[4] = "Message rejected due to: " + helo_result[1] + \ ". Please see http://www.openspf.net/Why?s=helo;id=" \ + helo + ";ip=" + ip + ";r=" + data.get('recipient') - return(( 'reject', header, instance_dict )) + return(( 'reject', helo_result[4], instance_dict )) if helo_result[3] == 'defer': - header = "Message deferred due to: " + helo_result[1] + \ + helo_result[4] = "Message deferred due to: " + helo_result[1] + \ ". Please see http://www.openspf.net/Why?s=helo;id=" + helo + \ ";ip=" + ip + ";r=" + data.get('recipient') - return(( 'defer', header, instance_dict )) + return(( 'defer', helo_result[4], instance_dict )) if last_action != 'prepend': - return(( 'prepend', header, instance_dict )) + return(( 'prepend', helo_result[4], instance_dict )) else: return(( 'dunno', 'Header already pre-pended', instance_dict )) else: diff -Nru pypolicyd-spf-1.3.1/policydspfsupp.py pypolicyd-spf-1.3.2/policydspfsupp.py --- pypolicyd-spf-1.3.1/policydspfsupp.py 2014-05-09 03:58:04.000000000 +0000 +++ pypolicyd-spf-1.3.2/policydspfsupp.py 2015-08-12 19:35:57.000000000 +0000 @@ -22,7 +22,6 @@ import syslog import os import sys -import string import re import stat diff -Nru pypolicyd-spf-1.3.1/policydspfuser.py pypolicyd-spf-1.3.2/policydspfuser.py --- pypolicyd-spf-1.3.1/policydspfuser.py 2014-05-09 02:32:13.000000000 +0000 +++ pypolicyd-spf-1.3.2/policydspfuser.py 2015-08-12 19:35:57.000000000 +0000 @@ -18,7 +18,6 @@ import syslog import re -import string import os ############################################################### diff -Nru pypolicyd-spf-1.3.1/README pypolicyd-spf-1.3.2/README --- pypolicyd-spf-1.3.1/README 2014-06-04 05:09:11.000000000 +0000 +++ pypolicyd-spf-1.3.2/README 2015-08-12 19:54:33.000000000 +0000 @@ -1,4 +1,4 @@ -Python Postfix Policy for SPF (python-policy-spf) 1.3.1 +Python Postfix Policy for SPF (python-policy-spf) 1.3.2 Python based policy daemon for Postfix SPF checking Tumgreyspf source Copyright © 2004-2005, Sean Reifschneider, tummy.com, ltd. @@ -42,8 +42,8 @@ It requires Python (python2.6, python2.7, or python3.2+), the pyspf (python-spf) library version 2.0.7 or higher (2.0.9 is required for all changes related to the RFC 7208 updates to the SPF design), and (for Python -versions before python3.3, the ipaddr module - for python3.3 and later the -built-in ipaddress module is used). +versions before python3.3, the ipaddr module (version 2.1.10 or later) - for +python3.3 and later the built-in ipaddress module is used). If pyspf not available through your packaging system, it can be downloaded from: diff -Nru pypolicyd-spf-1.3.1/setup.py pypolicyd-spf-1.3.2/setup.py --- pypolicyd-spf-1.3.1/setup.py 2014-06-04 05:08:20.000000000 +0000 +++ pypolicyd-spf-1.3.2/setup.py 2015-08-12 19:53:43.000000000 +0000 @@ -5,7 +5,7 @@ DESC = """pypolicyd-spf SPF Postfix policy server implemented in Python.""" setup(name='pypolicyd-spf', - version='1.3.1', + version='1.3.2', description=DESC, author='Scott Kitterman', author_email='scott@kitterman.com',