Add CAA.
[third_party/dnspython] / ChangeLog
1 2014-09-04  Bob Halley  <halley@dnspython.org>
2
3         * Add CAA implementation.  Thanks to Brian Wellington for the
4           patch.
5
6 2014-09-01  Bob Halley  <halley@dnspython.org>
7
8         * (Version 1.12.0 released)
9
10 2014-08-31  Bob Halley  <halley@dnspython.org>
11
12         * The test system can now run the tests without requiring dnspython
13           to be installed.
14
15 2014-07-24  Bob Halley  <halley@dnspython.org>
16
17         * The 64-bit version of Python on Windows has sys.maxint set to
18           2^31-1, yet passes 2^63-1 as the "unspecified bound" value in
19           slices.  This is a bug in Python as the documentation says the
20           unspecified bound value should be sys.maxint.  We now cope with
21           this.  Thanks to Matthäus Wander for reporting the problem.
22
23 2014-06-21  Bob Halley  <halley@dnspython.org>
24
25         * When reading from a masterfile, if the first content line
26           started with leading whitespace, we raised an ugly exception
27           instead of doing the right thing, namely using the zone origin as
28           the name. [#73]  Thanks to Tassatux for reporting the issue.
29
30         * Added dns.zone.to_text() convenience method.  Thanks to Brandon
31           Whaley <redkrieg@gmail.com> for the patch.
32
33         * The /etc/resolv.conf setting "options rotate" is now understood
34           by the resolver.  If present, the resolver will shuffle the
35           nameserver list each time dns.resolver.query() is called.  Thanks
36           to underrun for the patch.  Note that you don't want to add
37           "options rotate" to your /etc/resolv.conf if your system's
38           resolver library does not understand it.  In this case, just set
39           resolver.rotate = True by hand.
40
41 2014-06-19  Bob Halley  <halley@dnspython.org>
42
43         * Escaping of Unicode has been corrected.  Previously we escaped
44           and then converted to Unicode, but the right thing to do is
45           convert to Unicode, then escape.  Also, characters > 0x7f should
46           NOT be escaped in Unicode mode.  Thanks to Martin Basti for the
47           patch.
48
49         * dns.rdtypes.ANY.DNSKEY now has helpers functions to convert
50           between the numeric form of the flags and a set of human-friendly
51           strings.  Thanks to Petr Spacek for the patch.
52
53         * RRSIGs did not respect relativization settings in to_text().
54           Thanks to Brian Smith for reporting the bug and submitting a
55           (slightly different) patch.
56
57 2014-06-18  Bob Halley  <halley@dnspython.org>
58
59         * dns/rdtypes/IN/APL.py: The APL from_wire() method did not accept an
60           rdata length of 0 as valid.  Thanks to salzmdan for reporting the
61           problem.
62
63 2014-05-31  Bob Halley  <halley@dnspython.org>
64
65         * dns/ipv6.py: Add is_mapped()
66
67         * dns/reversename.py: Lookup IPv6 mapped IPv4 addresses in the v4
68           reverse namespace.  Thanks to Devin Bayer.  Yes, I finally fixed
69           this one :)
70
71 2014-04-11  Bob Halley  <halley@dnspython.org>
72
73         * dns/zone.py: Do not put back an unescaped token.  This was
74           causing escape processing for domain names to break.  Thanks to
75           connormclaud for reporting the problem.
76
77 2014-04-04  Bob Halley  <halley@dnspython.org>
78
79         * dns/message.py: Making a response didn't work correctly if the
80           query was signed with TSIG and we knew the key.  Thanks to Jeffrey
81           Stiles for reporting the problem.
82
83 2013-12-11  Bob Halley  <halley@dnspython.org>
84
85         * dns/query.py: Fix problems with the IXFR state machine which caused
86           long diffs to fail.  Thanks to James Raftery for the fix and the
87           repeated prodding to get it applied :)
88
89 2013-09-02  Bob Halley  <halley@dnspython.org>
90
91         * (Version 1.11.1 released)
92
93 2013-09-01  Bob Halley  <halley@dnspython.org>
94
95         * dns/tsigkeyring.py (to_text): we want keyname.to_text(), not
96           dns.name.to_text(keyname).  Thangs to wangwang for the fix.
97
98 2013-08-26  Bob Halley  <halley@dnspython.org>
99
100         * dns/tsig.py (sign): multi-message TSIGs were broken for
101           algorithms other than HMAC-MD5 because we weren't passing the
102           right digest module to the HMAC code.  Thanks to salzmdan for
103           reporting the bug.
104
105 2013-08-09  Bob Halley  <halley@dnspython.org>
106
107         * dns/dnssec.py (_find_candidate_keys): we tried to extract the
108           key from the wrong variable name.  Thanks to Andrei Fokau for the
109           fix.
110
111 2013-07-08  Bob Halley  <halley@dnspython.org>
112
113         * dns/resolver.py: we want 'self.retry_servfail' not just
114           retry_servfail.  Reported by many, thanks!  Thanks to
115           Jeffrey C. Ollie for the fix.
116
117 2013-07-08  Bob Halley  <halley@dnspython.org>
118
119         * tests/grange.py: fix tests to use older-style print formatting
120           for backwards compatibility with python 2.4.  Thanks to
121           Jeffrey C. Ollie for the fix.
122
123 2013-07-01  Bob Halley  <halley@dnspython.org>
124
125         * (Version 1.11.0 released)
126
127 2013-04-28  Bob Halley  <halley@dnspython.org>
128
129         * dns/name.py (Name.to_wire): Do not add items with offsets >= 2^14
130           to the compression table.  Thanks to Casey Deccio for discovering
131           this bug.
132
133 2013-04-26  Bob Halley  <halley@dnspython.org>
134
135         * dns/ipv6.py (inet_ntoa): We now comply with RFC 5952 section
136           5.2.2, by *not* using the :: syntax to shorten just one 16-bit
137           field.  Thanks to David Waitzman for reporting the bug and
138           suggesting the fix.
139
140 2013-03-31  Bob Halley  <halley@dnspython.org>
141
142         * lock caches in case they are shared
143
144         * raise YXDOMAIN if we see one
145
146         * do not print empty rdatasets
147
148         * Add contributed $GENERATE support (thanks uberj)
149
150         * Remove DNSKEY keytag uniqueness assumption (RFC 4034, section 8)
151           (thanks James Dempsey)
152
153 2012-09-25  Sean Leach
154
155         * added set_flags() method to dns.resolver.Resolver
156
157 2012-09-25  Pieter Lexis
158
159         * added support for TLSA RR
160
161 2012-08-28  Bob Halley  <halley@dnspython.org>
162
163         * dns/rdtypes/ANY/NSEC3.py (NSEC3.from_text): The NSEC3 from_text()
164           method could erroneously emit empty bitmap windows (i.e. windows
165           with a count of 0 bytes); such bitmaps are illegal.
166
167 2012-04-08  Bob Halley  <halley@dnspython.org>
168
169         * (Version 1.10.0 released)
170
171 2012-04-08  Bob Halley  <halley@dnspython.org>
172
173         * dns/message.py (make_query): All EDNS values may now be
174           specified when calling make_query()
175
176         * dns/query.py: Specifying source_port had no effect if source was
177           not specified.  We now use the appropriate wildcard source in
178           that case.
179
180         * dns/resolver.py (Resolver.query): source_port may now be
181           specified.
182
183         * dns/resolver.py (Resolver.query): Switch to TCP when a UDP
184           response is truncated.  Handle nameservers that serve on UDP
185           but not TCP.
186
187 2012-04-07  Bob Halley  <halley@dnspython.org>
188
189         * dns/zone.py (from_xfr): dns.zone.from_xfr() now takes a
190           'check_origin' parameter which defaults to True.  If set to
191           False, then dnspython will not make origin checks on the zone.
192           Thanks to Carlos Perez for the report.
193
194         * dns/rdtypes/ANY/SSHFP.py (SSHFP.from_text): Allow whitespace in
195           the text string.  Thanks to Jan Andres for the report and the
196           patch.
197
198         * dns/message.py (from_wire): dns.message.from_wire() now takes
199           an 'ignore_trailing' parameter which defaults to False.  If set
200           to True, then trailing junk will be ignored instead of causing
201           TrailingJunk to be raised.  Thanks to Shane Huntley for
202           contributing the patch.
203
204 2011-08-22  Bob Halley  <halley@dnspython.org>
205
206         * dns/resolver.py: Added LRUCache.  In this cache implementation,
207           the cache size is limited to a user-specified number of nodes, and
208           when adding a new node to a full cache the least-recently used
209           node is removed.
210
211 2011-07-13  Bob Halley  <halley@dnspython.org>
212
213         * dns/resolver.py: dns.resolver.override_system_resolver()
214           overrides the socket module's versions of getaddrinfo(),
215           getnameinfo(), getfqdn(), gethostbyname(), gethostbyname_ex() and
216           gethostbyaddr() with an implementation which uses a dnspython stub
217           resolver instead of the system's stub resolver.  This can be
218           useful in testing situations where you want to control the
219           resolution behavior of python code without having to change the
220           system's resolver settings (e.g. /etc/resolv.conf).
221           dns.resolver.restore_system_resolver() undoes the change.
222
223 2011-07-08  Bob Halley  <halley@dnspython.org>
224
225         * dns/ipv4.py: dnspython now provides its own, stricter, versions
226           of IPv4 inet_ntoa() and inet_aton() instead of using the OS's
227           versions.
228
229         * dns/ipv6.py: inet_aton() now bounds checks embedded IPv4 addresses
230           more strictly.  Also, now only dns.exception.SyntaxError can be
231           raised on bad input.
232
233 2011-04-05  Bob Halley  <halley@dnspython.org>
234
235         * Old DNSSEC types (KEY, NXT, and SIG) have been removed.
236
237         * Bounds checking of slices in rdata wire processing is now more
238           strict, and bounds errors (e.g. we got less data than was
239           expected) now raise dns.exception.FormError rather than
240           IndexError.
241
242 2011-03-28  Bob Halley  <halley@dnspython.org>
243
244         * (Version 1.9.4 released)
245
246 2011-03-24  Bob Halley  <halley@dnspython.org>
247
248         * dns/rdata.py (Rdata._wire_cmp): We need to specify no
249           compression and an origin to _wire_cmp() in case names in the
250           rdata are relative names.
251
252         * dns/rdtypes/ANY/SIG.py (SIG._cmp): Add missing 'import struct'.
253           Thanks to Arfrever Frehtes Taifersar Arahesis for reporting the
254           problem.
255
256 2011-03-24  Bob Halley  <halley@dnspython.org>
257
258         * (Version 1.9.3 released)
259
260 2011-03-22  Bob Halley  <halley@dnspython.org>
261
262         * dns/resolver.py: a boolean parameter, 'raise_on_no_answer', has
263           been added to the query() methods.  In no-error, no-data
264           situations, this parameter determines whether NoAnswer should be
265           raised or not.  If True, NoAnswer is raised.  If False, then an
266           Answer() object with a None rrset will be returned.
267
268         * dns/resolver.py: Answer() objects now have a canonical_name field.
269
270 2011-01-11  Bob Halley  <halley@dnspython.org>
271
272         * Dnspython was erroneously doing case-insensitive comparisons
273           of the names in NSEC and RRSIG RRs.  Thanks to Casey Deccio for
274           reporting this bug.
275
276 2010-12-17  Bob Halley  <halley@dnspython.org>
277
278         * dns/message.py (_WireReader._get_section): use "is" and not "=="
279           when testing what section an RR is in.  Thanks to James Raftery
280           for reporting this bug.
281
282 2010-12-10  Bob Halley  <halley@dnspython.org>
283
284         * dns/resolver.py (Resolver.query): disallow metaqueries.
285
286         * dns/rdata.py (Rdata.__hash__): Added a __hash__ method for rdata.
287
288 2010-11-23  Bob Halley  <halley@dnspython.org>
289
290         * (Version 1.9.2 released)
291
292 2010-11-23  Bob Halley  <halley@dnspython.org>
293
294         * dns/dnssec.py (_need_pycrypto): DSA and RSA are modules, not
295           functions, and I didn't notice because the test suite masked
296           the bug!  *sigh*
297
298 2010-11-22  Bob Halley  <halley@dnspython.org>
299
300         * (Version 1.9.1 released)
301
302 2010-11-22  Bob Halley  <halley@dnspython.org>
303
304         * dns/dnssec.py: the "from" style import used to get DSA from
305           PyCrypto trashed a DSA constant.  Now a normal import is used
306           to avoid namespace contamination.
307
308 2010-11-20  Bob Halley  <halley@dnspython.org>
309
310         * (Version 1.9.0 released)
311
312 2010-11-07  Bob Halley  <halley@dnspython.org>
313
314         * dns/dnssec.py: Added validate() to do basic DNSSEC validation
315           (requires PyCrypto). Thanks to Brian Wellington for the patch.
316
317         * dns/hash.py: Hash compatibility handling is now its own module.
318
319 2010-10-31  Bob Halley  <halley@dnspython.org>
320
321         * dns/resolver.py (zone_for_name): A query name resulting in a
322           CNAME or DNAME response to a node which had an SOA was incorrectly
323           treated as a zone origin.  In these cases, we should just look
324           higher.  Thanks to Gert Berger for reporting this problem.
325
326         * Added zonediff.py to examples.  This program compares two zones
327           and shows the differences either in diff-like plain text, or
328           HTML.  Thanks to Dennis Kaarsemaker for contributing this
329           useful program.
330
331 2010-10-27  Bob Halley  <halley@dnspython.org>
332
333         * Incorporate a patch to use poll() instead of select() by
334           default on platforms which support it.  Thanks to
335           Peter Schüller and Spotify for the contribution.
336
337 2010-10-17  Bob Halley  <halley@dnspython.org>
338
339         * Python prior to 2.5.2 doesn't compute the correct values for
340           HMAC-SHA384 and HMAC-SHA512.  We now detect attempts to use
341           them and raise NotImplemented if the Python version is too old.
342           Thanks to Kevin Chen for reporting the problem.
343
344         * Various routines that took the string forms of rdata types and
345           classes did not permit the strings to be Unicode strings.
346           Thanks to Ryan Workman for reporting the issue.
347
348         * dns/tsig.py: Added symbolic constants for the algorithm strings.
349           E.g. you can now say dns.tsig.HMAC_MD5 instead of
350           "HMAC-MD5.SIG-ALG.REG.INT".  Thanks to Cillian Sharkey for
351           suggesting this improvement.
352
353         * dns/tsig.py (get_algorithm): fix hashlib compatibility; thanks to
354           Kevin Chen for the patch.
355
356         * dns/dnssec.py: Added key_id() and make_ds().
357
358         * dns/message.py: message.py needs to import dns.edns since it uses
359           it.
360
361 2010-05-04  Bob Halley  <halley@dnspython.org>
362
363         * dns/rrset.py (RRset.__init__): "covers" was not passed to the
364           superclass __init__().  Thanks to Shanmuga Rajan for reporting
365           the problem.
366
367 2010-03-10  Bob Halley  <halley@dnspython.org>
368
369         * The TSIG algorithm value was passed to use_tsig() incorrectly
370           in some cases.  Thanks to 'ducciovigolo' for reporting the problem.
371
372 2010-01-26  Bob Halley  <halley@dnspython.org>
373
374         * (Version 1.8.0 released)
375
376 2010-01-13  Bob Halley  <halley@dnspython.org>
377
378         * dns/dnssec.py: Added RSASHA256 and RSASHA512 codepoints; added
379           other missing codepoints to _algorithm_by_text.
380
381 2010-01-12  Bob Halley  <halley@dnspython.org>
382
383         * Escapes in masterfiles now work correctly.  Previously they were
384           only working correctly when the text involved was part of a domain
385           name.
386
387         * dns/tokenizer.py: The tokenizer's get() method now returns Token
388           objects, not (type, text) tuples.
389
390 2009-11-13  Bob Halley  <halley@dnspython.org>
391
392         * Support has been added for hmac-sha1, hmac-sha224, hmac-sha256,
393           hmac-sha384 and hmac-sha512.  Thanks to Kevin Chen for a
394           thoughtful, high quality patch.
395
396         * dns/update.py (Update::present): A zero TTL was not added if
397           present() was called with a single rdata, causing _add() to be
398           unhappy.  Thanks to Eugene Kim for reporting the problem and
399           submitting a patch.
400
401         * dns/entropy.py: Use os.urandom() if present.  Don't seed until
402           someone wants randomness.
403
404 2009-09-16  Bob Halley  <halley@dnspython.org>
405
406         * dns/entropy.py: The entropy module needs locking in order to be
407           used safely in a multithreaded environment.  Thanks to Beda Kosata
408           for reporting the problem.
409
410 2009-07-27  Bob Halley  <halley@dnspython.org>
411
412         * dns/query.py (xfr): The socket was not set to nonblocking mode.
413           Thanks to Erik Romijn for reporting this problem.
414
415 2009-07-23  Bob Halley  <halley@dnspython.org>
416
417         * dns/rdtypes/IN/SRV.py (SRV._cmp): SRV records were compared
418           incorrectly due to a cut-and-paste error.  Thanks to Tommie
419           Gannert for reporting this bug.
420
421         * dns/e164.py (query): The resolver parameter was not used.
422           Thanks to Matías Bellone for reporting this bug.
423
424 2009-06-23  Bob Halley  <halley@dnspython.org>
425
426         * dns/entropy.py (EntropyPool.__init__): open /dev/random unbuffered;
427           there's no need to consume more randomness than we need.  Thanks
428           to Brian Wellington for the patch.
429
430 2009-06-19  Bob Halley  <halley@dnspython.org>
431
432         * (Version 1.7.1 released)
433
434 2009-06-19  Bob Halley  <halley@dnspython.org>
435
436         * DLV.py was omitted from the kit
437
438         * Negative prerequisites were not handled correctly in _get_section().
439
440 2009-06-19  Bob Halley  <halley@dnspython.org>
441
442         * (Version 1.7.0 released)
443
444 2009-06-19  Bob Halley  <halley@dnspython.org>
445
446         * On Windows, the resolver set the domain incorrectly.  Thanks
447           to Brandon Carpenter for reporting this bug.
448
449         * Added a to_digestable() method to rdata classes; it returns the
450           digestable form (i.e. DNSSEC canonical form) of the rdata.  For
451           most rdata types this is the same uncompressed wire form.  For
452           certain older DNS RR types, however, domain names in the rdata
453           are downcased.
454
455        * Added support for the HIP RR type.
456
457 2009-06-18  Bob Halley  <halley@dnspython.org>
458
459        * Added support for the DLV RR type.
460
461        * Added various DNSSEC related constants (e.g. algorithm identifiers,
462          flag values).
463
464        * dns/tsig.py: Added support for BADTRUNC result code.
465
466        * dns/query.py (udp): When checking that addresses are the same,
467          use the binary form of the address in the comparison.  This
468          ensures that we don't treat addresses as different if they have
469          equivalent but differing textual representations.  E.g. "1:00::1"
470          and "1::1" represent the same address but are not textually equal.
471          Thanks to Kim Davies for reporting this bug.
472
473        * The resolver's query() method now has an optional 'source' parameter,
474          allowing the source IP address to be specified.  Thanks to
475          Alexander Lind for suggesting the change and sending a patch.
476
477        * Added NSEC3 and NSEC3PARAM support.
478
479 2009-06-17  Bob Halley  <halley@dnspython.org>
480
481         * Fixed NSEC.to_text(), which was only printing the last window.
482           Thanks to Brian Wellington for finding the problem and fixing it.
483
484 2009-03-30  Bob Halley  <halley@dnspython.org>
485
486         * dns/query.py (xfr): Allow UDP IXFRs.  Use "one_rr_per_rrset" mode when
487           doing IXFR.
488
489 2009-03-30  Bob Halley  <halley@dnspython.org>
490
491         * Add "one_rr_per_rrset" mode switch to methods which parse
492           messages from wire format (e.g. dns.message.from_wire(),
493           dns.query.udp(), dns.query.tcp()).  If set, each RR read is
494           placed in its own RRset (instead of being coalesced).
495
496 2009-03-30  Bob Halley  <halley@dnspython.org>
497
498         * Added EDNS option support.
499
500 2008-10-16  Bob Halley  <halley@dnspython.org>
501
502         * dns/rdtypes/ANY/DS.py: The from_text() parser for DS RRs did not
503           allow multiple Base64 chunks.  Thanks to Rakesh Banka for
504           finding this bug and submitting a patch.
505
506 2008-10-08  Bob Halley  <halley@dnspython.org>
507
508         * Add entropy module.
509
510         * When validating TSIGs, we need to use the absolute name.
511
512 2008-06-03  Bob Halley  <halley@dnspython.org>
513
514         * dns/message.py (Message.set_rcode): The mask used preserved the
515           extended rcode, instead of everything else in ednsflags.
516
517         * dns/message.py (Message.use_edns): ednsflags was not kept
518           coherent with the specified edns version.
519
520 2008-02-06  Bob Halley  <halley@dnspython.org>
521
522         * dns/ipv6.py (inet_aton):  We could raise an exception other than
523           dns.exception.SyntaxError in some cases.
524
525         * dns/tsig.py: Raise an exception when the peer has set a non-zero
526           TSIG error.
527
528 2007-11-25  Bob Halley  <halley@dnspython.org>
529
530         * (Version 1.6.0 released)
531
532 2007-11-25  Bob Halley  <halley@dnspython.org>
533
534         * dns/query.py (_wait_for): if select() raises an exception due to
535           EINTR, we should just select() again.
536
537 2007-06-13  Bob Halley  <halley@dnspython.org>
538
539         * dns/inet.py: Added is_multicast().
540
541         * dns/query.py (udp):  If the queried address is a multicast address, then
542           don't check that the address of the response is the same as the address
543           queried.
544
545 2007-05-24  Bob Halley  <halley@dnspython.org>
546
547         * dns/rdtypes/IN/NAPTR.py: NAPTR comparisons didn't compare the
548           preference field due to a typo.
549
550 2007-02-07  Bob Halley  <halley@dnspython.org>
551
552         * dns/resolver.py: Integrate code submitted by Paul Marks to
553           determine whether a Windows NIC is enabled.  The way dnspython
554           used to do this does not work on Windows Vista.
555
556 2006-12-10  Bob Halley  <halley@dnspython.org>
557
558         * (Version 1.5.0 released)
559
560 2006-11-03  Bob Halley  <halley@dnspython.org>
561
562         * dns/rdtypes/IN/DHCID.py: Added support for the DHCID RR type.
563
564 2006-11-02  Bob Halley  <halley@dnspython.org>
565
566         * dns/query.py (udp): Messages from unexpected sources can now be
567           ignored by setting ignore_unexpected to True.
568
569 2006-10-31  Bob Halley  <halley@dnspython.org>
570
571         * dns/query.py (udp): When raising UnexpectedSource, add more
572           detail about what went wrong to the exception.
573
574 2006-09-22  Bob Halley  <halley@dnspython.org>
575
576         * dns/message.py (Message.use_edns): add reasonable defaults for
577           the ednsflags, payload, and request_payload parameters.
578
579         * dns/message.py (Message.want_dnssec): add a convenience method for
580           enabling/disabling the "DNSSEC desired" flag in requests.
581
582         * dns/message.py (make_query): add "use_edns" and "want_dnssec"
583           parameters.
584
585 2006-08-17  Bob Halley  <halley@dnspython.org>
586
587         * dns/resolver.py (Resolver.read_resolv_conf): If /etc/resolv.conf
588           doesn't exist, just use the default resolver configuration (i.e.
589           the same thing we would have used if resolv.conf had existed and
590           been empty).
591
592 2006-07-26  Bob Halley  <halley@dnspython.org>
593
594         * dns/resolver.py (Resolver._config_win32_fromkey): fix
595           cut-and-paste error where we passed the wrong variable to
596           self._config_win32_search().  Thanks to David Arnold for finding
597           the bug and submitting a patch.
598
599 2006-07-20  Bob Halley  <halley@dnspython.org>
600
601         * dns/resolver.py (Answer): Add more support for the sequence
602           protocol, forwarding requests to the answer object's rrset.
603           E.g. "for a in answer" is equivalent to "for a in answer.rrset",
604           "answer[i]" is equivalent to "answer.rrset[i]", and
605           "answer[i:j]" is equivalent to "answer.rrset[i:j]".
606
607 2006-07-19  Bob Halley  <halley@dnspython.org>
608
609         * dns/query.py (xfr): Add IXFR support.
610
611 2006-06-22  Bob Halley  <halley@dnspython.org>
612
613         * dns/rdtypes/IN/IPSECKEY.py: Added support for the IPSECKEY RR type.
614
615 2006-06-21  Bob Halley  <halley@dnspython.org>
616
617         * dns/rdtypes/ANY/SPF.py: Added support for the SPF RR type.
618
619 2006-06-02  Bob Halley  <halley@dnspython.org>
620
621         * (Version 1.4.0 released)
622
623 2006-04-25  Bob Halley  <halley@dnspython.org>
624
625         * dns/rrset.py (RRset.to_rdataset): Added a convenience method
626           to convert an rrset into an rdataset.
627
628 2006-03-27  Bob Halley  <halley@dnspython.org>
629
630         * Added dns.e164.query().  This function can be used to look for
631           NAPTR RRs for a specified number in several domains, e.g.:
632
633                 dns.e164.query('16505551212',
634                                ['e164.dnspython.org.', 'e164.arpa.'])
635
636 2006-03-26  Bob Halley  <halley@dnspython.org>
637
638         * dns/resolver.py (Resolver.query): The resolver deleted from
639           a list while iterating it, which makes the iterator unhappy.
640
641 2006-03-17  Bob Halley  <halley@dnspython.org>
642
643         * dns/resolver.py (Resolver.query): The resolver needlessly
644           delayed responses for successful queries.
645
646 2006-01-18  Bob Halley  <halley@dnspython.org>
647
648         * dns/rdata.py: added a validate() method to the rdata class.  If
649           you change an rdata by assigning to its fields, it is a good
650           idea to call validate() when you are done making changes.
651           For example, if 'r' is an MX record and then you execute:
652
653                 r.preference = 100000   # invalid, because > 65535
654                 r.validate()
655
656           The validation will fail and an exception will be raised.
657
658 2006-01-11  Bob Halley  <halley@dnspython.org>
659
660         * dns/ttl.py: TTLs are now bounds checked to be within the closed
661           interval [0, 2^31 - 1].
662
663         * The BIND 8 TTL syntax is now accepted in the SOA refresh, retry,
664           expire, and minimum fields, and in the original_ttl field of
665           SIG and RRSIG records.
666
667 2006-01-04  Bob Halley  <halley@dnspython.org>
668
669         * dns/resolver.py: The windows registry irritatingly changes the
670           list element delimiter in between ' ' and ',' (and vice-versa)
671           in various versions of windows.  We now cope by always looking
672           for either one (' ' first).
673
674 2005-12-27  Bob Halley  <halley@dnspython.org>
675
676         * dns/e164.py: Added routines to convert between E.164 numbers and
677           their ENUM domain name equivalents.
678
679         * dns/reversename.py: Added routines to convert between IPv4 and
680           IPv6 addresses and their DNS reverse-map equivalents.
681
682 2005-12-18  Bob Halley  <halley@dnspython.org>
683
684         * dns/rdtypes/ANY/LOC.py (_tuple_to_float): The sign was lost when
685           converting a tuple into a float, which broke conversions of
686           south latitudes and west longitudes.
687
688 2005-11-17  Bob Halley  <halley@dnspython.org>
689
690         * dns/zone.py: The 'origin' parameter to from_text() and from_file()
691           is now optional.  If not specified, dnspython will use the
692           first $ORIGIN in the text as the zone's origin.
693
694         * dns/zone.py: Sanity checks of the zone's origin node can now
695           be disabled.
696
697 2005-11-12  Bob Halley  <halley@dnspython.org>
698
699         * dns/name.py: Preliminary Unicode support has been added for
700           domain names.  Running dns.name.from_text() on a Unicode string
701           will now encode each label using the IDN ACE encoding.  The
702           to_unicode() method may be used to convert a dns.name.Name with
703           IDN ACE labels back into a Unicode string.  This functionality
704           requires Python 2.3 or greater.
705
706 2005-10-31  Bob Halley  <halley@dnspython.org>
707
708         * (Version 1.3.5 released)
709
710 2005-10-12  Bob Halley  <halley@dnspython.org>
711
712         * dns/zone.py: Zone.iterate_rdatasets() and Zone.iterate_rdatas()
713           did not have a default rdtype of dns.rdatatype.ANY as their
714           docstrings said they did.  They do now.
715
716 2005-10-06  Bob Halley  <halley@dnspython.org>
717
718         * dns/name.py: Added the parent() method, which returns the
719           parent of a name.
720
721 2005-10-01  Bob Halley  <halley@dnspython.org>
722
723         * dns/resolver.py: Added zone_for_name() helper, which returns
724           the name of the zone which contains the specified name.
725
726         * dns/resolver.py: Added get_default_resolver(), which returns
727           the default resolver, initializing it if necessary.
728
729 2005-09-29  Bob Halley  <halley@dnspython.org>
730
731         * dns/resolver.py (Resolver._compute_timeout): If time goes
732           backwards a little bit, ignore it.
733
734 2005-07-31  Bob Halley  <halley@dnspython.org>
735
736         * (Version 1.3.4 released)
737
738 2005-07-31  Bob Halley  <halley@dnspython.org>
739
740         * dns/message.py (make_response): Trying to respond to a response
741           threw a NameError while trying to throw a FormErr since it used
742           the wrong name for the FormErr exception.
743
744         * dns/query.py (_connect): We needed to ignore EALREADY too.
745
746         * dns/query.py: Optional "source" and "source_port" parameters
747           have been added to udp(), tcp(), and xfr().  Thanks to Ralf
748           Weber for suggesting the change and providing a patch.
749
750 2005-06-05  Bob Halley  <halley@dnspython.org>
751
752         * dns/query.py: The requirement that the "where" parameter be
753           an IPv4 or IPv6 address is now documented.
754
755 2005-06-04  Bob Halley  <halley@dnspython.org>
756
757         * dns/resolver.py: The resolver now does exponential backoff
758           each time it runs through all of the nameservers.
759
760         * dns/resolver.py: rcodes which indicate a nameserver is likely
761           to be a "permanent failure" for a query cause the nameserver
762           to be removed from the mix for that query.
763
764 2005-01-30  Bob Halley  <halley@dnspython.org>
765
766         * (Version 1.3.3 released)
767
768 2004-10-25  Bob Halley  <halley@dnspython.org>
769
770         * dns/rdtypes/ANY/TXT.py (TXT.from_text): The masterfile parser
771         incorrectly rejected TXT records where a value was not quoted.
772
773 2004-10-11  Bob Halley  <halley@dnspython.org>
774
775         * dns/message.py: Added make_response(), which creates a skeletal
776         response for the specified query.  Added opcode() and set_opcode()
777         convenience methods to the Message class.  Added the request_payload
778         attribute to the Message class.
779
780 2004-10-10  Bob Halley  <halley@dnspython.org>
781
782         * dns/zone.py (from_xfr): dns.zone.from_xfr() in relativization
783         mode incorrectly set zone.origin to the empty name.
784
785 2004-09-02  Bob Halley  <halley@dnspython.org>
786
787         * dns/name.py (Name.to_wire): The 'file' parameter to
788         Name.to_wire() is now optional; if omitted, the wire form will
789         be returned as the value of the function.
790
791 2004-08-14  Bob Halley  <halley@dnspython.org>
792
793         * dns/message.py (Message.find_rrset): find_rrset() now uses an
794         index, vastly improving the from_wire() performance of large
795         messages such as zone transfers.
796
797 2004-08-07  Bob Halley  <halley@dnspython.org>
798
799         * (Version 1.3.2 released)
800
801 2004-08-04  Bob Halley  <halley@dnspython.org>
802
803         * dns/query.py: sending queries to a nameserver via IPv6 now
804         works.
805
806         * dns/inet.py (af_for_address): Add af_for_address(), which looks
807         at a textual-form address and attempts to determine which address
808         family it is.
809
810         * dns/query.py: the default for the 'af' parameter of the udp(),
811         tcp(), and xfr() functions has been changed from AF_INET to None,
812         which causes dns.inet.af_for_address() to be used to determine the
813         address family.  If dns.inet.af_for_address() can't figure it out,
814         we fall back to AF_INET and hope for the best.
815
816 2004-07-31  Bob Halley  <halley@dnspython.org>
817
818         * dns/rdtypes/ANY/NSEC.py (NSEC.from_text): The NSEC text format
819         does not allow specifying types by number, so we shouldn't either.
820
821         * dns/renderer.py: the renderer module didn't import random,
822         causing an exception to be raised if a query id wasn't provided
823         when a Renderer was created.
824
825         * dns/resolver.py (Resolver.query): the resolver wasn't catching
826         dns.exception.Timeout, so a timeout erroneously caused the whole
827         resolution to fail instead of just going on to the next server.
828
829 2004-06-16  Bob Halley  <halley@dnspython.org>
830
831         * dns/rdtypes/ANY/LOC.py (LOC.from_text): LOC milliseconds values
832         were converted incorrectly if the length of the milliseconds
833         string was less than 3.
834
835 2004-06-06  Bob Halley  <halley@dnspython.org>
836
837         * (Version 1.3.1 released)
838
839 2004-05-22  Bob Halley  <halley@dnspython.org>
840
841         * dns/update.py (Update.delete): We erroneously specified a
842         "deleting" value of dns.rdatatype.NONE instead of
843         dns.rdataclass.NONE when the thing being deleted was either an
844         Rdataset instance or an Rdata instance.
845
846         * dns/rdtypes/ANY/SSHFP.py: Added support for the proposed SSHFP
847         RR type.
848
849 2004-05-14  Bob Halley  <halley@dnspython.org>
850
851         * dns/rdata.py (from_text): The masterfile reader did not
852         accept the unknown RR syntax when used with a known RR type.
853
854 2004-05-08  Bob Halley  <halley@dnspython.org>
855
856         * dns/name.py (from_text): dns.name.from_text() did not raise
857         an exception if a backslash escape ended prematurely.
858
859 2004-04-09  Bob Halley  <halley@dnspython.org>
860
861         * dns/zone.py (_MasterReader._rr_line): The masterfile reader
862         erroneously treated lines starting with leading whitespace but
863         not having any RR definition as an error.  It now treats
864         them like a blank line (which is not an error).
865
866 2004-04-01  Bob Halley  <halley@dnspython.org>
867
868         * (Version 1.3.0 released)
869
870 2004-03-19  Bob Halley  <halley@dnspython.org>
871
872         * Added support for new DNSSEC types RRSIG, NSEC, and DNSKEY.
873
874 2004-01-16  Bob Halley  <halley@dnspython.org>
875
876         * dns/query.py (_connect): Windows returns EWOULDBLOCK instead
877         of EINPROGRESS when trying to connect a nonblocking socket.
878
879 2003-11-13  Bob Halley  <halley@dnspython.org>
880
881         * dns/rdtypes/ANY/LOC.py (LOC.to_wire): We encoded and decoded LOC
882         incorrectly, since we were interpreting the values of altitiude,
883         size, hprec, and vprec in meters instead of centimeters.
884
885         * dns/rdtypes/IN/WKS.py (WKS.from_wire): The WKS protocol value is
886         encoded with just one octet, not two!
887
888 2003-11-09  Bob Halley  <halley@dnspython.org>
889
890         * dns/resolver.py (Cache.maybe_clean): The cleaner deleted items
891         from the dictionary while iterating it, causing a RuntimeError
892         to be raised.  Thanks to Mark R. Levinson for the bug report,
893         regression test, and fix.
894
895 2003-11-07  Bob Halley  <halley@dnspython.org>
896
897         * (Version 1.2.0 released)
898
899 2003-11-03  Bob Halley  <halley@dnspython.org>
900
901         * dns/zone.py (_MasterReader.read): The saved_state now includes
902         the default TTL.
903
904 2003-11-01  Bob Halley  <halley@dnspython.org>
905
906         * dns/tokenizer.py (Tokenizer.get): The tokenizer didn't
907         handle escaped delimiters.
908
909 2003-10-27  Bob Halley  <halley@dnspython.org>
910
911         * dns/resolver.py (Resolver.read_resolv_conf): If no nameservers
912         are configured in /etc/resolv.conf, the default nameserver
913         list should be ['127.0.0.1'].
914
915 2003-09-08  Bob Halley  <halley@dnspython.org>
916
917         * dns/resolver.py (Resolver._config_win32_fromkey): We didn't
918         catch WindowsError, which can happen if a key is not defined
919         in the registry.
920
921 2003-09-06  Bob Halley  <halley@dnspython.org>
922
923         * (Version 1.2.0b1 released)
924
925 2003-09-05  Bob Halley  <halley@dnspython.org>
926
927         * dns/query.py: Timeout support has been overhauled to provide
928         timeouts under Python 2.2 as well as 2.3, and to provide more
929         accurate expiration.
930
931 2003-08-30  Bob Halley  <halley@dnspython.org>
932
933         * dns/zone.py: dns.exception.SyntaxError is raised for unknown
934         master file directives.
935
936 2003-08-28  Bob Halley  <halley@dnspython.org>
937
938         * dns/zone.py: $INCLUDE processing is now enabled/disabled using
939         the allow_include parameter.  The default is to process $INCLUDE
940         for from_file(), and to disallow $INCLUDE for from_text().  The
941         master reader now calls zone.check_origin_node() by default after
942         the zone has been read.  find_rdataset() called get_node() instead
943         of find_node(), which result in an incorrect exception.  The
944         relativization state of a zone is now remembered and applied
945         consistently when looking up names.  from_xfr() now supports
946         relativization like the _MasterReader.
947
948 2003-08-22  Bob Halley  <halley@dnspython.org>
949
950         * dns/zone.py: The _MasterReader now understands $INCLUDE.
951
952 2003-08-12  Bob Halley  <halley@dnspython.org>
953
954         * dns/zone.py: The _MasterReader now specifies the file and line
955         number when a syntax error occurs.  The BIND 8 TTL format is now
956         understood when loading a zone, though it will never be emitted.
957         The from_file() function didn't pass the zone_factory parameter
958         to from_text().
959
960 2003-08-10  Bob Halley  <halley@dnspython.org>
961
962         * (Version 1.1.0 released)
963
964 2003-08-07  Bob Halley  <halley@dnspython.org>
965
966         * dns/update.py (Update._add): A typo meant that _add would
967         fail if the thing being added was an Rdata object (as
968         opposed to an Rdataset or the textual form of an Rdata).
969
970 2003-08-05  Bob Halley  <halley@dnspython.org>
971
972         * dns/set.py: the simple Set class has been moved to its
973         own module, and augmented to support more set operations.
974
975 2003-08-04  Bob Halley  <halley@dnspython.org>
976
977         * Node and all rdata types have been "slotted".  This speeds
978         things up a little and reduces memory usage noticeably.
979
980 2003-08-02  Bob Halley  <halley@dnspython.org>
981
982         * (Version 1.1.0c1 released)
983
984 2003-08-02  Bob Halley  <halley@dnspython.org>
985
986         * dns/rdataset.py: SimpleSets now support more set options.
987
988         * dns/message.py: Added the get_rrset() method.  from_file() now
989         allows Unicode filenames and turns on universal newline support if
990         it opens the file itself.
991
992         * dns/node.py: Added the delete_rdataset() and replace_rdataset()
993         methods.
994
995         * dns/zone.py: Added the delete_node(), delete_rdataset(), and
996         replace_rdataset() methods.  from_file() now allows Unicode
997         filenames and turns on universal newline support if it opens the
998         file itself.  Added a to_file() method.
999
1000 2003-08-01  Bob Halley  <halley@dnspython.org>
1001
1002         * dns/opcode.py: Opcode from/to text converters now understand
1003         numeric opcodes.  The to_text() method will return a numeric opcode
1004         string if it doesn't know a text name for the opcode.
1005
1006         * dns/message.py: Added set_rcode().  Fixed code where ednsflags
1007         wasn't treated as a long.
1008
1009         * dns/rcode.py: ednsflags wasn't treated as a long.  Rcode from/to
1010         text converters now understand numeric rcodes.  The to_text()
1011         method will return a numeric rcode string if it doesn't know
1012         a text name for the rcode.
1013
1014         * examples/reverse.py: Added a new example program that builds a
1015         reverse (address-to-name) mapping table from the name-to-address
1016         mapping specified by A RRs in zone files.
1017
1018         * dns/node.py: Added get_rdataset() method.
1019
1020         * dns/zone.py: Added get_rdataset() and get_rrset() methods.  Added
1021         iterate_rdatas().
1022
1023 2003-07-31  Bob Halley  <halley@dnspython.org>
1024
1025         * dns/zone.py: Added the iterate_rdatasets() method which returns
1026         a generator which yields (name, rdataset) tuples for all the
1027         rdatasets in the zone matching the specified rdatatype.
1028
1029 2003-07-30  Bob Halley  <halley@dnspython.org>
1030
1031         * (Version 1.1.0b2 released)
1032
1033 2003-07-30  Bob Halley  <halley@dnspython.org>
1034
1035         * dns/zone.py: Added find_rrset() and find_rdataset() convenience
1036         methods.  They let you retrieve rdata with the specified name
1037         and type in one call.
1038
1039         * dns/node.py: Nodes no longer have names; owner names are
1040         associated with nodes in the Zone object's nodes dictionary.
1041
1042         * dns/zone.py: Zone objects now implement more of the standard
1043         mapping interface.  __iter__ has been changed to iterate the keys
1044         rather than values to match the standard mapping interface's
1045         behavior.
1046
1047 2003-07-20  Bob Halley  <halley@dnspython.org>
1048
1049         * dns/ipv6.py (inet_ntoa): Handle embedded IPv4 addresses.
1050
1051 2003-07-19  Bob Halley  <halley@dnspython.org>
1052
1053         * (Version 1.1.0b1 released)
1054
1055 2003-07-18  Bob Halley  <halley@dnspython.org>
1056
1057         * dns/tsig.py: The TSIG validation of TCP streams where not
1058         every message is signed now works correctly.
1059
1060         * dns/zone.py: Zones can now be compared for equality and
1061         inequality.  If the other object in the comparison is also
1062         a zone, then "the right thing" happens; i.e. the zones are
1063         equal iff.: they have the same rdclass, origin, and nodes.
1064
1065 2003-07-17  Bob Halley  <halley@dnspython.org>
1066
1067         * dns/message.py (Message.use_tsig): The method now allows for
1068         greater control over the various fields in the generated signature
1069         (e.g. fudge).
1070         (_WireReader._get_section): UnknownTSIGKey is now raised if an
1071         unknown key is encountered, or if a signed message has no keyring.
1072
1073 2003-07-16  Bob Halley  <halley@dnspython.org>
1074
1075         * dns/tokenizer.py (Tokenizer._get_char): get_char and unget_char
1076         have been renamed to _get_char and _unget_char since they are not
1077         useful to clients of the tokenizer.
1078
1079 2003-07-15  Bob Halley  <halley@dnspython.org>
1080
1081         * dns/zone.py (_MasterReader._rr_line): owner names were being
1082         unconditionally relativized; it makes much more sense for them
1083         to be relativized according to the relativization setting of
1084         the reader.
1085
1086 2003-07-12  Bob Halley  <halley@dnspython.org>
1087
1088         * dns/resolver.py (Resolver.read_resolv_conf): The resolv.conf
1089         parser did not allow blank / whitespace-only lines, nor did it
1090         allow comments.  Both are now supported.
1091
1092 2003-07-11  Bob Halley  <halley@dnspython.org>
1093
1094         * dns/name.py (Name.to_digestable): to_digestable() now
1095         requires an origin to be specified if the name is relative.
1096         It will raise NeedAbsoluteNameOrOrigin if the name is
1097         relative and there is either no origin or the origin is
1098         itself relative.
1099         (Name.split): returned the wrong answer if depth was 0 or depth
1100         was the length of the name.  split() now does bounds checking
1101         on depth, and raises ValueError if depth < 0 or depth > the length
1102         of the name.
1103
1104 2003-07-10  Bob Halley  <halley@dnspython.org>
1105
1106         * dns/ipv6.py (inet_ntoa): The routine now minimizes its output
1107         strings.  E.g. the IPv6 address
1108         "0000:0000:0000:0000:0000:0000:0000:0001" is minimized to "::1".
1109         We do not, however, make any effort to display embedded IPv4
1110         addresses in the dot-quad notation.
1111
1112 2003-07-09  Bob Halley  <halley@dnspython.org>
1113
1114         * dns/inet.py: We now supply our own AF_INET and AF_INET6
1115         constants since AF_INET6 may not always be available.  If the
1116         socket module has AF_INET6, we will use it.  If not, we will
1117         use our own value for the constant.
1118
1119         * dns/query.py: the functions now take an optional af argument
1120         specifying the address family to use when creating the socket.
1121
1122         * dns/rdatatype.py (is_metatype): a typo caused the function
1123         return true only for type OPT.
1124
1125         * dns/message.py: message section list elements are now RRsets
1126         instead of Nodes.  This API change makes processing messages
1127         easier for many applications.
1128
1129 2003-07-07  Bob Halley  <halley@dnspython.org>
1130
1131         * dns/rrset.py: added.  An RRset is a named rdataset.
1132
1133         * dns/rdataset.py (Rdataset.__eq__): rdatasets may now be compared
1134         for equality and inequality with other objects.  Rdataset instance
1135         variables are now slotted.
1136
1137         * dns/message.py: The wire format and text format readers are now
1138         classes.  Variables related to reader state have been moved out
1139         of the message class.
1140
1141 2003-07-06  Bob Halley  <halley@dnspython.org>
1142
1143         * dns/name.py (from_text): '@' was not interpreted as the empty
1144         name.
1145
1146         * dns/zone.py: the master file reader derelativized names in rdata
1147         relative to the zone's origin, not relative to the current origin.
1148         The reader now deals with relativization in two steps.  The rdata
1149         is read and derelativized using the current origin.  The rdata's
1150         relativity is then chosen using the zone origin and the relativize
1151         boolean.  Here's an example.
1152
1153                 $ORIGIN foo.example.
1154                 $TTL 300
1155                 bar MX 0 blaz
1156
1157         If the zone origin is example., and relativization is on, then
1158         This fragment will become:
1159
1160                 bar.foo.example. 300 IN MX 0 blaz.foo.example.
1161
1162         after the first step (derelativization to current origin), and
1163
1164                 bar.foo 300 IN MX 0 blaz.foo
1165
1166         after the second step (relativiation to zone origin).
1167
1168         * dns/namedict.py: added.
1169
1170         * dns/zone.py: The master file reader has been made into its
1171         own class.  Reader-related instance variables have been moved
1172         form the zone class into the reader class.
1173
1174         * dns/zone.py: Add node_factory class attribute.  An application
1175         can now subclass Zone and Node and have a zone whose nodes are of
1176         the subclassed Node type.  The from_text(), from_file(), and
1177         from_xfr() algorithms now take an optional zone_factory argument.
1178         This allows the algorithms to be used to create zones whose class
1179         is a subclass of Zone.
1180
1181
1182 2003-07-04  Bob Halley  <halley@dnspython.org>
1183
1184         * dns/renderer.py: added new wire format rendering module and
1185         converted message.py to use it.  Applications which want
1186         fine-grained control over the conversion to wire format may call
1187         the renderer directy, instead of having it called on their behalf
1188         by the message code.
1189
1190 2003-07-02  Bob Halley  <halley@dnspython.org>
1191
1192         * dns/name.py (_validate_labels): The NameTooLong test was
1193         incorrect.
1194
1195         * dns/message.py (Message.to_wire): dns.exception.TooBig is
1196         now raised if the wire encoding exceeds the specified
1197         maximum size.
1198
1199 2003-07-01  Bob Halley  <halley@dnspython.org>
1200
1201         * dns/message.py: EDNS encoding was broken.  from_text()
1202         didn't parse rcodes, flags, or eflags correctly.  Comparing
1203         messages with other types of objects didn't work.
1204
1205 2003-06-30  Bob Halley  <halley@dnspython.org>
1206
1207         * (Version 1.0.0 released)
1208
1209 2003-06-30  Bob Halley  <halley@dnspython.org>
1210
1211         * dns/rdata.py: Rdatas now implement rich comparisons instead of
1212         __cmp__.
1213
1214         * dns/name.py: Names now implement rich comparisons instead of
1215         __cmp__.
1216
1217         * dns/inet.py (inet_ntop): Always use our code, since the code
1218         in the socket module doesn't support AF_INET6 conversions if
1219         IPv6 sockets are not available on the system.
1220
1221         * dns/resolver.py (Answer.__init__): A dangling CNAME chain was
1222         not raising NoAnswer.
1223
1224         * Added a simple resolver Cache class.
1225
1226         * Added an expiration attribute to answer instances.
1227
1228 2003-06-24  Bob Halley  <halley@dnspython.org>
1229
1230         * (Version 1.0.0b3 released)
1231
1232 2003-06-24  Bob Halley  <halley@dnspython.org>
1233
1234         * Renamed module "DNS" to "dns" to avoid conflicting with
1235         PyDNS.
1236
1237 2003-06-23  Bob Halley  <halley@dnspython.org>
1238
1239         * The from_text() relativization controls now work the same way as
1240         the to_text() controls.
1241
1242         * DNS/rdata.py: The parsing of generic rdata was broken.
1243
1244 2003-06-21  Bob Halley  <halley@dnspython.org>
1245
1246         * (Version 1.0.0b2 released)
1247
1248 2003-06-21  Bob Halley  <halley@dnspython.org>
1249
1250         * The Python 2.2 socket.inet_aton() doesn't seem to like
1251         '255.255.255.255'.  We work around this.
1252
1253         * Fixed bugs in rdata to_wire() and from_wire() routines of a few
1254         types.  These bugs were discovered by running the tests/zone.py
1255         Torture1 test.
1256
1257         * Added implementation of type APL.
1258
1259 2003-06-20  Bob Halley  <halley@dnspython.org>
1260
1261         * DNS/rdtypes/IN/AAAA.py: Use our own versions of inet_ntop and
1262         inet_pton if the socket module doesn't provide them for us.
1263
1264         * The resolver now does a better job handling exceptions.  In
1265         particular, it no longer eats all exceptions; rather it handles
1266         those exceptions it understands, and leaves the rest uncaught.
1267
1268         * Exceptions have been pulled into their own module.  Almost all
1269         exceptions raised by the code are now subclasses of
1270         DNS.exception.DNSException.  All form errors are subclasses of
1271         DNS.exception.FormError (which is itself a subclass of
1272         DNS.exception.DNSException).
1273
1274 2003-06-19  Bob Halley  <halley@dnspython.org>
1275
1276         * Added implementations of types DS, NXT, SIG, and WKS.
1277
1278         * __cmp__ for type A and AAAA could produce incorrect results.
1279
1280 2003-06-18  Bob Halley  <halley@dnspython.org>
1281
1282         * Started test suites for zone.py and tokenizer.py.
1283
1284         * Added implementation of type KEY.
1285
1286         * DNS/rdata.py(_base64ify): \n could be emitted erroneously.
1287
1288         * DNS/rdtypes/ANY/SOA.py (SOA.from_text): The SOA RNAME field could
1289         be set to the value of MNAME in common cases.
1290
1291         * DNS/rdtypes/ANY/X25.py: __init__ was broken.
1292
1293         * DNS/zone.py (from_text): $TTL handling erroneously caused the
1294         next line to be eaten.
1295
1296         * DNS/tokenizer.py (Tokenizer.get): parsing was broken for empty
1297         quoted strings.  Quoted strings didn't handle \ddd escapes.  Such
1298         escapes are appear not to comply with RFC 1035, but BIND allows
1299         them and they seem useful, so we allow them too.
1300
1301         * DNS/rdtypes/ANY/ISDN.py (ISDN.from_text): parsing was
1302         broken for ISDN RRs without subaddresses.
1303
1304         * DNS/zone.py (from_file): from_file() didn't work because
1305         some required parameters were not passed to from_text().
1306
1307 2003-06-17  Bob Halley  <halley@dnspython.org>
1308
1309         * (Version 1.0.0b1 released)
1310
1311 2003-06-17  Bob Halley  <halley@dnspython.org>
1312
1313         * Added implementation of type PX.
1314
1315 2003-06-16  Bob Halley  <halley@dnspython.org>
1316
1317         * Added implementation of types CERT, GPOS, LOC, NSAP, NSAP-PTR.
1318
1319         * DNS/rdatatype.py (_by_value): A cut-and-paste error had broken
1320         NSAP and NSAP-PTR.
1321
1322 2003-06-12  Bob Halley  <halley@dnspython.org>
1323
1324         * Created a tests directory and started adding tests.
1325
1326         * Added "and its documentation" to the permission grant in the
1327         license.
1328
1329 2003-06-12  Bob Halley  <halley@dnspython.org>
1330
1331         * DNS/name.py (Name.is_wild): is_wild() erroneously raised IndexError
1332         if the name was empty.
1333
1334 2003-06-10  Bob Halley  <halley@dnspython.org>
1335
1336         * Added implementations of types AFSDB, X25, and ISDN.
1337
1338         * The documentation associated with the various rdata types has been
1339         improved.  In particular, instance variables are now described.
1340
1341 2003-06-09  Bob Halley  <halley@dnspython.org>
1342
1343         * Added implementations of types HINFO, RP, and RT.
1344
1345         * DNS/message.py (make_query): Document that make_query() sets
1346         flags to DNS.flags.RD, and chooses a random query id.
1347
1348 2003-06-05  Bob Halley  <halley@dnspython.org>
1349
1350         * (Version 1.0.0a2 released)
1351
1352 2003-06-05  Bob Halley  <halley@dnspython.org>
1353
1354         * DNS/node.py: removed __getitem__ and __setitem__, since
1355         they are not used by the codebase and were not useful in
1356         general either.
1357
1358         * DNS/message.py (from_file): from_file() now allows a
1359         filename to be specified instead of a file object.
1360
1361         * DNS/rdataset.py: The is_compatible() method of the
1362         DNS.rdataset.Rdataset class was deleted.
1363
1364 2003-06-04  Bob Halley  <halley@dnspython.org>
1365
1366         * DNS/name.py (class Name): Names are now immutable.
1367
1368         * DNS/name.py: the is_comparable() method has been removed, since
1369         names are always comparable.
1370
1371         * DNS/resolver.py (Resolver.query): A query could run for up
1372         to the lifetime + the timeout.  This has been corrected and the
1373         query will now only run up to the lifetime.
1374
1375 2003-06-03  Bob Halley  <halley@dnspython.org>
1376
1377         * DNS/resolver.py: removed the 'new' function since it is not the
1378         style of the library to have such a function.  Call
1379         DNS.resolver.Resolver() to make a new resolver.
1380
1381 2003-06-03  Bob Halley  <halley@dnspython.org>
1382
1383         * DNS/resolver.py (Resolver._config_win32_fromkey): The DhcpServer
1384         list is space separated, not comma separated.
1385
1386 2003-06-03  Bob Halley  <halley@dnspython.org>
1387
1388         * DNS/update.py: Added an update module to make generating updates
1389         easier.
1390
1391 2003-06-03  Bob Halley  <halley@dnspython.org>
1392
1393         * Commas were missing in some of the __all__ entries in various
1394         __init__.py files.
1395
1396 2003-05-30  Bob Halley  <halley@dnspython.org>
1397
1398         * (Version 1.0.0a1 released)