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