- New upstream release 1.15.0

* IDNA 2008 support is now available if the "idna" module has been
    installed and IDNA 2008 is requested.  The default IDNA behavior
    is still IDNA 2003.  The new IDNA codec mechanism is currently
    only useful for direct calls to dns.name.from_text() or
    dns.name.from_unicode(), but in future releases it will be
    deployed throughout dnspython, e.g. so that you can read a
    masterfile with an IDNA 2008 codec in force.
    * By default, dns.name.to_unicode() is not strict about which
    version of IDNA the input complies with.  Strictness can be
    requested by using one of the strict IDNA codecs.
    * Add AVC RR support.
    * Some problems with newlines in various output modes have been
    addressed.
    * dns.name.to_text() now returns text and not bytes on Python 3.x
    * More miscellaneous fixes for the Python 2/3 codeline merge.
- Include readme with readme.patch as not included in upstream tarball
- Fix a bug in the tests code with 210.patch with upstream pull request #210

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-dnspython?expand=0&rev=35
This commit is contained in:
Sebastian Wagner 2016-10-08 13:21:45 +00:00 committed by Git OBS Bridge
parent 4253a76058
commit 8a7ed01b5e
8 changed files with 681 additions and 27 deletions

23
210.patch Normal file
View File

@ -0,0 +1,23 @@
From 0add1649c91b4f56b32e73c3a6327519c6eb532e Mon Sep 17 00:00:00 2001
From: Avram Lubkin <git_hub@avram.us>
Date: Tue, 4 Oct 2016 07:32:20 -0400
Subject: [PATCH] Test creates file in wrong location
test_zone.ZoneTestCase.testToFileFilename fails with OSError: [Errno 2] No such file or directory
---
tests/test_zone.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/test_zone.py b/tests/test_zone.py
index dbc67c7..3c497a6 100644
--- tests/test_zone.py
+++ tests/test_zone.py
@@ -177,7 +177,7 @@ def testToFileBinary(self):
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,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1406421e208931a66fef38ef0106711e1da277c9f40ed935ec1ab7374c1687fc
size 144591

View File

@ -1,17 +0,0 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIVAwUAV0iNE/JLOvyMovXHAQhAZA//Y4KgyKmNlXBxbeFsjgxqypFkSvJuoQxN
Os+0mHriuYfVI1dylfxaYAnh+aye7TWaWJutQ25yKg1jbTyTTKCNTuDWqQYA7DpY
DwD2f2u8MpqlvRTkiU/v7O5lCLPvIl4slBPOGylYoWoM1I2ZzPmyj9BnhipZTtz/
oaaoxUj2IlG8tg+4tlbkCFtHKH8PuNXZ7yZcH3w+0TpVUqC/UiJLXJMRIUvIqr8C
UPL2BLC2MYJWSJqmvE91Pv/MmaJxhlo63v1RQxEzX/kDAldJC+g02TbCjqLAO5b4
W6KmGg6z6LVeTefLeJw98+I7ZpCBM00bRseFYIJ1T94BxA+3AEHYrgcyH5pWP9FC
aPqQdUhBV7lp42hLGXBGXEJtvDEgvXUqQbqf50SbnVO5HKwjMku2rzf7ddsbKgJ8
xrUazJz901VAMjX2jqJHQDcPHk+q8q0ckLCzh9wm4haCu4hHK7cWyMfnd4Pt7Xwq
u1uru12zM+Uq3BTESwJBb0L7o6dTNtYlsodjz16Ndn/v5Ctl+k3v/B7QSSCfeKvB
fdfkel0WOm8z5s3tsjqhTL9wCal+XSm4wanRB6M4rlEN1STE9UKaNKnuRsYL99Kq
bS+kdcZjq4L5wRrm8wlDUycqEXU6jaxdOdePDVMIMS6V4MmpyiiRxcnxbQdSJzSg
p/FWVBKHueE=
=g6ef
-----END PGP SIGNATURE-----

3
dnspython-1.15.0.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:11598ae5735746e63921f8eebdfdee4a2e7d0ba842ebd57ba02682d4aed8244b
size 144073

View File

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIVAwUAV+6CivJLOvyMovXHAQih4RAAkKMyzk+JuVo+g7y2r3rmC+pek7RUxXvQ
Z7FkZyu/d6btCUm2UUbGe4yLdXhjhb9ABpdzq2W9Z+UKZVifvDkvzAUziVrA3oIl
xRwRfvzaCsB13n0uOnbFGeM2ocK2tEor4JyNY1ZMR6uEMuWlfi7eXHvuwnt7WNjv
pXBboE2aQN+jR/GM+l2wwnDJCFy65QTFZCiwyR/9Kcmrf+NdYJrkAfS0MjOc8Zyi
fV5OcrI2FR6CztCx5CL7CoiiHvxh0UDVzN9Er4dt6QMnUe8f+ygc3TJofXfZ4M+2
fk/Lk6dOisU+gpOqcQuKmdk7ssO47q+Z29U/dDS7fLMf0xL7SLNTpmo9H5bEKsFb
S3Zmv54om2W0ltR5bUWLyZi6w8tATilHaIOKwBGAtPFiLNIgEApgP4GiTbysATEY
4IquLEg/Yqal3Xw2MNcCVq9WvKzAajO8z+5AHNzq0YY0hMfRjZVzb2kuaj3Vcukq
oEQGiDC5eHY3dLwXhj4QIC5fcgJGLapHy0YtUc3chF1qZsKytzKeB7wa9yFszcIb
wgOXWSmrjrlFB8RgmvWxQkTZIYHu+sYKGki0ekF76llxGLIisG/rFvwmFsbTnu/H
9L6TxKEIiwTMQoaXXteP9eJ6MEWkG04O2Hy94M7YPiBnWTlaJhe7HOuf/APYTI0u
OSJdhrag/p4=
=Ay5b
-----END PGP SIGNATURE-----

View File

@ -1,3 +1,25 @@
-------------------------------------------------------------------
Sat Oct 8 13:16:31 UTC 2016 - sebix+novell.com@sebix.at
- New upstream release 1.15.0
* IDNA 2008 support is now available if the "idna" module has been
installed and IDNA 2008 is requested. The default IDNA behavior
is still IDNA 2003. The new IDNA codec mechanism is currently
only useful for direct calls to dns.name.from_text() or
dns.name.from_unicode(), but in future releases it will be
deployed throughout dnspython, e.g. so that you can read a
masterfile with an IDNA 2008 codec in force.
* By default, dns.name.to_unicode() is not strict about which
version of IDNA the input complies with. Strictness can be
requested by using one of the strict IDNA codecs.
* Add AVC RR support.
* Some problems with newlines in various output modes have been
addressed.
* dns.name.to_text() now returns text and not bytes on Python 3.x
* More miscellaneous fixes for the Python 2/3 codeline merge.
- Include readme with readme.patch as not included in upstream tarball
- Fix a bug in the tests code with 210.patch with upstream pull request #210
-------------------------------------------------------------------
Tue Jun 14 19:58:08 UTC 2016 - sebix+novell.com@sebix.at

View File

@ -17,7 +17,7 @@
Name: python-dnspython
Version: 1.14.0
Version: 1.15.0
Release: 0
Url: http://www.dnspython.org/
Summary: A DNS toolkit for Python
@ -26,12 +26,16 @@ Group: Development/Languages/Python
Source: http://www.dnspython.org/kits/%{version}/dnspython-%{version}.tar.gz
Source2: http://www.dnspython.org/kits/%{version}/dnspython-%{version}.tar.gz.asc
Source3: python-dnspython.asc
Patch0: https://github.com/rthalley/dnspython/pull/210.patch
# Add the readme as patch as not included in the tarball
Patch1: readme.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: netcfg
BuildRequires: python-devel
BuildRequires: python-pycrypto
BuildRequires: python-setuptools
BuildRequires: unzip
Recommends: python-idna
BuildArch: noarch
%description
@ -44,6 +48,8 @@ dnspython originated at Nominum where it was developed to facilitate the testing
%prep
%setup -q -n dnspython-%{version}
chmod -x examples/*
%patch0
%patch1
%build
python setup.py build
@ -52,15 +58,13 @@ python setup.py build
python setup.py install --prefix=%{_prefix} --root=%{buildroot}
%check
pushd tests
# skip the resolver test suite as it requires an internet connection
test -f test_resolver.py && rm test_resolver.py
make check
popd
test -f tests/test_resolver.py && rm tests/test_resolver.py
python setup.py test
%files
%defattr(-,root,root)
%doc ChangeLog LICENSE examples
%defattr(-,root,root,-)
%doc ChangeLog LICENSE README.md examples
%{python_sitelib}/*
%changelog

605
readme.patch Normal file
View File

@ -0,0 +1,605 @@
--- /dev/null 1970-01-01 01:00:09.936046830 +0100
+++ README.md 2016-10-06 15:42:00.112010665 +0200
@@ -0,0 +1,602 @@
+dnspython [![Build Status](https://travis-ci.org/rthalley/dnspython.svg?branch=master)](https://travis-ci.org/rthalley/dnspython)
+
+## INTRODUCTION
+
+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.
+
+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.
+
+To see a few of the ways dnspython can be used, look in the examples/ directory.
+
+dnspython is a utility to work with DNS, `/etc/hosts` is thus not used. For
+simple forward DNS lookups, better use `socket.gethostbyname()`.
+
+dnspython originated at Nominum where it was developed to facilitate the testing
+of DNS software. Nominum has generously allowed it to be open sourced under a
+BSD-style license, and helps support its future development by continuing to
+employ the author :).
+
+## INSTALLATION
+- Many distributions have dnspython packaged for you, so you should
+ check there first.
+- If you have pip installed, you can do `pip install dnspython`
+- If not just download the source file and unzip it, then run
+ `sudo python setup.py install`
+
+## ABOUT THIS RELEASE
+
+This is dnspython 1.15.0
+
+### New since 1.14.0:
+
+* IDNA 2008 support is now available if the "idna" module has been
+ installed and IDNA 2008 is requested. The default IDNA behavior is
+ still IDNA 2003. The new IDNA codec mechanism is currently only
+ useful for direct calls to dns.name.from_text() or
+ dns.name.from_unicode(), but in future releases it will be deployed
+ throughout dnspython, e.g. so that you can read a masterfile with an
+ IDNA 2008 codec in force.
+
+* By default, dns.name.to_unicode() is not strict about which
+ version of IDNA the input complies with. Strictness can be
+ requested by using one of the strict IDNA codecs.
+
+* The AVC RR is now supported.
+
+### Bugs fixed since 1.14.0:
+
+* Some problems with newlines in various output modes have been
+ addressed.
+
+* dns.name.to_text() now returns text and not bytes on Python 3.x
+
+* Miscellaneous fixes for the Python 2/3 codeline merge.
+
+* Many "lint" fixes after the addition of pylint support.
+
+* The random number generator reseeds after a fork().
+
+### New since 1.13.0:
+
+* CSYNC RRs are now supported.
+
+* `dns/message.py` (`make_query`): Setting any value which implies EDNS will
+ turn on EDNS if `use_edns` has not been specified.
+
+### Bugs fixed since 1.13.0:
+
+* TSIG signature algorithm setting was broken by the Python 2 and Python 3 code
+ line merge.
+
+* A bug in the LOC RR destroyed N/S and E/W distinctions within a degree of the
+ equator or prime merdian respectively.
+
+* Misc. fixes to deal with fallout from the Python 2 & 3 merge.
+ Fixes #156, #157, #158, #159, #160.
+
+* Running with python optimization on caused issues when stripped docstrings
+ were referenced. Fixes #154
+
+* `dns.zone.from_text()` erroneously required the zone to be provided.
+ Fixes #153
+
+### New since 1.12.0:
+
+* Dnspython now uses a single source for Python 2 and Python 3, eliminating the
+ painful merging between the Python 2 and Python 3 branches. Thank you so much
+ to Arthur Gautier for taking on this challenge and making it work! It was a
+ big job!
+
+* Support for Python older than 2.6 dropped.
+
+* Support for Python older than 3.3 dropped.
+
+* Zone origin can be specified as a string.
+
+* A rich string representation for all DNSExceptions.
+
+* setuptools has replaced distutils
+
+* Added support for CAA, CDS, CDNSKEY, EUI48, EUI64, and URI RR types.
+
+* Names now support the pickle protocol.
+
+* Ports can be specified per-nameserver in the stub resolver.
+
+### Bugs fixed since 1.12.0:
+
+* A number of Unicode name bugs have been fixed.
+
+* `resolv.conf` processing now rejects lines with too few tokens.
+
+* NameDicts now keep the max-depth value correct, and update properly.
+
+### New since 1.11.1:
+
+* Added `dns.zone.to_text()`.
+
+* Added support for "options rotate" in `/etc/resolv.conf`.
+
+* `dns.rdtypes.ANY.DNSKEY` now has helpers functions to convert between the
+ numeric form of the flags and a set of human-friendly strings
+
+* The reverse name of an IPv6 mapped IPv4 address is now in the IPv4 reverse
+ namespace.
+
+* The test system can now run the tests without requiring dnspython to be
+ installed.
+
+* Preliminary Elliptic Curve DNSSEC Validation (requires ecdsa module)
+
+### Bugs fixed since 1.11.1:
+
+* dnspython raised an exception when reading a masterfile starting with leading
+ whitespace
+
+* dnspython was affected by a python slicing API bug present on 64-bit windows.
+
+* Unicode escaping was applied at the wrong time.
+
+* RRSIG `to_text()` did not respect the relativize setting.
+
+* APL RRs with zero rdlength were rejected.
+
+* The tokenizer could put back an unescaped token.
+
+* Making a response to a message signed with TSIG was broken.
+
+* The IXFR state machine didn't handle long IXFR diffs.
+
+### New since 1.11.0:
+
+* Nothing
+
+### Bugs fixed since 1.11.0:
+
+* `dns.resolver.Resolver` erroneously referred to `retry_servfail`
+ instead of `self.retry_servfail`.
+
+* `dns.tsigkeyring.to_text()` would fail trying to convert the keyname to text.
+
+* Multi-message TSIGs were broken for algorithms other than HMAC-MD5 because we
+ weren't passing the right digest module to the HMAC code.
+
+* `dns.dnssec._find_candidate_keys()` tried to extract the key from the wrong
+ variable name.
+
+* $GENERATE tests were not backward compatible with python 2.4.
+
+### New since 1.10.0:
+
+* $GENERATE support
+
+* TLSA RR support
+
+* Added set_flags() method to dns.resolver.Resolver
+
+### Bugs fixed since 1.10.0:
+
+* Names with offsets >= 2^14 are no longer added to the compression table.
+
+* The "::" syntax is not used to shorten a single 16-bit section of the text
+ form an IPv6 address.
+
+* Caches are now locked.
+
+* YXDOMAIN is raised if seen by the resolver.
+
+* Empty rdatasets are not printed.
+
+* DNSKEY key tags are no longer assumed to be unique.
+
+### New since 1.9.4:
+
+* Added dns.resolver.LRUCache. In this cache implementation, the cache size is
+ limited to a user-specified number of nodes, and when adding a new node to a
+ full cache the least-recently used node is removed. If you're crawling the web
+ or otherwise doing lots of resolutions and you are using a cache, switching
+ to the LRUCache is recommended.
+
+* `dns.resolver.query()` will try TCP if a UDP response is truncated.
+
+* The python socket module's DNS methods can be now be overridden with
+ implementations that use dnspython's resolver.
+
+* Old DNSSEC types KEY, NXT, and SIG have been removed.
+
+* Whitespace is allowed in SSHFP fingerprints.
+
+* Origin checking in `dns.zone.from_xfr()` can be disabled.
+
+* Trailing junk checking can be disabled.
+
+* A source port can be specified when creating a resolver query.
+
+* All EDNS values may now be specified to `dns.message.make_query()`.
+
+### Bugs fixed since 1.9.4:
+
+* IPv4 and IPv6 address processing is now stricter.
+
+* Bounds checking of slices in rdata wire processing is now more strict, and
+ bounds errors (e.g. we got less data than was expected) now raise
+ `dns.exception.FormError` rather than `IndexError`.
+
+* Specifying a source port without specifying source used to have no effect, but
+ now uses the wildcard address and the specified port.
+
+### New since 1.9.3:
+
+* Nothing.
+
+### Bugs fixed since 1.9.3:
+
+* The rdata `_wire_cmp()` routine now handles relative names.
+
+* The SIG RR implementation was missing `import struct`.
+
+### New since 1.9.2:
+
+* A boolean parameter, `raise_on_no_answer`, has been added to the `query()`
+ methods. In no-error, no-data situations, this parameter determines whether
+ `NoAnswer` should be raised or not. If True, `NoAnswer` is raised. If False,
+ then an `Answer()` object with a None rrset will be returned.
+
+* Resolver `Answer()` objects now have a canonical_name field.
+
+* Rdata now has a `__hash__` method.
+
+### Bugs fixed since 1.9.2:
+
+* Dnspython was erroneously doing case-insensitive comparisons of the names in
+ NSEC and RRSIG RRs.
+
+* We now use `is` and not `==` when testing what section an RR is in.
+
+* The resolver now disallows metaqueries.
+
+### New since 1.9.1:
+
+* Nothing.
+
+### Bugs fixed since 1.9.1:
+
+* The `dns.dnssec` module didn't work at all due to missing imports that escaped
+ detection in testing because the test suite also did the imports. The third
+ time is the charm!
+
+### New since 1.9.0:
+
+* Nothing.
+
+### Bugs fixed since 1.9.0:
+
+* The `dns.dnssec` module didn't work with DSA due to namespace contamination
+ from a "from"-style import.
+
+### New since 1.8.0:
+
+* dnspython now uses `poll()` instead of `select()` when available.
+
+* Basic DNSSEC validation can be done using `dns.dnsec.validate()` and
+ `dns.dnssec.validate_rrsig()` if you have PyCrypto 2.3 or later installed.
+ Complete secure resolution is not yet available.
+
+* Added `key_id()` to the DNSSEC module, which computes the DNSSEC key id of a
+ DNSKEY rdata.
+
+* Added `make_ds()` to the DNSSEC module, which returns the DS RR for a given
+ DNSKEY rdata.
+
+* dnspython now raises an exception if HMAC-SHA284 or HMAC-SHA512 are used with
+ a Python older than 2.5.2. (Older Pythons do not compute the correct value.)
+
+* Symbolic constants are now available for TSIG algorithm names.
+
+### Bugs fixed since 1.8.0
+
+* `dns.resolver.zone_for_name()` didn't handle a query response with a CNAME or
+ DNAME correctly in some cases.
+
+* When specifying rdata types and classes as text, Unicode strings may now be
+ used.
+
+* Hashlib compatibility issues have been fixed.
+
+* `dns.message` now imports `dns.edns`.
+
+* The TSIG algorithm value was passed incorrectly to `use_tsig()` in some cases.
+
+### New since 1.7.1:
+
+* Support for hmac-sha1, hmac-sha224, hmac-sha256, hmac-sha384 and hmac-sha512
+ has been contributed by Kevin Chen.
+
+* The tokenizer's tokens are now Token objects instead of (type, value) tuples.
+
+### Bugs fixed since 1.7.1:
+
+* Escapes in masterfiles now work correctly. Previously they were only working
+ correctly when the text involved was part of a domain name.
+
+* When constructing a DDNS update, if the `present()` method was used with a
+ single rdata, a zero TTL was not added.
+
+* The entropy pool needed locking to be thread safe.
+
+* The entropy pool's reading of `/dev/random` could cause dnspython to block.
+
+* The entropy pool did buffered reads, potentially consuming more randomness
+ than we needed.
+
+* The entropy pool did not seed with high quality randomness on Windows.
+
+* SRV records were compared incorrectly.
+
+* In the e164 query function, the resolver parameter was not used.
+
+### New since 1.7.0:
+
+* Nothing
+
+### Bugs fixed since 1.7.0:
+
+* The 1.7.0 kitting process inadvertently omitted the code for the DLV RR.
+
+* Negative DDNS prerequisites are now handled correctly.
+
+### New since 1.6.0:
+
+* Rdatas now have a `to_digestable()` method, which returns the DNSSEC canonical
+ form of the rdata, suitable for use in signature computations.
+
+* The NSEC3, NSEC3PARAM, DLV, and HIP RR types are now supported.
+
+* An entropy module has been added and is used to randomize query ids.
+
+* EDNS0 options are now supported.
+
+* UDP IXFR is now supported.
+
+* The wire format parser now has a `one_rr_per_rrset` mode, which suppresses the
+ usual coalescing of all RRs of a given type into a single RRset.
+
+* Various helpful DNSSEC-related constants are now defined.
+
+* The resolver's `query()` method now has an optional `source` parameter,
+ allowing the source IP address to be specified.
+
+### Bugs fixed since 1.6.0:
+
+* On Windows, the resolver set the domain incorrectly.
+
+* DS RR parsing only allowed one Base64 chunk.
+
+* TSIG validation didn't always use absolute names.
+
+* `NSEC.to_text()` only printed the last window.
+
+* We did not canonicalize IPv6 addresses before comparing them; we
+ would thus treat equivalent but different textual forms, e.g.
+ "1:00::1" and "1::1" as being non-equivalent.
+
+* If the peer set a TSIG error, we didn't raise an exception.
+
+* Some EDNS bugs in the message code have been fixed (see the ChangeLog
+ for details).
+
+### New since 1.5.0:
+
+* Added dns.inet.is_multicast().
+
+### Bugs fixed since 1.5.0:
+
+* If `select()` raises an exception due to EINTR, we should just `select()`
+ again.
+
+* If the queried address is a multicast address, then don't check that the
+ address of the response is the same as the address queried.
+
+* NAPTR comparisons didn't compare the preference field due to a typo.
+
+* Testing of whether a Windows NIC is enabled now works on Vista thanks to code
+ contributed by Paul Marks.
+
+### New since 1.4.0:
+
+* Answer objects now support more of the python sequence protocol, forwarding
+ the requests to the answer rrset. E.g. `for a in answer` is equivalent to
+ `for a in answer.rrset`, `answer[i]` is equivalent to `answer.rrset[i]`, and
+ `answer[i:j]` is equivalent to `answer.rrset[i:j]`.
+
+* Making requests using EDNS, including indicating DNSSEC awareness,
+ is now easier. For example, you can now say:
+ `q = dns.message.make_query('www.dnspython.org', 'MX', want_dnssec=True)`
+
+* `dns.query.xfr()` can now be used for IXFR.
+
+* Support has been added for the DHCID, IPSECKEY, and SPF RR types.
+
+* UDP messages from unexpected sources can now be ignored by setting
+ `ignore_unexpected` to True when calling `dns.query.udp`.
+
+### Bugs fixed since 1.4.0:
+
+* If `/etc/resolv.conf` didn't exist, we raised an exception instead of simply
+ using the default resolver configuration.
+
+* In `dns.resolver.Resolver._config_win32_fromkey()`, we were passing the wrong
+ variable to `self._config_win32_search()`.
+
+### New since 1.3.5:
+
+* You can now convert E.164 numbers to/from their ENUM name forms:
+ ```python
+ >>> import dns.e164
+ >>> n = dns.e164.from_e164("+1 555 1212")
+ >>> n
+ <DNS name 2.1.2.1.5.5.5.1.e164.arpa.>
+ >>> dns.e164.to_e164(n)
+ '+15551212'
+ ```
+
+* You can now convert IPv4 and IPv6 address to/from their corresponding DNS
+ reverse map names:
+ ```python
+ >>> import dns.reversename
+ >>> n = dns.reversename.from_address("127.0.0.1")
+ >>> n
+ <DNS name 1.0.0.127.in-addr.arpa.>
+ >>> dns.reversename.to_address(n)
+ '127.0.0.1'
+ ```
+
+* You can now convert between Unicode strings and their IDN ACE form:
+ ```python
+ >>> n = dns.name.from_text(u'les-\u00e9l\u00e8ves.example.')
+ >>> n
+ <DNS name xn--les-lves-50ai.example.>
+ >>> n.to_unicode()
+ u'les-\xe9l\xe8ves.example.'
+ ```
+
+* The origin parameter to `dns.zone.from_text()` and `dns.zone.to_text()` is now
+ optional. If not specified, the origin will be taken from the first $ORIGIN
+ statement in the master file.
+
+* Sanity checking of a zone can be disabled; this is useful when working with
+ files which are zone fragments.
+
+### Bugs fixed since 1.3.5:
+
+* The correct delimiter was not used when retrieving the list of nameservers
+ from the registry in certain versions of windows.
+
+* The floating-point version of latitude and longitude in LOC RRs
+ (`float_latitude` and `float_longitude`) had incorrect signs for south
+ latitudes and west longitudes.
+
+* BIND 8 TTL syntax is now accepted in all TTL-like places (i.e. SOA fields
+ refresh, retry, expire, and minimum; SIG/RRSIG field original_ttl).
+
+* TTLs are now bounds checked when their text form is parsed, and their values
+ must be in the closed interval `[0, 2^31 - 1]`.
+
+### New since 1.3.4:
+
+* In the resolver, if time goes backward a little bit, ignore it.
+
+* `zone_for_name()` has been added to the resolver module. It returns the zone
+ which is authoritative for the specified name, which is handy for dynamic
+ update. E.g.
+
+ import dns.resolver
+ print dns.resolver.zone_for_name('www.dnspython.org')
+
+ will output `"dnspython.org."` and
+ `print dns.resolver.zone_for_name('a.b.c.d.e.f.example.')`
+ will output `"."`.
+
+* The default resolver can be fetched with the `get_default_resolver()` method.
+
+* You can now get the parent (immediate superdomain) of a name by using the
+ `parent()` method.
+
+* `Zone.iterate_rdatasets()` and `Zone.iterate_rdatas()` now have a default
+ rdtype of `dns.rdatatype.ANY` like the documentation says.
+
+* A Dynamic DNS example, ddns.py, has been added.
+
+### New since 1.3.3:
+
+* The source address and port may now be specified when calling
+ `dns.query.{udp,tcp,xfr}`.
+
+* The resolver now does exponential backoff each time it runs through all of the
+ nameservers.
+
+* Rcodes which indicate a nameserver is likely to be a "permanent failure" for a
+ query cause the nameserver to be removed from the mix for that query.
+
+### New since 1.3.2:
+
+* `dns.message.Message.find_rrset()` now uses an index, vastly improving the
+ `from_wire()` performance of large messages such as zone transfers.
+
+* Added `dns.message.make_response()`, which creates a skeletal response for the
+ specified query.
+
+* Added `opcode()` and `set_opcode()` convenience methods to the
+ `dns.message.Message` class. Added the `request_payload` attribute to the
+ Message class.
+
+* The `file` parameter of `dns.name.Name.to_wire()` is now optional; if omitted,
+ the wire form will be returned as the value of the function.
+
+* `dns.zone.from_xfr()` in relativization mode incorrectly set `zone.origin` to
+ the empty name.
+
+* The masterfile parser incorrectly rejected TXT records where a value was not
+ quoted.
+
+### New since 1.3.1:
+
+* The NSEC format doesn't allow specifying types by number, so we shouldn't
+ either. (Using the unknown type format is still OK though.)
+
+* The resolver wasn't catching `dns.exception.Timeout`, so a timeout erroneously
+ caused the whole resolution to fail instead of just going on to the next
+ server.
+
+* The renderer module didn't import random, causing an exception to be raised if
+ a query id wasn't provided when a Renderer was created.
+
+* The conversion of LOC milliseconds values from text to binary was incorrect if
+ the length of the milliseconds string was not 3.
+
+### New since 1.3.0:
+
+* Added support for the SSHFP type.
+
+### New since 1.2.0:
+
+* Added support for new DNSSEC types RRSIG, NSEC, and DNSKEY.
+
+* This release fixes all known bugs.
+
+* See the ChangeLog file for more detailed information on changes since the
+ prior release.
+
+
+## REQUIREMENTS
+
+Python 2.6 or later.
+
+
+## HOME PAGE
+
+For the latest in releases, documentation, and information, visit the dnspython
+home page at http://www.dnspython.org/
+
+
+
+## DOCUMENTATION
+
+Documentation is sparse at the moment. Use pydoc, or read the HTML documentation
+at the dnspython home page, or download the HTML documentation.
+
+
+## BUG REPORTS
+
+Bug reports may be sent to bugs@dnspython.org
+
+
+## MAILING LISTS
+
+A number of mailing lists are available. Visit the dnspython home page to
+subscribe or unsubscribe.