Compare commits

..

No commits in common. "c8" and "imports/c9/python-dns-2.2.1-2.el9" have entirely different histories.

10 changed files with 361 additions and 352 deletions

2
.gitignore vendored
View File

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

View File

@ -1 +1 @@
fcb8edb4b307f68a27cd356e7b44f53512b63b5e SOURCES/dnspython-1.15.0.tar.gz
0689dbb669d348310514ca402a1f3b470708527e SOURCES/dnspython-2.2.1.tar.gz

View File

@ -0,0 +1,105 @@
From 0414551fab97825fb826882b9c23c1a3ea0b71ea Mon Sep 17 00:00:00 2001
From: Rafael Guterres Jeffman <rjeffman@redhat.com>
Date: Thu, 22 Apr 2021 10:08:41 -0300
Subject: [PATCH] Skip tests that require external network connection.
---
tests/test_async.py | 11 ++---------
tests/test_query.py | 9 ++-------
tests/test_resolver.py | 10 ++--------
tests/test_resolver_override.py | 9 ++-------
4 files changed, 8 insertions(+), 31 deletions(-)
diff --git a/tests/test_async.py b/tests/test_async.py
index 0252f22..370c6bb 100644
--- a/tests/test_async.py
+++ b/tests/test_async.py
@@ -38,15 +38,10 @@ try:
except Exception:
_ssl_available = False
-# Some tests require the internet to be available to run, so let's
-# skip those if it's not there.
-_network_available = True
-try:
- socket.gethostbyname('dnspython.org')
-except socket.gaierror:
- _network_available = False
+# RHEL 9 build environment does not have provide external network access.
+_network_available = False
# Look for systemd-resolved, as it does dangling CNAME responses incorrectly.
#
diff --git a/tests/test_query.py b/tests/test_query.py
index 2cff377..99dc873 100644
--- a/tests/test_query.py
+++ b/tests/test_query.py
@@ -36,13 +36,8 @@ import dns.query
import dns.tsigkeyring
import dns.zone
-# Some tests require the internet to be available to run, so let's
-# skip those if it's not there.
-_network_available = True
-try:
- socket.gethostbyname('dnspython.org')
-except socket.gaierror:
- _network_available = False
+# RHEL 9 build environment does not have provide external network access.
+_network_available = False
# Some tests use a "nano nameserver" for testing. It requires trio
# and threading, so try to import it and if it doesn't work, skip
diff --git a/tests/test_resolver.py b/tests/test_resolver.py
index 4f5643d..b26ab65 100644
--- a/tests/test_resolver.py
+++ b/tests/test_resolver.py
@@ -18,7 +18,6 @@
from io import StringIO
import selectors
import sys
-import socket
import time
import unittest
@@ -31,13 +30,8 @@ import dns.resolver
import dns.tsig
import dns.tsigkeyring
-# Some tests require the internet to be available to run, so let's
-# skip those if it's not there.
-_network_available = True
-try:
- socket.gethostbyname('dnspython.org')
-except socket.gaierror:
- _network_available = False
+# RHEL 9 build environment does not have provide external network access.
+_network_available = False
# Some tests use a "nano nameserver" for testing. It requires trio
# and threading, so try to import it and if it doesn't work, skip
diff --git a/tests/test_resolver_override.py b/tests/test_resolver_override.py
index ac93316..036a42e 100644
--- a/tests/test_resolver_override.py
+++ b/tests/test_resolver_override.py
@@ -9,13 +9,8 @@ import dns.rdataclass
import dns.rdatatype
import dns.resolver
-# Some tests require the internet to be available to run, so let's
-# skip those if it's not there.
-_network_available = True
-try:
- socket.gethostbyname('dnspython.org')
-except socket.gaierror:
- _network_available = False
+# RHEL 9 build environment does not have provide external network access.
+_network_available = False
@unittest.skipIf(not _network_available, "Internet not reachable")
--
2.30.2

View File

@ -0,0 +1,27 @@
diff -Naur dnspython-2.2.1-orig/pyproject.toml dnspython-2.2.1/pyproject.toml
--- dnspython-2.2.1-orig/pyproject.toml 2023-01-04 12:32:36.727371811 -0300
+++ dnspython-2.2.1/pyproject.toml 2023-01-04 12:36:36.898599002 -0300
@@ -70,4 +70,3 @@
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
-[tool.setuptools_scm]
diff -Naur dnspython-2.2.1-orig/setup.cfg dnspython-2.2.1/setup.cfg
--- dnspython-2.2.1-orig/setup.cfg 2023-01-04 12:32:36.727371811 -0300
+++ dnspython-2.2.1/setup.cfg 2023-01-04 12:36:24.587382315 -0300
@@ -1,5 +1,6 @@
[metadata]
name = dnspython
+version = 2.2.1
author = Bob Halley
author_email = halley@dnspython.org
license = ISC
@@ -46,7 +47,7 @@
dns.rdtypes.CH
python_requires = >=3.6
test_suite = tests
-setup_requires = setuptools>=44; wheel; 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

View File

@ -0,0 +1,50 @@
diff -Naur dnspython-2.2.1/tests/test_dnssec.py dnspython-2.2.1-upd/tests/test_dnssec.py
--- dnspython-2.2.1/tests/test_dnssec.py 2022-03-06 20:04:56.000000000 -0300
+++ dnspython-2.2.1-upd/tests/test_dnssec.py 2023-01-06 15:17:49.763218922 -0300
@@ -271,18 +271,22 @@
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)
@@ -290,6 +294,7 @@
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(rel_other_soa, rel_soa_rrsig, rel_keys,
@@ -358,6 +363,7 @@
dns.dnssec.validate(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)
@@ -384,6 +390,7 @@
dns.dnssec.validate_rrsig(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())

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,52 @@
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.2.1
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 and MIT
URL: http://www.dnspython.org
Source0: https://github.com/rthalley/%{pypi_name}/archive/v%{version}%{rctag}/%{pypi_name}-%{version}%{rctag}.tar.gz
Patch0: 0001-Skip-tests-that-require-external-network-connection_rhbz#1914296.patch
Patch1: 0002-Do-not-build-with-setuptools-scm_rhbz#2088661.patch
Patch2: 0003-Skip-DNSSEC-tests-with-SHA1_rhbz#2107651.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 +55,168 @@ 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
* Sat Jan 07 2023 Rafael Jeffman <rjeffman@redhat.com> - 2.2.1-2
- Remove pycache from patch 0003.
Related: rhbz#2107651
* Thu Apr 21 2022 Charalampos Stratakis <cstratak@redhat.com> - 1.15.0-11
- Fix comparison between float and None types
Resolves: rhbz#2075187
* 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
* Thu Oct 24 2019 Lumír Balhar <lbalhar@redhat.com> - 1.15.0-10
- Release bump for gating
Related: rhbz#1731081
* 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
* Wed Aug 28 2019 Lumír Balhar <lbalhar@redhat.com> - 1.15.0-9
- Fix unicode label escaping
Resolves: rhbz#1731081
* Thu Apr 22 2021 Rafael Jeffman <rjeffman@redhat.com> - 2.1.0-5
- Skip tests that require external network connection.
* Mon Aug 27 2018 Miro Hrončok <mhroncok@redhat.com> - 1.15.0-8
- Drop python2 subpackage (#1567168)
* 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
* 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
* 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 +575,3 @@ Resolves: rhbz#1731081
* Fri May 26 2006 Jeffrey C. Ollie <jeff@ocjtech.us> - 1.3.5-1
- First version for Fedora Extras