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