diff options
author | Sebastian Wagner <sebix@sebix.at> | 2016-07-03 11:31:12 +0200 |
---|---|---|
committer | Sebastian Wagner <sebix@sebix.at> | 2016-07-03 11:31:12 +0200 |
commit | f6b91add2af058d370ccc9276cb25c7686670c11 (patch) | |
tree | e3e296d641a8f80d28b02cb1a81bf22a0fb73064 /README.md | |
parent | 004c2d4d6c677985b771eb7605f05f882d653b60 (diff) | |
download | dnspython-f6b91add2af058d370ccc9276cb25c7686670c11.tar.gz |
doc: readme: fix whitespaces and markup
add links to packages
Signed-off-by: Sebastian Wagner <sebix@sebix.at>
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 290 |
1 files changed, 146 insertions, 144 deletions
@@ -4,27 +4,32 @@ dnspython [![Build Status](https://travis-ci.org/rthalley/dnspython.svg?branch=m 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. +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 +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 originated at Nominum where it was developed to facilitate -the testing of DNS software. Nominum has generously allowed it to be +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 -- If you have pip installed, you can do this +- If you have pip installed, you can do this `pip install dnspython` - If not just download the source file and unzip it, then run this `sudo python setup.py install` +Packages are available for some distributions: + * [Ubuntu](http://packages.ubuntu.com/search?keywords=dnspython&searchon=names&suite=xenial§ion=all) + * [Debian](https://packages.debian.org/search?keywords=dnspython&searchon=names&suite=stable§ion=all) + * OpenSUSE: [py2](https://software.opensuse.org/package/python-dnspython), [py3](https://software.opensuse.org/package/python3-dnspython) + ## ABOUT THIS RELEASE This is dnspython 1.14.0 @@ -33,14 +38,14 @@ 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. + `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. @@ -51,15 +56,15 @@ Bugs fixed since 1.13.0: Running with python optimization on caused issues when stripped docstrings were referenced. [issue #154] - dns.zone.from_text() erroneously required the zone to be provided. + `dns.zone.from_text()` erroneously required the zone to be provided. [issue #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! + 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. @@ -80,19 +85,19 @@ New since 1.12.0: Bugs fixed since 1.12.0: - A number of Unicode name bugs have been fixed. + A number of Unicode name bugs have been fixed. - resolv.conf processing now rejects lines with too few tokens. + `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. + Added `dns.zone.to_text()`. + + Added support for "options rotate" in `/etc/resolv.conf`. - dns.rdtypes.ANY.DNSKEY now has helpers functions to convert + `dns.rdtypes.ANY.DNSKEY` now has helpers functions to convert between the numeric form of the flags and a set of human-friendly strings @@ -108,13 +113,13 @@ 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. + RRSIG `to_text()` did not respect the relativize setting. APL RRs with zero rdlength were rejected. @@ -125,29 +130,29 @@ Bugs fixed since 1.11.1: 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.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. + 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 + `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 + + $GENERATE support TLSA RR support @@ -155,8 +160,7 @@ New since 1.10.0: Bugs fixed since 1.10.0: - Names with offsets >= 2^14 are no longer added to the compression - table. + 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. @@ -171,14 +175,14 @@ Bugs fixed since 1.10.0: New since 1.9.4: - Added dns.resolver.LRUCache. In this cache implementation, + 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 + 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 + `dns.resolver.query()` will try TCP if a UDP response is truncated. The python socket module's DNS methods can be now be overridden @@ -188,17 +192,17 @@ New since 1.9.4: Whitespace is allowed in SSHFP fingerprints. - Origin checking in dns.zone.from_xfr() can be disabled. + 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(). + 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. + 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 @@ -211,111 +215,110 @@ Bugs fixed since 1.9.4: New since 1.9.3: - Nothing. + Nothing. Bugs fixed since 1.9.3: - The rdata _wire_cmp() routine now handles relative names. + The rdata `_wire_cmp()` routine now handles relative names. - The SIG RR implementation was missing 'import struct'. + 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() + 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. + Resolver `Answer()` objects now have a canonical_name field. - Rdata now have a __hash__ method. + Rdata now has a `__hash__` method. Bugs fixed since 1.9.2: - Dnspython was erroneously doing case-insensitive comparisons + 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. + 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. + Nothing. Bugs fixed since 1.9.1: - The dns.dnssec module didn't work at all due to missing + 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! + suite also did the imports. The third time is the charm! New since 1.9.0: - Nothing. + Nothing. Bugs fixed since 1.9.0: - The dns.dnssec module didn't work with DSA due to namespace + 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. + 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 + 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 + 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 + 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 + 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 + `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 + 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. + `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 + 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. + 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 + 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 + 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 + The entropy pool's reading of `/dev/random` could cause dnspython to block. The entropy pool did buffered reads, potentially consuming more @@ -331,18 +334,18 @@ Bugs fixed since 1.7.1: New since 1.7.0: - Nothing + Nothing Bugs fixed since 1.7.0: - The 1.7.0 kitting process inadvertently omitted the code for the + 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 + Rdatas now have a `to_digestable()` method, which returns the DNSSEC canonical form of the rdata, suitable for use in signature computations. @@ -354,24 +357,24 @@ New since 1.6.0: UDP IXFR is now supported. - The wire format parser now has a 'one_rr_per_rrset' mode, which + 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. + 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. + 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. + `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. @@ -386,9 +389,9 @@ 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 `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 @@ -402,66 +405,66 @@ Bugs fixed since 1.5.0: New since 1.4.0: - Answer objects now support more of the python sequence + 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]". + E.g. `for a in answer` is equivalent to `for a in answer.rrset`, + `answer[i]` is equivalent to `answer.rrset[i]`, and 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: + is now easier. For example, you can now say: - q = dns.message.make_query('www.dnspython.org', 'MX', - want_dnssec=True) + q = dns.message.make_query('www.dnspython.org', 'MX', + want_dnssec=True) - dns.query.xfr() can now be used for IXFR. + `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. + 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 + 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(). + 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: + You can now convert E.164 numbers to/from their ENUM name + forms: - >>> 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' + >>> 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: - >>> 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' + >>> 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: - >>> 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.' + >>> 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 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 @@ -469,12 +472,12 @@ New since 1.3.5: Bugs fixed since 1.3.5: - The correct delimiter was not used when retrieving the + 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 + 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. @@ -486,39 +489,38 @@ Bugs fixed since 1.3.5: New since 1.3.4: - In the resolver, if time goes backward a little bit, ignore - it. + In the resolver, if time goes backward a little bit, ignore + it. - zone_for_name() has been added to the resolver module. 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. + name, which is handy for dynamic update. E.g. - import dns.resolver - print dns.resolver.zone_for_name('www.dnspython.org') + import dns.resolver + print dns.resolver.zone_for_name('www.dnspython.org') - will output "dnspython.org." and + will output `"dnspython.org."` and - print dns.resolver.zone_for_name('a.b.c.d.e.f.example.') + 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. + 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. + 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. + `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}. - + `dns.query.{udp,tcp,xfr}`. + The resolver now does exponential backoff each time it runs through all of the nameservers. @@ -528,23 +530,23 @@ New since 1.3.3: New since 1.3.2: - dns.message.Message.find_rrset() now uses an index, vastly - improving the from_wire() performance of large messages such + `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 + 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 + 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 + 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. + `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. @@ -552,10 +554,10 @@ New since 1.3.2: 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 + we shouldn't either. (Using the unknown type format is still OK though.) - The resolver wasn't catching dns.exception.Timeout, so a timeout + 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. @@ -563,7 +565,7 @@ New since 1.3.1: 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 + 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: @@ -596,7 +598,7 @@ dnspython home page at ## DOCUMENTATION -Documentation is sparse at the moment. Use pydoc, or read the HTML +Documentation is sparse at the moment. Use pydoc, or read the HTML documentation at the dnspython home page, or download the HTML documentation. @@ -608,5 +610,5 @@ Bug reports may be sent to bugs@dnspython.org ## MAILING LISTS -A number of mailing lists are available. Visit the dnspython home +A number of mailing lists are available. Visit the dnspython home page to subscribe or unsubscribe. |