Make the database ownercase modifiable only via addrdataset()

Simplify the implementation around the database ownercase.  Remove the
dns_rdataset_setownercase() implementation for the slabheaders and only
allow setting ownercase on rdatalists and rdatasets.  The ownercase in
the database can now be set only with dns_db_addrdataset() by passing
rdataset with correctly set ownercase.
This commit is contained in:
Ondřej Surý 2025-09-13 06:56:58 +02:00
parent 07378266c3
commit a8c3661e2b
No known key found for this signature in database
GPG key ID: 2820F37E873DEA41
4 changed files with 5 additions and 35 deletions

View file

@ -253,13 +253,6 @@ getownercase(dns_rdataset_t *rdataset, dns_name_t *name) {
}
}
static void
setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) {
if (dns_rdataset_isassociated(rdataset)) {
dns_rdataset_setownercase(rdataset, name);
}
}
static const char *
optotext(dns_diffop_t op) {
switch (op) {
@ -389,6 +382,7 @@ diff_apply(const dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver,
dns_rdataset_init(&rds);
dns_rdataset_init(&ardataset);
dns_rdatalist_tordataset(&rdl, &rds);
dns_rdataset_setownercase(&rds, name);
rds.trust = dns_trust_ultimate;
/*
@ -424,11 +418,6 @@ diff_apply(const dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver,
dns_db_setsigningtime(db, &ardataset,
resign);
}
if (op == DNS_DIFFOP_ADD ||
op == DNS_DIFFOP_ADDRESIGN)
{
setownercase(&ardataset, name);
}
if (op == DNS_DIFFOP_DEL ||
op == DNS_DIFFOP_DELRESIGN)
{
@ -457,11 +446,6 @@ diff_apply(const dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver,
"update with no effect",
namebuf, classbuf);
}
if (op == DNS_DIFFOP_ADD ||
op == DNS_DIFFOP_ADDRESIGN)
{
setownercase(&ardataset, name);
}
if (op == DNS_DIFFOP_DEL ||
op == DNS_DIFFOP_DELRESIGN)
{

View file

@ -4661,6 +4661,8 @@ qpzone_addrdataset(dns_db_t *db, dns_dbnode_t *dbnode,
newheader = (dns_slabheader_t *)region.base;
dns_slabheader_reset(newheader, (dns_dbnode_t *)node);
dns_slabheader_setownercase(newheader, name);
newheader->ttl = rdataset->ttl;
if (rdataset->ttl == 0U) {
DNS_SLABHEADER_SETATTR(newheader, DNS_SLABHEADERATTR_ZEROTTL);

View file

@ -74,8 +74,6 @@ rdataset_expire(dns_rdataset_t *rdataset DNS__DB_FLARG);
static void
rdataset_clearprefetch(dns_rdataset_t *rdataset);
static void
rdataset_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name);
static void
rdataset_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name);
static dns_slabheader_t *
rdataset_getheader(const dns_rdataset_t *rdataset);
@ -92,7 +90,6 @@ dns_rdatasetmethods_t dns_rdataslab_rdatasetmethods = {
.settrust = rdataset_settrust,
.expire = rdataset_expire,
.clearprefetch = rdataset_clearprefetch,
.setownercase = rdataset_setownercase,
.getownercase = rdataset_getownercase,
.getheader = rdataset_getheader,
};
@ -1147,20 +1144,6 @@ rdataset_clearprefetch(dns_rdataset_t *rdataset) {
dns_db_unlocknode(header->node, isc_rwlocktype_write);
}
static void
rdataset_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) {
dns_slabheader_t *header = dns_rdataset_getheader(rdataset);
/* The case could be set just once for the same header */
if (CASESET(header)) {
return;
}
dns_db_locknode(header->node, isc_rwlocktype_write);
dns_slabheader_setownercase(header, name);
dns_db_unlocknode(header->node, isc_rwlocktype_write);
}
static void
rdataset_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) {
dns_slabheader_t *header = dns_rdataset_getheader(rdataset);

View file

@ -16,6 +16,7 @@
#include <setjmp.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@ -137,7 +138,7 @@ ownercase_test_one(const char *str1, const char *str2) {
assert_int_equal(result, ISC_R_SUCCESS);
/* Store the case from name1 */
dns_rdataset_setownercase(&rdataset, name1);
dns_slabheader_setownercase(&header, name1);
assert_true(CASESET(&header));