From b3e2e7c4d6b5c5ee90ba5bb775d635834dccec81 Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Tue, 7 Sep 1999 18:12:11 +0000 Subject: [PATCH] add dns_db_issecure() --- lib/dns/db.c | 13 +++++++++++++ lib/dns/include/dns/db.h | 15 +++++++++++++++ lib/dns/rbtdb.c | 22 ++++++++++++++++++++-- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/lib/dns/db.c b/lib/dns/db.c index 3f03ceda0b..a8ecf0413a 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -148,6 +148,19 @@ dns_db_iszone(dns_db_t *db) { return (ISC_FALSE); } +isc_boolean_t +dns_db_issecure(dns_db_t *db) { + + /* + * Is 'db' secure? + */ + + REQUIRE(DNS_DB_VALID(db)); + REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0); + + return ((db->methods->issecure)(db)); +} + dns_name_t * dns_db_origin(dns_db_t *db) { /* diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index a357b99a21..05f24afeec 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -133,6 +133,7 @@ typedef struct dns_dbmethods { dns_result_t (*deleterdataset)(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, dns_rdatatype_t type); + isc_boolean_t (*issecure)(dns_db_t *db); } dns_dbmethods_t; #define DNS_DB_MAGIC 0x444E5344U /* DNSD. */ @@ -283,6 +284,20 @@ dns_db_iszone(dns_db_t *db); * ISC_FALSE otherwise */ +isc_boolean_t +dns_db_issecure(dns_db_t *db); +/* + * Is 'db' secure? + * + * Requires: + * + * 'db' is a valid database with zone semantics. + * + * Returns: + * ISC_TRUE 'db' is secure. + * ISC_FALSE 'db' is not secure. + */ + dns_name_t * dns_db_origin(dns_db_t *db); /* diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index 76d1912e35..712028d7c2 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -3367,6 +3367,22 @@ delete_callback(void *data, void *arg) { } } +static isc_boolean_t +issecure(dns_db_t *db) { + dns_rbtdb_t *rbtdb; + isc_boolean_t secure; + + rbtdb = (dns_rbtdb_t *)db; + + REQUIRE(VALID_RBTDB(rbtdb)); + + RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + secure = rbtdb->secure; + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + + return (secure); +} + static dns_dbmethods_t zone_methods = { attach, detach, @@ -3388,7 +3404,8 @@ static dns_dbmethods_t zone_methods = { allrdatasets, addrdataset, subtractrdataset, - deleterdataset + deleterdataset, + issecure }; static dns_dbmethods_t cache_methods = { @@ -3412,7 +3429,8 @@ static dns_dbmethods_t cache_methods = { allrdatasets, addrdataset, subtractrdataset, - deleterdataset + deleterdataset, + issecure }; dns_result_t