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