]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3299. [bug] Make SDB handle errors from database drivers better.
authorMark Andrews <marka@isc.org>
Tue, 27 Mar 2012 23:37:28 +0000 (10:37 +1100)
committerMark Andrews <marka@isc.org>
Tue, 27 Mar 2012 23:37:28 +0000 (10:37 +1100)
                        [RT #28534]

CHANGES
bin/named/query.c
lib/dns/sdb.c

diff --git a/CHANGES b/CHANGES
index ba6b88309c5c941b9fcda13a49b61b93a77857e4..1143a9258e1efa99a926d7f7d1b273609806fe8d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3299.  [bug]           Make SDB handle errors from database drivers better.
+                       [RT #28534]
+
        --- 9.6-ESV-R6 released ---
 
 3298.  [bug]           Named could dereference a NULL pointer in
index 429a9b6b0d21820ad4c2c7c635261ee11f1c547c..2f37db586057695fd5c9e2e19ee361a3c2b00c6c 100644 (file)
@@ -2912,6 +2912,11 @@ query_addwildcardproof(ns_client_t *client, dns_db_t *db,
                dns_name_copy(name, cname, NULL);
                while (result == DNS_R_NXDOMAIN) {
                        labels = dns_name_countlabels(cname) - 1;
+                       /*
+                        * Sanity check.
+                        */
+                       if (labels == 0U)
+                               goto cleanup;
                        dns_name_split(cname, labels, NULL, cname);
                        result = dns_db_find(db, cname, version,
                                             dns_rdatatype_nsec,
index 595ca256a4d2c979d1996967e94d52394f3b3c97..447ecbd2e5740f212d1ed7d092faae723f42c50d 100644 (file)
@@ -841,10 +841,17 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
                 */
                dns_name_getlabelsequence(name, nlabels - i, i, xname);
                result = findnode(db, xname, ISC_FALSE, &node);
-               if (result != ISC_R_SUCCESS) {
+               if (result == ISC_R_NOTFOUND) {
+                       /*
+                        * No data at zone apex?
+                        */
+                       if (i == olabels)
+                               return (DNS_R_BADDB);
                        result = DNS_R_NXDOMAIN;
                        continue;
                }
+               if (result != ISC_R_SUCCESS)
+                       return (result);
 
                /*
                 * Look for a DNAME at the current label, unless this is