]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: split out helper for allocating DnsResourceRecord object from raw data
authorLennart Poettering <lennart@poettering.net>
Wed, 28 Sep 2022 10:44:43 +0000 (12:44 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 30 Sep 2022 12:21:38 +0000 (14:21 +0200)
No change in behaviour, just some refactoring.

src/resolve/resolvectl.c
src/resolve/resolved-dns-rr.c
src/resolve/resolved-dns-rr.h

index bda7ca2add0a1a580d77eae63b19cb99d1eee3a8..c069763e155af3aeb35d24fe073be3ada92f1e3d 100644 (file)
@@ -395,20 +395,9 @@ static int resolve_address(sd_bus *bus, int family, const union in_addr_union *a
 
 static int output_rr_packet(const void *d, size_t l, int ifindex) {
         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
-        _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
         int r;
 
-        r = dns_packet_new(&p, DNS_PROTOCOL_DNS, 0, DNS_PACKET_SIZE_MAX);
-        if (r < 0)
-                return log_oom();
-
-        p->refuse_compression = true;
-
-        r = dns_packet_append_blob(p, d, l, NULL);
-        if (r < 0)
-                return log_oom();
-
-        r = dns_packet_read_rr(p, &rr, NULL, NULL);
+        r = dns_resource_record_new_from_raw(&rr, d, l);
         if (r < 0)
                 return log_error_errno(r, "Failed to parse RR: %m");
 
index bf1b342b8df50e8f53c86e18d49f75e3d0716687..6fdc3b4faf74d14d3e634dcf28b74b0292bbff96 100644 (file)
@@ -1832,6 +1832,23 @@ int dns_txt_item_new_empty(DnsTxtItem **ret) {
         return 0;
 }
 
+int dns_resource_record_new_from_raw(DnsResourceRecord **ret, const void *data, size_t size) {
+        _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
+        int r;
+
+        r = dns_packet_new(&p, DNS_PROTOCOL_DNS, 0, DNS_PACKET_SIZE_MAX);
+        if (r < 0)
+                return r;
+
+        p->refuse_compression = true;
+
+        r = dns_packet_append_blob(p, data, size, NULL);
+        if (r < 0)
+                return r;
+
+        return dns_packet_read_rr(p, ret, NULL, NULL);
+}
+
 static const char* const dnssec_algorithm_table[_DNSSEC_ALGORITHM_MAX_DEFINED] = {
         /* Mnemonics as listed on https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml */
         [DNSSEC_ALGORITHM_RSAMD5]             = "RSAMD5",
index 91b1276f72db5ba56f2a3115a8a02fe8a9916d3b..1eaa8e566ba68cd6934180e283f59b34d02faad2 100644 (file)
@@ -364,6 +364,8 @@ bool dns_txt_item_equal(DnsTxtItem *a, DnsTxtItem *b);
 DnsTxtItem *dns_txt_item_copy(DnsTxtItem *i);
 int dns_txt_item_new_empty(DnsTxtItem **ret);
 
+int dns_resource_record_new_from_raw(DnsResourceRecord **ret, const void *data, size_t size);
+
 void dns_resource_record_hash_func(const DnsResourceRecord *i, struct siphash *state);
 int dns_resource_record_compare_func(const DnsResourceRecord *x, const DnsResourceRecord *y);