Home | History | Annotate | Download | only in dns

Lines Matching refs:db

1 /*	$NetBSD: db.c,v 1.1 2024/02/18 20:57:31 christos Exp $	*/
34 #include <dns/db.h>
56 *** Supported DB Implementations Registry
100 *** Basic DB Methods
165 dns_db_iscache(dns_db_t *db) {
167 * Does 'db' have cache semantics?
170 REQUIRE(DNS_DB_VALID(db));
172 if ((db->attributes & DNS_DBATTR_CACHE) != 0) {
180 dns_db_iszone(dns_db_t *db) {
182 * Does 'db' have zone semantics?
185 REQUIRE(DNS_DB_VALID(db));
187 if ((db->attributes & (DNS_DBATTR_CACHE | DNS_DBATTR_STUB)) == 0) {
195 dns_db_isstub(dns_db_t *db) {
197 * Does 'db' have stub semantics?
200 REQUIRE(DNS_DB_VALID(db));
202 if ((db->attributes & DNS_DBATTR_STUB) != 0) {
210 dns_db_isdnssec(dns_db_t *db) {
212 * Is 'db' secure or partially secure?
215 REQUIRE(DNS_DB_VALID(db));
216 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
218 if (db->methods->isdnssec != NULL) {
219 return ((db->methods->isdnssec)(db));
221 return ((db->methods->issecure)(db));
225 dns_db_issecure(dns_db_t *db) {
227 * Is 'db' secure?
230 REQUIRE(DNS_DB_VALID(db));
231 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
233 return ((db->methods->issecure)(db));
237 dns_db_ispersistent(dns_db_t *db) {
239 * Is 'db' persistent?
242 REQUIRE(DNS_DB_VALID(db));
244 return ((db->methods->ispersistent)(db));
248 dns_db_origin(dns_db_t *db) {
253 REQUIRE(DNS_DB_VALID(db));
255 return (&db->origin);
259 dns_db_class(dns_db_t *db) {
264 REQUIRE(DNS_DB_VALID(db));
266 return (db->rdclass);
270 dns_db_beginload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
272 * Begin loading 'db'.
275 REQUIRE(DNS_DB_VALID(db));
278 return ((db->methods->beginload)(db, callbacks));
282 dns_db_endload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
286 * Finish loading 'db'.
289 REQUIRE(DNS_DB_VALID(db));
293 for (listener = ISC_LIST_HEAD(db->update_listeners); listener != NULL;
296 listener->onupdate(db, listener->onupdate_arg);
299 return ((db->methods->endload)(db, callbacks));
303 dns_db_load(dns_db_t *db, const char *filename, dns_masterformat_t format,
309 * Load master file 'filename' into 'db'.
312 REQUIRE(DNS_DB_VALID(db));
314 if ((db->attributes & DNS_DBATTR_CACHE) != 0) {
319 result = dns_db_beginload(db, &callbacks);
323 result = dns_master_loadfile(filename, &db->origin, &db->origin,
324 db->rdclass, options, 0, &callbacks, NULL,
325 NULL, db->mctx, format, 0);
326 eresult = dns_db_endload(db, &callbacks);
342 dns_db_serialize(dns_db_t *db, dns_dbversion_t *version, FILE *file) {
343 REQUIRE(DNS_DB_VALID(db));
344 if (db->methods->serialize == NULL) {
347 return ((db->methods->serialize)(db, version, file));
351 dns_db_dump(dns_db_t *db, dns_dbversion_t *version, const char *filename) {
352 return ((db->methods->dump)(db, version, filename,
361 dns_db_currentversion(dns_db_t *db, dns_dbversion_t **versionp) {
366 REQUIRE(DNS_DB_VALID(db));
367 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
370 (db->methods->currentversion)(db, versionp);
374 dns_db_newversion(dns_db_t *db, dns_dbversion_t **versionp) {
379 REQUIRE(DNS_DB_VALID(db));
380 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
383 return ((db->methods->newversion)(db, versionp));
387 dns_db_attachversion(dns_db_t *db, dns_dbversion_t *source,
393 REQUIRE(DNS_DB_VALID(db));
394 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
398 (db->methods->attachversion)(db, source, targetp);
404 dns_db_closeversion(dns_db_t *db, dns_dbversion_t **versionp, bool commit) {
411 REQUIRE(DNS_DB_VALID(db));
412 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
415 (db->methods->closeversion)(db, versionp, commit);
418 for (listener = ISC_LIST_HEAD(db->update_listeners);
421 listener->onupdate(db, listener->onupdate_arg);
433 dns_db_findnode(dns_db_t *db, const dns_name_t *name, bool create,
439 REQUIRE(DNS_DB_VALID(db));
442 if (db->methods->findnode != NULL) {
443 return ((db->methods->findnode)(db, name, create, nodep));
445 return ((db->methods->findnodeext)(db, name, create, NULL, NULL,
451 dns_db_findnodeext(dns_db_t *db, const dns_name_t *name, bool create,
459 REQUIRE(DNS_DB_VALID(db));
462 if (db->methods->findnodeext != NULL) {
463 return ((db->methods->findnodeext)(db, name, create, methods,
466 return ((db->methods->findnode)(db, name, create, nodep));
471 dns_db_findnsec3node(dns_db_t *db, const dns_name_t *name, bool create,
477 REQUIRE(DNS_DB_VALID(db));
480 return ((db->methods->findnsec3node)(db, name, create, nodep));
484 dns_db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
490 * of 'db'.
493 REQUIRE(DNS_DB_VALID(db));
503 if (db->methods->find != NULL) {
504 return ((db->methods->find)(db, name, version, type, options,
508 return ((db->methods->findext)(db, name, version, type, options,
515 dns_db_findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
522 * of 'db', passing in 'arg'.
525 REQUIRE(DNS_DB_VALID(db));
535 if (db->methods->findext != NULL) {
536 return ((db->methods->findext)(
537 db, name, version, type, options, now, nodep, foundname,
540 return ((db->methods->find)(db, name, version, type, options,
547 dns_db_findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
552 * Find the deepest known zonecut which encloses 'name' in 'db'.
557 REQUIRE(DNS_DB_VALID(db));
558 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
565 return ((db->methods->findzonecut)(db, name, options, now, nodep,
571 dns_db_attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) {
576 REQUIRE(DNS_DB_VALID(db));
580 (db->methods->attachnode)(db, source, targetp);
584 dns_db_detachnode(dns_db_t *db, dns_dbnode_t **nodep) {
589 REQUIRE(DNS_DB_VALID(db));
592 (db->methods->detachnode)(db, nodep);
598 dns_db_transfernode(dns_db_t *db, dns_dbnode_t **sourcep,
600 REQUIRE(DNS_DB_VALID(db));
609 UNUSED(db);
611 if (db->methods->transfernode == NULL) {
615 (db->methods->transfernode)(db, sourcep, targetp);
622 dns_db_expirenode(dns_db_t *db, dns_dbnode_t *node, isc_stdtime_t now) {
627 REQUIRE(DNS_DB_VALID(db));
628 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
631 return ((db->methods->expirenode)(db, node, now));
635 dns_db_printnode(dns_db_t *db, dns_dbnode_t *node, FILE *out) {
641 REQUIRE(DNS_DB_VALID(db));
644 (db->methods->printnode)(db, node, out);
648 *** DB Iterator Creation
652 dns_db_createiterator(dns_db_t *db, unsigned int flags,
655 * Create an iterator for version 'version' of 'db'.
658 REQUIRE(DNS_DB_VALID(db));
661 return (db->methods->createiterator(db, flags, iteratorp));
669 dns_db_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
673 REQUIRE(DNS_DB_VALID(db));
683 return ((db->methods->findrdataset)(db, node, version, type, covers,
688 dns_db_allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
693 * 'node' in version 'version' of 'db'.
696 REQUIRE(DNS_DB_VALID(db));
699 return ((db->methods->allrdatasets)(db, node, version, options, now,
704 dns_db_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
708 * Add 'rdataset' to 'node' in version 'version' of 'db'.
711 REQUIRE(DNS_DB_VALID(db));
713 REQUIRE(((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL) ||
714 ((db->attributes & DNS_DBATTR_CACHE) != 0 && version == NULL &&
720 REQUIRE(rdataset->rdclass == db->rdclass);
725 return ((db->methods->addrdataset)(db, node, version, now, rdataset,
730 dns_db_subtractrdataset(dns_db_t *db, dns_dbnode_t *node,
735 * 'db'.
738 REQUIRE(DNS_DB_VALID(db));
740 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL);
743 REQUIRE(rdataset->rdclass == db->rdclass);
748 return ((db->methods->subtractrdataset)(db, node, version, rdataset,
753 dns_db_deleterdataset(dns_db_t *db, dns_dbnode_t *node,
758 * version version 'version' of 'db'.
761 REQUIRE(DNS_DB_VALID(db));
763 REQUIRE(((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL) ||
764 ((db->attributes & DNS_DBATTR_CACHE) != 0 && version == NULL));
766 return ((db->methods->deleterdataset)(db, node, version, type, covers));
770 dns_db_overmem(dns_db_t *db, bool overmem) {
771 REQUIRE(DNS_DB_VALID(db));
773 (db->methods->overmem)(db, overmem);
777 dns_db_getsoaserial(dns_db_t *db, dns_dbversion_t *ver, uint32_t *serialp) {
784 REQUIRE(dns_db_iszone(db) || dns_db_isstub(db));
786 result = dns_db_findnode(db, dns_db_origin(db), false, &node);
792 result = dns_db_findrdataset(db, node, ver, dns_rdatatype_soa, 0,
818 dns_db_detachnode(db, &node);
823 dns_db_nodecount(dns_db_t *db) {
824 REQUIRE(DNS_DB_VALID(db));
826 return ((db->methods->nodecount)(db));
830 dns_db_hashsize(dns_db_t *db) {
831 REQUIRE(DNS_DB_VALID(db));
833 if (db->methods->hashsize == NULL) {
837 return ((db->methods->hashsize)(db));
841 dns_db_adjusthashsize(dns_db_t *db, size_t size) {
842 REQUIRE(DNS_DB_VALID(db));
844 if (db->methods->adjusthashsize != NULL) {
845 return ((db->methods->adjusthashsize)(db, size));
852 dns_db_settask(dns_db_t *db, isc_task_t *task) {
853 REQUIRE(DNS_DB_VALID(db));
855 (db->methods->settask)(db, task);
908 dns_db_getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
909 REQUIRE(DNS_DB_VALID(db));
910 REQUIRE(dns_db_iszone(db));
913 if (db->methods->getoriginnode != NULL) {
914 return ((db->methods->getoriginnode)(db, nodep));
921 dns_db_getrrsetstats(dns_db_t *db) {
922 REQUIRE(DNS_DB_VALID(db));
924 if (db->methods->getrrsetstats != NULL) {
925 return ((db->methods->getrrsetstats)(db));
932 dns_db_setcachestats(dns_db_t *db, isc_stats_t *stats) {
933 REQUIRE(DNS_DB_VALID(db));
935 if (db->methods->setcachestats != NULL) {
936 return ((db->methods->setcachestats)(db, stats));
943 dns_db_getnsec3parameters(dns_db_t *db, dns_dbversion_t *version,
947 REQUIRE(DNS_DB_VALID(db));
948 REQUIRE(dns_db_iszone(db));
950 if (db->methods->getnsec3parameters != NULL) {
951 return ((db->methods->getnsec3parameters)(db, version, hash,
960 dns_db_getsize(dns_db_t *db, dns_dbversion_t *version, uint64_t *records,
962 REQUIRE(DNS_DB_VALID(db));
963 REQUIRE(dns_db_iszone(db));
965 if (db->methods->getsize != NULL) {
966 return ((db->methods->getsize)(db, version, records, bytes));
973 dns_db_setsigningtime(dns_db_t *db, dns_rdataset_t *rdataset,
975 if (db->methods->setsigningtime != NULL) {
976 return ((db->methods->setsigningtime)(db, rdataset, resign));
982 dns_db_getsigningtime(dns_db_t *db, dns_rdataset_t *rdataset,
984 if (db->methods->getsigningtime != NULL) {
985 return ((db->methods->getsigningtime)(db, rdataset, name));
991 dns_db_resigned(dns_db_t *db, dns_rdataset_t *rdataset,
993 if (db->methods->resigned != NULL) {
994 (db->methods->resigned)(db, rdataset, version);
1004 dns_db_rpz_attach(dns_db_t *db, void *rpzs, uint8_t rpz_num) {
1005 REQUIRE(db->methods->rpz_attach != NULL);
1006 (db->methods->rpz_attach)(db, rpzs, rpz_num);
1013 dns_db_rpz_ready(dns_db_t *db) {
1014 if (db->methods->rpz_ready == NULL) {
1017 return ((db->methods->rpz_ready)(db));
1024 dns_db_updatenotify_register(dns_db_t *db, dns_dbupdate_callback_t fn,
1028 REQUIRE(db != NULL);
1031 for (listener = ISC_LIST_HEAD(db->update_listeners); listener != NULL;
1041 listener = isc_mem_get(db->mctx, sizeof(dns_dbonupdatelistener_t));
1047 ISC_LIST_APPEND(db->update_listeners, listener, link);
1053 dns_db_updatenotify_unregister(dns_db_t *db, dns_dbupdate_callback_t fn,
1057 REQUIRE(db != NULL);
1059 for (listener = ISC_LIST_HEAD(db->update_listeners); listener != NULL;
1065 ISC_LIST_UNLINK(db->update_listeners, listener, link);
1066 isc_mem_put(db->mctx, listener,
1076 dns_db_nodefullname(dns_db_t *db, dns_dbnode_t *node, dns_name_t *name) {
1077 REQUIRE(db != NULL);
1081 if (db->methods->nodefullname == NULL) {
1084 return ((db->methods->nodefullname)(db, node, name));
1088 dns_db_setservestalettl(dns_db_t *db, dns_ttl_t ttl) {
1089 REQUIRE(DNS_DB_VALID(db));
1090 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1092 if (db->methods->setservestalettl != NULL) {
1093 return ((db->methods->setservestalettl)(db, ttl));
1099 dns_db_getservestalettl(dns_db_t *db, dns_ttl_t *ttl) {
1100 REQUIRE(DNS_DB_VALID(db));
1101 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1103 if (db->methods->getservestalettl != NULL) {
1104 return ((db->methods->getservestalettl)(db, ttl));
1110 dns_db_setservestalerefresh(dns_db_t *db, uint32_t interval) {
1111 REQUIRE(DNS_DB_VALID(db));
1112 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1114 if (db->methods->setservestalerefresh != NULL) {
1115 return ((db->methods->setservestalerefresh)(db, interval));
1121 dns_db_getservestalerefresh(dns_db_t *db, uint32_t *interval) {
1122 REQUIRE(DNS_DB_VALID(db));
1123 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1125 if (db->methods->getservestalerefresh != NULL) {
1126 return ((db->methods->getservestalerefresh)(db, interval));
1132 dns_db_setgluecachestats(dns_db_t *db, isc_stats_t *stats) {
1133 REQUIRE(dns_db_iszone(db));
1136 if (db->methods->setgluecachestats != NULL) {
1137 return ((db->methods->setgluecachestats)(db, stats));