From ce74fb09050831b6e76e134620f5caadff3b25ef Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 12 Jun 2023 16:44:40 +0200 Subject: resolved: add dns_resource_key_from_json() helper It reverse what dns_resource_key_to_json(), i.e. turns JSON data into a parsed DnsResourceKey object. Ultimately this just moves a client-side local wrapper into generic code. Nothing truly new here. --- src/resolve/resolvectl.c | 30 +----------------------------- src/resolve/resolved-dns-rr.c | 28 ++++++++++++++++++++++++++++ src/resolve/resolved-dns-rr.h | 1 + 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c index e65fbbcbab..3de0a4e9d9 100644 --- a/src/resolve/resolvectl.c +++ b/src/resolve/resolvectl.c @@ -2586,34 +2586,6 @@ static int verb_log_level(int argc, char *argv[], void *userdata) { return verb_log_control_common(bus, "org.freedesktop.resolve1", argv[0], argc == 2 ? argv[1] : NULL); } -static int monitor_rkey_from_json(JsonVariant *v, DnsResourceKey **ret_key) { - _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL; - uint16_t type = 0, class = 0; - const char *name = NULL; - int r; - - JsonDispatch dispatch_table[] = { - { "class", JSON_VARIANT_INTEGER, json_dispatch_uint16, PTR_TO_SIZE(&class), JSON_MANDATORY }, - { "type", JSON_VARIANT_INTEGER, json_dispatch_uint16, PTR_TO_SIZE(&type), JSON_MANDATORY }, - { "name", JSON_VARIANT_STRING, json_dispatch_const_string, PTR_TO_SIZE(&name), JSON_MANDATORY }, - {} - }; - - assert(v); - assert(ret_key); - - r = json_dispatch(v, dispatch_table, NULL, 0, NULL); - if (r < 0) - return r; - - key = dns_resource_key_new(class, type, name); - if (!key) - return -ENOMEM; - - *ret_key = TAKE_PTR(key); - return 0; -} - static int print_question(char prefix, const char *color, JsonVariant *question) { JsonVariant *q = NULL; int r; @@ -2624,7 +2596,7 @@ static int print_question(char prefix, const char *color, JsonVariant *question) _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL; char buf[DNS_RESOURCE_KEY_STRING_MAX]; - r = monitor_rkey_from_json(q, &key); + r = dns_resource_key_from_json(q, &key); if (r < 0) { log_warning_errno(r, "Received monitor message with invalid question key, ignoring: %m"); continue; diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c index 603bb1a10d..f6344542d6 100644 --- a/src/resolve/resolved-dns-rr.c +++ b/src/resolve/resolved-dns-rr.c @@ -1853,6 +1853,34 @@ int dns_resource_key_to_json(DnsResourceKey *key, JsonVariant **ret) { JSON_BUILD_PAIR("name", JSON_BUILD_STRING(dns_resource_key_name(key))))); } +int dns_resource_key_from_json(JsonVariant *v, DnsResourceKey **ret) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL; + uint16_t type = 0, class = 0; + const char *name = NULL; + int r; + + JsonDispatch dispatch_table[] = { + { "class", JSON_VARIANT_INTEGER, json_dispatch_uint16, PTR_TO_SIZE(&class), JSON_MANDATORY }, + { "type", JSON_VARIANT_INTEGER, json_dispatch_uint16, PTR_TO_SIZE(&type), JSON_MANDATORY }, + { "name", JSON_VARIANT_STRING, json_dispatch_const_string, PTR_TO_SIZE(&name), JSON_MANDATORY }, + {} + }; + + assert(v); + assert(ret); + + r = json_dispatch(v, dispatch_table, NULL, 0, NULL); + if (r < 0) + return r; + + key = dns_resource_key_new(class, type, name); + if (!key) + return -ENOMEM; + + *ret = TAKE_PTR(key); + return 0; +} + static int type_bitmap_to_json(Bitmap *b, JsonVariant **ret) { _cleanup_(json_variant_unrefp) JsonVariant *l = NULL; unsigned t; diff --git a/src/resolve/resolved-dns-rr.h b/src/resolve/resolved-dns-rr.h index 024cfb8744..a3fa24eaf9 100644 --- a/src/resolve/resolved-dns-rr.h +++ b/src/resolve/resolved-dns-rr.h @@ -368,6 +368,7 @@ int dns_txt_item_new_empty(DnsTxtItem **ret); int dns_resource_record_new_from_raw(DnsResourceRecord **ret, const void *data, size_t size); int dns_resource_key_to_json(DnsResourceKey *key, JsonVariant **ret); +int dns_resource_key_from_json(JsonVariant *v, DnsResourceKey **ret); int dns_resource_record_to_json(DnsResourceRecord *rr, JsonVariant **ret); void dns_resource_record_hash_func(const DnsResourceRecord *i, struct siphash *state); -- cgit v1.2.3