Zone08 (zone08)

Status: Final

Purpose

  • Validate that MX exchange hostnames are not aliases (CNAME).

Preconditions And Inputs

  • Preconditions:
    • A zone.Zone object is available.
  • Required inputs:
    • Authoritative MX response for child zone apex (queryAuth).
    • Authoritative CNAME lookups for each MX exchange hostname (queryAuth).
  • Profile/config knobs that affect behavior:
    • No testcase-local profile knob.

Algorithm And Decision Flow

  1. Emit TEST_CASE_START.
  2. Query authoritative MX for zone apex.
  3. If no response, emit NO_RESPONSE_MX_QUERY.
  4. Else, for each MX RR in apex answer:
    • query authoritative CNAME for MX exchange hostname;
    • if CNAME query has no response, emit no tag for that exchange;
    • if CNAME answer exists, emit:
      • MX_RECORD_IS_CNAME when exchange has CNAME answer;
      • MX_RECORD_IS_NOT_CNAME otherwise.
  5. Emit TEST_CASE_END.

Emitted Tags (Possible Set)

TagEmitted when
MX_RECORD_IS_CNAMEAn MX exchange hostname resolves as CNAME in authoritative CNAME lookup.
MX_RECORD_IS_NOT_CNAMEAn MX exchange hostname does not resolve as CNAME in authoritative CNAME lookup.
NO_RESPONSE_MX_QUERYApex MX query returned no response.
TEST_CASE_ENDTestcase completion marker is emitted.
TEST_CASE_STARTTestcase start marker is emitted.

Tag Arguments

TagArgument keyTypeMeaning
MX_RECORD_IS_CNAME--No arguments.
MX_RECORD_IS_NOT_CNAME--No arguments.
NO_RESPONSE_MX_QUERY--No arguments.
TEST_CASE_ENDtestcasestringTestcase display name (Zone08).
TEST_CASE_STARTtestcasestringTestcase display name (Zone08).

Severity Levels Per Tag

TagLevelNotes
MX_RECORD_IS_CNAMEERRORDefault from share/profile.json (test_levels.ZONE).
MX_RECORD_IS_NOT_CNAMEINFODefault from share/profile.json (test_levels.ZONE).
NO_RESPONSE_MX_QUERYDEBUGDefault from share/profile.json (test_levels.ZONE).
TEST_CASE_ENDDEBUGDefault from share/profile.json (test_levels.ZONE).
TEST_CASE_STARTDEBUGDefault from share/profile.json (test_levels.ZONE).

Differences From Upstream

  • Upstream reference: zone08.md
  • Differences (Upstream vs Gonemaster):
    • Upstream: describes a high-level authoritative MX/CNAME check. Gonemaster: performs explicit per-MX exchange CNAME probes and emits explicit positive/negative tags (MX_RECORD_IS_CNAME / MX_RECORD_IS_NOT_CNAME).
    • Upstream: does not describe testcase boundary debug markers. Gonemaster: emits TEST_CASE_START and TEST_CASE_END.
    • Upstream: does not describe explicit no-response MX tag. Gonemaster: emits NO_RESPONSE_MX_QUERY.
  • Potential upstream report:
    • no

Edge Cases And Limitations

  • Multiple MX RRs can yield multiple CNAME verdict tags in one run.
  • A missing CNAME-query response for an MX exchange yields no dedicated per-exchange tag.