Syntax08 (syntax08)

Status: Final

Purpose

  • Validate syntax of MX exchange hostnames for the tested zone.

Preconditions And Inputs

  • Preconditions:
    • A zone.Zone object is available.
  • Required inputs:
    • MX response for zone apex.
    • Deduplicated MX exchange targets from answer section.
  • Profile/config knobs that affect behavior:
    • resolver.defaults.parallel: controls parallel per-MX-target syntax checks.
    • net.ipv4 and net.ipv6 can affect z.QueryOne transport availability.

Algorithm And Decision Flow

  1. Emit TEST_CASE_START.
  2. Execute z.QueryOne for MX at zone apex.
  3. If response is present:
    • Extract MX exchanges from answer section.
    • Deduplicate case-insensitively, preserving first-seen order.
    • For each unique exchange, run checkNameSyntaxWithLogger("MX", target) in parallel.
    • Emit one or more of: MX_NON_ALLOWED_CHARS, MX_DISCOURAGED_DOUBLE_DASH, MX_NUMERIC_TLD, or MX_SYNTAX_OK.
    • Emit TEST_CASE_END and return.
  4. If no response message is available, emit NO_RESPONSE_MX_QUERY.
  5. Emit TEST_CASE_END.

Emitted Tags (Possible Set)

TagEmitted when
MX_DISCOURAGED_DOUBLE_DASHMX hostname has non-ACE -- in positions 3 and 4.
MX_NON_ALLOWED_CHARSMX hostname has disallowed characters.
MX_NUMERIC_TLDMX hostname rightmost label is numeric-only.
MX_SYNTAX_OKMX hostname passes all implemented checks.
NO_RESPONSE_MX_QUERYNo MX response message is obtained.
TEST_CASE_ENDTestcase completion marker is emitted.
TEST_CASE_STARTTestcase start marker is emitted.

Tag Arguments

TagArgument keyTypeMeaning
MX_DISCOURAGED_DOUBLE_DASHlabelstringLabel with discouraged double dash pattern.
MX_DISCOURAGED_DOUBLE_DASHdomainstringMX hostname under validation.
MX_NON_ALLOWED_CHARSdomainstringMX hostname with disallowed characters.
MX_NUMERIC_TLDdomainstringMX hostname under validation.
MX_NUMERIC_TLDtldstringNumeric TLD label.
MX_SYNTAX_OKdomainstringMX hostname that passed checks.
NO_RESPONSE_MX_QUERY--No arguments.
TEST_CASE_ENDtestcasestringTestcase display name (Syntax08).
TEST_CASE_STARTtestcasestringTestcase display name (Syntax08).

Severity Levels Per Tag

TagLevelNotes
MX_DISCOURAGED_DOUBLE_DASHWARNINGDefault from share/profile.json (test_levels.SYNTAX).
MX_NON_ALLOWED_CHARSWARNINGDefault from share/profile.json (test_levels.SYNTAX).
MX_NUMERIC_TLDWARNINGDefault from share/profile.json (test_levels.SYNTAX).
MX_SYNTAX_OKINFODefault from share/profile.json (test_levels.SYNTAX).
NO_RESPONSE_MX_QUERYDEBUGDefault from share/profile.json (test_levels.SYNTAX).
TEST_CASE_ENDDEBUGDefault from share/profile.json (test_levels.SYNTAX).
TEST_CASE_STARTDEBUGDefault from share/profile.json (test_levels.SYNTAX).

Differences From Upstream

  • Upstream reference: syntax08.md
  • Differences (Upstream vs Gonemaster):
    • Upstream text describes hostname length checks, but Gonemaster only checks character set, numeric TLD, and discouraged double dash.
    • Upstream describes dependency on de-escaped output from syntax05; Gonemaster runs independently of syntax05 output values.
  • Potential upstream report:
    • yes
  • If yes, include:
    • Upstream expected behavior: Explicit length checks and syntax05-linked dependency.
    • Gonemaster observed behavior: No length checks and no syntax05 data dependency.
    • evidence: docs/specifications/upstream/tests/Syntax-TP/syntax08.md, engine/test/syntax/syntax.go (All, checkNameSyntaxWithLogger, Syntax08).
    • report status: not filed

Edge Cases And Limitations

  • If MX response exists but has zero MX answers, no MX-specific tag is emitted (only testcase start/end).
  • Duplicate MX targets are checked once (case-insensitive dedupe).
  • When running through syntax.All, this testcase is skipped if syntax01 did not emit ONLY_ALLOWED_CHARS.