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