Compare commits

...

No commits in common. "c8" and "c9-beta" have entirely different histories.
c8 ... c9-beta

12 changed files with 412 additions and 352 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/dnspython-1.15.0.tar.gz
SOURCES/dnspython-2.3.0.tar.gz

View File

@ -1 +1 @@
fcb8edb4b307f68a27cd356e7b44f53512b63b5e SOURCES/dnspython-1.15.0.tar.gz
698b6e84cf9d0ce2a0157b3bdaf7c4a852adf3dc SOURCES/dnspython-2.3.0.tar.gz

View File

@ -0,0 +1,27 @@
From 76e10ef549aed9f1438d97b116495c312a450a34 Mon Sep 17 00:00:00 2001
From: Bob Halley <halley@dnspython.org>
Date: Wed, 18 Jan 2023 04:50:29 -0800
Subject: [PATCH 1/4] Add missing quic files to setup.py cythonize [#887].
(cherry picked from commit 211419bb0df840bab4696be3f6d9544d57df6603)
---
setup.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/setup.py b/setup.py
index c91c719..2ccaf8b 100755
--- a/setup.py
+++ b/setup.py
@@ -30,7 +30,8 @@ else:
from Cython.Build import cythonize
ext_modules = cythonize(
- ["dns/*.py", "dns/rdtypes/*.py", "dns/rdtypes/*/*.py"], language_level="3"
+ ["dns/*.py", "dns/quic/*.py", "dns/rdtypes/*.py", "dns/rdtypes/*/*.py"],
+ language_level="3",
)
kwargs = {
--
2.40.1

View File

@ -0,0 +1,112 @@
From ecf2b229bd23229928599751950eda1639cd7e05 Mon Sep 17 00:00:00 2001
From: Rafael Guterres Jeffman <rjeffman@redhat.com>
Date: Wed, 14 Jun 2023 15:17:57 -0300
Subject: [PATCH 2/4] Disable SHA1 tests.
Disable SHA1 dependent tests, as SHA1 is not available on c9s/RHEL 9.
---
tests/test_dnssec.py | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/tests/test_dnssec.py b/tests/test_dnssec.py
index 098af69..920c955 100644
--- a/tests/test_dnssec.py
+++ b/tests/test_dnssec.py
@@ -603,25 +603,30 @@ class DNSSECValidatorTestCase(unittest.TestCase):
self.assertEqual(dns.dnssec.key_id(rsamd5_keys[abs_example][0]), 30239)
self.assertEqual(dns.dnssec.key_id(rsamd5_keys[abs_example][1]), 62992)
+ @unittest.skip(reason="SHA1 is not supported.")
def testAbsoluteRSAGood(self): # type: () -> None
dns.dnssec.validate(abs_soa, abs_soa_rrsig, abs_keys, None, when)
+ @unittest.skip(reason="SHA1 is not supported.")
def testDuplicateKeytag(self): # type: () -> None
dns.dnssec.validate(
abs_soa, abs_soa_rrsig, abs_keys_duplicate_keytag, None, when
)
+ @unittest.skip(reason="SHA1 is not supported.")
def testAbsoluteRSABad(self): # type: () -> None
def bad(): # type: () -> None
dns.dnssec.validate(abs_other_soa, abs_soa_rrsig, abs_keys, None, when)
self.assertRaises(dns.dnssec.ValidationFailure, bad)
+ @unittest.skip(reason="SHA1 is not supported.")
def testRelativeRSAGood(self): # type: () -> None
dns.dnssec.validate(rel_soa, rel_soa_rrsig, rel_keys, abs_dnspython_org, when)
# test the text conversion for origin too
dns.dnssec.validate(rel_soa, rel_soa_rrsig, rel_keys, "dnspython.org", when)
+ @unittest.skip(reason="SHA1 is not supported.")
def testRelativeRSABad(self): # type: () -> None
def bad(): # type: () -> None
dns.dnssec.validate(
@@ -630,6 +635,7 @@ class DNSSECValidatorTestCase(unittest.TestCase):
self.assertRaises(dns.dnssec.ValidationFailure, bad)
+ @unittest.skip(reason="SHA1 is not supported.")
def testAbsoluteDSAGood(self): # type: () -> None
dns.dnssec.validate(
abs_dsa_soa,
@@ -742,6 +748,7 @@ class DNSSECValidatorTestCase(unittest.TestCase):
rsasha512_ns, rsasha512_ns_rrsig, rsasha512_keys, None, rsasha512_when
)
+ @unittest.skip(reason="SHA1 is not supported.")
def testWildcardGoodAndBad(self):
dns.dnssec.validate(
wildcard_txt, wildcard_txt_rrsig, wildcard_keys, None, wildcard_when
@@ -768,6 +775,7 @@ class DNSSECValidatorTestCase(unittest.TestCase):
com_txt, com_txt_rrsig[0], wildcard_keys, None, wildcard_when
)
+ @unittest.skip(reason="SHA1 is not supported.")
def testAlternateParameterFormats(self): # type: () -> None
# Pass rrset and rrsigset as (name, rdataset) tuples, not rrsets
rrset = (abs_soa.name, abs_soa.to_rdataset())
@@ -882,6 +890,7 @@ class DNSSECMiscTestCase(unittest.TestCase):
class DNSSECMakeDSTestCase(unittest.TestCase):
+ @unittest.skip(reason="SHA1 is not supported.")
def testMnemonicParser(self):
good_ds_mnemonic = dns.rdata.from_text(
dns.rdataclass.IN,
@@ -891,6 +900,7 @@ class DNSSECMakeDSTestCase(unittest.TestCase):
)
self.assertEqual(good_ds, good_ds_mnemonic)
+ @unittest.skip(reason="SHA1 is not supported.")
def testMakeExampleSHA1DS(self): # type: () -> None
algorithm: Any
for algorithm in ("SHA1", "sha1", dns.dnssec.DSDigest.SHA1):
@@ -909,6 +919,7 @@ class DNSSECMakeDSTestCase(unittest.TestCase):
)
self.assertEqual(ds, example_ds_sha1)
+ @unittest.skip(reason="SHA1 is not supported.")
def testMakeExampleSHA1DSValidationOkByPolicy(self): # type: () -> None
algorithm: Any
for algorithm in ("SHA1", "sha1", dns.dnssec.DSDigest.SHA1):
@@ -924,6 +935,7 @@ class DNSSECMakeDSTestCase(unittest.TestCase):
)
self.assertEqual(ds, example_ds_sha1)
+ @unittest.skip(reason="SHA1 is not supported.")
def testMakeExampleSHA1DSDeniedByPolicy(self): # type: () -> None
with self.assertRaises(dns.dnssec.DeniedByPolicy):
ds = dns.dnssec.make_ds(abs_example, example_sep_key, "SHA1")
@@ -1174,6 +1186,7 @@ class DNSSECSignatureTestCase(unittest.TestCase):
rrsig_template = abs_soa_rrsig[0]
data = dns.dnssec._make_rrsig_signature_data(abs_soa, rrsig_template)
+ @unittest.skip(reason="SHA1 is not supported.")
def testSignatureRSASHA1(self): # type: () -> None
key = rsa.generate_private_key(
public_exponent=65537, key_size=2048, backend=default_backend()
--
2.40.1

View File

@ -0,0 +1,34 @@
From 8c23aaa4a213624cce86caa2e452ad19123d36f4 Mon Sep 17 00:00:00 2001
From: Rafael Guterres Jeffman <rjeffman@redhat.com>
Date: Wed, 14 Jun 2023 15:24:02 -0300
Subject: [PATCH 3/4] Do not use setuptools_scm[toml] for build.
---
setup.cfg | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.cfg b/setup.cfg
index af48e0e..e9bec34 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -4,7 +4,7 @@ version = 2.3.0
author = Bob Halley
author_email = halley@dnspython.org
license = ISC
-license_file = LICENSE
+license_files = LICENSE
description = DNS toolkit
url = https://www.dnspython.org
project_urls =
@@ -46,7 +46,7 @@ packages =
dns.rdtypes.CH
python_requires = >=3.7
test_suite = tests
-setup_requires = setuptools>=44; setuptools_scm[toml]>=3.4.3
+setup_requires = setuptools>=44
[options.extras_require]
DOH = httpx>=0.21.1; h2>=4.1.0; requests; requests-toolbelt
--
2.40.1

View File

@ -0,0 +1,26 @@
From d8fea6c4e5512fd830c48035035ff3ea16b06444 Mon Sep 17 00:00:00 2001
From: Rafael Guterres Jeffman <rjeffman@redhat.com>
Date: Wed, 14 Jun 2023 17:06:47 -0300
Subject: [PATCH 4/4] Disable tests that require external internet connection
---
tests/util.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tests/util.py b/tests/util.py
index 5518b41..87ede4c 100644
--- a/tests/util.py
+++ b/tests/util.py
@@ -27,7 +27,8 @@ import dns.rdataclass
import dns.rdatatype
# Cache for is_internet_reachable()
-_internet_reachable = None
+# RHEL 9 build environment does not have provide external network access.
+_internet_reachable = False
_have_ipv4 = False
_have_ipv6 = False
--
2.40.1

View File

@ -0,0 +1,24 @@
From 9d29457ac5e8d5ab932c62c39665ac1b057040d3 Mon Sep 17 00:00:00 2001
From: Bob Halley <halley@dnspython.org>
Date: Sat, 11 Feb 2023 15:17:27 -0800
Subject: [PATCH] Add dns.quic to setup.cfg for legacy setup.py installs [#896]
---
setup.cfg | 1 +
1 file changed, 1 insertion(+)
diff --git a/setup.cfg b/setup.cfg
index bd07111..f536eee 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -40,6 +40,7 @@ provides = dns
[options]
packages =
dns
+ dns.quic
dns.rdtypes
dns.rdtypes.IN
dns.rdtypes.ANY
--
2.41.0

View File

@ -1,99 +0,0 @@
From a77e0c662c6d5b8224ac1e283aee8353bcd1536e Mon Sep 17 00:00:00 2001
From: Lumir Balhar <lbalhar@redhat.com>
Date: Mon, 22 Apr 2024 16:49:15 +0200
Subject: [PATCH] CVE-2023-29483
---
dns/query.py | 60 +++++++++++++++++++++++++++++++++++-----------------
1 file changed, 41 insertions(+), 19 deletions(-)
diff --git a/dns/query.py b/dns/query.py
index 19b9fbb..2dba3cc 100644
--- a/dns/query.py
+++ b/dns/query.py
@@ -170,6 +170,22 @@ def _addresses_equal(af, a1, a2):
return n1 == n2 and a1[1:] == a2[1:]
+def _matches_destination(af, from_address, destination, ignore_unexpected):
+ # Check that from_address is appropriate for a response to a query
+ # sent to destination.
+ if not destination:
+ return True
+ if _addresses_equal(af, from_address, destination) or (
+ dns.inet.is_multicast(destination[0]) and from_address[1:] == destination[1:]
+ ):
+ return True
+ elif ignore_unexpected:
+ return False
+ raise UnexpectedSource(
+ f"got a response from {from_address} instead of " f"{destination}"
+ )
+
+
def _destination_and_source(af, where, port, source, source_port):
# Apply defaults and compute destination and source tuples
# suitable for use in connect(), sendto(), or bind().
@@ -194,7 +210,7 @@ def _destination_and_source(af, where, port, source, source_port):
def udp(q, where, timeout=None, port=53, af=None, source=None, source_port=0,
- ignore_unexpected=False, one_rr_per_rrset=False):
+ ignore_unexpected=False, one_rr_per_rrset=False, ignore_errors=False):
"""Return the response obtained after sending a query via UDP.
@param q: the query
@@ -239,26 +255,32 @@ def udp(q, where, timeout=None, port=53, af=None, source=None, source_port=0,
while 1:
_wait_for_readable(s, expiration)
(wire, from_address) = s.recvfrom(65535)
- if _addresses_equal(af, from_address, destination) or \
- (dns.inet.is_multicast(where) and
- from_address[1:] == destination[1:]):
- break
- if not ignore_unexpected:
- raise UnexpectedSource('got a response from '
- '%s instead of %s' % (from_address,
- destination))
- finally:
- if begin_time is None:
- response_time = 0
- else:
+ if not _matches_destination(
+ s.family, from_address, destination, ignore_unexpected
+ ):
+ continue
+
response_time = time.time() - begin_time
+
+ try:
+ r = dns.message.from_wire(wire, keyring=q.keyring, request_mac=q.mac,
+ one_rr_per_rrset=one_rr_per_rrset)
+ r.time = response_time
+ except Exception:
+ if ignore_errors:
+ continue
+ else:
+ raise
+
+ if q.is_response(r):
+ return r
+ else:
+ if ignore_errors:
+ continue
+ else:
+ raise BadResponse
+ finally:
s.close()
- r = dns.message.from_wire(wire, keyring=q.keyring, request_mac=q.mac,
- one_rr_per_rrset=one_rr_per_rrset)
- r.time = response_time
- if not q.is_response(r):
- raise BadResponse
- return r
def _net_read(sock, count, expiration):
--
2.44.0

View File

@ -1,161 +0,0 @@
From c28f0584ba37cd6b0e9919dcbec652a34a420843 Mon Sep 17 00:00:00 2001
From: Lumir Balhar <lbalhar@redhat.com>
Date: Wed, 28 Aug 2019 14:10:36 +0200
Subject: [PATCH] Backported original patch from:
https://github.com/rthalley/dnspython/commit/c76aa6ac9969447220c8e807aa1e5640a6c12924
Unicode label escapify was not escapifying special characters. [Issue #339]
---
dns/name.py | 57 +++++++++++++++++++++++-----------------------
tests/test_name.py | 5 ++++
2 files changed, 34 insertions(+), 28 deletions(-)
diff --git a/dns/name.py b/dns/name.py
index 97e216c..4a064d6 100644
--- a/dns/name.py
+++ b/dns/name.py
@@ -116,20 +116,28 @@ class IDNACodec(object):
def __init__(self):
pass
+ def is_idna(self, label):
+ return label.lower().startswith(b'xn--')
+
+ def is_all_ascii(self, label):
+ for c in label:
+ if ord(c) > 0x7f:
+ return False
+ return True
+
def encode(self, label):
raise NotImplementedError
def decode(self, label):
- # We do not apply any IDNA policy on decode; we just
- downcased = label.lower()
- if downcased.startswith(b'xn--'):
+ # We do not apply any IDNA policy on decode.
+ if self.is_idna(label):
try:
- label = downcased[4:].decode('punycode')
+ label = label[4:].decode('punycode')
except Exception as e:
raise IDNAException(idna_exception=e)
else:
label = maybe_decode(label)
- return _escapify(label, True)
+ return _escapify(label)
class IDNA2003Codec(IDNACodec):
@@ -159,7 +167,7 @@ class IDNA2003Codec(IDNACodec):
if label == b'':
return u''
try:
- return _escapify(encodings.idna.ToUnicode(label), True)
+ return _escapify(encodings.idna.ToUnicode(label))
except Exception as e:
raise IDNAException(idna_exception=e)
@@ -197,12 +205,6 @@ class IDNA2008Codec(IDNACodec):
self.allow_pure_ascii = allow_pure_ascii
self.strict_decode = strict_decode
- def is_all_ascii(self, label):
- for c in label:
- if ord(c) > 0x7f:
- return False
- return True
-
def encode(self, label):
if label == '':
return b''
@@ -227,11 +229,12 @@ class IDNA2008Codec(IDNACodec):
try:
if self.uts_46:
label = idna.uts46_remap(label, False, False)
- return _escapify(idna.ulabel(label), True)
+ return _escapify(idna.ulabel(label))
except idna.IDNAError as e:
raise IDNAException(idna_exception=e)
_escaped = bytearray(b'"().;\\@$')
+_escaped_text = '"().;\\@$'
IDNA_2003_Practical = IDNA2003Codec(False)
IDNA_2003_Strict = IDNA2003Codec(True)
@@ -242,13 +245,13 @@ IDNA_2008_Strict = IDNA2008Codec(False, False, False, True)
IDNA_2008_Transitional = IDNA2008Codec(True, True, False, False)
IDNA_2008 = IDNA_2008_Practical
-def _escapify(label, unicode_mode=False):
+def _escapify(label):
"""Escape the characters in label which need it.
- @param unicode_mode: escapify only special and whitespace (<= 0x20)
- characters
@returns: the escaped string
@rtype: string"""
- if not unicode_mode:
+ if isinstance(label, bytes):
+ # Ordinary DNS label mode. Escape special characters and values
+ # < 0x20 or > 0x7f.
text = ''
if isinstance(label, text_type):
label = label.encode()
@@ -259,19 +262,17 @@ def _escapify(label, unicode_mode=False):
text += chr(c)
else:
text += '\\%03d' % c
- return text.encode()
+ return text
+ # Unicode label mode. Escape only special characters and values < 0x20
text = u''
- if isinstance(label, binary_type):
- label = label.decode()
for c in label:
- if c > u'\x20' and c < u'\x7f':
- text += c
+ if c in _escaped_text:
+ text += '\\' + c
+ elif c <= '\x20':
+ text += '\\%03d' % ord(c)
else:
- if c >= u'\x7f':
- text += c
- else:
- text += u'\\%03d' % ord(c)
+ text += c
return text
def _validate_labels(labels):
@@ -519,8 +520,8 @@ class Name(object):
l = self.labels[:-1]
else:
l = self.labels
- s = b'.'.join(map(_escapify, l))
- return maybe_decode(s)
+ s = '.'.join(map(_escapify, l))
+ return s
def to_unicode(self, omit_final_dot=False, idna_codec=None):
"""Convert name to Unicode text format.
diff --git a/tests/test_name.py b/tests/test_name.py
index f2a8773..fa1d3eb 100644
--- a/tests/test_name.py
+++ b/tests/test_name.py
@@ -255,6 +255,11 @@ class NameTestCase(unittest.TestCase):
t = dns.name.root.to_unicode()
self.assertEqual(t, '.')
+ def testToText12(self):
+ n = dns.name.from_text(r'a\.b.c')
+ t = n.to_unicode()
+ self.assertEqual(t, r'a\.b.c.')
+
def testSlice1(self):
n = dns.name.from_text(r'a.b.c.', origin=None)
s = n[:]
--
2.21.0

View File

@ -1,14 +0,0 @@
diff --git a/dns/query.py b/dns/query.py
index bfecd43..19b9fbb 100644
--- a/dns/query.py
+++ b/dns/query.py
@@ -467,7 +467,8 @@ def xfr(where, zone, rdtype=dns.rdatatype.AXFR, rdclass=dns.rdataclass.IN,
first = True
while not done:
mexpiration = _compute_expiration(timeout)
- if mexpiration is None or mexpiration > expiration:
+ if mexpiration is None or \
+ (expiration is not None and mexpiration > expiration):
mexpiration = expiration
if use_udp:
_wait_for_readable(s, expiration)

View File

@ -1,12 +0,0 @@
diff -ruN /home/avram/Desktop/dnspython-1.15.0.orig/tests/test_zone.py /home/avram/Desktop/dnspython-1.15.0/tests/test_zone.py
--- a/tests/test_zone.py 2016-09-20 12:24:02.000000000 -0400
+++ b/tests/test_zone.py 2016-10-04 07:59:39.717946790 -0400
@@ -177,7 +177,7 @@
def testToFileFilename(self):
z = dns.zone.from_file(here('example'), 'example')
try:
- z.to_file('example3-filename.out')
+ z.to_file(here('example3-filename.out'))
ok = filecmp.cmp(here('example3-filename.out'),
here('example3.good'))
finally:

View File

@ -1,33 +1,54 @@
Name: python-dns
Version: 1.15.0
Release: 12%{?dist}
%global pypi_name dnspython
%global py_package_name dns
%global rctag %{nil}
%if 0%{?rhel}
%bcond_with trio
%bcond_with curio
%bcond_with doh
%else
%bcond_without trio
%bcond_without curio
%bcond_without doh
%endif
Name: python-%{py_package_name}
Version: 2.3.0
Release: 2%{?dist}
Summary: DNS toolkit for Python
License: MIT
URL: http://www.dnspython.org/
Source0: http://www.dnspython.org/kits/%{version}/dnspython-%{version}.tar.gz
# The entire package is licensed with both licenses, see LICENSE file
License: ISC
URL: http://www.dnspython.org
Source0: https://github.com/rthalley/%{pypi_name}/archive/v%{version}%{rctag}/%{pypi_name}-%{version}%{rctag}.tar.gz
Patch0: 0001-Add-missing-quic-files-to-setup.py-cythonize-887.patch
Patch1: 0002-Disable-SHA1-tests.patch
Patch2: 0003-Do-not-use-setuptools_scm-toml-for-build.patch
Patch3: 0004-Disable-tests-that-require-external-internet-connect.patch
Patch4: 0005-Add-dns.quic-to-setup.cfg-for-legacy-setup.py-install.patch
BuildArch: noarch
Patch0: test_fails_on_missing_file.patch
# Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1731081
# Upstream issue: https://github.com/rthalley/dnspython/issues/339
Patch1: fix_unicode_label_escaping.patch
# Fixes https://bugzilla.redhat.com/show_bug.cgi?id=2075187
# Backported from upstream: https://github.com/rthalley/dnspython/commit/9fbf9b223dc26262b1cf23f623f89283ee9c8375
Patch2: float_none_comparison_fix.patch
# Fix for CVE-2023-29483
# Upstream fix:
# https://github.com/rthalley/dnspython/commit/f66e25b5f549acf66d1fb6ead13eb3cff7d09af3
# Backported to completely different codebase hence not very similar to upstream fix.
Patch3: CVE-2023-29483.patch
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-cryptography
%if %{with trio}
BuildRequires: python3-trio
%endif
%if %{with curio}
BuildRequires: python3-curio
%endif
%if %{with trio} || %{with curio}
BuildRequires: python3-sniffio
%endif
%if %{with doh}
BuildRequires: python3-requests
BuildRequires: python3-requests-toolbelt
%endif
BuildRequires: python3-idna
BuildRequires: python3-pytest
%description
%global _description %{expand:
dnspython is a DNS toolkit for Python. It supports almost all record
types. It can be used for queries, zone transfers, and dynamic
updates. It supports TSIG authenticated messages and EDNS0.
@ -36,73 +57,176 @@ dnspython provides both high and low level access to DNS. The high
level classes perform queries for data of a given name, type, and
class, and return an answer set. The low level classes allow direct
manipulation of DNS zones, messages, names, and records.
}
%description %_description
%package -n python3-%{py_package_name}
Summary: %{summary}
%package -n python3-dns
Summary: DNS toolkit for Python 3
%{?python_provide:%python_provide python3-dns}
%description -n python3-dns
dnspython3 is a DNS toolkit for Python 3. It supports almost all
record types. It can be used for queries, zone transfers, and dynamic
updates. It supports TSIG authenticated messages and EDNS0.
dnspython3 provides both high and low level access to DNS. The high
level classes perform queries for data of a given name, type, and
class, and return an answer set. The low level classes allow direct
manipulation of DNS zones, messages, names, and records.
%{?python_provide:%python_provide python3-%{py_package_name}}
%description -n python3-%{py_package_name} %_description
%prep
%autosetup -p1 -n dnspython-%{version}
%autosetup -p1 -n %{pypi_name}-%{version}%{rctag}
# strip exec permissions so that we don't pick up dependencies from docs
find examples -type f | xargs chmod a-x
%build
%py3_build
%install
%py3_install
%check
%{__python3} setup.py test
# testCanonicalNameDangling is failing with
# AssertionError: <DNS name dangling-cname.dnspython.org.> != <DNS name dangling-target.dnspython.org.>
pytest -k "not testCanonicalNameDangling"
%files -n python3-dns
# Add README.* when it is included with the source (commit a906279)
%doc ChangeLog examples
%files -n python3-%{py_package_name}
%license LICENSE
%{python3_sitelib}/*egg-info
%{python3_sitelib}/dns
%doc README.md examples
%{?python_extras_subpkg:
%pycached %exclude %{python3_sitelib}/dns/_trio_backend.py
%pycached %exclude %{python3_sitelib}/dns/_curio_backend.py
}
%{python3_sitelib}/%{py_package_name}
%{python3_sitelib}/%{pypi_name}-*.egg-info
%{?python_extras_subpkg:
%python_extras_subpkg -n python3-dns -i %{python3_sitelib}/*.egg-info dnssec idna
%if %{with doh}
%python_extras_subpkg -n python3-dns -i %{python3_sitelib}/*.egg-info doh
%endif
%if %{with trio}
%python_extras_subpkg -n python3-dns -i %{python3_sitelib}/*.egg-info trio
%pycached %{python3_sitelib}/dns/_trio_backend.py
%endif
%if %{with curio}
%python_extras_subpkg -n python3-dns -i %{python3_sitelib}/*.egg-info curio
%pycached %{python3_sitelib}/dns/_curio_backend.py
%endif
# end of python_extras_subpkg
}
%changelog
* Mon Apr 22 2024 Lumír Balhar <lbalhar@redhat.com> - 1.15.0-12
- Security fix for CVE-2023-29483
Resolves: RHEL-32630
* Mon May 26 2023 Rafael Jeffman <rjeffman@redhat.com> - 2.3.0-2
- Fix build for legacy setup.py
Related: rhbz#2177854
* Thu Apr 21 2022 Charalampos Stratakis <cstratak@redhat.com> - 1.15.0-11
- Fix comparison between float and None types
Resolves: rhbz#2075187
* Wed May 17 2023 Rafael Jeffman <rjeffman@redhat.com> - 2.3.0-1
- Rebase to version 2.3.0
Resolves: rhbz#2177854
* Thu Oct 24 2019 Lumír Balhar <lbalhar@redhat.com> - 1.15.0-10
- Release bump for gating
Related: rhbz#1731081
* Sat Jan 07 2023 Rafael Jeffman <rjeffman@redhat.com> - 2.2.1-2
- Remove pycache from patch 0003.
Related: rhbz#2107651
* Wed Aug 28 2019 Lumír Balhar <lbalhar@redhat.com> - 1.15.0-9
- Fix unicode label escaping
Resolves: rhbz#1731081
* Fri Jan 06 2023 Rafael Jeffman <rjeffman@redhat.com> - 2.2.1-1
- Rebase to version 2.2.1
Resolves: rhbz#2088661
- Disable DNSSEC tests using SHA1 due to crypto policies
Resolves: rhbz#2107651
* Mon Aug 27 2018 Miro Hrončok <mhroncok@redhat.com> - 1.15.0-8
- Drop python2 subpackage (#1567168)
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 2.1.0-6
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Mon Jun 25 2018 Petr Viktorin <pviktori@redhat.com> - 1.15.0-7
- Allow Python 2 for build
see https://hurl.corp.redhat.com/rhel8-py2
* Thu Apr 22 2021 Rafael Jeffman <rjeffman@redhat.com> - 2.1.0-5
- Skip tests that require external network connection.
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 2.1.0-4
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Tue Mar 09 2021 Christian Heimes <cheimes@redhat.com> - 2.1.0-3
- Add bconds for extras require trio, curio, and doh
- Move trio and curio backend modules into extras subpackages
- Enable python3-dns+curio meta package
- Skip failing test testCanonicalNameDangling
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.1.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Fri Jan 08 2021 Lumír Balhar <lbalhar@redhat.com> - 2.1.0-1
- Update to 2.1.0 final (#1913860)
* Fri Nov 27 2020 Lumír Balhar <lbalhar@redhat.com> - 2.1.0-0.2.rc1
- Fix upstream issue in resolve chaining
* Wed Nov 18 2020 Lumír Balhar <lbalhar@redhat.com> - 2.1.0-0.1.rc1
- Update to 2.1.0-0.1.rc1 (#1893295)
* Thu Jul 30 2020 Lumír Balhar <lbalhar@redhat.com> - 2.0.0-1
- Update to 2.0.0 (#1849341)
- python2-dns moved to its own SRPM
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.16.0-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Sun May 24 2020 Miro Hrončok <mhroncok@redhat.com> - 1.16.0-12
- Rebuilt for Python 3.9
* Tue Apr 28 2020 Lumír Balhar <lbalhar@redhat.com> - 1.16.0-11
- Switch crypto backend to python-cryptography
Related to: rhbz#1819086
* Fri Apr 17 2020 Lumír Balhar <lbalhar@redhat.com> - 1.16.0-10
- Bring python2 subpackage back
- Fix weak dependencies
* Wed Apr 15 2020 Paul Wouters <pwouters@redhat.com> - 1.16.0-9
- Remove python2 and "other_python3" support
- Resolves: rhbz#1802998 Make pycryptodomex and ecdsa weak dependencies of python-dns
- Resolves: rhbz#1801247 python-certbot-dns-rfc2136 fails to build with Python 3.9: base64.decodestring() was removed
* Mon Feb 03 2020 Miro Hrončok <mhroncok@redhat.com> - 1.16.0-8
- Drop build dependency on python2-typing
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.16.0-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Tue Jan 21 2020 Avram Lubkin <aviso@fedoraproject.org> - 1.16.0-6
- Enable unicode patch (rhbz#1731100)
- Fix collections.abc import for Python 3.9 (rhbz#1792919)
* Tue Nov 05 2019 Paul Howarth <paul@city-fan.org> - 1.16.0-5
- Use pycryptodomex instead of pycrypto
- Also use python-ecdsa (except with Python 2)
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 1.16.0-4
- Rebuilt for Python 3.8.0rc1 (#1748018)
* Tue Aug 20 2019 Miro Hrončok <mhroncok@redhat.com> - 1.16.0-3
- Reintroduce dropped python2-dns, it is still needed
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 1.16.0-2
- Rebuilt for Python 3.8
* Sat Jul 27 2019 Avram Lubkin <aviso@fedoraproject.org> - 1.16.0-1
- Latest Release
- Cleanup spec
- Patch to fix unicode escapes
- Drop el6 from master (el6 requires patch for 1.16.0)
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.15.0-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.15.0-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.15.0-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Jul 12 2018 Paul Wouters <pwouters@redhat.com> - 1.15.0-8
- Resolves: rhbz#1600418 - NVR of python-dns is lower in rawhide than in f28
* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 1.15.0-7
- Rebuilt for Python 3.7
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.15.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
@ -461,4 +585,3 @@ Resolves: rhbz#1731081
* Fri May 26 2006 Jeffrey C. Ollie <jeff@ocjtech.us> - 1.3.5-1
- First version for Fedora Extras