]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Do not call exit() upon check_no_rrsig() errors
authorMichał Kępień <michal@isc.org>
Fri, 15 Jun 2018 07:59:20 +0000 (09:59 +0200)
committerMichał Kępień <michal@isc.org>
Fri, 15 Jun 2018 08:36:14 +0000 (10:36 +0200)
Replace all check_result() and fprintf() calls inside check_no_rrsig()
with zoneverify_log_error() calls and error handling code.  Enable
check_no_rrsig() to signal errors to the caller using its return
value.

Modify the call site of check_no_rrsig() so that its errors are properly
handled.

Define buffer size using a named constant rather than a plain integer.

lib/dns/zoneverify.c

index 07ccc05915d3b71ea726c9628d5be1f48be60d67..6db33558668f62ea3c07d0bd0d6b99b30314c8b4 100644 (file)
@@ -295,19 +295,23 @@ verifynsec(const vctx_t *vctx, dns_name_t *name, dns_dbnode_t *node,
        return (ISC_R_FAILURE);
 }
 
-static void
+static isc_result_t
 check_no_rrsig(const vctx_t *vctx, dns_rdataset_t *rdataset, dns_name_t *name,
               dns_dbnode_t *node)
 {
        char namebuf[DNS_NAME_FORMATSIZE];
-       char typebuf[80];
+       char typebuf[DNS_RDATATYPE_FORMATSIZE];
        dns_rdataset_t sigrdataset;
        dns_rdatasetiter_t *rdsiter = NULL;
        isc_result_t result;
 
        dns_rdataset_init(&sigrdataset);
        result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, &rdsiter);
-       check_result(result, "dns_db_allrdatasets()");
+       if (result != ISC_R_SUCCESS) {
+               zoneverify_log_error(vctx, "dns_db_allrdatasets(): %s",
+                                    isc_result_totext(result));
+               return (result);
+       }
        for (result = dns_rdatasetiter_first(rdsiter);
             result == ISC_R_SUCCESS;
             result = dns_rdatasetiter_next(rdsiter)) {
@@ -320,12 +324,16 @@ check_no_rrsig(const vctx_t *vctx, dns_rdataset_t *rdataset, dns_name_t *name,
        if (result == ISC_R_SUCCESS) {
                dns_name_format(name, namebuf, sizeof(namebuf));
                dns_rdatatype_format(rdataset->type, typebuf, sizeof(typebuf));
-               fprintf(stderr, "Warning: Found unexpected signatures for "
-                       "%s/%s\n", namebuf, typebuf);
+               zoneverify_log_error(vctx,
+                                    "Warning: Found unexpected signatures "
+                                    "for %s/%s",
+                                    namebuf, typebuf);
        }
        if (dns_rdataset_isassociated(&sigrdataset))
                dns_rdataset_disassociate(&sigrdataset);
        dns_rdatasetiter_destroy(&rdsiter);
+
+       return (ISC_R_SUCCESS);
 }
 
 static isc_boolean_t
@@ -866,7 +874,12 @@ verifynode(vctx_t *vctx, dns_name_t *name, dns_dbnode_t *node,
                           rdataset.type != dns_rdatatype_dnskey) {
                        if (rdataset.type == dns_rdatatype_ns)
                                dns_nsec_setbit(types, rdataset.type, 1);
-                       check_no_rrsig(vctx, &rdataset, name, node);
+                       result = check_no_rrsig(vctx, &rdataset, name, node);
+                       if (result != ISC_R_SUCCESS) {
+                               dns_rdataset_disassociate(&rdataset);
+                               dns_rdatasetiter_destroy(&rdsiter);
+                               return (result);
+                       }
                } else
                        dns_nsec_setbit(types, rdataset.type, 1);
                dns_rdataset_disassociate(&rdataset);