]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
if multiple CNAME's, use the first.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Sun, 8 Jun 2008 09:27:48 +0000 (09:27 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Sun, 8 Jun 2008 09:27:48 +0000 (09:27 +0000)
git-svn-id: file:///svn/unbound/trunk@1109 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
iterator/iter_scrub.c
testdata/iter_cname_double.rpl [new file with mode: 0644]

index 1606e210eb6ca4726ecbb7c876d9ada19d310044..3161e7badad4777ea8ffc1d1a50d35d16fedded4 100644 (file)
@@ -1,3 +1,7 @@
+8 June 2008: Wouter
+       - if multiple CNAMEs, use the first one. Fixup akamai CNAME bug.
+         Reported by Robert Edmonds.
+
 4 June 2008: Wouter
        - updated libtool files with newer version.
        - iana portlist updated.
index 6be71cff904994f84342c3e4effc32e0399ce9d1..f07b382176fccf879355ec780e52ae19e90561ea 100644 (file)
@@ -189,7 +189,11 @@ parse_get_cname_target(struct rrset_parse* rrset, uint8_t** sname,
        if(rrset->rr_count != 1) {
                verbose(VERB_ALGO, "Found CNAME rrset with "
                        "size > 1: %u", (unsigned)rrset->rr_count);
-               return 0;
+               /* use the first CNAME! */
+               rrset->rr_count = 1;
+               rrset->size = rrset->rr_first->size;
+               rrset->rr_last = rrset->rr_first;
+               rrset->rr_first->next = NULL;
        }
        if(rrset->rr_first->size < sizeof(uint16_t)+1)
                return 0; /* CNAME rdata too small */
diff --git a/testdata/iter_cname_double.rpl b/testdata/iter_cname_double.rpl
new file mode 100644 (file)
index 0000000..419de42
--- /dev/null
@@ -0,0 +1,124 @@
+; config options
+stub-zone:
+       name: "."
+       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test double cname in reply.
+; this is in response to an error report from Robert Edmonds,
+; about resolution of images-na.ssl-images-amazon.com.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+       ADDRESS 193.0.14.129 
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS        K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET.    IN      A       193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+com.   IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.    IN      A       192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+       ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.next.com. IN A
+SECTION AUTHORITY
+next.com.      IN NS   ns.next.com.
+SECTION ADDITIONAL
+ns.next.com.           IN      A       1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+; two CNAMEs for one name?
+www.example.com. IN CNAME www.next.com.
+www.example.com. IN CNAME www.next.com.
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.next.com.
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA
+SECTION QUESTION
+www.next.com. IN A
+SECTION ANSWER
+www.next.com. IN A 10.20.30.40
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN CNAME      www.next.com.
+www.next.com. IN A 10.20.30.40
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END