summaryrefslogtreecommitdiff
path: root/README
blob: 008f85aea9b690ebb9f15a5ee2d1ed5e353f5f90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
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 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 :).


ABOUT THIS RELEASE

This is dnspython 1.4.0.

New since 1.3.5:

        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.>
	      >>> n.to_e164()
	      >>> 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'

	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.'

	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 accept 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.2 or later.


INSTALLATION

To build and install dnspython, type

	python setup.py install


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.