From: Lennart Poettering Date: Thu, 5 Jun 2025 10:17:01 +0000 (+0200) Subject: resolvectl: output slightly more data when --raw=payload is used X-Git-Tag: v256.17~31 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=11714457784ac6d0395fb39c887ab802eafcaac9;p=thirdparty%2Fsystemd.git resolvectl: output slightly more data when --raw=payload is used Let's also show A/AAAA data in binary form if --raw=payload is used. For these RR types there's only a single data field, hence it's obbviously meant. Inspired by: #37737 (cherry picked from commit 141894f53ac02115cfc9821125619dc782c01122) (cherry picked from commit 8a78ab58cc5a4d96c2375fc2f86a94601b9a094d) --- diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c index f2e9e7a96b6..debbdeb15a4 100644 --- a/src/resolve/resolvectl.c +++ b/src/resolve/resolvectl.c @@ -462,7 +462,7 @@ static int output_rr_packet(const void *d, size_t l, int ifindex) { return r; } else if (arg_raw == RAW_PAYLOAD) { - void *data; + const void *data; ssize_t k; k = dns_resource_record_payload(rr, &data); diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c index 204d4a625ee..fb49073e9d9 100644 --- a/src/resolve/resolved-dns-rr.c +++ b/src/resolve/resolved-dns-rr.c @@ -1350,9 +1350,9 @@ const char *dns_resource_record_to_string(DnsResourceRecord *rr) { return TAKE_PTR(s); } -ssize_t dns_resource_record_payload(DnsResourceRecord *rr, void **out) { +ssize_t dns_resource_record_payload(DnsResourceRecord *rr, const void **ret) { assert(rr); - assert(out); + assert(ret); switch (rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) { case DNS_TYPE_SRV: @@ -1363,8 +1363,6 @@ ssize_t dns_resource_record_payload(DnsResourceRecord *rr, void **out) { case DNS_TYPE_HINFO: case DNS_TYPE_SPF: case DNS_TYPE_TXT: - case DNS_TYPE_A: - case DNS_TYPE_AAAA: case DNS_TYPE_SOA: case DNS_TYPE_MX: case DNS_TYPE_LOC: @@ -1375,17 +1373,25 @@ ssize_t dns_resource_record_payload(DnsResourceRecord *rr, void **out) { case DNS_TYPE_NSEC3: return -EINVAL; + case DNS_TYPE_A: + *ret = &rr->a.in_addr; + return sizeof(rr->a.in_addr); + + case DNS_TYPE_AAAA: + *ret = &rr->aaaa.in6_addr; + return sizeof(rr->aaaa.in6_addr); + case DNS_TYPE_SSHFP: - *out = rr->sshfp.fingerprint; + *ret = rr->sshfp.fingerprint; return rr->sshfp.fingerprint_size; case DNS_TYPE_TLSA: - *out = rr->tlsa.data; + *ret = rr->tlsa.data; return rr->tlsa.data_size; case DNS_TYPE_OPENPGPKEY: default: - *out = rr->generic.data; + *ret = rr->generic.data; return rr->generic.data_size; } } diff --git a/src/resolve/resolved-dns-rr.h b/src/resolve/resolved-dns-rr.h index 156fa018735..fa4da174e09 100644 --- a/src/resolve/resolved-dns-rr.h +++ b/src/resolve/resolved-dns-rr.h @@ -345,7 +345,7 @@ int dns_resource_key_match_soa(const DnsResourceKey *key, const DnsResourceKey * #define DNS_RESOURCE_KEY_STRING_MAX (_DNS_CLASS_STRING_MAX + _DNS_TYPE_STRING_MAX + DNS_HOSTNAME_MAX + 1) char* dns_resource_key_to_string(const DnsResourceKey *key, char *buf, size_t buf_size); -ssize_t dns_resource_record_payload(DnsResourceRecord *rr, void **out); +ssize_t dns_resource_record_payload(DnsResourceRecord *rr, const void **ret); #define DNS_RESOURCE_KEY_TO_STRING(key) \ dns_resource_key_to_string(key, (char[DNS_RESOURCE_KEY_STRING_MAX]) {}, DNS_RESOURCE_KEY_STRING_MAX)