chiark / gitweb /
resolved: properly process DNAME RRs
[elogind.git] / src / resolve / resolved-dns-packet.c
index fae105d0daae4e9f0ff8dfe140ad7e577791d9b6..5d4e097c7589346b42e34d9dcea192c060c1d051 100644 (file)
@@ -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_PTR:
         case DNS_TYPE_NS:
         case DNS_TYPE_CNAME:
+        case DNS_TYPE_DNAME:
                 r = dns_packet_append_name(p, rr->ptr.name, NULL);
                 break;
 
                 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:
                 break;
 
         case DNS_TYPE_SRV:
-        case DNS_TYPE_DNAME:
         case DNS_TYPE_SSHFP:
         case _DNS_TYPE_INVALID: /* unparseable */
         default:
         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_PTR:
         case DNS_TYPE_NS:
         case DNS_TYPE_CNAME:
+        case DNS_TYPE_DNAME:
                 r = dns_packet_read_name(p, &rr->ptr.name, NULL);
                 break;
 
                 r = dns_packet_read_name(p, &rr->ptr.name, NULL);
                 break;
 
@@ -968,7 +969,7 @@ int dns_packet_read_rr(DnsPacket *p, DnsResourceRecord **ret, size_t *start) {
         case DNS_TYPE_TXT: {
                 char *s;
 
         case DNS_TYPE_TXT: {
                 char *s;
 
-                while (p->rindex < p->size) {
+                while (p->rindex < offset + rdlength) {
                         r = dns_packet_read_string(p, &s, NULL);
                         if (r < 0)
                                 goto fail;
                         r = dns_packet_read_string(p, &s, NULL);
                         if (r < 0)
                                 goto fail;
@@ -1068,7 +1069,6 @@ int dns_packet_read_rr(DnsPacket *p, DnsResourceRecord **ret, size_t *start) {
         }
 
         case DNS_TYPE_SRV:
         }
 
         case DNS_TYPE_SRV:
-        case DNS_TYPE_DNAME:
         case DNS_TYPE_SSHFP:
         default:
                 r = dns_packet_read(p, rdlength, &d, NULL);
         case DNS_TYPE_SSHFP:
         default:
                 r = dns_packet_read(p, rdlength, &d, NULL);