summaryrefslogtreecommitdiff
path: root/src/resolve
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-07-31 18:02:24 +0200
committerLennart Poettering <lennart@poettering.net>2014-07-31 18:02:24 +0200
commit8ac4e9e1e54397f6d1745c2a7a806132418c7da2 (patch)
tree46b7c39db1ef48fa2e06b79c00831bf727789bad /src/resolve
parent0f47ed0a052c0da743404f23ac3532aaabd23655 (diff)
resolved: properly process DNAME RRs
Diffstat (limited to 'src/resolve')
-rw-r--r--src/resolve/resolved-dns-packet.c4
-rw-r--r--src/resolve/resolved-dns-rr.c4
-rw-r--r--src/resolve/resolved-dns-rr.h2
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;