07/28/2024
	- 3.6.1 released
	- Properly fix LookupSession doesn't cache CNAMEs (#316)
	- Move JEP-418 SPI to Java 18 to support EOL workflows (#329)

07/21/2024
	- 3.6.0 released
	- Fix CVE-2024-25638 (GHSA-cfxw-4h78-h7fw)
	  Lookup and LookupSession do not sanitize input properly,
	  allowing to smuggle additional responses, even with DNSSEC.
	  I would like to thank Thomas Bellebaum from Fraunhofer AISEC
	  (@bellebaum) and Martin Schanzenbach (@schanzen) for reporting
	  and assisting me with this issue.
	- Fix CVE-2023-50387 (GHSA-crjg-w57m-rqqf)
	  Denial-of-Service Algorithmic Complexity Attacks (KeyTrap)
	- Fix CVE-2023-50868 (GHSA-mmwx-rj87-vfgr)
	  NSEC3 closest encloser proof can exhaust CPU resources (KeyTrap)
	- Fix running all DNSSEC on the specified executor
	- Add new DNSSEC algorithm constants for SM2SM3 and ECC-GOST12
	- Add A/AAAA record constructor with IP address byte array
	- Validate DS record digest lengths (#250)
	- Fix NPE in SimpleResolver on invalid responses (#277)
	- Add support for JEP 418: Internet-Address Resolution SPI (#290)
	- Full JPMS support (#246)
	- Pluggable I/O for SimpleResolver
	  (@chrisruffalo, #253)
	- UDP port leak in SimpleResolver (#318)
	- Fix clean shutdown in app containers when never used (#319)
	- Fix concurrency issue in I/O clients (#315, #323)
	- LookupSession doesn't cache CNAMEs (#316)
	- SimpleResolver can fail with UPDATE response (#322)
	- Replace synchronization in Zone with locks
	  (#305, based on work from @srijeet0406 in #306)

11/11/2023
	- 3.5.3 released
	- Fix CNAME in LookupSession (#279)
	- Fix Name constructor failing with max length, relative name
	  and root origin (#289, @MMauro94)
	- Add config option for Resolver I/O timeout (#273, @vmarian2)
	- Extend I/O logging
	- Prevent exception during TCP I/O with missing or truncated
	  length prefix
	- Use internal base64 codec for Android compatibility (#271)
	- Fix multi-message TSIG stream verification for pre-RFC8945
	  servers (#295, @frankarinnet and @nguichon)
	- Add StreamGenerator for generating RFC8945 compliant
	  multi-message streams (related to #295)

11/16/2022
	- 3.5.2 released
	- Correctly render empty TXT records (#254)
	- More validation on TLSA data input (#257)

05/15/2022
	- 3.5.1 released
	- Fix validation of TSIG signed responses (#249)
	- DS rdata digest validation hexadecimal digits (#252)

02/05/2022
	- 3.5.0 released
	- Add full built-in support for DNSSEC based on dnssecjava (#209)
	- Make Record classes serializable again (#242)
	- Allow SVCB ServiceMode records without params
	  (#244, @adam-stoler)
	- Fix TCPClient receive timeouts
	  (#218 @nguydavi, #219)

12/05/2021
	- 3.4.3 released
	- Fix handling of buffers in DNSInput
	  (#224, #225 @nresare)
	- Clear existing nameservers on config refresh (#226)
	- Fix exception when calling ResolverConfig.refresh (#234)

09/19/2021
	- 3.4.2 released
	- Document behavior of ExtendedResolver.setTimeout (#206)
	- Add overloads to use an Executor when sending queries in
	  resolvers (#211)
	- Remove synchronous locks in DoH Resolver (related to #211)
	- Fix broken CNAME handling in LookupSession (#212)
	- "WireParseException: bad label type" when parsing Message
	  from ByteBuffer (#213)
	- Remove unnecessary synchronization in org.xbill.DNS.Header::getID
	  (#215, @maltalex)
	- Add examples for the LookupSession and direct Resolver usage

07/30/2021
	- 3.4.1 released
	- Allow signing with ED25519 and ED448 algorithms
	  (#200, Klaus Malorny)
	- Rename echconfig to ech in SVCB/HTTPS records
	  (#202, @adam-stoler)
	- Fix bug in Name.compareTo with byte-values >= 128
	  (#205, @adam-stoler)

06/09/2021
	- 3.4.0 released
	- UnknownHostException provides details in message (#154)
	- Limit length of relative Name to 254 (#165)
	- Fix wildcard lookups in Zone (#169)
	- Properly close UDP channel upon error
	  (#177, Walter Scott Johnson)
	- Fix load balancing in ExtendedResolver
	  (#179, Paulo Costa)
	- Add method to shutdown NIO threads (#180)
	- Fix restoring active position on byte buffers
	  (#184, @ryru)
	- Add support for extended DNS errors (RFC8914, #187)
	- Fix TTL for SOA record to minimum of TTL and minimum field
	  (#191, @amitknx)
	- Add support for hosts file in lookups (#195)

10/28/2020
	- 3.3.1 released
	- Fix value of getAlias in C/DNameRecord (#136)
	- Fix bug with SVCB/HTTPS parsing of master file format
	  (PR#135, @adam-stoler)

09/27/2020
	 - 3.3.0 released
	 - Add support for SVCB and HTTPS records
	   (PR#116, @adam-stoler)
	 - Fix an issue with ndots in Lookup (#118)
	 - Support IPv4 mapped IPv6 address in AAAA record
	   (PR#120, @spwei)
	 - Validate range in Type
	 - Improve DOH Resolver (#123, #127)
	   Note that this resolver is more a proof of concept and not
	   production ready. See Javadoc and issue #123.

07/11/2020
	- 3.2.2 released
	- Fix JNA access violation in WindowsResolverConfigProvider
	  on 32bit JVMs

06/22/2020
	- 3.2.1 released
	- Include sources and Javadoc

06/22/2020
	- 3.2.0 released
	- Add Javadoc @since tags for APIs introduced since 3.0
	- Fix requiring JNA in certain classloaders (#112)
	- Add property to skip initializing builtin resolver config (#112)
	- Make ResolverConfig and Resolver API public (#111)
	- Add properties for a fallback resolver config provider (#111)
	- Close UDP socket on failures (#110)
	- Refactor TSIG code and add trace logging (#109)

05/15/2020
	- 3.1.0 released
	- Fix order of OPT and TSIG records in messages (#108)
	- Fix RRset.cycle() short overflows (#102)
	- Fix race condition in resolver I/O (#104)
	- Add support for custom record types
	  (#94, Klaus Malorny <Klaus.Malorny@knipp.de>)

03/19/2020
	- 3.0.2 released
	- Only select for tcp write when there is something to write
	  (PR#96, Rouzbeh Delavari)

02/23/2020
	- 3.0.1 released
	- Fix toString of RRset reporting empty when it contains signatures
	- Fix a potential sorting bug when creating a DNSSEC digest
	- Fix getting the resolvers of an ExtendedResolver (#92)

02/15/2020
	- 3.0.0 released
	- Parse RRsig records with epoch time format
	- Add support for EdDSA DNSSEC signatures if BouncyCastle is available
	  (Ed25519 and Ed448, RFC 8080)
	- Add missing RCode, OpCode and RR type mnemonics

01/19/2020:
	- 3.0.0-next.1 released
	- Requires Java 8 and slf4j-api
	- Adds support for Java 9+ and Android O+ via a new server config
	  lookup system (#6, #9)
	- Resolving is now fully asynchronous, no new thread per query anymore
	- Message provides information about the resolver that produced it (#41)
	- Add support for Host Identity Protocol (HIP) records (RFC 8005, #47)
	- Adds a DNS over HTTP (DoH) resolver (#66)
	- Fixes some issues with the OSGi manifest (#70)
	- Add support for the RES_OPTIONS environment variable (#57)
	- Add support for relative $INCLUDE paths in master files (#75)
	- Add support for custom DNS server port in config properties (#80)
	- Adds new EDNS(0) options
	- See the README for hints on migrating from v2.1.x to v3

05/25/2019:
	- 2.1.9 released
	- Fix getRRsetType for empty RRSIG records.
	  (PR#40, Klaus Malorny <Klaus.Malorny@knipp.de>)

05/23/2019:
	- Fix NPE during NameService registration.
	  (PR#26, Kenny Ingle <kenny.ingle@gmail.com>)
	- Add japicmp Maven plugin for compatibility checks.
	  (PR#36, Kenny Ingle <kenny.ingle@gmail.com>)
	- Fix parsing/generation of (EC)DSA signatures from/to DER.
	- Fix miscount in Message.sectionToWire related to OPT records.
	  (PR#37, Klaus Malorny <Klaus.Malorny@knipp.de>)
	- Add support for the CDS and CDNSKEY record types.

05/18/2019:
	- Primary maintainer is now Ingo Bauersachs (ingo@jitsi.org)
	- Move project from Sourceforge to Github.
	- Cleanup Maven POM.
	- Add CI und Code Coverage tools.
	- Add Javadoc-Badge.
	  (PR#27, Kenny Ingle <kenny.ingle@gmail.com>)

10/13/2018:
	- Fix Javadoc nits (David Xia <davidxia@users.sourceforge.net>)

3/20/2017:
	- Change the number of CNAMEs that the Lookup code will follow,
	  as the previous limit (6) was not enough for www.paypal.com.
	  (reported by George Nikolaidis <gnikolaidis@ergobyte.gr>)

1/3/2017:
	- 2.1.8 released

8/13/2016:
	- Add a Message constructor taking a ByteBuffer, and convert the
	  DNSInput class to use a ByteBuffer internally.
	  (patch from Marrache Mickael <mickoo95@users.sf.net>)
	- Add support for the OPENPGPKEY record.
	  (patch from Valentin Hauner <vh@hnr.name>)
	- Add support for the SMIMEA record.

11/25/2015:
	- Add support for the CAA record.

8/21/2015:
	- Convert the TSIG code from using a custom HMAC implementation to
	  the one in javax.crypto.Mac.
	  (patch from Nick Sayer <nsayer@silverspringnet.com>)

4/21/2015:
	- Update the URI record implementation to match the latest spec.
	  (patch from Anthony Kirby <anthonykirby@users.sf.net>)

2/15/2015
	- 2.1.7 released

2/14/2015
	- Attempt to deal with Java's poor handling of IPv4-mapped IPv6
	  addresses. (reported by Keshav Badruka <keshav.badruka@gmail.com>)

12/23/2014
	- Add an interface for logging sent/received packets.
	  (based on a patch from Damian Minkov <damencho@users.sf.net>)
	- Add support for the URI record.
	  (patch from Anthony Kirby <anthonykirby@users.sf.net>)

12/22/2014
	- Fix message truncation to preserve the OPT record.
	  (based on a patch from Klaus Malorny <Klaus.Malorny@knipp.de>)
	- Properly deal with short DSA and ECDSA keys.  (original patch from
	  Marcos Sanz <sanz@denic.de>, with some local modifications)
	- Add support for GOST (RFC 5933) to DNSSEC.  Using GOST requires an
	  external cryptography provider, such as BouncyCastle.
	  (original patch from Marcos Sanz <sanz@denic.de>, with some
	  local modifications)
	- Change the OPTRecord equals() method to check TTL, since the TTL
	  field holds relevant information.  (based on a patch from
	  Dr. Christian Möller <cmoeller@users.sourceforge.net>)
	- Printing an empty RRset would incorrectly throw an exception.

10/14/2013
	- 2.1.6 released
	- Address.getByName() and Address.getAllByName() had incomplete IPv6
	  support; they wouldn't issue AAAA queries.
	  (reported by Cédric Braem <cbr@internetvista.com>)

10/07/2013
	- Improve the name server detection code for Android.
	  (patch from Florian Schmaus <fschmaus@gmail.com>, based on
	   stackoverflow.com/a/11362271/194894).

08/07/2013
	- Change the edns-client-subnet option to use the officially defined
	  option code.

07/29/2013
	- SIG(0) signatures were incorrectly generated in some cases.
	  (patch from Tekto <tekto@geekr.de>)
	- Add NoSignature exception, thrown when attempting to validate a
	  SIG(0) in a message without one.

05/04/2013
	- The Name(String s, Name origin) constructor copies too many labels
	  when origin has been created by stripping a label.
	  (patch from Ingo Bauersachs <ingo@jitsi.org>)

04/10/2013
	- Fix Name.isAbsolute() to check that the length of the last label is
	  0, not that the last byte of the name is 0.

04/10/2013
	- 2.1.5 released

03/18/2013
	- Fix DS generation to canonicalize the DNSKEY owner name.
	  (patch from Ingo Bauersachs <ingo@jitsi.org>)

02/19/2013
	- Add Name.canonicalize() and Name.toString() variant for omitting the
	  final dot in an absolute name.

01/04/2013
	- 2.1.4 released

10/25/2012
	- Fix the Message constructor to not raise a ClassCastException when a
	  SIG or TSIG record is seen in the question section.
	  (patch from Klaus Malorny <Klaus.Malorny@knipp.de>)

9/4/2012
	- Add support for RFC 6605: Elliptic Curve Digital Signature
	  Algorithm (DSA) for DNSSEC. (original patch from
	  Marcos Sanz <sanz@denic.de>, with some local modifications)

8/31/2012
	- Add support for the TLSA record type.
	- Pass hostnames to InetAddress.getByAddress where possible.
	  (patch from Ingo Bauersachs <ingo.bauersachs@fhnw.ch>)

11/15/2011
	- Fix the ZoneTransferIn object to properly report AXFRs; this was
	  broken by the changes in 2.1.3.
	  (reported by Thomas Corte <Thomas.Corte@knipp.de>)

11/3/2011
	- Update DSRecord constructor from DNSKEYRecord to generate the
	  correct digest.
	  (patch from Marty Kube <marty@beavercreekconsulting.com>)

	- Also update the signature of the DSRecord constructor from
	  DNSKEYRecord to not take the key's footprint as a parameter, as it
	  can be derived from the key.

10/24/2011
	- 2.1.3 released

10/17/2011
	- Add a callback interface to ZoneTransferIn.
	  (based on a patch from Nick Sayer <nsayer@silverspringnet.com>)

10/10/2011
	- An exception could be thrown when attempting to look up data in the
	  cache for type ANY when there were only previously cached
	  NOERROR/NODATA responses for that name.
	  (reported by Niel de Wet <nieldw@gmail.com>)

7/24/2011
	- 2.1.2 released

6/9/2011
	- TypeBitmap.toString() failed if no bits were set.
	  (patch from Jeffrey Damick <Jeffrey.Damick@neustar.biz>)

5/24/2011
	- TSIG.fromString() didn't handle base64-encoded secrets with /
	  characters. (reported by Sten <stennordstrom@users.sourceforge.net>)

5/12/2011
	- Support verifying truncated TSIG signatures, as specified in RFC
	  4635.

5/10/2011
	- Refactor EDNS Option support to allow for custom type
	  implementations, and add support for the Client Subnet option.
	  (based on a patch from Ming Zhou <mizhou@bnivideo.com>)

	- Add support for the NSID EDNS option.

4/20/2011
	- Add missing support for the HMAC-SHA224, HMA-SHA384, and HMAC-SHA384
	  TSIG algorithms. (patch from Thomas Corte <Thomas.Corte@knipp.de>)

3/9/2011
	- Add support for using alternate JCA providers when generating DNSSEC
	  signatures (patch from Jeffrey Damick <Jeffrey.Damick@neustar.biz>)

2/9/2011
	- 2.1.1 released

2/3/2011
	- Add the ability to set ndots on Lookup objects, and parse the ndots
	  option from a resolv.conf file (patch from Oleg Tsvinev
	  <Oleg.Tsvinev@Reardencommerce.com>).

2/3/2011
	- The 'file' command in the 'update' program didn't work correctly.
	  (reported by Olafur Gudmundsson <ogud@ogud.com>)

9/15/2010
	- Change the Android name server detection mechanism to avoid false
	  positives. (patch from Ulf Dittmer)

9/9/2010
	- The IXFR code didn't do serial number arithmetic correctly, and would
	  fail if the serial number wrapped.
	  (patch from Alexis MacFarlane <Alexis.MacFarlane@usc-bt.com>)

9/7/2010
	- 2.1.0 released

8/17/2010
	- When rendering a message, if records from the additional section did
	  not fit, the header counts were not properly updated.
	  (patch from Klaus Malorny <Klaus.Malorny@knipp.de>)

7/22/2010
	- Fix LOC record parsing to allow negative altitudes.
	  (based on a patch from William Kocik <wkocik@verisign.com>)

7/21/2010
	- The changes to TSIG verification in 2.0.6 didn't work correctly for
	  stream verification; specifically, the state was only set on the
	  first Message in the stream.
	  (reported by William Kocik <wkocik@verisign.com>)

5/12/2010
	- Add support for determining resolver configuration on
	  Japanese Windows.  (translation and original patch from
	  Brett Wooldridge <brettw@users.sourceforge.net>)

5/6/2010
	- Add support for building an OSGi bundle (patch from
	  Markus Alexander Kuppe <lemmster@users.sourceforge.net>).

5/2/2010
	- Rewrite DNSSEC support.

4/15/2010
	- Fix a hang that could occur when using the dnsjava service provider
	  on Windows (initial patch from <jy123@users.sourceforge.net>).

11/21/2009
	- 2.0.8 released

11/10/2009
	- Fix the conversion of NSEC/NSEC3 bitmaps into wire format.
	  (Klaus Malorny <Klaus.Malorny@knipp.de>, also reported by
	  Tom <808131@gmail.com>).

10/01/2009
	- Properly initialize the Date objects used in RRSIG (and other)
	  records, so that any unused fields are cleared.
	  (Klaus Malorny <Klaus.Malorny@knipp.de>)

9/25/2009
	- 2.0.7 released
	- Add support for detecting the configured nameservers on the Android
	  platform.  (patch from Arnt Gulbrandsen <arnt@gulbrandsen.priv.no>)

9/16/2009
	- When determining the nameservers to use, if the
	  sun.net.dns.ResolverConfiguration class returns an empty list, ignore
	  it. (based on an anonymous patch).
	- Make the Name, Record (and all subclasses), RRset, and Zone classes
	  implement Serializable.
	  (based on a patch from Patrick <psp294@users.sourceforge.net>)

9/15/2009
	- Add a constant for the REVOKE DNSKEY flag.
	  (patch from Wolfgang Nagele <dreamguard@users.sourceforge.net>)
	- ReverseMap.fromAddress(String) should support both IPv4 and IPv6
	  addresses.
	  (reported by Stephan Fuhrmann <stfu1und1@users.sourceforge.net>)

8/08/2009
	- The escaping code for text strings should not escape semicolons.

6/23/2009
	- DNSSEC signature validation incorrectly used the TTL of the records
	  being verified, not the original TTL from the RRSIG record, which
	  caused failures when verifying records returned by a caching server.
	  (reported by Samuel Benz <samuel.benz@switch.ch>)

6/15/2009
	- Change the ResolverConfig.refresh() method to only synchronize the
	  assignment to currentConfig, not the code which determines the new
	  configuration.

6/12/2009
	- The TSIG verification routines (TSIG.verify,
	  TSIG.StreamVerifier.verify() now update the Message object with the
	  status of the verification in addition to returning the status.

6/03/2009
	- The lists of servers and searchlist entries in ResolverConfig should
	  not be static.
	  (Isabelle Dalmasso <isa@8x8.com>)

5/28/2009
	- The canonical form of an NSEC record was incorrectly computed - the
	  next name should not have its case changed.
	  (David Blacka <davidb@verisign.com>)

	- Add support for NSEC3, NSEC3PARAM, and DLV records.
	  (based on a patch from David Blacka <davidb@verisign.com>)

9/17/2008
	- Fix LOC record rounding.
	  (reported by Klaus Malorny <Klaus.Malorny@knipp.de>)

8/22/2008
	- Type 4 NXDOMAIN responses were incorrectly cached as referrals.
	  (reported by Luis Silva <luisfilsilva@gmail.com>)

8/06/2008
	- Randomize the UDP source ports for outgoing queries.
	  (based on a patch from Derek Morr <derekmorr@psu.edu>)

4/25/2008
	- Add support for the DHCID record.

4/18/2008
	- The prior change to allow creating Zones from AXFR-style IXFR
	  ZoneTransferIn responses didn't work.
	- Update the service provider to work with Java 1.6 and earlier
	  versions. (patch from <thelian@users.sourceforge.net>)

2/19/2008
	- The Zone.removeRecord() method threw an exception if there were no
	  other records in the same RRset.
	  (reported by Yoyo Chen <yoyochen@sinter.com.tw>)

	- Parsing and formatting LOC records should not depend on the current
	  locale. (reported by Klaus Malorny <Klaus.Malorny@knipp.de>)

1/31/2008
	- When converting messages to wire format, don't include name
	  compression pointers greater than 2^14 - 1.
	  (reported by Carole Gill <cgill@silverspringnet.com>)

1/24/2008
	- 2.0.6 released

1/22/2008
	- Fix an off-by-2 error that could cause an infinite loop when
	  parsing a Name with a self-referential compression pointer.
	  (reported by Carole Gill <cgill@silverspringnet.com>)

	- Raise an exception when an invalid label type is seen in a wire
	  format name.  The previous behavior would incorrectly parse invalid
	  names, and could lead to infinite loops.
	  (reported by Carole Gill <cgill@silverspringnet.com>)

8/28/2007
	- 2.0.5 released
	- Add the ZoneTransferIn.setLocalAddress() method.  (based on a patch
	  from <mpugge@users.sourceforge.net>)
	- Build jar file with -source and -target options to provide
	  compatibility with older Java releases (that is, revert to
	  pre-2.0.4 behavior).
	  (reported by Stefano Bagnara <apache@bago.org>)

8/26/2007
	- 2.0.4 released
	- Update SPI code to work with java 6.
	- Fix an argument parsing bug in the dig program, where failure to
	  specify both type and class would cause the specified server to
	  be ignored.
	  (reported by Stefano Bagnara <bago75@users.sourceforge.net>)

6/12/2007
	- The SPFRecord constructors incorrectly created records whose
	  internal type field was TXT, not SPF.
	  (reported by Stefano Bagnara <bago75@users.sourceforge.net>)

3/7/2007
	- Message.getQuestion() incorrectly handled the case where the
	  question section was represented by an empty list.
	  (reported by Karl Auer <kauer@biplane.com.au>)

2/15/2007
	- Properly obey timeouts in TCPClient code when the message is
	  read in multiple chunks. (based on a patch from
	  Francesco Vivoli <fvivoli@ripe.net>)

12/4/2006
	- A cache lookup for a record would incorrectly return a delegation
	  when records for both the queried type and NS were present.
	  (reported by yosukear <y_arimoto_acare@users.sourceforge.net>)

11/28/2006
	- 2.0.3 released

11/27/2006
	- The Zone.fromXFR() method should be able to create zones
	  from AXFR-style IXFR responses.
	  (Bill Kuker <bkuker@users.sourceforge.net>)

10/25/2006
	- Make the routines that convert between the DNS and standard Java
	  representations of DSA signatures public.
	  (suggested by Klaus Malorny <Klaus.Malorny@knipp.de>)

8/3/2006
	- Add a TSIG constructor that takes an algorithm as a String.
	- Add support to TSIG.fromString() for specifying an algorithm.

7/30/2006
	- When converting a PublicKey to a DNS record, allow the algorithm
	  to be specified, as RSA keys can be either of the RSA-SHA1 or
	  RSA-MD5 algorithms (based on a patch from
	  Eric <ginipginob@users.sourceforge.net>)
	- When converting a PublicKey to a DNS record, allow the type (KEY
	  or DNSKEY) to be specified.
	- Update the DNSSECVerifier code to use DNSKEY records, not KEY
	  records.

7/30/2006
	- Added support for parsing the output of ipconfig in French .
	  (Frederic Bazin <fbazin@users sourceforge.net>)

7/30/2006
	- If both "search" and "domain" lines are present in a resolv.conf
	  file, the domain line should be ignored.

7/26/2006
	- Add support for the SPF record type.

7/21/2006
	- DNSSEC.digestRRset could digest records in the wrong order.
	  (reported by David Blacka <davidb@verisignlabs.com> and
	   Mahendra Jain <Majain@verisign.com>)

6/26/2006
	- 2.0.2 released.

6/22/2006
	- Add support for the IPSECKEY record type.

5/18/2006
	- The result of a Lookup that involves a CNAME should include
	  the queried name as one of the aliases, not the CNAME target.
	  (Jon Lachelt <jon.lachelt@hp.com>)

2/13/2006
	- Loading zones containing RRsets with multiple records didn't work.
	  (reported by Olafur Gudmundsson" <ogud@ogud.com>)

1/24/2006
	- AXFR requests could leak file descriptors if the connection
	  failed. (Can Bican <can@bican.net>)

11/30/2005
	- Add a Resolver.setTimeout(int secs, int msecs) method.
	  (requested by Dmitry Isakbayev) <isakdim@users.sourceforge.net>)

11/30/2005
	- 2.0.1 released.

11/11/2005
	- The InetAddresses returned by Address.getByName() should have their
	  hostname copied from the input parameter.
	  (reported by Praveen Tammana <praveen.public@gmail.com>)

11/7/2005
	- Update remaining DNSSEC code to be compliant with the current spec.

11/6/2005
	- Add a Resolver.setEDNS(int level, int payloadSize, int flags,
	  List options) method, to allow a Resolver to automatically set
	  the DO flag, as well as future EDNS features.
	  (requested by Rick Wesson <wessorh@ar.com>)

10/25/2005
	- The Master(InputStream in, Name origin) constructor should not
	  always fail.
	- Correctly handle the case where reading a Master from an InputStream
	  would throw a NullPointerException if a $INCLUDE file wasn't found.
	  (reported by Lars Petrus <Lars.Petrus@nominum.com>)

8/22/2005
	- Add Address.getByAddress(String) and
	  Address.getByAddress(String, family).

7/21/2005
	- Zone.findExactMatch() would throw a NullPointerException if the
	  name didn't exist.
	  (reported by Hans Zandbelt <Hans.Zandbelt@telin.nl>)

7/19/2005
	- Add support for binding clients to local addresses when using
	  a SimpleResolver.  Also add the -b option to the dig program
	  to test this. (based on a patch by Bruno Dillenseger)

7/5/2005
	- Add support to ResolverConfig for using the undocumented
	  sun.net.dns.ResolverConfiguration class to determine the list
	  of nameservers and search path; make this the default when
	  it works (Yannick Meudal <yannick@meudal.net>).

6/16/2005
	- The inbound zone transfer code failed to treat port 0 as the
	  default as it claimed to. (Bill Kuker <wckits@rit.edu>)

6/15/2005
	- When doing a zone transfer with a SimpleResolver object, the
	  timeout was not properly obeyed.
	  (reported by Peter Bryant <peter@pingability.com>)

6/5/2005
	- Explictly register record type implementations instead of
	  using reflection; this should prevent hard to diagnose
	  problems resulting from partial compilation.

5/31/2005
	- 2.0.0 released.

5/16/2005
	- Fix the code to deal with TTL 0 data in the Cache.

5/15/2005
	- Add unit tests for many classes.  The unit tests are located
	  in the tests directory, which mirrors the org.xbill.DNS hierarchy.
	  (Matt Rutherford <rutherfo@cs.colorado.edu>)

5/7/2005
	- Fix several problems with empty names.
	  (Matt Rutherford <rutherfo@cs.colorado.edu>)

4/23/2005
	- As per RFC 2181, the maximum allowed TTL value is 0x7FFFFFFF.
	  Change TTL.parseTTL() to reflect this by silently clamping
	  larger 32 bit values.

4/22/2005
	- Attempting to get the name/type/class/ttl of an empty RRset
	  throws an exception.

4/21/2005
	- Remove RRset.getSecurity()/.setSecurity().

4/16/2005
	- Change the internal representation of empty records (that is,
	  records in the question section of a message or meta-records
	  used in dynamic update).
	- Minor cleanups to the Mnemonic class.
	  (Matt Rutherford <rutherfo@cs.colorado.edu>)

4/3/2005
	- Change the Cache from being periodically cleaned to being
	  size-bounded.  (based on a patch from several years ago
	  from Joseph Shraibman <jks@iname.com>).
	- Remove the FindServer class.
	- Added a Name Service Provider interface (dns,dnsjava).
	  (based on code from Paul Cowan <pwc21@yahoo.com>)

4/1/2005
	- Use java.nio classes for sockets internally, which provide a
	  number of improvements, most visibly improved timeouts.
	- Remove deprecated dns class.
	- Simplify TSIG initialization; remove functions that should
	  have never existed.
	- Remove Cache.setVerifier() and Cache.setSecurePolicy().  There
	  should be a way of enabling DNSSEC, but the existing code doesn't
	  work.
	- Change the Zone constructors/factory methods to be consistent.

3/29/2005
	- Use java.net.InetAddress for IPv6 addresses rather than a custom
	  class.

3/20/2005
	- Fix several bugs in ResolverConfig on Windows.
	  (Brian McBarron <bmcbarron@users.sourceforge.net>)

3/15/2005
	- Clean up the synchronization in the RRset class
	  (reported by Daniel Jensen <daniel.jensen@savvis.net>)

3/8/2005
	- Support the BIND misfeature of loading zones with no explicit
	  TTL by using the SOA minimum field.

3/7/2005
	- 1.6.6 released.

3/6/2005
	- $GENERATE statements should obey the start field.

3/1/2005
	- Add support for HMAC-SHA1 and HMAC-SHA256 TSIG algorithms.
	  (suggested by Olafur Gudmundsson <ogud@ogud.com>)

2/8/2005
	- Add infrastructure for parsing the output of ipconfig on
	  non-English version of windows, and add support for German
	  and Polish. (based on a patch by Piotr Kochanski)

2/7/2005
	- Add Options.refresh() (based on a patch from Th Kuhne)
	- Add the ResolverConfig class, which is largely based on the
	  FindServer class, except that it's not all static methods.
	  Add the ability to refresh the current ResolverConfig, and
	  make FindServer use ResolverConfig.
	- Add Lookup.refreshDefault (based on a patch from Th Kuhne)
	- Truncated messages aren't guaranteed to parse properly, so shouldn't
	  throw exceptions. (reported by Caleb Richardson <caleb@everyone.net>)
	- Work around a TCP bug in whatever broken nameserver Enom is using.
	  (reported by Caleb Richardson <caleb@everyone.net>)

2/4/2005
	- 1.6.5 released.
	- Records of an unknown type and length 0 weren't handled properly.
	  (reported by Olafur Gudmundsson <ogud@ogud.com>)
	- Fixed a bug in $INCLUDE handling.
	  (Christian Sepulveda <christian.sepulveda@nominum.com>)

2/3/2005
	- The Lookup.run() method should be usable more than once on a Lookup
	  object.
	  (reported by Joseph Shraibman <jks@iname.com>)

10/31/2004
	- Add partial IPv6 support to the ReverseMap class.
	  (based on a patch from Th Kuhne)

7/7/2004
	- Implement the $GENERATE master file directive.

6/28/2004
	- Canonicalizing a name created with the Name(Name src, int n)
	  constructor caused an exception.
	  (based on a patch from Nigel Tamplin <nigel@metica.com>)
	- Concatenating names caused an exception when the prefix was created
	  with the Name(Name src, int n) constructor.
	  (reported by Nigel Tamplin <nigel@metica.com>)

6/22/2004
	- The DNSSEC digesting code shouldn't throw ClassCastExceptions.
	  (reported by Mike StJohns <Mike.StJohns@nominum.com>)
	- The label count in a generated SIG/RRSIG record was off by one.
	  (Mike StJohns <Mike.StJohns@nominum.com>)

6/8/2004
	- Rcode 4 is NOTIMP, not NOTIMPL.

6/5/2004
	- Fixes to LOCRecord.

6/3/2004
	- 1.6.4 released.

5/26/2004
	- Properly handle text mnemonics in KEY records.
	- Add support for the APL record type.

5/25/2004
	- Fix a bug where parsing the text format of an NSEC record
	  incorrectly parsed one token too many.

5/18/2004
	- 1.6.3 released.

5/11/2004
	- Don't store the number of labels in a Name in a byte, as the maximum
	  value (128) cannot be stored in a byte.

5/9/2004
	- Add support for options within an OPTRecord (loosely based on
	  a patch from Madhu Siddalingaiah <madhu@madhu.com>)

4/18/2004
	- Add support for the SSHFP record type.
	- Fix a bug in the zone code which would cause record lookups to fail.

4/10/2004
	- When parsing paster files, handle the fact that class and ttl may
	  be in either order.

4/8/2004
	- The opcode field in the DNS header was incorrectly parsed; this
	  would affect messages with opcodes other than QUERY.
	  (Madhu Siddalingaiah <madhu@madhu.com>)

3/20/2004
	- 1.6.2 released.
	- Lookups could return "referral" instead of "host not found" in some
	  cases.

3/18/2004
	- Fix NullPointerExceptions caused by bad empty Record handling.
	  (reported by Dharmveer Jain <dharmveer_jain@yahoo.com>)

3/16/2004
	- 1.6.1 released.
	- When loading master files with $INCLUDE statements, the included
	  files should be opened relative to the current directory, not
	  the directory of the parent file.

3/12/2004
	- Make it possible to use a Tokenizer without leaving files open.

3/4/2004 - 3/12/2004
	- Add support for more record types (AFSDB, GPOS, ISDN, MB, MD, MF, MG,
	  MINFO, MR, NSAP, NSAP-PTR, NULL, PX, RT, WKS, X25).

3/3/2004
	- Cached NXDOMAINs were ignored, which caused extra queries to
	  be sent (reported by Damon Hart-Davis <d@hd.org>).

2/25/2004
	- Attempting to load a zone without specifying an origin failed.

2/24/2004
	- 1.5.2 released.

2/3/2004
	- Message.isSigned() should return true if we signed the Message
	  with a TSIG.
	  (reported by Shobana Sampath <shobanas@cisco.com>)
	- Implement NSEC, DNSKEY, and RRSIG record types.  (loosely based on
	  a patch from David Blacka <davidb@verisignlabs.com>).
	- Change the representations of sections, rcodes, opcodes, flags,
	  and credibility to int.

1/28/2004
	- Attempt to better deal with OutOfMemoryErrors when creating
	  threads during the resolution process.
	  (reported by Joseph Shraibman <jks@iname.com>)

1/27/2004
	- Change the representation of a TSIG error from a byte to an int.
	- Improve error messages from failed Lookups; treat SERVFAIL
	  as a temporary failure, not an unrecoverable error.
	  (Joseph Shraibman <jks@iname.com>)

1/16/2004
	- The master file reader should propagate TTLs through $INCLUDE
	  statements. (David Blacka <davidb@verisignlabs.com>)

1/12/2004
	- Add a MANIFEST to the jar file containing implementation name and
	  version. (Harel Efraim <harel.efraim@nominum.com>)

1/11/2004
	- Fix a couple minor bugs found by FindBugs
	  (http://www.cs.umd.edu/~pugh/java/bugs/)

1/8/2004
	- 1.5.1 released.
	- LOC records weren't parsed correctly.
	  (reported by Harel Efraim <harel.efraim@nominum.com>)
	- Lines with only whitespace in master files should be ignored.

12/15/2003
	- TTLs weren't handled properly in the master file parser.
	  (Jack Tavares <tavares@drizzle.com>)

12/11/2003
	- 1.5.0 released.

12/8/2003
	- Change to the BSD license.
	- Replace the deprecated Name(String) and Name(String, Name)
	  constructors with new versions that properly return exceptions.

12/6/2003
	- Make the J2SE javadoc link a property in build.xml.  (Ville Skyttä)

11/24/2003
	- Lookup should check that the name, type, and class in the question
	  section of a response match that of the query.
	- SimpleResolver should check that the message id of the response
	  is the same as the message id of the query.  On a sufficiently
	  busy client, sockets can be reused fast enough that late responses
	  can come in, and should be ignored.
	  (seen by Joseph Shraibman <jks@iname.com>)

11/17/2003
	- The Lookup code didn't handle CNAMEs pointing at nonexistant names.
	  (reported by Joseph Shraibman <jks@iname.com>)

11/11/2003
	- Store a weak reference to the Cache in the CacheCleaner thread, and
	  kill the thread when the Cache is finalized.
	  (suggested by Joseph Shraibman <jks@iname.com>)

	- When a Lookup uses a null cache, the temporary cache it creates
	  should not have a CacheCleaner thread.
	  (based on a suggestion by Joseph Shraibman <jks@iname.com>)

10/31/2003
	- Record.hashCode() didn't return consistent hash codes, and didn't
	  ignore the TTL (which it should, and which Record.equals() does).

10/27/2003
	- DNS TTLs and other 32 bit unsigned values are now represented as
	  longs, not ints.  This is an API change, but allows the full range
	  to be used.
	- Add the Serial class for serial arithmetic.

9/30/2003
	- 1.4.3 released.
	- Fix a bit of code that required Java 1.4.

9/29/2003
	- 1.4.2 released.

9/26/2003
	- A Lookup shouldn't die when receiving a referral response; it should
	  return an error. (reported by Elinor Chang <elinor_chang@yahoo.com>)
	- A Lookup should distinguish between timeouts and other network
	  errors.
	- When parsing IP addresses from text format, treat the presence of
	  a leading zero on an octet as an error.  It's unclear whether
	  it would be treated as decimal or octal, which means it should
	  be fixed. (reported by Marcos Sanz/Denic <sanz@denic.de>)

9/17/2003
	- Fix an off-by-one error in the Name code; labels of length 63
	  were not accepted (patch from David Blacka <davidb@verisignlabs.com>)

9/2/2003
	- 1.4.1 released.

9/1/2003
	- The Update.delete(Record) method needs to reset the TTL of the cloned
	  record to 0. (reported by Edwin R. Rivera <erivera@moniker.com>)

8/23/2003
	- Change Record.fromString() to expect an EOL/EOF token at the end
	  of the string, so that extraneous tokens can be detected.  The master
	  file parser was updated to this change.
	  (noticed by Bob Halley <bob.halley@nominum.com>)

8/22/2003
	- Changing TXTRecord.getStrings() from returning a List of Strings
	  to a List of byte []'s was a bad idea.  Change it back, and
	  add TXTRecord.getStringsAsByteArrays().
	  (reported by Blake Ramsdell <blake@brutesquadlabs.com>)

8/21/2003
	- 1.4.0 released.

8/20/2003
	- Add the ReverseMap class, which contains functions to construct
	  names to be used in reverse map zones.

8/13/2003
	- When looking up a one label unqualified name which fails to match
	  all searchlist entries, don't append the root label and try again.
	  This is recommended by RFC 1536, section 6: "Only if the name, so
	  generated, returns an NXDOMAIN is the original name tried as a Fully
	  Qualified Domain Name. And only if it contains at least one period."

7/18/2003
	- Remove lots of unused imports. (Jared Richardson <jaredr@nc.rr.com>)

7/14/2003
	- Fix a long-existing bug where empty records (in update messages)
	  were incorrectly handled
	  (reported by Kevin C Miller <kevinm@andrew.cmu.edu>

6/22/2003
	- DNS types and classes are now represented as ints, not shorts.
	  This is an API change, but allows the full type/class range
	  to be used.

6/18/2003
	- Quoted strings didn't handle \ddd escapes.

6/17/2003
	- Fix an ArrayIndexOutofBoundsException triggered by load balancing
	  in the ExtendedResolver.
	  (reported by Norbert Desautels <ndesautels@gdgsystems.com>)

6/1/2003
	- Add the Name.relativize() method to convert an absolute name to
	  a name relative to a specified origin.
	- Add the Update class, which contains helper routines used to
	  construct dynamic update messages.

5/28/2003
	- Replace org.xbill.DNS.utils.MyStringTokenizer with
	  org.xbill.DNS.Tokenizer, which is a far more robust and correct
	  DNS tokenizer.  Convert everything to use it.
	- Fix text format of TXT, NAPTR, and HINFO records.

5/28/2003
	- When constructing a record, check that all names are absolute.

5/27/2003
	- 1.3.3 released.

4/26/2003
	- The master file parser should accept BIND format TTLs.

4/10/2003
	- The Inet6Address class incorrectly parsed some addresses.
	  (reported by steve weiland <steve@widge.net>)

4/7/2003
	- Records were not sorted properly (reported by
	  Joseph K Shraibman <jks@akula.com>)

4/2/2003
	- Fix off-by-one error in Name.compareTo (David Blacka)

3/30/2003
	- Add the ZoneTransferIn class, which performs incoming AXFR/IXFR
	- Make TSIG verification of multiple-message responses reentrant.
	- Fix incorrect string quoting.
	- Make records print on a single line by default; add the 'multiline'
	  option to use the more verbose format.

3/17/2003
	- Make the routine that converts an IP address from a string
	  more efficient and correct.
	  (based on a patch by Sean O'Neil <SeanO@telemate.net>)

2/12/2003
	- Fix an infinite loop that could occur when processing a response
	  containing a CNAME loop and an rcode of NOERROR.
	  (reported by Sean O'Neil <SeanO@telemate.net>)

1/25/2003
	- Cleanup and improvements to the ExtendedResolver class.

1/23/2003
	- Add the setMaxCache() method to the Cache class.
	- Check for non-absolute names when creating Records.

1/21/2003
	- 1.3.2 released.

1/20/2003
	- Certain responses with CNAMEs weren't being properly cached.
	  (reported by Sean O'Neil <SeanO@telemate.net>)
	- Add a 'compile' target to build.xml, and make the 'all' target
	  both compile and build the jar file.
	  (Jon Scott Stevens <jon@latchkey.com>)

12/22/2002
	- Check for SecurityExceptions in the Options static initializer;
	  this was preventing the use of dnsjava in an unsigned applet.
	  (reported by Peter Westerink <peterw@us.ibm.com>).

12/15/2002
	- Converting some types of records (TXT, for example) to wire format
	  could throw an IndexOutOfBoundsException.
	- TSIG signed UDP queries weren't properly verified by jnamed.
	- Add a method to render a Message with a specified maximum size -
	  this method will properly truncate large responses and apply
	  TSIG signatures.

12/14/2002
	- Move additional data processing to the Record class from jnamed;
	  make jnamed use it, as well as the caching code.

12/9/2002
	- Add the Lookup class, which is what the dns class should have been,
	  and make the lookup sample program use it.

12/9/2002
	- When caching a message, a response object can be constructed
	  immediately.

12/4/2002
	- 1.3.1 released.

12/3/2002
	- If a subresolver of an ExtendedResolver exited by throwing
	  a RuntimeException, the ExtendedResolver would throw a
	  ClassCastException.   It should rethrow the RuntimeException.

12/3/2002
	- The Name code didn't handle names with non-printable characters.
	  (found by Serge Sozonoff <serge@globalbeach.com>)

11/28/2002
	- Fix a potential deadlock in the WorkerThread class.
	  (found by Serge Sozonoff <serge@globalbeach.com>)

11/26/2002
	- Fix a bug where looking up names without trailing dots
	  would fail if there was no searchlist.

10/31/2002
	- Fix a bug in searchlist processing on Windows.

10/20/2002
	- Record.toWire() and Record.toWireCanonical() do not need to
	  be declared as throwing IOException, since there's no
	  legitimate reason for them to throw one.

10/18/2002
	- Race condition fixes and memory usage improvements to the
	  NameSet class, used by Cache and Zone.

10/16/2002
	- 1.3.0 released.

10/11/2002
	- Add Name.getLabel()

10/10/2002
	- When cleaning the cache, catch ConcurrentModificationExceptions.

10/8/2002
	- Cleanups to Cache.addMessage() and the Credibility code.

10/7/2002
	- Fix problems with search path handling in the dns class.
	- Possible race condition fixes to the Cache code.

10/6/2002
	- Fix minor bugs in Name code (Bob Halley <bob.halley@nominum.com>)

10/1/2002
	- Memory usage and speed improvements to the TypeMap class.

9/25/2002
	- Add the verbosecache option.
	- Significant memory usage improvements to the Name class.

9/23/2002
	- Memory usage improvements to the ARecord class.

9/16/2002
	- Support for NetWare's sys:/etc/resolv.cfg file.
	  (Scott Villinski <scott@villinski.com>)

9/5/2002
	- When looking for an rdataset in a zone or cache, seeing a CNAME
	  above the name is not an error.
	  (reported by Andrew Houghton <aah@volunteermatch.org>)

8/31/2002
	- Changed the code that dynamically loads record types; hopefully
	  this will solve some of the mysterious problems that I think
	  are related to non-English versions of Windows.
	- Clean up the Name code.

8/28/2002
	- Remove support for bitstring labels, since they're now deprecated.

8/16/2002
	- Address.isDottedQuad didn't check to see if the input String
	  contained characters after an IP address.
	  (Marcos Sanz <sanz@denic.de>)

8/11/2002
	- Querying for a nonexistant name with exactly one label didn't return.

8/10/2002
	- Add Ant build script (Blake Ramsdell <blake@brutesquadlabs.com>)

8/6/2002
	- The AAAARecord constructor was broken.
	- The Record class now implements Comparable.

6/22/2002
	- Significant speed improvements in the Record class and its
	  subclasses.

6/20/2002
	- Add Zone.removeRecord() (based on code from Adam Cassar
	  <adam.cassar@netregistry.com.au>)
	- Add Zone.toMasterFile() (based on code from Adam Cassar)
	- Performance enhancements to the Name object.
	- Add the "-t type" option to the lookup program.

6/16/2002
	- Update lots of code to use Collections instead of JDK 1.1
	  Vectors & Hashtables.

5/28/2002
	- fix some limitations of name parsing.
	  (reported by Tasos Kotsikonas <tasos@boldfish.com>)

5/4/2002
	- added the 'sleep' and 'date' commands to the update client.
	  (Olafur Gudmundsson <ogud@ogud.com>)

4/29/2002
	- 1.2.4 released

4/25/2002
	- Add a constructor for building a zone from an array of records.
	  (based on code from Adam Cassar <adam.cassar@netregistry.com.au>)

4/24/2002
	- Reduce the memory usage of the RRset class.
	- Add a new factory method for creating a Record from a
	  String, rather than a pre-tokenized String.
	- Reduce the memory usage of the ARecord class.

4/23/2002
	- Fix potential race conditions in the RRset class.
	  (David Esposito <esposito@newnetco.com>)
	- Fix potential race condition in the WorkerThread class when two
	  threads complete their run methods nearly simultaneously.
	  (David Esposito)
	- Add a new factory method for creating a Record, where the length
	  of the rdata is not explicitly specified, but inferred from
	  data.length.

4/22/2002
	- Improve name decompression by not requiring a decompression context.

3/27/2002
	- Add support for the Delegation Signer (DS) record. (David Blacka)

3/22/2002
	- Record.equals() did not properly canonicalize names.
	- Record.equals() should ignore the TTL.

3/19/2002
	- When a compressed name is parsed, it should be added to the
	  compression table, so that future pointers to that name work.
	  (reported by Blake Ramsdell <blake@brutesquadlabs.com>)

3/14/2002
	- In jnamed, AXFR responses didn't have the message ID or flags
	  set correctly.
	- jnamed failed to respond to messages signed with unknown keys.
	- jnamed did not sign responses to signed AXFR queries.

1/21/2002
	- Handle empty domain statements in /etc/resolv.conf. (reported
	  by Blake Ramsdell <blake@brutesquadlabs.com>)

1/1/2002
	- Minor performance enhancments (suggested by Christopher Brind)

10/14/2001
	- Add support for the DNSSEC RSA-SHA1 algorithm (David Blacka)
	- Add rdataToWireCanonical() (David Blacka)

9/27/2001
	- jnamed can now listen on specific addresses, with the "address"
	  keyword in the config file.

9/23/2001
	- 1.2.3 released

9/14/2001
	- Creating an Enumeration of an empty RRset caused an infinite loop.
	  (David Blacka <davidb@research.netsol.com>)

8/9/2001
	- nsupdate compatibility and a bug fix to the update client.
	  (patch from David Sward <david@berzerked.org>)

8/8/2001
	- The results of ANY queries were not properly cached.

8/4/2001
	- 1.2.2 released

7/22/2001
	- Added the -q (print query) option to dig.
	- Bitstring labels are now canonicalized.
	- jnamed implements the DO (DNSSEC OK) bit.

7/19/2001
	- A string tokenizer bug caused TXT records with one string to be
	  incorrectly parsed.  (David Blacka)
	- Added Name.getLabelString().

7/17/2001
	- Started implementing Name.compareTo().  (loosely based on a
	  patch from David Blacka).

7/16/2001
	- Converting a AAAA record to wire format was broken.
	  (David Blacka)
	- Inet6Address did not properly reject addresses that are too
	  long or too short, and also didn't properly handle addresses
	  with one number after a double colon.
	- Key footprints were computed incorrectly.  Also cache footprints
	  in the KEYRecord to avoid recomputation. (David Blacka)
	- Added the -d flag to dig, which sets the DNSSEC OK bit.

7/13/2001
	- KEY flags were incorrect (David Blacka <davidb@research.netsol.com>)
	- Add routines for parsing a master file from a non-file input
	  source (David Blacka)
	- base64.formatString() didn't work if lineLength wasn't 64.
	  (David Blacka)
	- Add support for the DNSSEC OK extended flag (David Blacka)
	- Allow the caller of a Resolver to add an OPT record to a query.
	  (original patch from David Blacka).

6/30/2001
	- 1.2.1 released

5/23/2001
	- Automatically determining name servers didn't work on Windows 2000.

4/13/2001
	- Converting a Name to a String does proper character escaping.

4/7/2001
	- 1.2.0 released

3/21/2001
	- Only cache relevant data from answers.
	- Cache negative responses more correctly.

3/14/2001
	- Handle TTLs greater than 2^31.

3/10/2001
	- Performance and memory improvements to the Name object.

3/7/2001
	- Performance improvements to TypeMap (used by Zone and Cache).

3/6/2001
	- Lots of standards compliance related fixes.

3/4/2001
	- Improved class handling.
	- A few minor CNAME related fixes.

2/27/2001
	- Referrals weren't returned correctly from jnamed.

1/15/2001
	- Fix some signed/unsigned printing issues for KEY records
	  (Pasi Eronen <pe@iki.fi>)
	- Add routines to generate SIG(0) message signatures
	  (Pasi Eronen <pe@iki.fi>)

1/8/2001
	- Add support for unknown RR types & classes.

12/3/2000
	- The target in an MX record can be compressed.

11/18/2000
	- Add jnamed.conf example to USAGE

8/27/2000
	- 1.1.6 released
	- The high level api wasn't properly initialized.
	  (Christopher Fitch <cfitch@sbti.com>)
	- Added a routine to build a SIG record based on the results of
	  a DSA signature (Pasi Eronen <pe@iki.fi>)

8/13/2000
	- Added 'clear' command to update client
	- Removed some deprecated code

8/8/2000
	- Invalid binary labels were not always rejected
	- SRV initialization didn't work (reported by Chuck Santos
	  <csantos@netnumber.com>)
	- jnamed failed if no Cache was specified
	- The Zone object didn't handle zones with no NS records.
	- Added support for the NAPTR record (Chuck Santos
	  <csantos@netnumber.com>)

7/17/2000
	- 1.1.5 released
	- CERT records were printed with a negative keytag half the time.
	  (reported by Jakob Schlyter <jakob@crt.se>).
	- Printing a KEY record prints the key id.
	  (Jakob Schlyter <jakob@crt.se>)

6/25/2000
	- A Cache now contains a thread that periodically removes expired
	  data.

6/4/2000
	- update client syntax enhancement - add/delete/require/prohibit/glue
	  no longer require -r, -s, or -n.

6/3/2000
	- update client supported prohibiting individial records, which is
	  not supported by dynamic update.

5/21/2000
	- Win2000 support

4/15/2000
	- ExtendedResolver supports load balancing of servers.

4/2/2000
	- Minor fix to base64 decoding

3/22/2000
	- name comparison should always be case insensitive
	  (Darrell Kindred <dkindred@tislabs.com>

3/5/2000
	- 1.1.4 released
	- added Cache.setMaxNCache(), which sets the maximum amount of time
	  that a negative answer is cached.

2/10/2000
	- update client: add show command, catch socket exception, don't send
	  empty updates, assert tsig ok/failed/unsigned

2/8/2000
	- 1.1.3 released
	- Added lookup program
	- FindServer finds a search path on Win95/WinNT

2/7/2000
	- minor TKEY record updates
	- FindServer should work on Win95/WinNT
	- Added 'make jar' and a jar file

1/20/2000
	- Added AAAA record

1/13/2000
	- 1.1.2 released
	- dns.setResolver() clears the cache

11/7/1999
	- Added EDNS support to update client

11/2/1999
	- A key starting with ':' is parsed as hex

10/28/1999
	- minor TKEY fixes and TSIG updates

10/5/1999
	- misc. small fixes

10/4/1999
	- Missed TKEY in the type map

9/26/1999
	- Added TKEY record

9/25/1999
	- Diffie-Hellman key updates

9/23/1999
	- dns.server and dns.search are now comma-delimited strings

9/20/1999
	- 1.1 released (finally)
	- Change OPT to type 41 and fixed related stuff
	- Change license to LGPL

9/16/1999
	- Cache & DNSSEC bug fixes

9/9/1999
	- A6 record support (and IPv6 addresses)

9/6/1999
	- jnamed has limited support for SIG records

9/4/1999
	- res.sendAXFR() is now obsolete, just use res.send()
	- jnamed (and Zone) support incoming AXFR
	- Zone handles wildcards that replace multiple labels

9/2/1999
	- Bitstrings are now compatible with current BIND 9
	- jnamed (and Zone) support outgoing AXFR
	- jnamed uses jnamed.conf by default, can specify port in config file,
	  returns NOTIMPL on meta-queries other than AXFR and ANY.
	- DNSSEC can now verify records that came from wildcard expansion
	- SimpleResolver handles AXFR REFUSED
	- Lots of EDNS updates

9/1/1999
	- More bitstring fixes.
	- Added RP record (from Tom Scola <tscola@research.att.com>)

8/29/1999
	- More bitstring label stuff.  I think they work now.
	_ DataByteInputStream cleanup.  Should handle errors better now.

8/26/1999
	- More verbose options
	- TSIG badtime bug & better reporting
	- Large TTL bug
	- MyStringTokenizer.setNoEscapeCharacter()

8/25/1999
	- Imported DNSSEC code
	- New options: tsigfudge, verbosehmac, verbosemsg
	- Added utils.hexdump to print a formatted dump of bytes

8/24/1999
	- More bitstring label support

8/23/1999
	- All data now passes through the Cache.  This should help with
	  DNSSEC verification
	- Added basic DNSSEC verification
	- Fixes for handling data with TTL 0
	- Started adding bitstring labels
	- Added support for DNAME records (no processing yet)

8/8/1999
	- Started adding global options (Options class)

8/7/1999
	- Type and Class ANY should work correctly now
	- jnamed and Zone handle wildcard records
	- Cache returns wildcard set if name is negatively cached
	- TTL can be converted into BIND format

8/6/1999
	- Updates to KEYRecord - getFootprint() and renamed constants

8/2/1999
	- 1.0.2 released
	- WorkerThread obscure race conditions fixed (patches provided by
	  Tom May <tom@go2net.com>)

8/1/1999
	- Added getResolver/getCache to dns class
	- RRset now has deleteRR and is better synchronized
	- Cache now has flushName/flushSet
	- Resolver.sendAsync returns an Object instead of an int
	- Socket cleanup (patches provided by Tom May <tom@go2net.com>)
	- WorkerThread's idle lifetime and max threads are now configurable
	- HMAC-MD5 logic bug

7/5/1999
	- 1.01 released
	- fixed a hang with ExtendedResolver and Exceptions

6/30/1999
	- dns search path should always include a . at the end.  The only
	  time this bug would show up is when querying for an unqualified
	  top level name.

6/29/1999
	- update now ignores '>' at the beginning of a line, to allow
	  easier cut and paste from other update sessions.

6/24/1999
	- Use an int instead of a short for the message section count.
	  It would be nice if java had unsigned types, but since messages
	  are also constructed from zone transfers, a larger value is useful.

6/23/1999
	- AXFR TSIG bug fix

6/18/1999
	- 1.0 released.  Yay!
	- documentation updates
	- my birthday

6/15/1999
	- Restructured update's help
	- Added 'assert serial' to update, fixes to query keyword
	- Added Record.fromWire from a byte array
	- Added LOC support

6/14/1999
	- Updates to multiline parser

6/11/1999
	- Added Message.newUpdate to simplify sending updates

6/10/1999
	- Zone file parser now handles $INCLUDE
	- update now has a keyword 'zone', which sets the zone to be updated,
	  if it's different than the origin
	- added constants for DNAME, A6, KX
	- added KX support, abstracted MX code to support KX also.

6/9/1999
	- update should handle timeouts
	- AXFR parser should allow 1 record in the question section

6/7/1999
	- Zone file parser now handles $TTL, and complains about invalid
	  directives.
	- fixed a few parsing problems in update
	- fixed null key parsing and key flags handling

6/3/1999
	- added author javadoc tags
	- added javadoc comments to Master.  Again, not sure how I missed
	  this before.

5/25/1999
	- 0.9.5 released
	- fixed another null pointer in the cache

5/23/1999
	- added javadoc comments to utils/MyStringTokenizer.  Not sure how
	  I missed this class before.
	- minor cleanups to string parsing in update

5/21/1999
	- fixed comment processing in update
	- fixed case bug in Section handling

5/20/1999
	- 0.9.4 released
	- fixed the same round-robin bug, hopefully correctly this time

5/17/1999
	- 0.9.3 released

5/16/1999
	- fixed a round-robin bug

5/14/1999
	- 0.9.2 released
	- Resolver routines now return Exceptions instead of null.

5/13/1999
	- split WorkerThread into WorkerThread and ResolveThread

4/25/1999
	- moved files to org.xbill.DNS
	- Cache round-robins RRsets before handing them out
	- changed the way ExtendedResolver decides when to send queries
	- various reflection changes

4/21/1999
	- minor WorkerThread fixes

4/19/1999
	- 0.9.1 released
	- WorkerThreads should die after 15 minutes of idle time
	- Address.getByName/getAllByName handle dotted quad IP addresses

4/18/1999
	- 0.9 released
	- Finished javadoc-ing classes in DNS.*
	- Server should work now
	- Zone/Cache response updates
	- Zone/Cache accesses should be more thread-safe

4/17/1999
	- The Cache supports ANY queries
	- More javadoc-ed classes in DNS.*
	- implemented toWireCanonical for record types that need it
	- Message.toString should print better output for update messages

4/16/1999
	- jnamed wasn't looking up non-ANY queries correctly in a zone
	- SimpleResolver should use TCP if query length is longer than UDP
		packet size
	- More javadoc-ed classes in DNS.*
	- MyStringTokenizer moved to DNS.utils

4/15/1999
	- More javadoc-ed classes in DNS.*
	- Moved functions from DNS.IO to DNS.utils.base64 and DNS.Master
	- Implemented search path for dns.getRecords functions
	- 0.8.3 released
	- Restrict number of WorkerThreads to 10
	- ExtendedResolver timer code fixes
	- ExtendedResolver race condition fix

4/14/1999
	- ExtendedResolver reentrancy fixes
	- Names are marked as qualified/unqualified
	- FindServer looks for search path from -Ddns.search1, etc.
		and in /etc/resolv.conf

4/13/1999
	- 0.8.2 released
	- More javadoc-ed classes in DNS.*
	- The message ID stuff from 4/10 broke TSIG, so it's gone
	- Changes to ExtendedResolver's handling of child Resolvers
	- Too many threads were being created
	- Threads should now have meaningful names

4/12/1999
	- NameSet shouldn't be using wildcards, since it's not correct for
		a cache (a name could match a wildcard and return wildcard
		data before the cache learned about data for the name)
	- javadoc-ed DNS.utils.* and some of DNS.*
	- ExtendedResolver allows specifying Resolvers to use
	- SimpleResolver and ExtendedResolver share a thread pool
	- ExtendedResolver and FindServer bugfixes
	- Header bug that actually caused the 0.8.1 release fixed
	- bugfix release 0.8.1 released
	- Messages weren't being cloned properly
	- Resolver didn't handle a query to nowhere correctly

4/11/1999
	- 0.8 released
	- Resolver is now an interface, implemented by SimpleResolver
		and ExtendedResolver.
	- added ExtendedResolver, which sends multiple queries to multiple
		resolvers.
	- jnamed rejects non-queries

4/10/1999
	- added Message.newQuery() to make building queries easier
	- Record.fromWire verifies that the record length is correct
	- Resolver.sendAsync() now uses worker threads rather than
		starting a new thread each time.
	- Multiple servers can be found by setting the dns.server<n>
		properties (or from /etc/resolv.conf).
	- Message/Header doesn't generate the message id until the message
		is sent or the id is queried for

4/9/1999
	- added setTimeout to Resolver

4/8/1999
	- fixed obscure md5 bug
	- made Resolver(null) and Resolver() equivalent

4/7/1999
	- Added simple asynchronous interface to resolver

4/6/1999
	- CERT and SIG bug fixes

4/5/1999
	- data lookups should use class in addition to type
	- CERT record bug fix

4/4/1999
	- 0.7 released
	- DNS.dns uses Cache
	- Added getAny* to DNS.dns
	- Cache can return information indicating partial success on lookup

4/3/1999
	- Cache does negative caching
	- Cache follows CNAMEs when looking for cached data

4/2/1999
	- dig now understands -x
	- added DNS.Address, a clone of InetAddress
	- Cache can now follow CNAME chains
	- Cache now expires records based on TTL and doesn't cache records
		with TTL = 0.

4/1/1999
	- Made Cache and Zone extend NameSet
	- Created Master class to parse master files

3/31/1999
	- Added first cut at Cache
	- Changes to RRset to make it more useful

3/30/1999
	- 0.6 released
	- bug fixes to DataInputStream, jnamed
	- jnamed now takes config file
	- Added basic EDNS0 and TSIG support to jnamed
	- Added basic EDNS0 support and IgnoreTruncation flag to Resolver
	- jnamed can now return FORMERR

3/29/1999
	- 0.5 released
	- update client: added "echo" and "log" keywords, "file" can now
		specify "-" for standard input (at the end of a config file,
		for example).
	- added support for BIND TTL format
	- switched from CountedDataOutputStream to DataByteOutputStream,
		which extends ByteArrayOutputStream.  Same for Input.
		Should help performance and allow more flexibility.
	- minor server fix to authority section

3/28/1999
	- 0.4 released
	- fixed compression bug where all pointers into rdata were 0
	- server sends authority records (NS or SOA)
	- server now loads glue data separately from zone data, adds
		authority and additional data, and deals with truncation.
	- fixed a few Zone bugs
	- added signatures to RRset

3/27/1999
	- 0.3 released
	- _res was set wrong, so the high level functions wouldn't work.
	- Minor additions to CountedData(Input|Output)Stream
	- Lots of DNSSEC stuff

3/26/1999
	- moved constants out of dns class into other classes

3/25/1999
	- 0.2 released
	- conversion from base64 sometimes added extra zeroes.
	- original record length was computed wrong, so tsigs didn't verify.
	- master file parser didn't deal with ; delimited comments
	- server now stores data in RRsets instead of individual RRs.
	- various server bug fixes.  Still doesn't work too well.

3/23/1999:
	- 0.1 released
