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