]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Remove name from shared DBNODE members
authorAlessio Podda <alessio@isc.org>
Mon, 8 Sep 2025 17:02:18 +0000 (19:02 +0200)
committerAlessio Podda <alessio@isc.org>
Wed, 24 Sep 2025 16:58:26 +0000 (18:58 +0200)
bin/named/builtin.c
lib/dns/include/dns/db.h
lib/dns/qpcache.c
lib/dns/qpzone.c
lib/dns/sdlz.c

index c24fbe164e5f89c11efc4b6c95842b37161092a0..d04f27a4a3ca4992232ac2e20f65c4fdfb8d757d 100644 (file)
@@ -63,6 +63,7 @@ typedef struct bdb {
 
 struct bdbnode {
        DBNODE_FIELDS;
+       dns_name_t            name;
 
        isc_refcount_t references;
        bdb_t *bdb;
index 8f0de40c5c052421296ff37a139097fe8990fbc5..6a8a5e353733fd45ffdb171cfabdba2b30290d11 100644 (file)
@@ -188,8 +188,7 @@ typedef isc_result_t (*dns_dbupdate_callback_t)(dns_db_t *db, void *fn_arg);
        unsigned int          magic;   \
        uint16_t              locknum; \
        dns_dbnode_methods_t *methods; \
-       isc_mem_t            *mctx;    \
-       dns_name_t            name;
+       isc_mem_t            *mctx;
 
 struct dns_dbnode {
        DBNODE_FIELDS;
index 4702ff05d862a91a00697b34c9da9e03bb408aad..523990f3211bf90964abf81a1b756ab45235566f 100644 (file)
@@ -124,6 +124,8 @@ typedef struct qpcnode qpcnode_t;
 struct qpcnode {
        DBNODE_FIELDS;
 
+       dns_name_t            name;
+
        qpcache_t *qpdb;
 
        uint8_t                 : 0;
index f6d0e30ee192d567e80d2f84c6eb0adfce812ed4..fdb528c432994d1b11e83ec76f721a2e7d6e33ce 100644 (file)
@@ -167,6 +167,8 @@ ISC_REFCOUNT_STATIC_DECL(qpz_heap);
 struct qpznode {
        DBNODE_FIELDS;
 
+       dns_name_t            name;
+
        qpz_heap_t *heap;
        /*
         * 'erefs' counts external references held by a caller: for
@@ -277,6 +279,9 @@ typedef struct {
 static dns_dbmethods_t qpdb_zonemethods;
 static dns_dbnode_methods_t qpznode_methods;
 
+static isc_result_t
+nodefullname(dns_dbnode_t *node, dns_name_t *name);
+
 #if DNS_DB_NODETRACE
 #define qpznode_ref(ptr)   qpznode__ref(ptr, __func__, __FILE__, __LINE__)
 #define qpznode_unref(ptr) qpznode__unref(ptr, __func__, __FILE__, __LINE__)
@@ -3221,7 +3226,7 @@ qpzone_check_zonecut(qpznode_t *node, void *arg DNS__DB_FLARG) {
                         * is, we need to remember the node name.
                         */
                        zcname = dns_fixedname_name(&search->zonecut_name);
-                       dns_name_copy(&node->name, zcname);
+                       nodefullname((dns_dbnode_t *)node, zcname);
                        search->copy_name = true;
                }
        } else {
@@ -3327,7 +3332,7 @@ qpzone_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
        result = dns_qp_lookup(&search.qpr, name, nspace, NULL, &search.iter,
                               &search.chain, (void **)&node, NULL);
        if (result != ISC_R_NOTFOUND) {
-               dns_name_copy(&node->name, foundname);
+               nodefullname((dns_dbnode_t *)node, foundname);
        }
 
        /*
@@ -3629,7 +3634,7 @@ found:
                                NODE_UNLOCK(nlock, &nlocktype);
                                dns_qpchain_node(&search.chain, len - 1, NULL,
                                                 (void **)&node, NULL);
-                               dns_name_copy(&node->name, foundname);
+                               nodefullname((dns_dbnode_t *)node, foundname);
                                goto partial_match;
                        }
                }
@@ -4497,7 +4502,7 @@ dbiterator_current(dns_dbiterator_t *iterator, dns_dbnode_t **nodep,
        REQUIRE(qpdbiter->node != NULL);
 
        if (name != NULL) {
-               dns_name_copy(&qpdbiter->node->name, name);
+               nodefullname((dns_dbnode_t *)qpdbiter->node, name);
        }
 
        qpznode_acquire(node DNS__DB_FLARG_PASS);
@@ -4622,7 +4627,7 @@ qpzone_addrdataset(dns_db_t *db, dns_dbnode_t *dbnode,
                return result;
        }
 
-       dns_name_copy(&node->name, name);
+       nodefullname((dns_dbnode_t *)node, name);
        dns_rdataset_getownercase(rdataset, name);
 
        newheader = (dns_slabheader_t *)region.base;
@@ -4731,7 +4736,7 @@ qpzone_subtractrdataset(dns_db_t *db, dns_dbnode_t *dbnode,
                 rdataset->type != dns_rdatatype_nsec3 &&
                 rdataset->covers != dns_rdatatype_nsec3));
 
-       dns_name_copy(&node->name, nodename);
+       nodefullname((dns_dbnode_t *)node, nodename);
        result = dns_rdataslab_fromrdataset(rdataset, node->mctx, &region, 0);
        if (result != ISC_R_SUCCESS) {
                return result;
@@ -4907,7 +4912,7 @@ qpzone_deleterdataset(dns_db_t *db, dns_dbnode_t *dbnode,
        atomic_init(&newheader->attributes, DNS_SLABHEADERATTR_NONEXISTENT);
        newheader->serial = version->serial;
 
-       dns_name_copy(&node->name, nodename);
+       nodefullname((dns_dbnode_t *)node, nodename);
 
        nlock = qpzone_get_lock(node);
        NODE_WRLOCK(nlock, &nlocktype);
index 3852b06b1ea1415a180cecfc74d88653eb59dd0e..aa7f53fe38127beb66000e9a243d85d949e8f61a 100644 (file)
@@ -106,6 +106,7 @@ struct dns_sdlz_db {
 struct dns_sdlzlookup {
        /* Unlocked */
        DBNODE_FIELDS;
+       dns_name_t            name;
 
        dns_sdlz_db_t *sdlz;
        ISC_LIST(dns_rdatalist_t) lists;