From 8ac4e9e1e54397f6d1745c2a7a806132418c7da2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 31 Jul 2014 18:02:24 +0200 Subject: [PATCH] resolved: properly process DNAME RRs --- src/resolve/resolved-dns-packet.c | 4 ++-- src/resolve/resolved-dns-rr.c | 4 +++- src/resolve/resolved-dns-rr.h | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c index 32c4876a5..5d4e097c7 100644 --- a/src/resolve/resolved-dns-packet.c +++ b/src/resolve/resolved-dns-packet.c @@ -502,6 +502,7 @@ int dns_packet_append_rr(DnsPacket *p, const DnsResourceRecord *rr, size_t *star case DNS_TYPE_PTR: case DNS_TYPE_NS: case DNS_TYPE_CNAME: + case DNS_TYPE_DNAME: r = dns_packet_append_name(p, rr->ptr.name, NULL); break; @@ -599,7 +600,6 @@ int dns_packet_append_rr(DnsPacket *p, const DnsResourceRecord *rr, size_t *star break; case DNS_TYPE_SRV: - case DNS_TYPE_DNAME: case DNS_TYPE_SSHFP: case _DNS_TYPE_INVALID: /* unparseable */ default: @@ -953,6 +953,7 @@ int dns_packet_read_rr(DnsPacket *p, DnsResourceRecord **ret, size_t *start) { case DNS_TYPE_PTR: case DNS_TYPE_NS: case DNS_TYPE_CNAME: + case DNS_TYPE_DNAME: r = dns_packet_read_name(p, &rr->ptr.name, NULL); break; @@ -1068,7 +1069,6 @@ int dns_packet_read_rr(DnsPacket *p, DnsResourceRecord **ret, size_t *start) { } case DNS_TYPE_SRV: - case DNS_TYPE_DNAME: case DNS_TYPE_SSHFP: default: r = dns_packet_read(p, rdlength, &d, NULL); diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c index b6a2c04cb..d28224499 100644 --- a/src/resolve/resolved-dns-rr.c +++ b/src/resolve/resolved-dns-rr.c @@ -237,6 +237,7 @@ DnsResourceRecord* dns_resource_record_unref(DnsResourceRecord *rr) { case DNS_TYPE_PTR: case DNS_TYPE_NS: case DNS_TYPE_CNAME: + case DNS_TYPE_DNAME: free(rr->ptr.name); break; case DNS_TYPE_HINFO: @@ -319,6 +320,7 @@ int dns_resource_record_equal(const DnsResourceRecord *a, const DnsResourceRecor case DNS_TYPE_PTR: case DNS_TYPE_NS: case DNS_TYPE_CNAME: + case DNS_TYPE_DNAME: return dns_name_equal(a->ptr.name, b->ptr.name); case DNS_TYPE_HINFO: @@ -424,6 +426,7 @@ int dns_resource_record_to_string(const DnsResourceRecord *rr, char **ret) { case DNS_TYPE_PTR: case DNS_TYPE_NS: case DNS_TYPE_CNAME: + case DNS_TYPE_DNAME: s = strjoin(k, " ", rr->ptr.name, NULL); if (!s) return -ENOMEM; @@ -591,7 +594,6 @@ static const struct { { DNS_TYPE_AXFR, "AXFR" }, }; - const char *dns_type_to_string(uint16_t type) { unsigned i; diff --git a/src/resolve/resolved-dns-rr.h b/src/resolve/resolved-dns-rr.h index 8fb463946..027f6cac8 100644 --- a/src/resolve/resolved-dns-rr.h +++ b/src/resolve/resolved-dns-rr.h @@ -95,7 +95,7 @@ struct DnsResourceRecord { struct { char *name; - } ptr, ns, cname; + } ptr, ns, cname, dname; struct { char *cpu; -- 2.30.2