]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Replace rbt_deletenode with qp_deletename
authorMatthijs Mekking <matthijs@isc.org>
Thu, 11 Jan 2024 11:33:45 +0000 (12:33 +0100)
committerMatthijs Mekking <matthijs@isc.org>
Wed, 6 Mar 2024 08:57:24 +0000 (09:57 +0100)
Replace dns_rbt_deletenode calls with dns_qp_deletename. For removing
the name from the nsec tree, we no longer first have to find it: we can
just remove the key (retrieved by name).

lib/dns/qpdb.c

index af9e0efeb82ef22b3b974cd6933f291cf3017689..113fd376f2cee41dcb8c312574e5d3ac27030bd7 100644 (file)
@@ -1037,8 +1037,6 @@ clean_zone_node(dns_rbtnode_t *node, uint32_t least_serial) {
  */
 static void
 delete_node(dns_qpdb_t *qpdb, dns_rbtnode_t *node) {
-       dns_rbtnode_t *nsecnode = NULL;
-       dns_fixedname_t fname;
        dns_name_t *name = NULL;
        isc_result_t result = ISC_R_UNEXPECTED;
 
@@ -1055,56 +1053,35 @@ delete_node(dns_qpdb_t *qpdb, dns_rbtnode_t *node) {
        }
 
        switch (node->nsec) {
-       case DNS_DB_NSEC_NORMAL:
-               result = dns_rbt_deletenode(qpdb->tree, node, false);
-               break;
        case DNS_DB_NSEC_HAS_NSEC:
-               /*
-                * Though this may be wasteful, it has to be done before
-                * node is deleted.
-                */
-               name = dns_fixedname_initname(&fname);
-               dns_rbt_fullnamefromnode(node, name);
                /*
                 * Delete the corresponding node from the auxiliary NSEC
                 * tree before deleting from the main tree.
                 */
-               nsecnode = NULL;
-               result = dns_rbt_findnode(qpdb->nsec, name, NULL, &nsecnode,
-                                         NULL, DNS_RBTFIND_EMPTYDATA, NULL,
-                                         NULL);
+               result = dns_qp_deletename(qpdb->nsec, node->name, NULL, NULL);
                if (result != ISC_R_SUCCESS) {
                        isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
                                      DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
-                                     "delete_node: "
-                                     "dns_rbt_findnode(nsec): %s",
+                                     "delete_node(): "
+                                     "dns_qp_deletename: %s",
                                      isc_result_totext(result));
-               } else {
-                       result = dns_rbt_deletenode(qpdb->nsec, nsecnode,
-                                                   false);
-                       if (result != ISC_R_SUCCESS) {
-                               isc_log_write(
-                                       dns_lctx, DNS_LOGCATEGORY_DATABASE,
-                                       DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
-                                       "delete_node(): "
-                                       "dns_rbt_deletenode(nsecnode): %s",
-                                       isc_result_totext(result));
-                       }
                }
-               result = dns_rbt_deletenode(qpdb->tree, node, false);
+               /* FALLTHROUGH */
+       case DNS_DB_NSEC_NORMAL:
+               result = dns_qp_deletename(qpdb->tree, node->name, NULL, NULL);
                break;
        case DNS_DB_NSEC_NSEC:
-               result = dns_rbt_deletenode(qpdb->nsec, node, false);
+               result = dns_qp_deletename(qpdb->nsec, node->name, NULL, NULL);
                break;
        case DNS_DB_NSEC_NSEC3:
-               result = dns_rbt_deletenode(qpdb->nsec3, node, false);
+               result = dns_qp_deletename(qpdb->nsec3, node->name, NULL, NULL);
                break;
        }
        if (result != ISC_R_SUCCESS) {
                isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
                              DNS_LOGMODULE_CACHE, ISC_LOG_WARNING,
                              "delete_node(): "
-                             "dns_rbt_deletenode: %s",
+                             "dns_qp_deletename: %s",
                              isc_result_totext(result));
        }
 }