Hello community, here is the log from the commit of package python-py3dns for openSUSE:Leap:15.2 checked in at 2020-03-09 18:10:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Leap:15.2/python-py3dns (Old) and /work/SRC/openSUSE:Leap:15.2/.python-py3dns.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-py3dns" Mon Mar 9 18:10:52 2020 rev:3 rq:776947 version:3.2.1 Changes: -------- --- /work/SRC/openSUSE:Leap:15.2/python-py3dns/python-py3dns.changes 2020-01-15 15:51:44.611539445 +0100 +++ /work/SRC/openSUSE:Leap:15.2/.python-py3dns.new.26092/python-py3dns.changes 2020-03-09 18:10:53.185155351 +0100 @@ -1,0 +2,7 @@ +Tue Sep 10 12:56:30 UTC 2019 - Tomáš Chvátal <[email protected]> + +- Update to 3.2.1: + * various minor fixes +- Rebase patch python3-py3dns-handle-absent-resolv.patch + +------------------------------------------------------------------- Old: ---- py3dns-3.2.0.tar.gz New: ---- py3dns-3.2.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-py3dns.spec ++++++ --- /var/tmp/diff_new_pack.q7Ad3W/_old 2020-03-09 18:10:53.541155862 +0100 +++ /var/tmp/diff_new_pack.q7Ad3W/_new 2020-03-09 18:10:53.541155862 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-py3dns # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,14 +12,14 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-py3dns -Version: 3.2.0 +Version: 3.2.1 Release: 0 Summary: Python module for DNS (Domain Name Service) License: CNRI-Python ++++++ py3dns-3.2.0.tar.gz -> py3dns-3.2.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py3dns-3.2.0/CHANGES new/py3dns-3.2.1/CHANGES --- old/py3dns-3.2.0/CHANGES 2018-07-23 23:27:00.000000000 +0200 +++ new/py3dns-3.2.1/CHANGES 2019-09-04 14:14:51.000000000 +0200 @@ -1,3 +1,12 @@ +3.2.1 Wed, Sep 4, 2019 + * Add support for setting timeout for convenience methods in DNS.lazy + * Fixed DNS.req resulttype error format (LP: #1842423) + * Use errno.EADDRINUSE instead of the hard coded Linux value for improved + portability (LP: #1793540) + * Update test suite to correct for use of no longer existing DNS records + * Set timeout=1 for tests so testing with a non-responsive nameserver will + finish in a reasonable time + 3.2.0 Mon, 23 Jul 2018 * Rename internal use of async since it is a reserved word in python3.7 (LP: #1776027) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py3dns-3.2.0/DNS/Base.py new/py3dns-3.2.1/DNS/Base.py --- old/py3dns-3.2.0/DNS/Base.py 2018-07-23 22:47:25.000000000 +0200 +++ new/py3dns-3.2.1/DNS/Base.py 2019-09-04 12:19:11.000000000 +0200 @@ -12,6 +12,7 @@ """ import socket, string, types, time, select +import errno from . import Type,Class,Opcode import asyncore # @@ -212,8 +213,8 @@ self.s.bind(('', source_port)) break except socket.error as msg: - # Error 98, 'Address already in use' - if msg.errno != 98: raise + # errno.EADDRINUSE, 'Address already in use' + if msg.errno != errno.EADDRINUSE: raise def conn(self): self.getSource() @@ -285,7 +286,7 @@ # raise ArgumentError, 'reinitialize request before reuse' try: if self.args['resulttype']: - raise ArgumentError('Restulttype {0} set with DNS.req, use DNS.qry to specify result type.'(format(self.args['resulttype']))) + raise ArgumentError('Restulttype {0} set with DNS.req, use DNS.qry to specify result type.'.format(self.args['resulttype'])) except: # resulttype isn't set and that's what we want for DNS.req pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py3dns-3.2.0/DNS/__init__.py new/py3dns-3.2.1/DNS/__init__.py --- old/py3dns-3.2.0/DNS/__init__.py 2018-07-23 22:55:44.000000000 +0200 +++ new/py3dns-3.2.1/DNS/__init__.py 2019-09-04 11:43:56.000000000 +0200 @@ -10,7 +10,7 @@ # __init__.py for DNS class. -__version__ = '3.2.0' +__version__ = '3.2.1' try: import ipaddress diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py3dns-3.2.0/DNS/lazy.py new/py3dns-3.2.1/DNS/lazy.py --- old/py3dns-3.2.0/DNS/lazy.py 2018-07-23 22:27:51.000000000 +0200 +++ new/py3dns-3.2.1/DNS/lazy.py 2019-09-04 14:11:10.000000000 +0200 @@ -13,45 +13,47 @@ class NoDataError(IndexError): pass class StatusError(IndexError): pass -def revlookup(name): +def revlookup(name,timeout=30): "convenience routine for doing a reverse lookup of an address" if Base.defaults['server'] == []: Base.DiscoverNameServers() - names = revlookupall(name) + names = revlookupall(name, timeout) if not names: return None return names[0] # return shortest name -def revlookupall(name): +def revlookupall(name,timeout=30): "convenience routine for doing a reverse lookup of an address" # FIXME: check for IPv6 a = name.split('.') a.reverse() b = '.'.join(a)+'.in-addr.arpa' - names = dnslookup(b, qtype = 'ptr') + qtype='ptr' + names = dnslookup(b, qtype, timeout) # this will return all records. names.sort(key=str.__len__) return names -def dnslookup(name,qtype): +def dnslookup(name,qtype,timeout=30): "convenience routine to return just answer data for any query type" if Base.defaults['server'] == []: Base.DiscoverNameServers() - result = Base.DnsRequest(name=name, qtype=qtype).req() + result = Base.DnsRequest(name=name, qtype=qtype).req(timeout=timeout) if result.header['status'] != 'NOERROR': raise ServerError("DNS query status: %s" % result.header['status'], result.header['rcode']) elif len(result.answers) == 0 and Base.defaults['server_rotate']: # check with next DNS server - result = Base.DnsRequest(name=name, qtype=qtype).req() + result = Base.DnsRequest(name=name, qtype=qtype).req(timeout=timeout) if result.header['status'] != 'NOERROR': raise ServerError("DNS query status: %s" % result.header['status'], result.header['rcode']) return [x['data'] for x in result.answers] -def mxlookup(name): +def mxlookup(name,timeout=30): """ convenience routine for doing an MX lookup of a name. returns a sorted list of (preference, mail exchanger) records """ - l = dnslookup(name, qtype = 'mx') + qtype = 'mx' + l = dnslookup(name, qtype, timeout) return l # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py3dns-3.2.0/DNS/tests/test_base.py new/py3dns-3.2.1/DNS/tests/test_base.py --- old/py3dns-3.2.0/DNS/tests/test_base.py 2018-07-23 22:27:51.000000000 +0200 +++ new/py3dns-3.2.1/DNS/tests/test_base.py 2019-09-04 14:13:10.000000000 +0200 @@ -32,18 +32,18 @@ # try with asking for strings, and asking for bytes dnsobj = DNS.DnsRequest('example.org') - a_response = dnsobj.qry(qtype='A', resulttype='text') + a_response = dnsobj.qry(qtype='A', resulttype='text', timeout=1) self.assertTrue(a_response.answers) # is the result vaguely ipv4 like? self.assertEqual(a_response.answers[0]['data'].count('.'), 3) self.assertEqual(a_response.answers[0]['data'],'93.184.216.34') # Default result type for .qry object is an ipaddress object - ad_response = dnsobj.qry(qtype='A') + ad_response = dnsobj.qry(qtype='A', timeout=1) self.assertTrue(ad_response.answers) self.assertEqual(ad_response.answers[0]['data'],ipaddress.IPv4Address('93.184.216.34')) - ab_response = dnsobj.qry(qtype='A', resulttype='binary') + ab_response = dnsobj.qry(qtype='A', resulttype='binary', timeout=1) self.assertTrue(ab_response.answers) # is the result ipv4 binary like? self.assertEqual(len(ab_response.answers[0]['data']), 4) @@ -51,7 +51,7 @@ assertIsByte(b) self.assertEqual(ab_response.answers[0]['data'],b']\xb8\xd8\"') - ai_response = dnsobj.qry(qtype='A', resulttype='integer') + ai_response = dnsobj.qry(qtype='A', resulttype='integer', timeout=1) self.assertTrue(ai_response.answers) self.assertEqual(ai_response.answers[0]['data'],1572395042) @@ -59,18 +59,18 @@ def testDnsRequestAAAA(self): dnsobj = DNS.DnsRequest('example.org') - aaaa_response = dnsobj.qry(qtype='AAAA', resulttype='text') + aaaa_response = dnsobj.qry(qtype='AAAA', resulttype='text', timeout=1) self.assertTrue(aaaa_response.answers) # does the result look like an ipv6 address? self.assertTrue(':' in aaaa_response.answers[0]['data']) self.assertEqual(aaaa_response.answers[0]['data'],'2606:2800:220:1:248:1893:25c8:1946') # default is returning ipaddress object - aaaad_response = dnsobj.qry(qtype='AAAA') + aaaad_response = dnsobj.qry(qtype='AAAA', timeout=1) self.assertTrue(aaaad_response.answers) self.assertEqual(aaaad_response.answers[0]['data'],ipaddress.IPv6Address('2606:2800:220:1:248:1893:25c8:1946')) - aaaab_response = dnsobj.qry(qtype='AAAA', resulttype='binary') + aaaab_response = dnsobj.qry(qtype='AAAA', resulttype='binary', timeout=1) self.assertTrue(aaaab_response.answers) # is it ipv6 looking? self.assertEqual(len(aaaab_response.answers[0]['data']) , 16) @@ -78,30 +78,30 @@ assertIsByte(b) self.assertEqual(aaaab_response.answers[0]['data'],b'&\x06(\x00\x02 \x00\x01\x02H\x18\x93%\xc8\x19F') # IPv6 decimal - aaaai_response = dnsobj.qry(qtype='AAAA', resulttype='integer') + aaaai_response = dnsobj.qry(qtype='AAAA', resulttype='integer', timeout=1) self.assertTrue(aaaai_response.answers) self.assertEqual(aaaai_response.answers[0]['data'], 50542628918019813867414319910101719366) def testDnsRequestEmptyMX(self): dnsobj = DNS.DnsRequest('example.org') - mx_empty_response = dnsobj.qry(qtype='MX') + mx_empty_response = dnsobj.qry(qtype='MX', timeout=1) self.assertFalse(mx_empty_response.answers) def testDnsRequestMX(self): dnsobj = DNS.DnsRequest('ietf.org') - mx_response = dnsobj.qry(qtype='MX') + mx_response = dnsobj.qry(qtype='MX', timeout=1) self.assertTrue(mx_response.answers[0]) # is hard coding a remote address a good idea? # I think it's unavoidable. - sk self.assertEqual(mx_response.answers[0]['data'], (0, 'mail.ietf.org')) - m = DNS.mxlookup('ietf.org') + m = DNS.mxlookup('ietf.org', timeout=1) self.assertEqual(mx_response.answers[0]['data'], m[0]) def testDnsRequestSrv(self): dnsobj = DNS.Request(qtype='srv') - respdef = dnsobj.qry('_ldap._tcp.openldap.org') + respdef = dnsobj.qry('_ldap._tcp.openldap.org', timeout=1) self.assertTrue(respdef.answers) data = respdef.answers[0]['data'] self.assertEqual(len(data), 4) @@ -109,9 +109,9 @@ self.assertTrue('openldap.org' in data[3]) def testDkimRequest(self): - q = '20120113._domainkey.google.com' + q = '20161025._domainkey.google.com' dnsobj = DNS.Request(q, qtype='txt') - resp = dnsobj.qry() + resp = dnsobj.qry(timeout=1) self.assertTrue(resp.answers) # should the result be bytes or a string? (Bytes, we finally settled on bytes) @@ -122,17 +122,17 @@ def testDNSRequestTXT(self): dnsobj = DNS.DnsRequest('fail.kitterman.org') - respdef = dnsobj.qry(qtype='TXT') + respdef = dnsobj.qry(qtype='TXT', timeout=1) self.assertTrue(respdef.answers) data = respdef.answers[0]['data'] self.assertEqual(data, [b'v=spf1 -all']) - resptext = dnsobj.qry(qtype='TXT', resulttype='text') + resptext = dnsobj.qry(qtype='TXT', resulttype='text', timeout=1) self.assertTrue(resptext.answers) data = resptext.answers[0]['data'] self.assertEqual(data, ['v=spf1 -all']) - respbin = dnsobj.qry(qtype='TXT', resulttype='binary') + respbin = dnsobj.qry(qtype='TXT', resulttype='binary', timeout=1) self.assertTrue(respbin.answers) data = respbin.answers[0]['data'] self.assertEqual(data, [b'\x0bv=spf1 -all']) @@ -141,8 +141,8 @@ """Can we lookup an internationalized domain name?""" dnsobj = DNS.DnsRequest('xn--bb-eka.at') unidnsobj = DNS.DnsRequest('öbb.at') - a_resp = dnsobj.qry(qtype='A', resulttype='text') - ua_resp = unidnsobj.qry(qtype='A', resulttype='text') + a_resp = dnsobj.qry(qtype='A', resulttype='text', timeout=1) + ua_resp = unidnsobj.qry(qtype='A', resulttype='text', timeout=1) self.assertTrue(a_resp.answers) self.assertTrue(ua_resp.answers) self.assertEqual(ua_resp.answers[0]['data'], @@ -151,7 +151,7 @@ def testNS(self): """Lookup NS record from SOA""" dnsob = DNS.DnsRequest('kitterman.com') - resp = dnsob.qry(qtype='SOA') + resp = dnsob.qry(qtype='SOA', timeout=1) self.assertTrue(resp.answers) primary = resp.answers[0]['data'][0] self.assertEqual(primary, 'ns1.pairnic.com') @@ -166,7 +166,7 @@ # try with asking for strings, and asking for bytes dnsob = DNS.DnsRequest('example.org') - ad_response = dnsob.req(qtype='A') + ad_response = dnsob.req(qtype='A', timeout=1) self.assertTrue(ad_response.answers) # is the result vaguely ipv4 like? self.assertEqual(ad_response.answers[0]['data'].count('.'), 3) @@ -176,7 +176,7 @@ dnsob = DNS.DnsRequest('example.org') # default is returning binary instead of text - aaaad_response = dnsob.req(qtype='AAAA') + aaaad_response = dnsob.req(qtype='AAAA', timeout=1) self.assertTrue(aaaad_response.answers) # does the result look like a binary ipv6 address? self.assertEqual(len(aaaad_response.answers[0]['data']) , 16) @@ -187,23 +187,23 @@ def testDnsRequestEmptyMXD(self): dnsob = DNS.DnsRequest('example.org') - mx_empty_response = dnsob.req(qtype='MX') + mx_empty_response = dnsob.req(qtype='MX', timeout=1) self.assertFalse(mx_empty_response.answers) def testDnsRequestMXD(self): dnsob = DNS.DnsRequest('ietf.org') - mx_response = dnsob.req(qtype='MX') + mx_response = dnsob.req(qtype='MX', timeout=1) self.assertTrue(mx_response.answers[0]) # is hard coding a remote address a good idea? # I think it's unavoidable. - sk self.assertEqual(mx_response.answers[0]['data'], (0, 'mail.ietf.org')) - m = DNS.mxlookup('ietf.org') + m = DNS.mxlookup('ietf.org', timeout=1) self.assertEqual(mx_response.answers[0]['data'], m[0]) def testDnsRequestSrvD(self): dnsob = DNS.Request(qtype='srv') - respdef = dnsob.req('_ldap._tcp.openldap.org') + respdef = dnsob.req('_ldap._tcp.openldap.org', timeout=1) self.assertTrue(respdef.answers) data = respdef.answers[0]['data'] self.assertEqual(len(data), 4) @@ -211,9 +211,9 @@ self.assertTrue('openldap.org' in data[3]) def testDkimRequestD(self): - q = '20120113._domainkey.google.com' + q = '20161025._domainkey.google.com' dnsob = DNS.Request(q, qtype='txt') - resp = dnsob.req() + resp = dnsob.req(timeout=1) self.assertTrue(resp.answers) # should the result be bytes or a string? (Bytes, we finally settled on bytes) @@ -224,7 +224,7 @@ def testDNSRequestTXTD(self): dnsob = DNS.DnsRequest('fail.kitterman.org') - respdef = dnsob.req(qtype='TXT') + respdef = dnsob.req(qtype='TXT', timeout=1) self.assertTrue(respdef.answers) data = respdef.answers[0]['data'] self.assertEqual(data, [b'v=spf1 -all']) @@ -233,8 +233,8 @@ """Can we lookup an internationalized domain name?""" dnsob = DNS.DnsRequest('xn--bb-eka.at') unidnsob = DNS.DnsRequest('öbb.at') - a_resp = dnsob.req(qtype='A', resulttype='text') - ua_resp = unidnsob.req(qtype='A', resulttype='text') + a_resp = dnsob.req(qtype='A', resulttype='text', timeout=1) + ua_resp = unidnsob.req(qtype='A', resulttype='text', timeout=1) self.assertTrue(a_resp.answers) self.assertTrue(ua_resp.answers) self.assertEqual(ua_resp.answers[0]['data'], @@ -243,11 +243,11 @@ def testNSD(self): """Lookup NS record from SOA""" dnsob = DNS.DnsRequest('kitterman.com') - resp = dnsob.req(qtype='SOA') + resp = dnsob.req(qtype='SOA', timeout=1) self.assertTrue(resp.answers) primary = resp.answers[0]['data'][0] self.assertEqual(primary, 'ns1.pairnic.com') - resp = dnsob.req(qtype='NS',server=primary,aa=1) + resp = dnsob.req(qtype='NS',server=primary,aa=1, timeout=1) nslist = [x['data'].lower() for x in resp.answers] nslist.sort() self.assertEqual(nslist, ['ns1.pairnic.com', 'ns2.pairnic.com']) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py3dns-3.2.0/PKG-INFO new/py3dns-3.2.1/PKG-INFO --- old/py3dns-3.2.0/PKG-INFO 2018-07-23 23:31:51.000000000 +0200 +++ new/py3dns-3.2.1/PKG-INFO 2019-09-04 14:15:49.000000000 +0200 @@ -1,10 +1,12 @@ -Metadata-Version: 1.1 +Metadata-Version: 1.2 Name: py3dns -Version: 3.2.0 +Version: 3.2.1 Summary: Python 3 DNS library Home-page: https://launchpad.net/py3dns -Author: Scott Kitterman -Author-email: [email protected] +Author: Anthony Baxter and others +Author-email: [email protected] +Maintainer: Scott Kitterman +Maintainer-email: [email protected] License: Python License Description: Python 3 DNS library: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py3dns-3.2.0/py3dns.egg-info/PKG-INFO new/py3dns-3.2.1/py3dns.egg-info/PKG-INFO --- old/py3dns-3.2.0/py3dns.egg-info/PKG-INFO 2018-07-23 23:31:50.000000000 +0200 +++ new/py3dns-3.2.1/py3dns.egg-info/PKG-INFO 2019-09-04 14:15:48.000000000 +0200 @@ -1,10 +1,12 @@ -Metadata-Version: 1.1 +Metadata-Version: 1.2 Name: py3dns -Version: 3.2.0 +Version: 3.2.1 Summary: Python 3 DNS library Home-page: https://launchpad.net/py3dns -Author: Scott Kitterman -Author-email: [email protected] +Author: Anthony Baxter and others +Author-email: [email protected] +Maintainer: Scott Kitterman +Maintainer-email: [email protected] License: Python License Description: Python 3 DNS library: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py3dns-3.2.0/setup.cfg new/py3dns-3.2.1/setup.cfg --- old/py3dns-3.2.0/setup.cfg 2018-07-23 23:31:51.000000000 +0200 +++ new/py3dns-3.2.1/setup.cfg 2019-09-04 14:15:49.000000000 +0200 @@ -1,5 +1,4 @@ [egg_info] -tag_date = 0 tag_build = -tag_svn_revision = 0 +tag_date = 0 ++++++ python3-py3dns-handle-absent-resolv.patch ++++++ --- /var/tmp/diff_new_pack.q7Ad3W/_old 2020-03-09 18:10:53.613155965 +0100 +++ /var/tmp/diff_new_pack.q7Ad3W/_new 2020-03-09 18:10:53.613155965 +0100 @@ -7,20 +7,20 @@ DNS/Base.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) -diff --git a/DNS/Base.py b/DNS/Base.py -index 4a70613..b5d97c8 100644 ---- a/DNS/Base.py -+++ b/DNS/Base.py -@@ -11,7 +11,7 @@ Changes for Python3 port © 2011-14 Scott Kitterman <[email protected]> +Index: py3dns-3.2.1/DNS/Base.py +=================================================================== +--- py3dns-3.2.1.orig/DNS/Base.py ++++ py3dns-3.2.1/DNS/Base.py +@@ -11,7 +11,7 @@ Changes for Python3 port © 2011-14 Scot Base functionality. Request and Response classes, that sort of thing. """ -import socket, string, types, time, select +import socket, string, types, time, select, warnings + import errno from . import Type,Class,Opcode import asyncore - # -@@ -49,8 +49,12 @@ defaults= { 'protocol':'udp', 'port':53, 'opcode':Opcode.QUERY, +@@ -50,8 +50,12 @@ defaults= { 'protocol':'udp', 'port':53, def ParseResolvConf(resolv_path="/etc/resolv.conf"): "parses the /etc/resolv.conf file and sets defaults for name servers" @@ -35,6 +35,3 @@ def ParseResolvConfFromIterable(lines): "parses a resolv.conf formatted stream and sets defaults for name servers" --- -2.9.3 -
