Syntax05 (syntax05)
Status: Final
Purpose
- Detect misuse of
@in SOARNAMEand ensure mailbox form is represented with dot-separated DNS notation.
Preconditions And Inputs
- Preconditions:
- A
zone.Zoneobject is available.
- A
- Required inputs:
- A SOA response for the child zone apex, acquired via
z.QueryOne(..., "SOA", ...).
- A SOA response for the child zone apex, acquired via
- Profile/config knobs that affect behavior:
net.ipv4andnet.ipv6can affect which nameserver transportQueryOnecan use.
Algorithm And Decision Flow
- Emit
TEST_CASE_START. - Perform
z.QueryOnefor SOA at the zone apex. - If response contains SOA records in answer section:
- Use the first SOA record encountered.
- Read
Mbox(RNAME) and de-escape\.only for@-presence check. - Emit
RNAME_MISUSED_AT_SIGNif@is present. - Otherwise emit
RNAME_NO_AT_SIGN. - Emit
TEST_CASE_ENDand return.
- If no SOA record is available from the query path, emit
NO_RESPONSE_SOA_QUERY. - Emit
TEST_CASE_END.
Emitted Tags (Possible Set)
| Tag | Emitted when |
|---|---|
RNAME_MISUSED_AT_SIGN | SOA RNAME contains @. |
RNAME_NO_AT_SIGN | SOA RNAME has no @. |
NO_RESPONSE_SOA_QUERY | No usable SOA answer is obtained. |
TEST_CASE_END | Testcase completion marker is emitted. |
TEST_CASE_START | Testcase start marker is emitted. |
Tag Arguments
| Tag | Argument key | Type | Meaning |
|---|---|---|---|
RNAME_MISUSED_AT_SIGN | rname | string | Raw SOA RNAME value. |
RNAME_NO_AT_SIGN | rname | string | Raw SOA RNAME value. |
NO_RESPONSE_SOA_QUERY | - | - | No arguments. |
TEST_CASE_END | testcase | string | Testcase display name (Syntax05). |
TEST_CASE_START | testcase | string | Testcase display name (Syntax05). |
Severity Levels Per Tag
| Tag | Level | Notes |
|---|---|---|
RNAME_MISUSED_AT_SIGN | WARNING | Default from share/profile.json (test_levels.SYNTAX). |
RNAME_NO_AT_SIGN | INFO | Default from share/profile.json (test_levels.SYNTAX). |
NO_RESPONSE_SOA_QUERY | DEBUG | Default from share/profile.json (test_levels.SYNTAX). |
TEST_CASE_END | DEBUG | Default from share/profile.json (test_levels.SYNTAX). |
TEST_CASE_START | DEBUG | Default from share/profile.json (test_levels.SYNTAX). |
Differences From Upstream
- Upstream reference:
syntax05.md - Differences (Upstream vs Gonemaster):
- Upstream text describes iterating over Method4/Method5 nameserver sets directly; Gonemaster uses
z.QueryOneabstraction. - Upstream text says de-escaped output from this testcase is used by
SYNTAX08; Gonemaster does not pass state fromSyntax05toSyntax08.
- Upstream text describes iterating over Method4/Method5 nameserver sets directly; Gonemaster uses
- Potential upstream report:
yes
- If yes, include:
- Upstream expected behavior: Explicit Syntax05->Syntax08 dependency.
- Gonemaster observed behavior:
Syntax08is independent and always runs when enabled. - evidence:
docs/specifications/upstream/tests/Syntax-TP/syntax05.md,engine/test/syntax/syntax.go(All,Syntax05,Syntax08). - report status:
not filed
Edge Cases And Limitations
- If multiple SOA records exist, only the first SOA record found is evaluated.
- A DNS response without SOA in answer is treated the same as no response (
NO_RESPONSE_SOA_QUERY). - When running through
syntax.All, this testcase is skipped ifsyntax01did not emitONLY_ALLOWED_CHARS.