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