resolvectl: render DNS errors as JSON
When --json is requested, resolution errors returned by resolved still went through text logging. That made scripts parse stderr even though the varlink error already carried structured fields such as rcode and EDE. Add a small JSON error dumper for resolvectl query errors. It outputs the queried name and varlink error id alongside the original varlink parameters so DNSError and DNSSECValidationFailed expose rcode, extendedDNSErrorCode, extendedDNSErrorMessage, queryString, and result without duplicating the schema in resolvectl. Keep non-JSON text output and silent warn_missing NXDOMAIN handling unchanged. Document the JSON resolution error object in resolvectl(1), including the distinction between resolved errors and local invocation or connection errors. Closes #42904
This commit is contained in:
committed by
Yu Watanabe
parent
7427ac3a63
commit
32b3aabfe7
@@ -768,10 +768,14 @@ testcase_08_resolved() {
|
||||
(! run resolvectl query nope.forwarded.test)
|
||||
grep -qF "nope.forwarded.test" "$RUN_OUT"
|
||||
grep -qF "not found" "$RUN_OUT"
|
||||
(! run resolvectl --json=short query -t A nope.forwarded.test)
|
||||
jq -e '.name == "nope.forwarded.test" and .error == "io.systemd.Resolve.DNSError" and .rcode == 3 and .queryString == "nope.forwarded.test"' "$RUN_OUT"
|
||||
|
||||
# SERVFAIL + EDE code 6: DNSSEC Bogus
|
||||
(! run resolvectl query edns-bogus-dnssec.forwarded.test)
|
||||
grep -qE "^edns-bogus-dnssec.forwarded.test:.+: upstream-failure \(DNSSEC Bogus\)" "$RUN_OUT"
|
||||
(! run resolvectl --json=short query -t A edns-bogus-dnssec.forwarded.test)
|
||||
jq -e '.name == "edns-bogus-dnssec.forwarded.test" and .error == "io.systemd.Resolve.DNSSECValidationFailed" and .result == "upstream-failure" and .extendedDNSErrorCode == 6' "$RUN_OUT"
|
||||
# Same thing, but over Varlink
|
||||
(! run varlinkctl call /run/systemd/resolve/io.systemd.Resolve io.systemd.Resolve.ResolveHostname '{"name" : "edns-bogus-dnssec.forwarded.test"}')
|
||||
grep -qF "io.systemd.Resolve.DNSSECValidationFailed" "$RUN_OUT"
|
||||
@@ -782,6 +786,8 @@ testcase_08_resolved() {
|
||||
# SERVFAIL + EDE code 16: Censored + extra text
|
||||
(! run resolvectl query edns-extra-text.forwarded.test)
|
||||
grep -qE "^edns-extra-text.forwarded.test.+: SERVFAIL \(Censored: Nothing to see here!\)" "$RUN_OUT"
|
||||
(! run resolvectl --json=short query -t A edns-extra-text.forwarded.test)
|
||||
jq -e '.name == "edns-extra-text.forwarded.test" and .error == "io.systemd.Resolve.DNSError" and .rcode == 2 and .extendedDNSErrorCode == 16 and .extendedDNSErrorMessage == "Nothing to see here!" and .queryString == "edns-extra-text.forwarded.test"' "$RUN_OUT"
|
||||
(! run varlinkctl call /run/systemd/resolve/io.systemd.Resolve io.systemd.Resolve.ResolveHostname '{"name" : "edns-extra-text.forwarded.test"}')
|
||||
grep -qF "io.systemd.Resolve.DNSError" "$RUN_OUT"
|
||||
grep -qF '{"rcode":2,"extendedDNSErrorCode":16,"extendedDNSErrorMessage":"Nothing to see here!","queryString":"edns-extra-text.forwarded.test"}' "$RUN_OUT"
|
||||
|
||||
Reference in New Issue
Block a user