mirror of
https://github.com/systemd/systemd.git
synced 2025-01-10 05:18:17 +03:00
resolve: notify DNSSEC failure, EDE code, and EDE message
This commit is contained in:
parent
d9f9b8ce8a
commit
a068e06da6
@ -2715,18 +2715,21 @@ static int print_answer(JsonVariant *answer) {
|
||||
|
||||
static void monitor_query_dump(JsonVariant *v) {
|
||||
_cleanup_(json_variant_unrefp) JsonVariant *question = NULL, *answer = NULL, *collected_questions = NULL;
|
||||
int rcode = -1, error = 0;
|
||||
const char *state = NULL;
|
||||
int rcode = -1, error = 0, ede_code = -1;
|
||||
const char *state = NULL, *result = NULL, *ede_msg = NULL;
|
||||
|
||||
assert(v);
|
||||
|
||||
JsonDispatch dispatch_table[] = {
|
||||
{ "question", JSON_VARIANT_ARRAY, json_dispatch_variant, PTR_TO_SIZE(&question), JSON_MANDATORY },
|
||||
{ "answer", JSON_VARIANT_ARRAY, json_dispatch_variant, PTR_TO_SIZE(&answer), 0 },
|
||||
{ "collectedQuestions", JSON_VARIANT_ARRAY, json_dispatch_variant, PTR_TO_SIZE(&collected_questions), 0 },
|
||||
{ "state", JSON_VARIANT_STRING, json_dispatch_const_string, PTR_TO_SIZE(&state), JSON_MANDATORY },
|
||||
{ "rcode", _JSON_VARIANT_TYPE_INVALID, json_dispatch_int, PTR_TO_SIZE(&rcode), 0 },
|
||||
{ "errno", _JSON_VARIANT_TYPE_INVALID, json_dispatch_int, PTR_TO_SIZE(&error), 0 },
|
||||
{ "question", JSON_VARIANT_ARRAY, json_dispatch_variant, PTR_TO_SIZE(&question), JSON_MANDATORY },
|
||||
{ "answer", JSON_VARIANT_ARRAY, json_dispatch_variant, PTR_TO_SIZE(&answer), 0 },
|
||||
{ "collectedQuestions", JSON_VARIANT_ARRAY, json_dispatch_variant, PTR_TO_SIZE(&collected_questions), 0 },
|
||||
{ "state", JSON_VARIANT_STRING, json_dispatch_const_string, PTR_TO_SIZE(&state), JSON_MANDATORY },
|
||||
{ "result", JSON_VARIANT_STRING, json_dispatch_const_string, PTR_TO_SIZE(&result), 0 },
|
||||
{ "rcode", _JSON_VARIANT_TYPE_INVALID, json_dispatch_int, PTR_TO_SIZE(&rcode), 0 },
|
||||
{ "errno", _JSON_VARIANT_TYPE_INVALID, json_dispatch_int, PTR_TO_SIZE(&error), 0 },
|
||||
{ "extendedDNSErrorCode", _JSON_VARIANT_TYPE_INVALID, json_dispatch_int, PTR_TO_SIZE(&ede_code), 0 },
|
||||
{ "extendedDNSErrorMessage", JSON_VARIANT_STRING, json_dispatch_const_string, PTR_TO_SIZE(&ede_msg), 0 },
|
||||
{}
|
||||
};
|
||||
|
||||
@ -2739,7 +2742,7 @@ static void monitor_query_dump(JsonVariant *v) {
|
||||
/* And then show the questions that led to this one in case this was a CNAME chain */
|
||||
print_question('C', ansi_highlight_grey(), collected_questions);
|
||||
|
||||
printf("%s%s S%s: %s\n",
|
||||
printf("%s%s S%s: %s",
|
||||
streq_ptr(state, "success") ? ansi_highlight_green() : ansi_highlight_red(),
|
||||
special_glyph(SPECIAL_GLYPH_ARROW_LEFT),
|
||||
ansi_normal(),
|
||||
@ -2747,6 +2750,17 @@ static void monitor_query_dump(JsonVariant *v) {
|
||||
streq_ptr(state, "rcode-failure") ? dns_rcode_to_string(rcode) :
|
||||
state));
|
||||
|
||||
if (!isempty(result))
|
||||
printf(": %s", result);
|
||||
|
||||
if (ede_code >= 0)
|
||||
printf(" (%s%s%s)",
|
||||
FORMAT_DNS_EDE_RCODE(ede_code),
|
||||
!isempty(ede_msg) ? ": " : "",
|
||||
strempty(ede_msg));
|
||||
|
||||
puts("");
|
||||
|
||||
print_answer(answer);
|
||||
}
|
||||
|
||||
|
@ -1160,11 +1160,27 @@ int manager_monitor_send(Manager *m, DnsQuery *q) {
|
||||
SET_FOREACH(connection, m->varlink_subscription) {
|
||||
r = varlink_notifyb(connection,
|
||||
JSON_BUILD_OBJECT(JSON_BUILD_PAIR("state", JSON_BUILD_STRING(dns_transaction_state_to_string(q->state))),
|
||||
JSON_BUILD_PAIR_CONDITION(q->state == DNS_TRANSACTION_RCODE_FAILURE, "rcode", JSON_BUILD_INTEGER(q->answer_rcode)),
|
||||
JSON_BUILD_PAIR_CONDITION(q->state == DNS_TRANSACTION_ERRNO, "errno", JSON_BUILD_INTEGER(q->answer_errno)),
|
||||
JSON_BUILD_PAIR_CONDITION(q->state == DNS_TRANSACTION_DNSSEC_FAILED,
|
||||
"result", JSON_BUILD_STRING(dnssec_result_to_string(q->answer_dnssec_result))),
|
||||
JSON_BUILD_PAIR_CONDITION(q->state == DNS_TRANSACTION_RCODE_FAILURE,
|
||||
"rcode", JSON_BUILD_INTEGER(q->answer_rcode)),
|
||||
JSON_BUILD_PAIR_CONDITION(q->state == DNS_TRANSACTION_ERRNO,
|
||||
"errno", JSON_BUILD_INTEGER(q->answer_errno)),
|
||||
JSON_BUILD_PAIR_CONDITION(IN_SET(q->state,
|
||||
DNS_TRANSACTION_DNSSEC_FAILED,
|
||||
DNS_TRANSACTION_RCODE_FAILURE) &&
|
||||
q->answer_ede_rcode >= 0,
|
||||
"extendedDNSErrorCode", JSON_BUILD_INTEGER(q->answer_ede_rcode)),
|
||||
JSON_BUILD_PAIR_CONDITION(IN_SET(q->state,
|
||||
DNS_TRANSACTION_DNSSEC_FAILED,
|
||||
DNS_TRANSACTION_RCODE_FAILURE) &&
|
||||
q->answer_ede_rcode >= 0 && !isempty(q->answer_ede_msg),
|
||||
"extendedDNSErrorMessage", JSON_BUILD_STRING(q->answer_ede_msg)),
|
||||
JSON_BUILD_PAIR("question", JSON_BUILD_VARIANT(jquestion)),
|
||||
JSON_BUILD_PAIR_CONDITION(jcollected_questions, "collectedQuestions", JSON_BUILD_VARIANT(jcollected_questions)),
|
||||
JSON_BUILD_PAIR_CONDITION(janswer, "answer", JSON_BUILD_VARIANT(janswer))));
|
||||
JSON_BUILD_PAIR_CONDITION(jcollected_questions,
|
||||
"collectedQuestions", JSON_BUILD_VARIANT(jcollected_questions)),
|
||||
JSON_BUILD_PAIR_CONDITION(janswer,
|
||||
"answer", JSON_BUILD_VARIANT(janswer))));
|
||||
if (r < 0)
|
||||
log_debug_errno(r, "Failed to send monitor event, ignoring: %m");
|
||||
}
|
||||
|
@ -78,8 +78,11 @@ VARLINK_DEFINE_METHOD(
|
||||
VARLINK_DEFINE_OUTPUT(ready, VARLINK_BOOL, VARLINK_NULLABLE),
|
||||
/* Subsequent replies */
|
||||
VARLINK_DEFINE_OUTPUT(state, VARLINK_STRING, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_OUTPUT(result, VARLINK_STRING, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_OUTPUT(rcode, VARLINK_INT, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_OUTPUT(errno, VARLINK_INT, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_OUTPUT(extendedDNSErrorCode, VARLINK_INT, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_OUTPUT(extendedDNSErrorMessage, VARLINK_STRING, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_OUTPUT_BY_TYPE(question, ResourceKey, VARLINK_NULLABLE|VARLINK_ARRAY),
|
||||
VARLINK_DEFINE_OUTPUT_BY_TYPE(collectedQuestions, ResourceKey, VARLINK_NULLABLE|VARLINK_ARRAY),
|
||||
VARLINK_DEFINE_OUTPUT_BY_TYPE(answer, Answer, VARLINK_NULLABLE|VARLINK_ARRAY));
|
||||
|
Loading…
Reference in New Issue
Block a user