
/*
** Distributed with 'doc' Version 2.1 from Defense Information
** Systems Agency (DISA).  2/16/95
*/

This documents the current procedure as implemented by
'doc' (Version 1.0).  Similar information, along with additional
comments can be found in the draft RFC.XXXX.


Current procedure:
==================

A: Abort test -- can't continue
E: Incorrect behavior is considered an error.
W: Incorrect behavior in this respect causes warning to be issued.
N: Note occurrence/information.
o: Side effects ... additional "computation".

Start test:

(1) Query default nameserver for NS records of parent domain.

(2) Query servers for parent domain for SOA record for parent domain.

    W: Check each response to see that it was authoritative.
    W: Check each response to see that SOA records were returned.
    W: Check that only one SOA was returned.

    W: Check that SOA serial numbers are same from all servers.
       Only servers not issued warning above are tested here.

    A: No server returned an SOA record.

    o  Generate list of parent servers that are authoritative and
       returned correct SOA information.  This is the list of servers
       that are asked next query.
  
  At this point, might want to add check to compare entire SOA.
  Such a check for parent SOAs probably not relative enough for
  test of child domain.  Similar reasoning why above are warnings
  and not errors.


(3) Query all authoritative servers of parent zone for
    NS records of domain being tested.

    N: Note the number of NS records and A records corresponding
       to nameserver (glue) were returned in response.

    E: Check that TTLs of NS records are the same.

    o: Determine if response is happens to be authoritative for
       testee domain.  Information is kept separate depending if
       came from authoritative server.
       This gets sort of messy, and may not be necessary (partially
       leftover from earlier versions).  However, many domains have
       different information at non-authoritative and authoritative.
       This allows one to be a bit more specific in issuing errors
       about what set of servers had inconsistent data.

    E: Check that NS records from different servers agree.
        (Test is done separately for the AUTH and non-AUTH
        server's lists.  If both are consistent, then check
        if the two lists also agree.)

    o: Generate list of servers for testee domain.
        Include any with corresponding NS record from any
        parent server (regardless to authority of server).
        Other lists are also maintained:
          - servers known by authoritative parent servers
          - servers known by non-authoritative parent servers
          - servers only known by non-authoritative parent servers
        Might also want to look at those only known by authoritative.

    W: Look at each parent server that also claimed authority for
       domain -- check that an NS record is held for it (by any
       of the servers).

(4) Query set of nameservers for testee domain for SOA records for
    domain.  Currently, set is generated above and includes any
    nameserver for which an NS record was returned in the above
    series (3) of queries.  Different criteria for set inclusion
    may also be interesting.

    E: Check each response to see that it was authoritative.
    E: Check each response to see that SOA records were returned.
    W: Check that only one SOA was returned.

    E: Check that SOA serial numbers are same from all servers.
       Only servers not issued warning above are tested here.

    E: Check that entire SOA record matches among servers.
       (Checked only if serial numbers agree).

    o: Generate list of nameservers that are authoritative
       and have at least one SOA record.


(5) Query set of testee domain nameservers for NS records of domain.
    Currently, this set includes all nameservers which in previous
    series of queries, returned authoritative response containing
    exactly one SOA.

    E: Check that TTLs of NS records are the same.

    E: Check that NS records from servers are the same.

    E: Check that NS records from testee serves agree with
       NS records from parent domain servers (make comparison with
       any list consistent among some set of the parent servers --
       i.e. remember that AUTH/non-AUTH mess !!)
       This is only checked if child servers agree among themselves.
     check for agreement between parent and child servers.

    E: Check that all servers that claim to be authoritative
       have NS record at held by one of the AUTH servers.

Generate a list of addresses of nameservers for domain the domain.
Choose addresses of servers that are in the domain in question
(i.e. don't care about some other domain's server which is acting
as a secondary).  Currently, I only look at one address on a network
(i.e. I'd only look at one of 128.9.0.32 and 128.9.0.33).


(6) Query for in-addr.arpa. PTR records for list of addresses
    on networks of the domain.

    E:  Check that response is returned to reverse mapping query.
