
   The news.com.com intermittent host name lookup failure.  This looks
   to be a compression error; but I can not reproduce the compression
   error.  I will work around this one with a kludge:  Have it so
   MaraDNS will send out an uncompressed packet if she can not compress
   a given DNS packet, but output a "Warning: Can not compress packet"
   error message along with outputtting the offending packet.

   This one is an intermittent error which only rarely happens; I have
   only seen it once after upgrading MaraDNS to log when this kind
   of thing happens. (DONE for MaraDNS 0.9.22 on 2002.05.04)

   Tutorial inprovment: All of the terms which are defined in the
   glossary should be linked to the glossary term in question. 
   (DONE for MaraDNS 0.9.22 on 2002.05.04)

---

MaraDNS should build and install without problem on the following
platforms:

* Solaris (Solaris 7) [Tested; works in 0.9.05; there is a known issue
  where Solaris < 8 crashes if it is asked to spawn too many threads]

* Linux (RedHat 7.1) [This is the native platform for MaraDNS development]

* Cygwin [Goal: MaraDNS 0.9.07; my Cygwin setup is fubar'd so I am unable to
          verify]

* Darwin (MacOS X) [Goal: MaraDNS 0.9.07; DONE 0.9.07 compiles fine there]

(DONE as described above)

---

There was a bug with the case where:

1) There is a CNAME which points to an A record

2) There is, in fact, and A record

3) Something happens after getting the CNAME record and before
   getting the A record.

   In this case, the record is stored as a CNAME record without an A
   record; the CNAME record needs to be purged from the cache before
   MaraDNS attempts to find an A record attached to the CNAME record.

   MaraDNS should do the following:

   If the user asks for an A record...
   And if If MaraDNS finds a CNAME record...
   And if the CNAME record does not point to an A record...

   Then MaraDNS needs to remove this CNAME record from the cache.

   (This will constantly remove records from the cache which are CNAME
    records which do not point to A records; but having CNAMEs which
    point to A records become unreachable hostnames until they leave the
    cache because of network glitches is unacceptable)

(Fixed For MaraDNS 0.9.10 on 2002.02.11; MaraDNS now has the ability to
 store a record for the case of a CNAME record where the A record does
 not exist; and CNAME records with neither an A record nor a "this host 
 does not exist" record are in the cache for only 30 seconds)

---


Add the fact that zone files can not automagically create a PTR record
from an A record in the "UNIMPLEMENTED FEATURES" section.  In addition
add the fact that MaraDNS does not resend packets to the "BUGS" section.
(DONE for 0.9.00; 2001/12/17)

Have the install script have a prefix for all the locations of files
(e.g. $PREFIX/bin, $PREFIX/lib, $PREFIX/doc, and $PREFIX/man), and have
something like this in the install script: if [ -z "$PREFIX" ]; then 
PREFIX=/usr/local ; fi (DONE for MaraDNS 0.8.99)

Fix the HTML faq so that the man page doesn't have raw HTML data in it.
(DONE for MaraDNS 0.9.00; 2001/12/17)

Finish tutorial. (DONE for MaraDNS 0.9.00; 2001/12/17)

Fix install.sh file with regards to adding the example files to the /etc
directory tree.  (DONE for MaraDNS 0.8.99; and patch already sent to the 
mailing list)

Implented, with few modifications, Jaakko's patch which allows MaraDNS
to compile with -Wall w/o warnings. (0.8.99; 2001/12/07)

Increase askmara timeout--it times out too quickly. (0.8.99; 2001/12/07)

Check the code which adds and removes NS records. (0.8.99; 2001/12/08;
I improved the stress test so that it checks this particular case.  No
memleaks seen)

Looks like there is a bug where MaraDNS does not properly close UDP
connections when sent, at once, too many requests.  Find and fix. (0.8.99;
2001/12/08)

Critical bug fixes:

* Finishing changing the API which allows one to traverse the hash (Done
  2001.11.11 for MaraDNS 0.8.31)

* Make the timeout when querying nameservers user-configurable.  This is
  to allow some extremly slow internet connections (which need more
  than two seconds to contact a DNS server) to work with MaraDNS.
  (Done 2001.11.11 for MaraDNS 0.8.31)

* Add signal handler which disconnects idle connections to the zone server
  after five minutes. (DONE, a while ago)

* There is a bug where the production-test DNS server does not work after
  resolving queries for a while.  This needs to be found and fixed.
  Looks like the code is (now was) pretty sloppy about unlocking locks in the
  event of an error condition--this is probably why MaraDNS has this
  problem. (MaraDNS 0.8.25 has a revamp of the locks which hopefully
  resolves this problem.  However, I want to look at the locks again
  one more time before closing this bug.  The locks look OK, but the bug
  was still around as recently as MaraDNS 0.8.27.  Hopefully, the improved
  new hash table core in MaraDNS 0.8.30 resolves this issue; Looks fixed:
  my stress-tester script can cause MaraDNS 0.8.26 to freeze, but doesn't
  cause MaraDNS 0.8.30 to freeze) (Closing this bug for the post-0.8.30
  release, since I think it was a problem with how the old hash couldn't
  delete records all of the time) (CLOSED 2001.11.10)

* Looks like there are problems with the custodian.  Test the custodian.
  (This is somewhat related to the issue with the locks) (DONE for MaraDNS
  0.8.30)

* Change the default max_glueless_level to 10 so that hosts like
  www.ole.tange.dk resolve without the user needing to up the max glueless
  level. (DONE for MaraDNS 0.8.27)

* Make the glueless level limit and maximum number of queries
  user-configurable (2001.10.06: Glueless level limit is now
  user-configurable.  Next: Maximum number of queries.  2001.10.07:
  Maximum number of queries is also now user-configurable)

* Make sure the verbose level of 0 is truly silent (DONE 2001.10.07.  Note
  that a verbose level of 0 still prints out messages in case of fatal
  errors which cause MaraDNS to abort) 

* Add Roy Arends and Ole Tange to the CREDITS file (DONE 2001.10.06)

* Make a perl script that recursively runs askmara multiple times
  from a user-specified root name server to the desired host name in
  question (DONE 2001.10.06)

* Check to see if getzone is compatible with BIND 8.2.4.  Actually, forget
  that: Just add a optional third argument that can change the class that
  getzone uses. (DONE, but needs to be documented.  DOCUMENTED 2001.10.06)

* Make sure a CNAME request still "goes through", even if we can't find the
  A record assosciated with the CNAME record. (This looks good, but needs
  to be verified.  VERIFIED 2001.10.06, inadvertently as I was testing
  the new max_glueless_level feature)

* Change the init_cache failed error message to say something useful
  (DONE 2001.10.06)

* Fix the !@#$ bug which makes Solaris leak memory like a sieve when used
  in recusive mode. (Believed DONE for the 0.8.23 release)

* Having the maximum number of TCP connections be allowed to be different
  value than the maximum number of threads running (DONE for the 0.8.17 
  release)

* Yes, people actually have zones with star records which point to CNAMEs
  in the real world.  Add the 30-50 lines of code (which is more-or-less
  a cut-and-paste of the existing "star record" code) so these records
  work. (DONE between 0.8.22 and 0.8.23)

* Have support for "maradns --version"-style syntax (DONE 2001.09.22)

* Remove dos-style newlines from the Spanish-language locale files (Ugh.  vim
  hides these from me) (DONE 2001.09.16)

* Make sure the recursive code is not leaking. (DONE 2001.09.15)

* Looks like the code which "overwrites" an element in the cache fails to
  add the new element after overwriting the old data. (DONE 2001.08.12)

* Why don't records in the cache robin-robin rotate? (DONE 2001.08.11)

* Fixed bug where udperror did not correctly get the header id. (2001.08.11)
  Needs to be backported to the 0.5.xx tree. (DONE for MaraDNS-0.5.30)

* www.mexconnect.com does not list the A record with the CNAME record
  (unreproducable.  2001.08.08: It looks like the problem was with how 
   MaraDNS handled CNAME records.  Since I have somewhat improved the
   CNAME record handling, this problem should now be fixed)

* Asking for a non-A record which points to a CNAME still chases down the
  A record.  Fix. (DONE 2001.08.08.  It always gets both the CNAME and
  the potential corresponding A record, and only returns an A record when 
  an A record was aksed for)

* Solaris support as an authoritative name server. (DONE)

* Change Rijndael Makefile, since NetBSD's make doesn't like it (DONE
  2001.08.07)

* linuxemu.retrofaction.com does not resolve.  Investigate and fix.
  (DONE 2001.08.03)

* Probems with resolving www.fairytale-abuse.com.  (one of the listed 
  nameservers does not have records for this domain, but instead gives out
  the list of root servers) (DONE 2001.07.28)

* Problems with resolving www.cs.cmu.edu and www.roaringpenguin.com
  (the case issue.  Again) (DONE 2001.07.28)

* The getzone client does not handle a zone with root nameservers correctly
  (DONE 2001.07.27)

* The getzone client sometimes outputs an @ instead of a | as a delimiter
  for a MX record she gets. (DONE 2001.07.27)

* tekheads.co.uk as a MX query does not work (DONE 2001.08.08.  This one
  was a nasty bug in the compression routine where it would incorrectly
  thing that a previous occurance of "www.bar.foo." could use "foo" in
  a subsequent hostname like "go.foo.boy.".  In fact, I need to now
  backport the fixes to the 0.5.xx tree, and make a 0.5.26 release which
  also needs to have improved RR_ANY handling [Backport DONE])

* www.sfsite.com as an A query does not work (DONE 2001.07.08)

* Add support for multiple ips (e.g. the same format as ACLs, but ignoring the
  netmask) for the root name servers. (DONE)

* Find out why www.monty.de does not resolve.  Perhaps we are exceeding the
  glueless level (currently 4) (Update: It is a subtle issue involving
  case sensitivity) (DONE 2001.07.07)

* Add support for CNAME records.  If an A record is not found in the
  cache, then look for a CNAME record before looking for a NS server.
  While this is done, it is not sufficient, in the case of stub resolvers,
  to merely have a CNAME returned.  The CNAME and the A record the CNAME
  points to need to be returned in the answer section. (DONE 2001.06.24)

* The code is leaky (has memory leaks).  Plug the memory leaks. 
  (ongoing work) (removing from priority one list, since these kind of 
  issues are better dealt with during the 0.8.xx alpha test cycle)
  (2001.11.10: The code looks tight--it is, as far as I can tell, not
   leaking)

* The code does not stop "going up the tree" when it gets a good answer
  from a nameserver.  Fix. (DONE 2001.07.03)

* When a CNAME record is added to the cache, we do not spit out a UDP packet
  with the good data.  Fix. (DONE 2001.06.25)

* There are cases where the nameserver goes in a loop until the kernel has to
  kill it.  Fix this by making sure that we only perform N queries or lookups
  from the cache. (Fix: I found the code that was causing the bad behavior,
  and fixed it.  Maybe I should do a "only N queries" hack, but that feels like
  fixing the symptoms instead of the underlying problem, which was, in this
  case, incorrect code to handle a circular linked list.  DONE 2001.07.04)

* Make sure that the custodian can not delete root nameserver entries
  (DONE 2001.07.07)

* Make the cache size user-configurable (DONE)

Code maintainibility issues:

* Make all the non-recursive code be code from the 0.5.25 branch
  (DONE)

Security issues:

* ACL list which limits the source IP of someone sending us a recursive query
  (DONE 2001.06.19)

* check the query ID of the answer we receive (DONE)

* Make the Rijndael key for the source port and source query truly random
  (DONE 2001.06.20)

* Handling of cache starvation (DONE 2001.06.21)

* Have the program exit if it is ever unable to allocate memory (DONE, make
  localizable)

* Allow MaraDNS to change her GID (in addition to the UID) (DONE 2001.07.03)

Other critical issues:

* Allow recursion to be performed when the user asked for recursion, and
  we have, for the requested hostname in question, delegation NS records.
  (DONE 2001.06.20)

* Negative caching (DONE)

* Customizable root name servers (Sorta DONE, the user can select a single
  root nameserver to query, 2001.06.25) (DONE: Lists of root nameservers
  are allowed)

* The first nameserver we query should be randomly selected (DONE 2001.07.01)

* Recursive RR_ANY requests do not work. (Update 2001.07.03: This one is
  going to be tricky to fix.  Four possible solutions: 1) Change the core 
  code which adds elements to the cache to allow the qtype of the answer 
  be different than the qtype of the question.  2) Write up code which 
  can take two different records in the cache, and "sew" them together in
  to one big record in the cache 3) Write up code (similiar to how the
  authoritative code does it) which "sew"s together a big answer from 
  multiple different elements in the cache 4) Look for a MX, give that answer
  if its there, otherwise look for A, otherwise give out a NXDOMAIN.
  DONE 2001.07.06: I elected for option number 3, since all I had to do
  was make some modest changes to the already existing udpany program)

* Make sure we properly expire negative cache entries. (DONE 2001.07.01)

* Tell the user what IP we are binding to (DONE 2001.06.25)

Issues not essential to make the branch stable:

* Ignore leading or trailing whitespace in an ip_alias or ip_acl label

* Make the port number range that we bind to customizable

* Solaris support

"Wouldn't that be nice" issues (potential 1.2 material):

* Ability to disable case-insensitivity for queries sent to the
  recursor.

* We may (or may not) need a way of checking to make sure two different
  threads do not bind to the same port at the same time

* Check to see if getzone is compatible with BIND 8.2.4

* Make the cache size user-configurable (DONE)

* Round robin rotates of data in the cache (This is 1.2 material) (DONE,
  since it was easy to do, since the authoritative code already did this)

* Customizable root name servers which allow people to use different
  alternate registries for differnet TLDs. 

* The ability to pritorize name servers.  Servers which do not respond to 
  queries at put at the bottom of such a list, minimizing the slowdown 
  caused by unresponsive servers.

Long-term issues:

* SQL support (Important--I have gotten three requests for this)

* The ability to have different ips which query the DNS server get different
  responses.

* ipv6 support (but not for A6 records.  See 
  http://cr.yp.to/djbdns/killa6.html)

