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