Lines Matching refs:db

1 /*	$NetBSD: db.c,v 1.10 2024/02/21 22:52:06 christos Exp $	*/
35 #include <dns/db.h>
167 dns_db_iscache(dns_db_t *db) {
169 * Does 'db' have cache semantics?
172 REQUIRE(DNS_DB_VALID(db));
174 if ((db->attributes & DNS_DBATTR_CACHE) != 0) {
182 dns_db_iszone(dns_db_t *db) {
184 * Does 'db' have zone semantics?
187 REQUIRE(DNS_DB_VALID(db));
189 if ((db->attributes & (DNS_DBATTR_CACHE | DNS_DBATTR_STUB)) == 0) {
197 dns_db_isstub(dns_db_t *db) {
199 * Does 'db' have stub semantics?
202 REQUIRE(DNS_DB_VALID(db));
204 if ((db->attributes & DNS_DBATTR_STUB) != 0) {
212 dns_db_isdnssec(dns_db_t *db) {
214 * Is 'db' secure or partially secure?
217 REQUIRE(DNS_DB_VALID(db));
218 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
220 if (db->methods->isdnssec != NULL) {
221 return ((db->methods->isdnssec)(db));
223 return ((db->methods->issecure)(db));
227 dns_db_issecure(dns_db_t *db) {
229 * Is 'db' secure?
232 REQUIRE(DNS_DB_VALID(db));
233 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
235 return ((db->methods->issecure)(db));
239 dns_db_ispersistent(dns_db_t *db) {
241 * Is 'db' persistent?
244 REQUIRE(DNS_DB_VALID(db));
246 return ((db->methods->ispersistent)(db));
250 dns_db_origin(dns_db_t *db) {
255 REQUIRE(DNS_DB_VALID(db));
257 return (&db->origin);
261 dns_db_class(dns_db_t *db) {
266 REQUIRE(DNS_DB_VALID(db));
268 return (db->rdclass);
272 dns_db_beginload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
274 * Begin loading 'db'.
277 REQUIRE(DNS_DB_VALID(db));
280 return ((db->methods->beginload)(db, callbacks));
284 dns_db_endload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
288 * Finish loading 'db'.
291 REQUIRE(DNS_DB_VALID(db));
295 for (listener = ISC_LIST_HEAD(db->update_listeners); listener != NULL;
298 listener->onupdate(db, listener->onupdate_arg);
301 return ((db->methods->endload)(db, callbacks));
305 dns_db_load(dns_db_t *db, const char *filename, dns_masterformat_t format,
311 * Load master file 'filename' into 'db'.
314 REQUIRE(DNS_DB_VALID(db));
316 if ((db->attributes & DNS_DBATTR_CACHE) != 0) {
321 result = dns_db_beginload(db, &callbacks);
325 result = dns_master_loadfile(filename, &db->origin, &db->origin,
326 db->rdclass, options, 0, &callbacks, NULL,
327 NULL, db->mctx, format, 0);
328 eresult = dns_db_endload(db, &callbacks);
344 dns_db_dump(dns_db_t *db, dns_dbversion_t *version, const char *filename) {
345 return ((db->methods->dump)(db, version, filename,
354 dns_db_currentversion(dns_db_t *db, dns_dbversion_t **versionp) {
359 REQUIRE(DNS_DB_VALID(db));
360 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
363 (db->methods->currentversion)(db, versionp);
367 dns_db_newversion(dns_db_t *db, dns_dbversion_t **versionp) {
372 REQUIRE(DNS_DB_VALID(db));
373 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
376 return ((db->methods->newversion)(db, versionp));
380 dns_db_attachversion(dns_db_t *db, dns_dbversion_t *source,
386 REQUIRE(DNS_DB_VALID(db));
387 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
391 (db->methods->attachversion)(db, source, targetp);
397 dns_db_closeversion(dns_db_t *db, dns_dbversion_t **versionp, bool commit) {
404 REQUIRE(DNS_DB_VALID(db));
405 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
408 (db->methods->closeversion)(db, versionp, commit);
411 for (listener = ISC_LIST_HEAD(db->update_listeners);
414 listener->onupdate(db, listener->onupdate_arg);
426 dns_db_findnode(dns_db_t *db, const dns_name_t *name, bool create,
432 REQUIRE(DNS_DB_VALID(db));
435 if (db->methods->findnode != NULL) {
436 return ((db->methods->findnode)(db, name, create, nodep));
438 return ((db->methods->findnodeext)(db, name, create, NULL, NULL,
444 dns_db_findnodeext(dns_db_t *db, const dns_name_t *name, bool create,
452 REQUIRE(DNS_DB_VALID(db));
455 if (db->methods->findnodeext != NULL) {
456 return ((db->methods->findnodeext)(db, name, create, methods,
459 return ((db->methods->findnode)(db, name, create, nodep));
464 dns_db_findnsec3node(dns_db_t *db, const dns_name_t *name, bool create,
470 REQUIRE(DNS_DB_VALID(db));
473 return ((db->methods->findnsec3node)(db, name, create, nodep));
477 dns_db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
483 * of 'db'.
486 REQUIRE(DNS_DB_VALID(db));
496 if (db->methods->find != NULL) {
497 return ((db->methods->find)(db, name, version, type, options,
501 return ((db->methods->findext)(db, name, version, type, options,
508 dns_db_findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
515 * of 'db', passing in 'arg'.
518 REQUIRE(DNS_DB_VALID(db));
528 if (db->methods->findext != NULL) {
529 return ((db->methods->findext)(
530 db, name, version, type, options, now, nodep, foundname,
533 return ((db->methods->find)(db, name, version, type, options,
540 dns_db_findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
545 * Find the deepest known zonecut which encloses 'name' in 'db'.
550 REQUIRE(DNS_DB_VALID(db));
551 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
558 return ((db->methods->findzonecut)(db, name, options, now, nodep,
564 dns_db_attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) {
569 REQUIRE(DNS_DB_VALID(db));
573 (db->methods->attachnode)(db, source, targetp);
577 dns_db_detachnode(dns_db_t *db, dns_dbnode_t **nodep) {
582 REQUIRE(DNS_DB_VALID(db));
585 (db->methods->detachnode)(db, nodep);
591 dns_db_transfernode(dns_db_t *db, dns_dbnode_t **sourcep,
593 REQUIRE(DNS_DB_VALID(db));
602 UNUSED(db);
604 if (db->methods->transfernode == NULL) {
608 (db->methods->transfernode)(db, sourcep, targetp);
615 dns_db_expirenode(dns_db_t *db, dns_dbnode_t *node, isc_stdtime_t now) {
620 REQUIRE(DNS_DB_VALID(db));
621 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
624 return ((db->methods->expirenode)(db, node, now));
628 dns_db_printnode(dns_db_t *db, dns_dbnode_t *node, FILE *out) {
634 REQUIRE(DNS_DB_VALID(db));
637 (db->methods->printnode)(db, node, out);
645 dns_db_createiterator(dns_db_t *db, unsigned int flags,
648 * Create an iterator for version 'version' of 'db'.
651 REQUIRE(DNS_DB_VALID(db));
654 return (db->methods->createiterator(db, flags, iteratorp));
662 dns_db_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
666 REQUIRE(DNS_DB_VALID(db));
676 return ((db->methods->findrdataset)(db, node, version, type, covers,
681 dns_db_allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
686 * 'node' in version 'version' of 'db'.
689 REQUIRE(DNS_DB_VALID(db));
692 return ((db->methods->allrdatasets)(db, node, version, options, now,
697 dns_db_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
701 * Add 'rdataset' to 'node' in version 'version' of 'db'.
704 REQUIRE(DNS_DB_VALID(db));
706 REQUIRE(((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL) ||
707 ((db->attributes & DNS_DBATTR_CACHE) != 0 && version == NULL &&
713 REQUIRE(rdataset->rdclass == db->rdclass);
718 return ((db->methods->addrdataset)(db, node, version, now, rdataset,
723 dns_db_subtractrdataset(dns_db_t *db, dns_dbnode_t *node,
728 * 'db'.
731 REQUIRE(DNS_DB_VALID(db));
733 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL);
736 REQUIRE(rdataset->rdclass == db->rdclass);
741 return ((db->methods->subtractrdataset)(db, node, version, rdataset,
746 dns_db_deleterdataset(dns_db_t *db, dns_dbnode_t *node,
751 * version version 'version' of 'db'.
754 REQUIRE(DNS_DB_VALID(db));
756 REQUIRE(((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL) ||
757 ((db->attributes & DNS_DBATTR_CACHE) != 0 && version == NULL));
759 return ((db->methods->deleterdataset)(db, node, version, type, covers));
763 dns_db_overmem(dns_db_t *db, bool overmem) {
764 REQUIRE(DNS_DB_VALID(db));
766 (db->methods->overmem)(db, overmem);
770 dns_db_getsoaserial(dns_db_t *db, dns_dbversion_t *ver, uint32_t *serialp) {
777 REQUIRE(dns_db_iszone(db) || dns_db_isstub(db));
779 result = dns_db_findnode(db, dns_db_origin(db), false, &node);
785 result = dns_db_findrdataset(db, node, ver, dns_rdatatype_soa, 0,
811 dns_db_detachnode(db, &node);
816 dns_db_nodecount(dns_db_t *db, dns_dbtree_t tree) {
817 REQUIRE(DNS_DB_VALID(db));
819 return ((db->methods->nodecount)(db, tree));
823 dns_db_hashsize(dns_db_t *db) {
824 REQUIRE(DNS_DB_VALID(db));
826 if (db->methods->hashsize == NULL) {
830 return ((db->methods->hashsize)(db));
834 dns_db_settask(dns_db_t *db, isc_task_t *task) {
835 REQUIRE(DNS_DB_VALID(db));
837 (db->methods->settask)(db, task);
890 dns_db_getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
891 REQUIRE(DNS_DB_VALID(db));
892 REQUIRE(dns_db_iszone(db));
895 if (db->methods->getoriginnode != NULL) {
896 return ((db->methods->getoriginnode)(db, nodep));
903 dns_db_getrrsetstats(dns_db_t *db) {
904 REQUIRE(DNS_DB_VALID(db));
906 if (db->methods->getrrsetstats != NULL) {
907 return ((db->methods->getrrsetstats)(db));
914 dns_db_setcachestats(dns_db_t *db, isc_stats_t *stats) {
915 REQUIRE(DNS_DB_VALID(db));
917 if (db->methods->setcachestats != NULL) {
918 return ((db->methods->setcachestats)(db, stats));
925 dns_db_getnsec3parameters(dns_db_t *db, dns_dbversion_t *version,
929 REQUIRE(DNS_DB_VALID(db));
930 REQUIRE(dns_db_iszone(db));
932 if (db->methods->getnsec3parameters != NULL) {
933 return ((db->methods->getnsec3parameters)(db, version, hash,
942 dns_db_getsize(dns_db_t *db, dns_dbversion_t *version, uint64_t *records,
944 REQUIRE(DNS_DB_VALID(db));
945 REQUIRE(dns_db_iszone(db));
947 if (db->methods->getsize != NULL) {
948 return ((db->methods->getsize)(db, version, records, bytes));
955 dns_db_setsigningtime(dns_db_t *db, dns_rdataset_t *rdataset,
957 if (db->methods->setsigningtime != NULL) {
958 return ((db->methods->setsigningtime)(db, rdataset, resign));
964 dns_db_getsigningtime(dns_db_t *db, dns_rdataset_t *rdataset,
966 if (db->methods->getsigningtime != NULL) {
967 return ((db->methods->getsigningtime)(db, rdataset, name));
973 dns_db_resigned(dns_db_t *db, dns_rdataset_t *rdataset,
975 if (db->methods->resigned != NULL) {
976 (db->methods->resigned)(db, rdataset, version);
986 dns_db_rpz_attach(dns_db_t *db, void *rpzs, uint8_t rpz_num) {
987 REQUIRE(db->methods->rpz_attach != NULL);
988 (db->methods->rpz_attach)(db, rpzs, rpz_num);
995 dns_db_rpz_ready(dns_db_t *db) {
996 if (db->methods->rpz_ready == NULL) {
999 return ((db->methods->rpz_ready)(db));
1006 dns_db_updatenotify_register(dns_db_t *db, dns_dbupdate_callback_t fn,
1010 REQUIRE(db != NULL);
1013 for (listener = ISC_LIST_HEAD(db->update_listeners); listener != NULL;
1023 listener = isc_mem_get(db->mctx, sizeof(dns_dbonupdatelistener_t));
1029 ISC_LIST_APPEND(db->update_listeners, listener, link);
1035 dns_db_updatenotify_unregister(dns_db_t *db, dns_dbupdate_callback_t fn,
1039 REQUIRE(db != NULL);
1041 for (listener = ISC_LIST_HEAD(db->update_listeners); listener != NULL;
1047 ISC_LIST_UNLINK(db->update_listeners, listener, link);
1048 isc_mem_put(db->mctx, listener,
1058 dns_db_nodefullname(dns_db_t *db, dns_dbnode_t *node, dns_name_t *name) {
1059 REQUIRE(db != NULL);
1063 if (db->methods->nodefullname == NULL) {
1066 return ((db->methods->nodefullname)(db, node, name));
1070 dns_db_setservestalettl(dns_db_t *db, dns_ttl_t ttl) {
1071 REQUIRE(DNS_DB_VALID(db));
1072 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1074 if (db->methods->setservestalettl != NULL) {
1075 return ((db->methods->setservestalettl)(db, ttl));
1081 dns_db_getservestalettl(dns_db_t *db, dns_ttl_t *ttl) {
1082 REQUIRE(DNS_DB_VALID(db));
1083 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1085 if (db->methods->getservestalettl != NULL) {
1086 return ((db->methods->getservestalettl)(db, ttl));
1092 dns_db_setservestalerefresh(dns_db_t *db, uint32_t interval) {
1093 REQUIRE(DNS_DB_VALID(db));
1094 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1096 if (db->methods->setservestalerefresh != NULL) {
1097 return ((db->methods->setservestalerefresh)(db, interval));
1103 dns_db_getservestalerefresh(dns_db_t *db, uint32_t *interval) {
1104 REQUIRE(DNS_DB_VALID(db));
1105 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1107 if (db->methods->getservestalerefresh != NULL) {
1108 return ((db->methods->getservestalerefresh)(db, interval));
1114 dns_db_setgluecachestats(dns_db_t *db, isc_stats_t *stats) {
1115 REQUIRE(dns_db_iszone(db));
1118 if (db->methods->setgluecachestats != NULL) {
1119 return ((db->methods->setgluecachestats)(db, stats));