s3:rpc_client/rpc_transport_tstream: timeout should be unsigned int
[Samba/gbeck.git] / lib / dnspython / ChangeLog
blob91e69d3ea2f2d45ec39ff17afb1e2dce36f152d7
1 2010-11-23  Bob Halley  <halley@dnspython.org>
3         * (Version 1.9.2 released)
5 2010-11-23  Bob Halley  <halley@dnspython.org>
7         * dns/dnssec.py (_need_pycrypto): DSA and RSA are modules, not
8           functions, and I didn't notice because the test suite masked
9           the bug!  *sigh*
11 2010-11-22  Bob Halley  <halley@dnspython.org>
13         * (Version 1.9.1 released)
15 2010-11-22  Bob Halley  <halley@dnspython.org>
17         * dns/dnssec.py: the "from" style import used to get DSA from
18           PyCrypto trashed a DSA constant.  Now a normal import is used
19           to avoid namespace contamination.
21 2010-11-20  Bob Halley  <halley@dnspython.org>
23         * (Version 1.9.0 released)
25 2010-11-07  Bob Halley  <halley@dnspython.org>
27         * dns/dnssec.py: Added validate() to do basic DNSSEC validation
28           (requires PyCrypto). Thanks to Brian Wellington for the patch.
30         * dns/hash.py: Hash compatibility handling is now its own module.
32 2010-10-31  Bob Halley  <halley@dnspython.org>
34         * dns/resolver.py (zone_for_name): A query name resulting in a
35           CNAME or DNAME response to a node which had an SOA was incorrectly
36           treated as a zone origin.  In these cases, we should just look
37           higher.  Thanks to Gert Berger for reporting this problem.
39         * Added zonediff.py to examples.  This program compares two zones
40           and shows the differences either in diff-like plain text, or
41           HTML.  Thanks to Dennis Kaarsemaker for contributing this
42           useful program.
44 2010-10-27  Bob Halley  <halley@dnspython.org>
46         * Incorporate a patch to use poll() instead of select() by
47           default on platforms which support it.  Thanks to
48           Peter Schüller and Spotify for the contribution.
50 2010-10-17  Bob Halley  <halley@dnspython.org>
52         * Python prior to 2.5.2 doesn't compute the correct values for
53           HMAC-SHA384 and HMAC-SHA512.  We now detect attempts to use
54           them and raise NotImplemented if the Python version is too old.
55           Thanks to Kevin Chen for reporting the problem.
57         * Various routines that took the string forms of rdata types and
58           classes did not permit the strings to be Unicode strings.
59           Thanks to Ryan Workman for reporting the issue.
61         * dns/tsig.py: Added symbolic constants for the algorithm strings.
62           E.g. you can now say dns.tsig.HMAC_MD5 instead of
63           "HMAC-MD5.SIG-ALG.REG.INT".  Thanks to Cillian Sharkey for
64           suggesting this improvement.
66         * dns/tsig.py (get_algorithm): fix hashlib compatibility; thanks to
67           Kevin Chen for the patch.
69         * dns/dnssec.py: Added key_id() and make_ds().
71         * dns/message.py: message.py needs to import dns.edns since it uses
72           it.
74 2010-05-04  Bob Halley  <halley@dnspython.org>
76         * dns/rrset.py (RRset.__init__): "covers" was not passed to the
77           superclass __init__().  Thanks to Shanmuga Rajan for reporting
78           the problem.
80 2010-03-10  Bob Halley  <halley@dnspython.org>
82         * The TSIG algorithm value was passed to use_tsig() incorrectly
83           in some cases.  Thanks to 'ducciovigolo' for reporting the problem.
85 2010-01-26  Bob Halley  <halley@dnspython.org>
87         * (Version 1.8.0 released)
89 2010-01-13  Bob Halley  <halley@dnspython.org>
91         * dns/dnssec.py: Added RSASHA256 and RSASHA512 codepoints; added
92           other missing codepoints to _algorithm_by_text.
94 2010-01-12  Bob Halley  <halley@dnspython.org>
96         * Escapes in masterfiles now work correctly.  Previously they were
97           only working correctly when the text involved was part of a domain
98           name.
100         * dns/tokenizer.py: The tokenizer's get() method now returns Token
101           objects, not (type, text) tuples.
103 2009-11-13  Bob Halley  <halley@dnspython.org>
105         * Support has been added for hmac-sha1, hmac-sha224, hmac-sha256,
106           hmac-sha384 and hmac-sha512.  Thanks to Kevin Chen for a
107           thoughtful, high quality patch.
109         * dns/update.py (Update::present): A zero TTL was not added if
110           present() was called with a single rdata, causing _add() to be
111           unhappy.  Thanks to Eugene Kim for reporting the problem and
112           submitting a patch.
114         * dns/entropy.py: Use os.urandom() if present.  Don't seed until
115           someone wants randomness.
117 2009-09-16  Bob Halley  <halley@dnspython.org>
119         * dns/entropy.py: The entropy module needs locking in order to be
120           used safely in a multithreaded environment.  Thanks to Beda Kosata
121           for reporting the problem.
123 2009-07-27  Bob Halley  <halley@dnspython.org>
125         * dns/query.py (xfr): The socket was not set to nonblocking mode.
126           Thanks to Erik Romijn for reporting this problem.
128 2009-07-23  Bob Halley  <halley@dnspython.org>
130         * dns/rdtypes/IN/SRV.py (SRV._cmp): SRV records were compared
131           incorrectly due to a cut-and-paste error.  Thanks to Tommie
132           Gannert for reporting this bug.
134         * dns/e164.py (query): The resolver parameter was not used.
135           Thanks to Matías Bellone for reporting this bug.
137 2009-06-23  Bob Halley  <halley@dnspython.org>
139         * dns/entropy.py (EntropyPool.__init__): open /dev/random unbuffered;
140           there's no need to consume more randomness than we need.  Thanks
141           to Brian Wellington for the patch.
143 2009-06-19  Bob Halley  <halley@dnspython.org>
145         * (Version 1.7.1 released)
147 2009-06-19  Bob Halley  <halley@dnspython.org>
149         * DLV.py was omitted from the kit
151         * Negative prerequisites were not handled correctly in _get_section().
153 2009-06-19  Bob Halley  <halley@dnspython.org>
155         * (Version 1.7.0 released)
157 2009-06-19  Bob Halley  <halley@dnspython.org>
159         * On Windows, the resolver set the domain incorrectly.  Thanks
160           to Brandon Carpenter for reporting this bug.
162         * Added a to_digestable() method to rdata classes; it returns the
163           digestable form (i.e. DNSSEC canonical form) of the rdata.  For
164           most rdata types this is the same uncompressed wire form.  For
165           certain older DNS RR types, however, domain names in the rdata
166           are downcased.
168        * Added support for the HIP RR type.
170 2009-06-18  Bob Halley  <halley@dnspython.org>
172        * Added support for the DLV RR type.
174        * Added various DNSSEC related constants (e.g. algorithm identifiers,
175          flag values).
177        * dns/tsig.py: Added support for BADTRUNC result code.
179        * dns/query.py (udp): When checking that addresses are the same,
180          use the binary form of the address in the comparison.  This
181          ensures that we don't treat addresses as different if they have
182          equivalent but differing textual representations.  E.g. "1:00::1"
183          and "1::1" represent the same address but are not textually equal.
184          Thanks to Kim Davies for reporting this bug.
186        * The resolver's query() method now has an optional 'source' parameter,
187          allowing the source IP address to be specified.  Thanks to
188          Alexander Lind for suggesting the change and sending a patch.
190        * Added NSEC3 and NSEC3PARAM support.
192 2009-06-17  Bob Halley  <halley@dnspython.org>
194         * Fixed NSEC.to_text(), which was only printing the last window.
195           Thanks to Brian Wellington for finding the problem and fixing it.
197 2009-03-30  Bob Halley  <halley@dnspython.org>
199         * dns/query.py (xfr): Allow UDP IXFRs.  Use "one_rr_per_rrset" mode when
200           doing IXFR.
202 2009-03-30  Bob Halley  <halley@dnspython.org>
204         * Add "one_rr_per_rrset" mode switch to methods which parse
205           messages from wire format (e.g. dns.message.from_wire(),
206           dns.query.udp(), dns.query.tcp()).  If set, each RR read is
207           placed in its own RRset (instead of being coalesced).
209 2009-03-30  Bob Halley  <halley@dnspython.org>
211         * Added EDNS option support.
213 2008-10-16  Bob Halley  <halley@dnspython.org>
215         * dns/rdtypes/ANY/DS.py: The from_text() parser for DS RRs did not
216           allow multiple Base64 chunks.  Thanks to Rakesh Banka for
217           finding this bug and submitting a patch.
219 2008-10-08  Bob Halley  <halley@dnspython.org>
221         * Add entropy module.
223         * When validating TSIGs, we need to use the absolute name.
225 2008-06-03  Bob Halley  <halley@dnspython.org>
227         * dns/message.py (Message.set_rcode): The mask used preserved the
228           extended rcode, instead of everything else in ednsflags.
230         * dns/message.py (Message.use_edns): ednsflags was not kept
231           coherent with the specified edns version.
233 2008-02-06  Bob Halley  <halley@dnspython.org>
235         * dns/ipv6.py (inet_aton):  We could raise an exception other than
236           dns.exception.SyntaxError in some cases.
238         * dns/tsig.py: Raise an exception when the peer has set a non-zero
239           TSIG error.
241 2007-11-25  Bob Halley  <halley@dnspython.org>
243         * (Version 1.6.0 released)
245 2007-11-25  Bob Halley  <halley@dnspython.org>
247         * dns/query.py (_wait_for): if select() raises an exception due to
248           EINTR, we should just select() again.
250 2007-06-13  Bob Halley  <halley@dnspython.org>
252         * dns/inet.py: Added is_multicast().
254         * dns/query.py (udp):  If the queried address is a multicast address, then
255           don't check that the address of the response is the same as the address
256           queried.
258 2007-05-24  Bob Halley  <halley@dnspython.org>
260         * dns/rdtypes/IN/NAPTR.py: NAPTR comparisons didn't compare the
261           preference field due to a typo.
263 2007-02-07  Bob Halley  <halley@dnspython.org>
265         * dns/resolver.py: Integrate code submitted by Paul Marks to
266           determine whether a Windows NIC is enabled.  The way dnspython
267           used to do this does not work on Windows Vista.
269 2006-12-10  Bob Halley  <halley@dnspython.org>
271         * (Version 1.5.0 released)
273 2006-11-03  Bob Halley  <halley@dnspython.org>
275         * dns/rdtypes/IN/DHCID.py: Added support for the DHCID RR type.
277 2006-11-02  Bob Halley  <halley@dnspython.org>
279         * dns/query.py (udp): Messages from unexpected sources can now be
280           ignored by setting ignore_unexpected to True.
282 2006-10-31  Bob Halley  <halley@dnspython.org>
284         * dns/query.py (udp): When raising UnexpectedSource, add more
285           detail about what went wrong to the exception.
287 2006-09-22  Bob Halley  <halley@dnspython.org>
289         * dns/message.py (Message.use_edns): add reasonable defaults for
290           the ednsflags, payload, and request_payload parameters.
292         * dns/message.py (Message.want_dnssec): add a convenience method for
293           enabling/disabling the "DNSSEC desired" flag in requests.
295         * dns/message.py (make_query): add "use_edns" and "want_dnssec"
296           parameters.
298 2006-08-17  Bob Halley  <halley@dnspython.org>
300         * dns/resolver.py (Resolver.read_resolv_conf): If /etc/resolv.conf
301           doesn't exist, just use the default resolver configuration (i.e.
302           the same thing we would have used if resolv.conf had existed and
303           been empty).
305 2006-07-26  Bob Halley  <halley@dnspython.org>
307         * dns/resolver.py (Resolver._config_win32_fromkey): fix
308           cut-and-paste error where we passed the wrong variable to
309           self._config_win32_search().  Thanks to David Arnold for finding
310           the bug and submitting a patch.
312 2006-07-20  Bob Halley  <halley@dnspython.org>
314         * dns/resolver.py (Answer): Add more support for the sequence
315           protocol, forwarding requests to the answer object's rrset.
316           E.g. "for a in answer" is equivalent to "for a in answer.rrset",
317           "answer[i]" is equivalent to "answer.rrset[i]", and
318           "answer[i:j]" is equivalent to "answer.rrset[i:j]".
320 2006-07-19  Bob Halley  <halley@dnspython.org>
322         * dns/query.py (xfr): Add IXFR support.
324 2006-06-22  Bob Halley  <halley@dnspython.org>
326         * dns/rdtypes/IN/IPSECKEY.py: Added support for the IPSECKEY RR type.
328 2006-06-21  Bob Halley  <halley@dnspython.org>
330         * dns/rdtypes/ANY/SPF.py: Added support for the SPF RR type.
332 2006-06-02  Bob Halley  <halley@dnspython.org>
334         * (Version 1.4.0 released)
336 2006-04-25  Bob Halley  <halley@dnspython.org>
338         * dns/rrset.py (RRset.to_rdataset): Added a convenience method
339           to convert an rrset into an rdataset.
341 2006-03-27  Bob Halley  <halley@dnspython.org>
343         * Added dns.e164.query().  This function can be used to look for
344           NAPTR RRs for a specified number in several domains, e.g.:
346                 dns.e164.query('16505551212',
347                                ['e164.dnspython.org.', 'e164.arpa.'])
349 2006-03-26  Bob Halley  <halley@dnspython.org>
351         * dns/resolver.py (Resolver.query): The resolver deleted from
352           a list while iterating it, which makes the iterator unhappy.
354 2006-03-17  Bob Halley  <halley@dnspython.org>
356         * dns/resolver.py (Resolver.query): The resolver needlessly
357           delayed responses for successful queries.
359 2006-01-18  Bob Halley  <halley@dnspython.org>
361         * dns/rdata.py: added a validate() method to the rdata class.  If
362           you change an rdata by assigning to its fields, it is a good
363           idea to call validate() when you are done making changes.
364           For example, if 'r' is an MX record and then you execute:
366                 r.preference = 100000   # invalid, because > 65535
367                 r.validate()
369           The validation will fail and an exception will be raised.
371 2006-01-11  Bob Halley  <halley@dnspython.org>
373         * dns/ttl.py: TTLs are now bounds checked to be within the closed
374           interval [0, 2^31 - 1].
376         * The BIND 8 TTL syntax is now accepted in the SOA refresh, retry,
377           expire, and minimum fields, and in the original_ttl field of
378           SIG and RRSIG records.
380 2006-01-04  Bob Halley  <halley@dnspython.org>
382         * dns/resolver.py: The windows registry irritatingly changes the
383           list element delimiter in between ' ' and ',' (and vice-versa)
384           in various versions of windows.  We now cope by always looking
385           for either one (' ' first).
387 2005-12-27  Bob Halley  <halley@dnspython.org>
389         * dns/e164.py: Added routines to convert between E.164 numbers and
390           their ENUM domain name equivalents.
392         * dns/reversename.py: Added routines to convert between IPv4 and
393           IPv6 addresses and their DNS reverse-map equivalents.
395 2005-12-18  Bob Halley  <halley@dnspython.org>
397         * dns/rdtypes/ANY/LOC.py (_tuple_to_float): The sign was lost when
398           converting a tuple into a float, which broke conversions of
399           south latitudes and west longitudes.
401 2005-11-17  Bob Halley  <halley@dnspython.org>
403         * dns/zone.py: The 'origin' parameter to from_text() and from_file()
404           is now optional.  If not specified, dnspython will use the
405           first $ORIGIN in the text as the zone's origin.
407         * dns/zone.py: Sanity checks of the zone's origin node can now
408           be disabled.
410 2005-11-12  Bob Halley  <halley@dnspython.org>
412         * dns/name.py: Preliminary Unicode support has been added for
413           domain names.  Running dns.name.from_text() on a Unicode string
414           will now encode each label using the IDN ACE encoding.  The
415           to_unicode() method may be used to convert a dns.name.Name with
416           IDN ACE labels back into a Unicode string.  This functionality
417           requires Python 2.3 or greater.
419 2005-10-31  Bob Halley  <halley@dnspython.org>
421         * (Version 1.3.5 released)
423 2005-10-12  Bob Halley  <halley@dnspython.org>
425         * dns/zone.py: Zone.iterate_rdatasets() and Zone.iterate_rdatas()
426           did not have a default rdtype of dns.rdatatype.ANY as their
427           docstrings said they did.  They do now.
429 2005-10-06  Bob Halley  <halley@dnspython.org>
431         * dns/name.py: Added the parent() method, which returns the
432           parent of a name.
434 2005-10-01  Bob Halley  <halley@dnspython.org>
436         * dns/resolver.py: Added zone_for_name() helper, which returns
437           the name of the zone which contains the specified name.
439         * dns/resolver.py: Added get_default_resolver(), which returns
440           the default resolver, initializing it if necessary.
442 2005-09-29  Bob Halley  <halley@dnspython.org>
444         * dns/resolver.py (Resolver._compute_timeout): If time goes
445           backwards a little bit, ignore it.
447 2005-07-31  Bob Halley  <halley@dnspython.org>
449         * (Version 1.3.4 released)
451 2005-07-31  Bob Halley  <halley@dnspython.org>
453         * dns/message.py (make_response): Trying to respond to a response
454           threw a NameError while trying to throw a FormErr since it used
455           the wrong name for the FormErr exception.
457         * dns/query.py (_connect): We needed to ignore EALREADY too.
459         * dns/query.py: Optional "source" and "source_port" parameters
460           have been added to udp(), tcp(), and xfr().  Thanks to Ralf
461           Weber for suggesting the change and providing a patch.
463 2005-06-05  Bob Halley  <halley@dnspython.org>
465         * dns/query.py: The requirement that the "where" parameter be
466           an IPv4 or IPv6 address is now documented.
468 2005-06-04  Bob Halley  <halley@dnspython.org>
470         * dns/resolver.py: The resolver now does exponential backoff
471           each time it runs through all of the nameservers.
473         * dns/resolver.py: rcodes which indicate a nameserver is likely
474           to be a "permanent failure" for a query cause the nameserver
475           to be removed from the mix for that query.
477 2005-01-30  Bob Halley  <halley@dnspython.org>
479         * (Version 1.3.3 released)
481 2004-10-25  Bob Halley  <halley@dnspython.org>
483         * dns/rdtypes/ANY/TXT.py (TXT.from_text): The masterfile parser
484         incorrectly rejected TXT records where a value was not quoted.
486 2004-10-11  Bob Halley  <halley@dnspython.org>
488         * dns/message.py: Added make_response(), which creates a skeletal
489         response for the specified query.  Added opcode() and set_opcode()
490         convenience methods to the Message class.  Added the request_payload
491         attribute to the Message class.
493 2004-10-10  Bob Halley  <halley@dnspython.org>
495         * dns/zone.py (from_xfr): dns.zone.from_xfr() in relativization
496         mode incorrectly set zone.origin to the empty name.
498 2004-09-02  Bob Halley  <halley@dnspython.org>
500         * dns/name.py (Name.to_wire): The 'file' parameter to
501         Name.to_wire() is now optional; if omitted, the wire form will
502         be returned as the value of the function.
504 2004-08-14  Bob Halley  <halley@dnspython.org>
506         * dns/message.py (Message.find_rrset): find_rrset() now uses an
507         index, vastly improving the from_wire() performance of large
508         messages such as zone transfers.
510 2004-08-07  Bob Halley  <halley@dnspython.org>
512         * (Version 1.3.2 released)
514 2004-08-04  Bob Halley  <halley@dnspython.org>
516         * dns/query.py: sending queries to a nameserver via IPv6 now
517         works.
519         * dns/inet.py (af_for_address): Add af_for_address(), which looks
520         at a textual-form address and attempts to determine which address
521         family it is.
523         * dns/query.py: the default for the 'af' parameter of the udp(),
524         tcp(), and xfr() functions has been changed from AF_INET to None,
525         which causes dns.inet.af_for_address() to be used to determine the
526         address family.  If dns.inet.af_for_address() can't figure it out,
527         we fall back to AF_INET and hope for the best.
529 2004-07-31  Bob Halley  <halley@dnspython.org>
531         * dns/rdtypes/ANY/NSEC.py (NSEC.from_text): The NSEC text format
532         does not allow specifying types by number, so we shouldn't either.
534         * dns/renderer.py: the renderer module didn't import random,
535         causing an exception to be raised if a query id wasn't provided
536         when a Renderer was created.
538         * dns/resolver.py (Resolver.query): the resolver wasn't catching
539         dns.exception.Timeout, so a timeout erroneously caused the whole
540         resolution to fail instead of just going on to the next server.
542 2004-06-16  Bob Halley  <halley@dnspython.org>
544         * dns/rdtypes/ANY/LOC.py (LOC.from_text): LOC milliseconds values
545         were converted incorrectly if the length of the milliseconds
546         string was less than 3.
548 2004-06-06  Bob Halley  <halley@dnspython.org>
550         * (Version 1.3.1 released)
552 2004-05-22  Bob Halley  <halley@dnspython.org>
554         * dns/update.py (Update.delete): We erroneously specified a
555         "deleting" value of dns.rdatatype.NONE instead of
556         dns.rdataclass.NONE when the thing being deleted was either an
557         Rdataset instance or an Rdata instance.
559         * dns/rdtypes/ANY/SSHFP.py: Added support for the proposed SSHFP
560         RR type.
562 2004-05-14  Bob Halley  <halley@dnspython.org>
564         * dns/rdata.py (from_text): The masterfile reader did not
565         accept the unknown RR syntax when used with a known RR type.
567 2004-05-08  Bob Halley  <halley@dnspython.org>
569         * dns/name.py (from_text): dns.name.from_text() did not raise
570         an exception if a backslash escape ended prematurely.
572 2004-04-09  Bob Halley  <halley@dnspython.org>
574         * dns/zone.py (_MasterReader._rr_line): The masterfile reader
575         erroneously treated lines starting with leading whitespace but
576         not having any RR definition as an error.  It now treats
577         them like a blank line (which is not an error).
579 2004-04-01  Bob Halley  <halley@dnspython.org>
581         * (Version 1.3.0 released)
583 2004-03-19  Bob Halley  <halley@dnspython.org>
585         * Added support for new DNSSEC types RRSIG, NSEC, and DNSKEY.
587 2004-01-16  Bob Halley  <halley@dnspython.org>
589         * dns/query.py (_connect): Windows returns EWOULDBLOCK instead
590         of EINPROGRESS when trying to connect a nonblocking socket.
592 2003-11-13  Bob Halley  <halley@dnspython.org>
594         * dns/rdtypes/ANY/LOC.py (LOC.to_wire): We encoded and decoded LOC
595         incorrectly, since we were interpreting the values of altitiude,
596         size, hprec, and vprec in meters instead of centimeters.
598         * dns/rdtypes/IN/WKS.py (WKS.from_wire): The WKS protocol value is
599         encoded with just one octet, not two!
601 2003-11-09  Bob Halley  <halley@dnspython.org>
603         * dns/resolver.py (Cache.maybe_clean): The cleaner deleted items
604         from the dictionary while iterating it, causing a RuntimeError
605         to be raised.  Thanks to Mark R. Levinson for the bug report,
606         regression test, and fix.
608 2003-11-07  Bob Halley  <halley@dnspython.org>
610         * (Version 1.2.0 released)
612 2003-11-03  Bob Halley  <halley@dnspython.org>
614         * dns/zone.py (_MasterReader.read): The saved_state now includes
615         the default TTL.
617 2003-11-01  Bob Halley  <halley@dnspython.org>
619         * dns/tokenizer.py (Tokenizer.get): The tokenizer didn't
620         handle escaped delimiters.
622 2003-10-27  Bob Halley  <halley@dnspython.org>
624         * dns/resolver.py (Resolver.read_resolv_conf): If no nameservers
625         are configured in /etc/resolv.conf, the default nameserver
626         list should be ['127.0.0.1'].
628 2003-09-08  Bob Halley  <halley@dnspython.org>
630         * dns/resolver.py (Resolver._config_win32_fromkey): We didn't
631         catch WindowsError, which can happen if a key is not defined
632         in the registry.
634 2003-09-06  Bob Halley  <halley@dnspython.org>
636         * (Version 1.2.0b1 released)
638 2003-09-05  Bob Halley  <halley@dnspython.org>
640         * dns/query.py: Timeout support has been overhauled to provide
641         timeouts under Python 2.2 as well as 2.3, and to provide more
642         accurate expiration.
644 2003-08-30  Bob Halley  <halley@dnspython.org>
646         * dns/zone.py: dns.exception.SyntaxError is raised for unknown
647         master file directives.
649 2003-08-28  Bob Halley  <halley@dnspython.org>
651         * dns/zone.py: $INCLUDE processing is now enabled/disabled using
652         the allow_include parameter.  The default is to process $INCLUDE
653         for from_file(), and to disallow $INCLUDE for from_text().  The
654         master reader now calls zone.check_origin_node() by default after
655         the zone has been read.  find_rdataset() called get_node() instead
656         of find_node(), which result in an incorrect exception.  The
657         relativization state of a zone is now remembered and applied
658         consistently when looking up names.  from_xfr() now supports
659         relativization like the _MasterReader.
661 2003-08-22  Bob Halley  <halley@dnspython.org>
663         * dns/zone.py: The _MasterReader now understands $INCLUDE.
665 2003-08-12  Bob Halley  <halley@dnspython.org>
667         * dns/zone.py: The _MasterReader now specifies the file and line
668         number when a syntax error occurs.  The BIND 8 TTL format is now
669         understood when loading a zone, though it will never be emitted.
670         The from_file() function didn't pass the zone_factory parameter
671         to from_text().
673 2003-08-10  Bob Halley  <halley@dnspython.org>
675         * (Version 1.1.0 released)
677 2003-08-07  Bob Halley  <halley@dnspython.org>
679         * dns/update.py (Update._add): A typo meant that _add would
680         fail if the thing being added was an Rdata object (as
681         opposed to an Rdataset or the textual form of an Rdata).
683 2003-08-05  Bob Halley  <halley@dnspython.org>
685         * dns/set.py: the simple Set class has been moved to its
686         own module, and augmented to support more set operations.
688 2003-08-04  Bob Halley  <halley@dnspython.org>
690         * Node and all rdata types have been "slotted".  This speeds
691         things up a little and reduces memory usage noticeably.
693 2003-08-02  Bob Halley  <halley@dnspython.org>
695         * (Version 1.1.0c1 released)
697 2003-08-02  Bob Halley  <halley@dnspython.org>
699         * dns/rdataset.py: SimpleSets now support more set options.
701         * dns/message.py: Added the get_rrset() method.  from_file() now
702         allows Unicode filenames and turns on universal newline support if
703         it opens the file itself.
705         * dns/node.py: Added the delete_rdataset() and replace_rdataset()
706         methods.
708         * dns/zone.py: Added the delete_node(), delete_rdataset(), and
709         replace_rdataset() methods.  from_file() now allows Unicode
710         filenames and turns on universal newline support if it opens the
711         file itself.  Added a to_file() method.
713 2003-08-01  Bob Halley  <halley@dnspython.org>
715         * dns/opcode.py: Opcode from/to text converters now understand
716         numeric opcodes.  The to_text() method will return a numeric opcode
717         string if it doesn't know a text name for the opcode.
719         * dns/message.py: Added set_rcode().  Fixed code where ednsflags
720         wasn't treated as a long.
722         * dns/rcode.py: ednsflags wasn't treated as a long.  Rcode from/to
723         text converters now understand numeric rcodes.  The to_text()
724         method will return a numeric rcode string if it doesn't know
725         a text name for the rcode.
727         * examples/reverse.py: Added a new example program that builds a
728         reverse (address-to-name) mapping table from the name-to-address
729         mapping specified by A RRs in zone files.
731         * dns/node.py: Added get_rdataset() method.
733         * dns/zone.py: Added get_rdataset() and get_rrset() methods.  Added
734         iterate_rdatas().
736 2003-07-31  Bob Halley  <halley@dnspython.org>
738         * dns/zone.py: Added the iterate_rdatasets() method which returns
739         a generator which yields (name, rdataset) tuples for all the
740         rdatasets in the zone matching the specified rdatatype.
742 2003-07-30  Bob Halley  <halley@dnspython.org>
744         * (Version 1.1.0b2 released)
746 2003-07-30  Bob Halley  <halley@dnspython.org>
748         * dns/zone.py: Added find_rrset() and find_rdataset() convenience
749         methods.  They let you retrieve rdata with the specified name
750         and type in one call.
752         * dns/node.py: Nodes no longer have names; owner names are
753         associated with nodes in the Zone object's nodes dictionary.
755         * dns/zone.py: Zone objects now implement more of the standard
756         mapping interface.  __iter__ has been changed to iterate the keys
757         rather than values to match the standard mapping interface's
758         behavior.
760 2003-07-20  Bob Halley  <halley@dnspython.org>
762         * dns/ipv6.py (inet_ntoa): Handle embedded IPv4 addresses.
764 2003-07-19  Bob Halley  <halley@dnspython.org>
766         * (Version 1.1.0b1 released)
768 2003-07-18  Bob Halley  <halley@dnspython.org>
770         * dns/tsig.py: The TSIG validation of TCP streams where not
771         every message is signed now works correctly.
773         * dns/zone.py: Zones can now be compared for equality and
774         inequality.  If the other object in the comparison is also
775         a zone, then "the right thing" happens; i.e. the zones are
776         equal iff.: they have the same rdclass, origin, and nodes.
778 2003-07-17  Bob Halley  <halley@dnspython.org>
780         * dns/message.py (Message.use_tsig): The method now allows for
781         greater control over the various fields in the generated signature
782         (e.g. fudge).
783         (_WireReader._get_section): UnknownTSIGKey is now raised if an
784         unknown key is encountered, or if a signed message has no keyring.
786 2003-07-16  Bob Halley  <halley@dnspython.org>
788         * dns/tokenizer.py (Tokenizer._get_char): get_char and unget_char
789         have been renamed to _get_char and _unget_char since they are not
790         useful to clients of the tokenizer.
792 2003-07-15  Bob Halley  <halley@dnspython.org>
794         * dns/zone.py (_MasterReader._rr_line): owner names were being
795         unconditionally relativized; it makes much more sense for them
796         to be relativized according to the relativization setting of
797         the reader.
799 2003-07-12  Bob Halley  <halley@dnspython.org>
801         * dns/resolver.py (Resolver.read_resolv_conf): The resolv.conf
802         parser did not allow blank / whitespace-only lines, nor did it
803         allow comments.  Both are now supported.
805 2003-07-11  Bob Halley  <halley@dnspython.org>
807         * dns/name.py (Name.to_digestable): to_digestable() now
808         requires an origin to be specified if the name is relative.
809         It will raise NeedAbsoluteNameOrOrigin if the name is
810         relative and there is either no origin or the origin is
811         itself relative.
812         (Name.split): returned the wrong answer if depth was 0 or depth
813         was the length of the name.  split() now does bounds checking
814         on depth, and raises ValueError if depth < 0 or depth > the length
815         of the name.
817 2003-07-10  Bob Halley  <halley@dnspython.org>
819         * dns/ipv6.py (inet_ntoa): The routine now minimizes its output
820         strings.  E.g. the IPv6 address
821         "0000:0000:0000:0000:0000:0000:0000:0001" is minimized to "::1".
822         We do not, however, make any effort to display embedded IPv4
823         addresses in the dot-quad notation.
825 2003-07-09  Bob Halley  <halley@dnspython.org>
827         * dns/inet.py: We now supply our own AF_INET and AF_INET6
828         constants since AF_INET6 may not always be available.  If the
829         socket module has AF_INET6, we will use it.  If not, we will
830         use our own value for the constant.
832         * dns/query.py: the functions now take an optional af argument
833         specifying the address family to use when creating the socket.
835         * dns/rdatatype.py (is_metatype): a typo caused the function
836         return true only for type OPT.
838         * dns/message.py: message section list elements are now RRsets
839         instead of Nodes.  This API change makes processing messages
840         easier for many applications.
842 2003-07-07  Bob Halley  <halley@dnspython.org>
844         * dns/rrset.py: added.  An RRset is a named rdataset.
846         * dns/rdataset.py (Rdataset.__eq__): rdatasets may now be compared
847         for equality and inequality with other objects.  Rdataset instance
848         variables are now slotted.
850         * dns/message.py: The wire format and text format readers are now
851         classes.  Variables related to reader state have been moved out
852         of the message class.
854 2003-07-06  Bob Halley  <halley@dnspython.org>
856         * dns/name.py (from_text): '@' was not interpreted as the empty
857         name.
859         * dns/zone.py: the master file reader derelativized names in rdata
860         relative to the zone's origin, not relative to the current origin.
861         The reader now deals with relativization in two steps.  The rdata
862         is read and derelativized using the current origin.  The rdata's
863         relativity is then chosen using the zone origin and the relativize
864         boolean.  Here's an example.
866                 $ORIGIN foo.example.
867                 $TTL 300
868                 bar MX 0 blaz
870         If the zone origin is example., and relativization is on, then
871         This fragment will become:
873                 bar.foo.example. 300 IN MX 0 blaz.foo.example.
875         after the first step (derelativization to current origin), and
877                 bar.foo 300 IN MX 0 blaz.foo
879         after the second step (relativiation to zone origin).
881         * dns/namedict.py: added.
883         * dns/zone.py: The master file reader has been made into its
884         own class.  Reader-related instance variables have been moved
885         form the zone class into the reader class.
887         * dns/zone.py: Add node_factory class attribute.  An application
888         can now subclass Zone and Node and have a zone whose nodes are of
889         the subclassed Node type.  The from_text(), from_file(), and
890         from_xfr() algorithms now take an optional zone_factory argument.
891         This allows the algorithms to be used to create zones whose class
892         is a subclass of Zone.
895 2003-07-04  Bob Halley  <halley@dnspython.org>
897         * dns/renderer.py: added new wire format rendering module and
898         converted message.py to use it.  Applications which want
899         fine-grained control over the conversion to wire format may call
900         the renderer directy, instead of having it called on their behalf
901         by the message code.
903 2003-07-02  Bob Halley  <halley@dnspython.org>
905         * dns/name.py (_validate_labels): The NameTooLong test was
906         incorrect.
908         * dns/message.py (Message.to_wire): dns.exception.TooBig is
909         now raised if the wire encoding exceeds the specified
910         maximum size.
912 2003-07-01  Bob Halley  <halley@dnspython.org>
914         * dns/message.py: EDNS encoding was broken.  from_text()
915         didn't parse rcodes, flags, or eflags correctly.  Comparing
916         messages with other types of objects didn't work.
918 2003-06-30  Bob Halley  <halley@dnspython.org>
920         * (Version 1.0.0 released)
922 2003-06-30  Bob Halley  <halley@dnspython.org>
924         * dns/rdata.py: Rdatas now implement rich comparisons instead of
925         __cmp__.
927         * dns/name.py: Names now implement rich comparisons instead of
928         __cmp__.
930         * dns/inet.py (inet_ntop): Always use our code, since the code
931         in the socket module doesn't support AF_INET6 conversions if
932         IPv6 sockets are not available on the system.
934         * dns/resolver.py (Answer.__init__): A dangling CNAME chain was
935         not raising NoAnswer.
937         * Added a simple resolver Cache class.
939         * Added an expiration attribute to answer instances.
941 2003-06-24  Bob Halley  <halley@dnspython.org>
943         * (Version 1.0.0b3 released)
945 2003-06-24  Bob Halley  <halley@dnspython.org>
947         * Renamed module "DNS" to "dns" to avoid conflicting with
948         PyDNS.
950 2003-06-23  Bob Halley  <halley@dnspython.org>
952         * The from_text() relativization controls now work the same way as
953         the to_text() controls.
955         * DNS/rdata.py: The parsing of generic rdata was broken.
957 2003-06-21  Bob Halley  <halley@dnspython.org>
959         * (Version 1.0.0b2 released)
961 2003-06-21  Bob Halley  <halley@dnspython.org>
963         * The Python 2.2 socket.inet_aton() doesn't seem to like
964         '255.255.255.255'.  We work around this.
966         * Fixed bugs in rdata to_wire() and from_wire() routines of a few
967         types.  These bugs were discovered by running the tests/zone.py
968         Torture1 test.
970         * Added implementation of type APL.
972 2003-06-20  Bob Halley  <halley@dnspython.org>
974         * DNS/rdtypes/IN/AAAA.py: Use our own versions of inet_ntop and
975         inet_pton if the socket module doesn't provide them for us.
977         * The resolver now does a better job handling exceptions.  In
978         particular, it no longer eats all exceptions; rather it handles
979         those exceptions it understands, and leaves the rest uncaught.
981         * Exceptions have been pulled into their own module.  Almost all
982         exceptions raised by the code are now subclasses of
983         DNS.exception.DNSException.  All form errors are subclasses of
984         DNS.exception.FormError (which is itself a subclass of
985         DNS.exception.DNSException).
987 2003-06-19  Bob Halley  <halley@dnspython.org>
989         * Added implementations of types DS, NXT, SIG, and WKS.
991         * __cmp__ for type A and AAAA could produce incorrect results.
993 2003-06-18  Bob Halley  <halley@dnspython.org>
995         * Started test suites for zone.py and tokenizer.py.
997         * Added implementation of type KEY.
999         * DNS/rdata.py(_base64ify): \n could be emitted erroneously.
1001         * DNS/rdtypes/ANY/SOA.py (SOA.from_text): The SOA RNAME field could
1002         be set to the value of MNAME in common cases.
1004         * DNS/rdtypes/ANY/X25.py: __init__ was broken.
1006         * DNS/zone.py (from_text): $TTL handling erroneously caused the
1007         next line to be eaten.
1009         * DNS/tokenizer.py (Tokenizer.get): parsing was broken for empty
1010         quoted strings.  Quoted strings didn't handle \ddd escapes.  Such
1011         escapes are appear not to comply with RFC 1035, but BIND allows
1012         them and they seem useful, so we allow them too.
1014         * DNS/rdtypes/ANY/ISDN.py (ISDN.from_text): parsing was
1015         broken for ISDN RRs without subaddresses.
1017         * DNS/zone.py (from_file): from_file() didn't work because
1018         some required parameters were not passed to from_text().
1020 2003-06-17  Bob Halley  <halley@dnspython.org>
1022         * (Version 1.0.0b1 released)
1024 2003-06-17  Bob Halley  <halley@dnspython.org>
1026         * Added implementation of type PX.
1028 2003-06-16  Bob Halley  <halley@dnspython.org>
1030         * Added implementation of types CERT, GPOS, LOC, NSAP, NSAP-PTR.
1032         * DNS/rdatatype.py (_by_value): A cut-and-paste error had broken
1033         NSAP and NSAP-PTR.
1035 2003-06-12  Bob Halley  <halley@dnspython.org>
1037         * Created a tests directory and started adding tests.
1039         * Added "and its documentation" to the permission grant in the
1040         license.
1042 2003-06-12  Bob Halley  <halley@dnspython.org>
1044         * DNS/name.py (Name.is_wild): is_wild() erroneously raised IndexError
1045         if the name was empty.
1047 2003-06-10  Bob Halley  <halley@dnspython.org>
1049         * Added implementations of types AFSDB, X25, and ISDN.
1051         * The documentation associated with the various rdata types has been
1052         improved.  In particular, instance variables are now described.
1054 2003-06-09  Bob Halley  <halley@dnspython.org>
1056         * Added implementations of types HINFO, RP, and RT.
1058         * DNS/message.py (make_query): Document that make_query() sets
1059         flags to DNS.flags.RD, and chooses a random query id.
1061 2003-06-05  Bob Halley  <halley@dnspython.org>
1063         * (Version 1.0.0a2 released)
1065 2003-06-05  Bob Halley  <halley@dnspython.org>
1067         * DNS/node.py: removed __getitem__ and __setitem__, since
1068         they are not used by the codebase and were not useful in
1069         general either.
1071         * DNS/message.py (from_file): from_file() now allows a
1072         filename to be specified instead of a file object.
1074         * DNS/rdataset.py: The is_compatible() method of the
1075         DNS.rdataset.Rdataset class was deleted.
1077 2003-06-04  Bob Halley  <halley@dnspython.org>
1079         * DNS/name.py (class Name): Names are now immutable.
1081         * DNS/name.py: the is_comparable() method has been removed, since
1082         names are always comparable.
1084         * DNS/resolver.py (Resolver.query): A query could run for up
1085         to the lifetime + the timeout.  This has been corrected and the
1086         query will now only run up to the lifetime.
1088 2003-06-03  Bob Halley  <halley@dnspython.org>
1090         * DNS/resolver.py: removed the 'new' function since it is not the
1091         style of the library to have such a function.  Call
1092         DNS.resolver.Resolver() to make a new resolver.
1094 2003-06-03  Bob Halley  <halley@dnspython.org>
1096         * DNS/resolver.py (Resolver._config_win32_fromkey): The DhcpServer
1097         list is space separated, not comma separated.
1099 2003-06-03  Bob Halley  <halley@dnspython.org>
1101         * DNS/update.py: Added an update module to make generating updates
1102         easier.
1104 2003-06-03  Bob Halley  <halley@dnspython.org>
1106         * Commas were missing in some of the __all__ entries in various
1107         __init__.py files.
1109 2003-05-30  Bob Halley  <halley@dnspython.org>
1111         * (Version 1.0.0a1 released)