]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
fixup crashy.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 17 Oct 2007 14:22:14 +0000 (14:22 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 17 Oct 2007 14:22:14 +0000 (14:22 +0000)
git-svn-id: file:///svn/unbound/trunk@685 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
testdata/val_faildnskey.rpl [new file with mode: 0644]
validator/validator.c

index 5caeed211be6783f7c7aadc635fadd4a8e0ffdab..f4c252c6035fd047b1e409816e6af955ebfba5d6 100644 (file)
@@ -8,6 +8,8 @@
        - changed random generator from random(3) clone to arc4random wrapped
          for thread safety. The random generator is initialised with
          entropy from the system.
+       - fix crash where failure to prime DNSKEY tried to print null pointer
+         in the log message.
 
 16 October 2007: Wouter
        - no malloc in log_hex.
diff --git a/testdata/val_faildnskey.rpl b/testdata/val_faildnskey.rpl
new file mode 100644 (file)
index 0000000..821956a
--- /dev/null
@@ -0,0 +1,125 @@
+; config options
+; The island of trust is at example.com
+server:
+       trust-anchor: "example.com.    3600    IN      DS      2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+       val-override-date: "20070916134226"
+
+stub-zone:
+       name: "."
+       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with failed DNSKEY request
+
+; 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
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.4
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+;REPLY QR AA NOERROR
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+;example.com.    3600    IN      DNSKEY  256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+;example.com.    3600    IN      RRSIG   DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
+;SECTION AUTHORITY
+;example.com.  IN NS   ns.example.com.
+;example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+;SECTION ADDITIONAL
+;ns.example.com.               IN      A       1.2.3.4
+;ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A  10.20.30.40
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+www.example.com.        3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+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 A  10.20.30.40
+www.example.com.        3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854}
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+example.com.    3600    IN      RRSIG   NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ns.example.com. 3600    IN      RRSIG   A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
index 2246afcc1e502f26e7550e47af4992583611c53c..ac83781fd93ac0c95e24f02cb7732c119eda2ed8 100644 (file)
@@ -1662,8 +1662,9 @@ primeResponseToKE(int rcode, struct dns_msg* msg, struct trust_anchor* ta,
                        ta->dclass);
        }
        if(!dnskey_rrset) {
-               log_query_info(VERB_OPS, "failed to prime trust anchor -- "
-                       "could not fetch DNSKEY rrset", &msg->qinfo);
+               log_nametypeclass(VERB_OPS, "failed to prime trust anchor -- "
+                       "could not fetch DNSKEY rrset", 
+                       ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass);
                kkey = key_entry_create_null(qstate->region, ta->name,
                        ta->namelen, ta->dclass, NULL_KEY_TTL);
                if(!kkey) {
@@ -1703,8 +1704,9 @@ primeResponseToKE(int rcode, struct dns_msg* msg, struct trust_anchor* ta,
        }
 
        if(sec != sec_status_secure) {
-               log_query_info(VERB_OPS, "failed to prime trust anchor -- "
-                       "could not fetch secure DNSKEY rrset", &msg->qinfo);
+               log_nametypeclass(VERB_OPS, "failed to prime trust anchor -- "
+                       "could not fetch secure DNSKEY rrset", 
+                       ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass);
                /* NOTE: in this case, we should probably reject the trust 
                 * anchor for longer, perhaps forever. */
                kkey = key_entry_create_null(qstate->region, ta->name,
@@ -1717,8 +1719,8 @@ primeResponseToKE(int rcode, struct dns_msg* msg, struct trust_anchor* ta,
                return kkey;
        }
 
-       log_query_info(VERB_ALGO, "Successfully primed trust anchor", 
-               &msg->qinfo);
+       log_nametypeclass(VERB_ALGO, "Successfully primed trust anchor", 
+               ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass);
        /* store the freshly primed entry in the cache */
        key_cache_insert(ve->kcache, kkey);
        return kkey;
@@ -2016,7 +2018,7 @@ process_prime_response(struct module_qstate* qstate, struct val_qstate* vq,
 {
        /* Fetch and validate the keyEntry that corresponds to the 
         * current trust anchor. */
-       vq->key_entry = primeResponseToKE(rcode, msg, vq->trust_anchor,
+       vq->key_entry = primeResponseToKE(rcode, msg, vq->trust_anchor, 
                qstate, id);
 
        /* If the result of the prime is a null key, skip the FINDKEY state.*/