Convert mostly to python3 (still need strings/bytes conversions)
This covers conversion of the whole project to python3, *except* for the strings/bytes distinction in __init__.py, which i'm leaving for a second commit. The changes in this commit are intended to be relatively uncontroversial, so that the following commit contains the tricky bits.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python2
|
||||
#! /usr/bin/python3
|
||||
# Original dkim-milter.py code:
|
||||
# Author: Stuart D. Gathman <stuart@bmsi.com>
|
||||
# Copyright 2007 Business Management Systems, Inc.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python2
|
||||
#!/usr/bin/python3
|
||||
|
||||
from dkimpy_milter import main
|
||||
|
||||
|
||||
+10
-10
@@ -31,13 +31,13 @@ import stat
|
||||
import dkim
|
||||
import socket
|
||||
import ipaddress
|
||||
from dnsplug import Session
|
||||
from .dnsplug import Session
|
||||
|
||||
# default values
|
||||
defaultConfigData = {
|
||||
'Syslog': 'yes',
|
||||
'SyslogFacility': 'mail',
|
||||
'UMask': 007,
|
||||
'UMask': 0o07,
|
||||
'Mode': 'sv',
|
||||
'Socket': 'local:/var/run/dkimpy-milter/dkimpy-milter.sock',
|
||||
'PidFile': '/var/run/dkimpy-milter/dkimpy-milter.pid',
|
||||
@@ -85,14 +85,14 @@ class HostsDataset(object):
|
||||
self.item = item[1:]
|
||||
self.negative = True
|
||||
try:
|
||||
self.item = ipaddress.ip_address(unicode(self.item, "utf-8"))
|
||||
self.item = ipaddress.ip_address(str(self.item, "utf-8"))
|
||||
if isinstance(self.item, ipaddress.IPv4Address):
|
||||
self.isipv4 = True
|
||||
elif isinstance(self.item, ipaddress.IPv6Address):
|
||||
self.isipv6 = True
|
||||
except ValueError as e:
|
||||
try:
|
||||
self.item = ipaddress.ip_network(unicode
|
||||
self.item = ipaddress.ip_network(str
|
||||
(self.item, "utf-8"),
|
||||
strict=False)
|
||||
if isinstance(self.item, ipaddress.IPv4Network):
|
||||
@@ -110,7 +110,7 @@ class HostsDataset(object):
|
||||
|
||||
def match(self, connectip):
|
||||
'''Check if the connect IP is part of the dataset'''
|
||||
source = ipaddress.ip_address(unicode(connectip, "utf-8"))
|
||||
source = ipaddress.ip_address(str(connectip, "utf-8"))
|
||||
for item in self.dataset:
|
||||
if item.isdomain or item.ishostname:
|
||||
result = self.matchname(source) # Match host/domains first
|
||||
@@ -160,13 +160,13 @@ class HostsDataset(object):
|
||||
if isinstance(source, ipaddress.IPv4Address):
|
||||
ips = s.dns(name, 'A')
|
||||
for ip in ips:
|
||||
ip = ipaddress.IPv4Address(unicode(ip, 'UTF-8'))
|
||||
ip = ipaddress.IPv4Address(str(ip, 'UTF-8'))
|
||||
if ip == source:
|
||||
results.append(name)
|
||||
if isinstance(source, ipaddress.IPv6Address):
|
||||
ips = s.dns(name, 'AAAA')
|
||||
for ip in ips:
|
||||
ip = ipaddress.IPv6Address(unicode(ip, 'UTF-8'))
|
||||
ip = ipaddress.IPv6Address(str(ip, 'UTF-8'))
|
||||
if ip == source:
|
||||
results.append(name)
|
||||
return results
|
||||
@@ -225,13 +225,13 @@ def _processConfigFile(filename=None, configdata=None, useSyslog=1,
|
||||
'''Load the specified config file, exit and log errors if it fails,
|
||||
otherwise return a config dictionary.'''
|
||||
|
||||
import config
|
||||
from . import config
|
||||
if configdata is None:
|
||||
configdata = config.defaultConfigData
|
||||
if filename is not None:
|
||||
try:
|
||||
_readConfigFile(filename, configdata)
|
||||
except Exception, e:
|
||||
except Exception as e:
|
||||
raise
|
||||
if useSyslog:
|
||||
syslog.syslog(e.args[0])
|
||||
@@ -342,7 +342,7 @@ def _readConfigFile(path, configData=None, configGlobal={}):
|
||||
# check to see if it's a file
|
||||
try:
|
||||
mode = os.stat(path)[0]
|
||||
except OSError, e:
|
||||
except OSError as e:
|
||||
syslog.syslog(syslog.LOG_ERR, 'ERROR stating "%s": %s'
|
||||
% (path, e.strerror))
|
||||
return(configData)
|
||||
|
||||
@@ -84,7 +84,7 @@ class Session(object):
|
||||
raise DNSError('Length of CNAME chain exceeds %d' % MAX_CNAME)
|
||||
cnames[name] = cname
|
||||
if cname in cnames:
|
||||
raise DNSError, 'CNAME loop'
|
||||
raise DNSError('CNAME loop')
|
||||
result = self.dns(cname, qtype, cnames=cnames)
|
||||
return result
|
||||
|
||||
@@ -103,16 +103,16 @@ def DNSLookup_pydns(name, qtype, tcpfallback=True, timeout=30):
|
||||
#
|
||||
if resp.header['tc'] == True:
|
||||
if not tcpfallback:
|
||||
raise DNS.DNSError, 'DNS: Truncated UDP Reply, SPF records should fit in a UDP packet'
|
||||
raise DNS.DNSError('DNS: Truncated UDP Reply, SPF records should fit in a UDP packet')
|
||||
try:
|
||||
req = DNS.DnsRequest(name, qtype=qtype, protocol='tcp',
|
||||
timeout=timeout)
|
||||
resp = req.req()
|
||||
except DNS.DNSError, x:
|
||||
raise DNS.DNSError, 'TCP Fallback error: ' + str(x)
|
||||
except DNS.DNSError as x:
|
||||
raise DNS.DNSError('TCP Fallback error: ' + str(x))
|
||||
return [((a['name'], a['typename']), a['data']) for a in resp.answers]
|
||||
except IOError, x:
|
||||
raise DNS.DNSError, 'DNS: ' + str(x)
|
||||
except IOError as x:
|
||||
raise DNS.DNSError('DNS: ' + str(x))
|
||||
|
||||
def DNSLookup_dnspython(name,qtype,tcpfallback=True,timeout=30):
|
||||
retVal = []
|
||||
@@ -164,5 +164,5 @@ if __name__ == '__main__':
|
||||
import sys
|
||||
s = Session()
|
||||
for n,t in zip(*[iter(sys.argv[1:])]*2):
|
||||
print n,t
|
||||
print s.dns(n,t)
|
||||
print(n,t)
|
||||
print(s.dns(n,t))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python
|
||||
#! /usr/bin/python3
|
||||
# dkimpy-milter: A DKIM signing/verification Milter application
|
||||
# Author: Scott Kitterman <scott@kitterman.com>
|
||||
# Copyright 2018 Scott Kitterman
|
||||
@@ -24,9 +24,9 @@ description = "Domain Keys Identified Mail (DKIM) signing/verifying milter for P
|
||||
kw = {} # Work-around for lack of 'or' requires in setuptools.
|
||||
try:
|
||||
import dns
|
||||
kw['install_requires'] = ['dkimpy>=0.7', 'pymilter', 'authres>=1.1.0', 'PyNaCl', 'ipaddress', 'dnspython']
|
||||
kw['install_requires'] = ['dkimpy>=0.7', 'pymilter', 'authres>=1.1.0', 'PyNaCl', 'dnspython']
|
||||
except ImportError: # If PyDNS is not installed, prefer dnspython
|
||||
kw['install_requires'] = ['dkimpy>=0.7', 'pymilter', 'authres>=1.1.0', 'PyNaCl', 'ipaddress', 'PyDNS']
|
||||
kw['install_requires'] = ['dkimpy>=0.7', 'pymilter', 'authres>=1.1.0', 'PyNaCl', 'PyDNS']
|
||||
|
||||
setup(
|
||||
name='dkimpy-milter',
|
||||
@@ -43,7 +43,7 @@ setup(
|
||||
'License :: OSI Approved :: GNU General Public License (GPL)',
|
||||
'Natural Language :: English',
|
||||
'Operating System :: POSIX',
|
||||
'Programming Language :: Python :: 2 :: Only',
|
||||
'Programming Language :: Python :: 3 :: Only',
|
||||
'Topic :: Communications :: Email :: Mail Transport Agents',
|
||||
'Topic :: Communications :: Email :: Filters',
|
||||
'Topic :: Security',
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
#!/bin/sh
|
||||
python2 -m dkimpy_milter "$@"
|
||||
python3 -m dkimpy_milter "$@"
|
||||
|
||||
Reference in New Issue
Block a user