]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
make fewer dns_db functions mandatory-to-implement
authorEvan Hunt <each@isc.org>
Fri, 17 Feb 2023 20:05:25 +0000 (12:05 -0800)
committerEvan Hunt <each@isc.org>
Tue, 21 Feb 2023 18:13:10 +0000 (10:13 -0800)
some dns_db functions would have crashed if the DB implementation failed
to implement them, requiring the implementations to add functions that
did nothing but return ISC_R_NOTIMPLEMENTED or some obvious default
value. we can just have the dns_db wrapper functions themselves return
those values, and clean up the implementations accordingly.

bin/tests/system/dyndb/driver/db.c
lib/dns/db.c
lib/dns/include/dns/db.h
lib/dns/rbtdb.c
lib/dns/sdb.c
lib/dns/sdlz.c

index 54c6a808e01ae5cb5632e64c46a12d99cc4129e2..5ecbd7904f2eb55315ceada3e3ddba289c30ecdb 100644 (file)
@@ -123,52 +123,6 @@ detach(dns_db_t **dbp) {
        }
 }
 
-/*
- * This method should never be called, because DB is "persistent".
- * See ispersistent() function. It means that database do not need to be
- * loaded in the usual sense.
- */
-static isc_result_t
-beginload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
-       UNUSED(db);
-       UNUSED(callbacks);
-
-       FATAL_ERROR("current implementation should never call beginload()");
-
-       /* Not reached */
-       return (ISC_R_SUCCESS);
-}
-
-/*
- * This method should never be called, because DB is "persistent".
- * See ispersistent() function. It means that database do not need to be
- * loaded in the usual sense.
- */
-static isc_result_t
-endload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
-       UNUSED(db);
-       UNUSED(callbacks);
-
-       FATAL_ERROR("current implementation should never call endload()");
-
-       /* Not reached */
-       return (ISC_R_SUCCESS);
-}
-
-static isc_result_t
-dump(dns_db_t *db, dns_dbversion_t *version, const char *filename,
-     dns_masterformat_t masterformat) {
-       UNUSED(db);
-       UNUSED(version);
-       UNUSED(filename);
-       UNUSED(masterformat);
-
-       FATAL_ERROR("current implementation should never call dump()");
-
-       /* Not reached */
-       return (ISC_R_SUCCESS);
-}
-
 static void
 currentversion(dns_db_t *db, dns_dbversion_t **versionp) {
        sampledb_t *sampledb = (sampledb_t *)db;
@@ -399,17 +353,6 @@ nodecount(dns_db_t *db, dns_dbtree_t tree) {
        return (dns_db_nodecount(sampledb->rbtdb, tree));
 }
 
-/*
- * The database does not need to be loaded from disk or written to disk.
- * Always return true.
- */
-static bool
-ispersistent(dns_db_t *db) {
-       UNUSED(db);
-
-       return (true);
-}
-
 static void
 overmem(dns_db_t *db, bool over) {
        sampledb_t *sampledb = (sampledb_t *)db;
@@ -571,7 +514,7 @@ static dns_dbmethods_t sampledb_methods = {
        printnode,      createiterator, findrdataset,
        allrdatasets,   addrdataset,    subtractrdataset,
        deleterdataset, issecure,       nodecount,
-       ispersistent,   overmem,        setloop,
+       NULL,           overmem,        setloop,
        getoriginnode,  transfernode,   getnsec3parameters,
        findnsec3node,  setsigningtime, getsigningtime,
        resigned,       isdnssec,       getrrsetstats,
index 0a10c39418caf249ca7f2e973002c93fa99fb3b9..f60ed1762c459293c59b70671d9693ad4aa68ab6 100644 (file)
@@ -218,7 +218,10 @@ dns_db_isdnssec(dns_db_t *db) {
        if (db->methods->isdnssec != NULL) {
                return ((db->methods->isdnssec)(db));
        }
-       return ((db->methods->issecure)(db));
+       if (db->methods->issecure != NULL) {
+               return ((db->methods->issecure)(db));
+       }
+       return (false);
 }
 
 bool
@@ -230,7 +233,10 @@ dns_db_issecure(dns_db_t *db) {
        REQUIRE(DNS_DB_VALID(db));
        REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
 
-       return ((db->methods->issecure)(db));
+       if (db->methods->issecure != NULL) {
+               return ((db->methods->issecure)(db));
+       }
+       return (false);
 }
 
 bool
@@ -241,7 +247,14 @@ dns_db_ispersistent(dns_db_t *db) {
 
        REQUIRE(DNS_DB_VALID(db));
 
-       return ((db->methods->ispersistent)(db));
+       if (db->methods->ispersistent != NULL) {
+               return ((db->methods->ispersistent)(db));
+       } else if (db->methods->beginload == NULL) {
+               /* If the database can't be loaded, assume it's persistent */
+               return (true);
+       }
+
+       return (false);
 }
 
 dns_name_t *
@@ -275,7 +288,10 @@ dns_db_beginload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
        REQUIRE(DNS_DB_VALID(db));
        REQUIRE(DNS_CALLBACK_VALID(callbacks));
 
-       return ((db->methods->beginload)(db, callbacks));
+       if (db->methods->beginload != NULL) {
+               return ((db->methods->beginload)(db, callbacks));
+       }
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 isc_result_t
@@ -290,13 +306,22 @@ dns_db_endload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
        REQUIRE(DNS_CALLBACK_VALID(callbacks));
        REQUIRE(callbacks->add_private != NULL);
 
+       /*
+        * When dns_db_endload() is called, we call the onupdate function
+        * for all registered listeners, regardless of whether the underlying
+        * database has an 'endload' implementation.
+        */
        for (listener = ISC_LIST_HEAD(db->update_listeners); listener != NULL;
             listener = ISC_LIST_NEXT(listener, link))
        {
                listener->onupdate(db, listener->onupdate_arg);
        }
 
-       return ((db->methods->endload)(db, callbacks));
+       if (db->methods->endload != NULL) {
+               return ((db->methods->endload)(db, callbacks));
+       }
+
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 isc_result_t
@@ -340,8 +365,11 @@ dns_db_load(dns_db_t *db, const char *filename, dns_masterformat_t format,
 
 isc_result_t
 dns_db_dump(dns_db_t *db, dns_dbversion_t *version, const char *filename) {
-       return ((db->methods->dump)(db, version, filename,
-                                   dns_masterformat_text));
+       if (db->methods->dump != NULL) {
+               return ((db->methods->dump)(db, version, filename,
+                                           dns_masterformat_text));
+       }
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 /***
@@ -371,7 +399,10 @@ dns_db_newversion(dns_db_t *db, dns_dbversion_t **versionp) {
        REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
        REQUIRE(versionp != NULL && *versionp == NULL);
 
-       return ((db->methods->newversion)(db, versionp));
+       if (db->methods->newversion != NULL) {
+               return ((db->methods->newversion)(db, versionp));
+       }
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 void
@@ -553,9 +584,12 @@ dns_db_findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
                (DNS_RDATASET_VALID(sigrdataset) &&
                 !dns_rdataset_isassociated(sigrdataset)));
 
-       return ((db->methods->findzonecut)(db, name, options, now, nodep,
-                                          foundname, dcname, rdataset,
-                                          sigrdataset));
+       if (db->methods->findzonecut != NULL) {
+               return ((db->methods->findzonecut)(db, name, options, now,
+                                                  nodep, foundname, dcname,
+                                                  rdataset, sigrdataset));
+       }
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 void
@@ -619,7 +653,10 @@ dns_db_expirenode(dns_db_t *db, dns_dbnode_t *node, isc_stdtime_t now) {
        REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
        REQUIRE(node != NULL);
 
-       return ((db->methods->expirenode)(db, node, now));
+       if (db->methods->expirenode != NULL) {
+               return ((db->methods->expirenode)(db, node, now));
+       }
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 void
@@ -632,7 +669,9 @@ dns_db_printnode(dns_db_t *db, dns_dbnode_t *node, FILE *out) {
        REQUIRE(DNS_DB_VALID(db));
        REQUIRE(node != NULL);
 
-       (db->methods->printnode)(db, node, out);
+       if (db->methods->printnode != NULL) {
+               (db->methods->printnode)(db, node, out);
+       }
 }
 
 /***
@@ -713,8 +752,12 @@ dns_db_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
                (DNS_RDATASET_VALID(addedrdataset) &&
                 !dns_rdataset_isassociated(addedrdataset)));
 
-       return ((db->methods->addrdataset)(db, node, version, now, rdataset,
-                                          options, addedrdataset));
+       if (db->methods->addrdataset != NULL) {
+               return ((db->methods->addrdataset)(db, node, version, now,
+                                                  rdataset, options,
+                                                  addedrdataset));
+       }
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 isc_result_t
@@ -736,8 +779,11 @@ dns_db_subtractrdataset(dns_db_t *db, dns_dbnode_t *node,
                (DNS_RDATASET_VALID(newrdataset) &&
                 !dns_rdataset_isassociated(newrdataset)));
 
-       return ((db->methods->subtractrdataset)(db, node, version, rdataset,
-                                               options, newrdataset));
+       if (db->methods->subtractrdataset != NULL) {
+               return ((db->methods->subtractrdataset)(
+                       db, node, version, rdataset, options, newrdataset));
+       }
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 isc_result_t
@@ -754,14 +800,20 @@ dns_db_deleterdataset(dns_db_t *db, dns_dbnode_t *node,
        REQUIRE(((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL) ||
                ((db->attributes & DNS_DBATTR_CACHE) != 0 && version == NULL));
 
-       return ((db->methods->deleterdataset)(db, node, version, type, covers));
+       if (db->methods->deleterdataset != NULL) {
+               return ((db->methods->deleterdataset)(db, node, version, type,
+                                                     covers));
+       }
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 void
 dns_db_overmem(dns_db_t *db, bool overmem) {
        REQUIRE(DNS_DB_VALID(db));
 
-       (db->methods->overmem)(db, overmem);
+       if (db->methods->overmem != NULL) {
+               (db->methods->overmem)(db, overmem);
+       }
 }
 
 isc_result_t
@@ -814,7 +866,10 @@ unsigned int
 dns_db_nodecount(dns_db_t *db, dns_dbtree_t tree) {
        REQUIRE(DNS_DB_VALID(db));
 
-       return ((db->methods->nodecount)(db, tree));
+       if (db->methods->nodecount != NULL) {
+               return ((db->methods->nodecount)(db, tree));
+       }
+       return (0);
 }
 
 size_t
@@ -832,7 +887,9 @@ void
 dns_db_setloop(dns_db_t *db, isc_loop_t *loop) {
        REQUIRE(DNS_DB_VALID(db));
 
-       (db->methods->setloop)(db, loop);
+       if (db->methods->setloop != NULL) {
+               (db->methods->setloop)(db, loop);
+       }
 }
 
 isc_result_t
@@ -1036,10 +1093,10 @@ dns_db_nodefullname(dns_db_t *db, dns_dbnode_t *node, dns_name_t *name) {
        REQUIRE(node != NULL);
        REQUIRE(name != NULL);
 
-       if (db->methods->nodefullname == NULL) {
-               return (ISC_R_NOTIMPLEMENTED);
+       if (db->methods->nodefullname != NULL) {
+               return ((db->methods->nodefullname)(db, node, name));
        }
-       return ((db->methods->nodefullname)(db, node, name));
+       return (ISC_R_NOTIMPLEMENTED);
 }
 
 isc_result_t
index e48833fe399e8b7680ab187468e8032ecda25ea2..3e974cff109c85a145ce91decf2f9b2f137cecb0 100644 (file)
@@ -1388,7 +1388,7 @@ dns_db_hashsize(dns_db_t *db);
 void
 dns_db_setloop(dns_db_t *db, isc_loop_t *loop);
 /*%<
- * If loop is set then the final detach maybe performed asynchronously.
+ * If loop is set then the final detach may be performed asynchronously.
  *
  * Requires:
  * \li 'db' is a valid database.
@@ -1401,6 +1401,10 @@ dns_db_ispersistent(dns_db_t *db);
  * Is 'db' persistent?  A persistent database does not need to be loaded
  * from disk or written to disk.
  *
+ * By default, return false if the database implementation has an
+ * 'endload' function and true if it doesn't. This default can be overridden
+ * by including an 'ispersistent function in the database implementation.
+ *
  * Requires:
  *
  * \li 'db' is a valid database.
index 4cf4ef7f294a76628568e3b870db32d2184fd9c8..ec93e9c1e3d0f5c3ed90afad10fd84a5b0a0f42c 100644 (file)
@@ -4485,27 +4485,6 @@ tree_exit:
        return (result);
 }
 
-static isc_result_t
-zone_findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
-                isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname,
-                dns_name_t *dcname, dns_rdataset_t *rdataset,
-                dns_rdataset_t *sigrdataset) {
-       UNUSED(db);
-       UNUSED(name);
-       UNUSED(options);
-       UNUSED(now);
-       UNUSED(nodep);
-       UNUSED(foundname);
-       UNUSED(dcname);
-       UNUSED(rdataset);
-       UNUSED(sigrdataset);
-
-       FATAL_ERROR("zone_findzonecut() called!");
-
-       UNREACHABLE();
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
 static bool
 check_stale_header(dns_rbtnode_t *node, rdatasetheader_t *header,
                   isc_rwlocktype_t *nlocktypep, nodelock_t *lock,
@@ -7737,12 +7716,6 @@ setloop(dns_db_t *db, isc_loop_t *loop) {
        RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
 }
 
-static bool
-ispersistent(dns_db_t *db) {
-       UNUSED(db);
-       return (false);
-}
-
 static isc_result_t
 getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
        dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
@@ -8112,7 +8085,7 @@ static dns_dbmethods_t zone_methods = { attach,
                                        closeversion,
                                        findnode,
                                        zone_find,
-                                       zone_findzonecut,
+                                       NULL, /* findzonecut */
                                        attachnode,
                                        detachnode,
                                        expirenode,
@@ -8125,7 +8098,7 @@ static dns_dbmethods_t zone_methods = { attach,
                                        deleterdataset,
                                        issecure,
                                        nodecount,
-                                       ispersistent,
+                                       NULL,
                                        overmem,
                                        setloop,
                                        getoriginnode,
@@ -8173,7 +8146,7 @@ static dns_dbmethods_t cache_methods = { attach,
                                         deleterdataset,
                                         issecure,
                                         nodecount,
-                                        ispersistent,
+                                        NULL,
                                         overmem,
                                         setloop,
                                         getoriginnode,
index aacc96b088b2075cda7f256cffee10f420c63744..13077c8549b6bf8b886f6170fc93eed73bad3fd3 100644 (file)
@@ -134,9 +134,9 @@ typedef struct sdb_rdatasetiter {
 static int dummy;
 
 static isc_result_t
-dns_sdb_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type,
-              dns_rdataclass_t rdclass, unsigned int argc, char *argv[],
-              void *driverarg, dns_db_t **dbp);
+create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type,
+       dns_rdataclass_t rdclass, unsigned int argc, char *argv[],
+       void *driverarg, dns_db_t **dbp);
 
 static isc_result_t
 findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
@@ -203,7 +203,7 @@ isc_result_t
 dns_sdb_register(const char *drivername, const dns_sdbmethods_t *methods,
                 void *driverdata, unsigned int flags, isc_mem_t *mctx,
                 dns_sdbimplementation_t **sdbimp) {
-       dns_sdbimplementation_t *imp;
+       dns_sdbimplementation_t *imp = NULL;
        isc_result_t result;
 
        REQUIRE(drivername != NULL);
@@ -224,8 +224,7 @@ dns_sdb_register(const char *drivername, const dns_sdbmethods_t *methods,
        isc_mutex_init(&imp->driverlock);
 
        imp->dbimp = NULL;
-       result = dns_db_register(drivername, dns_sdb_create, imp, mctx,
-                                &imp->dbimp);
+       result = dns_db_register(drivername, create, imp, mctx, &imp->dbimp);
        if (result != ISC_R_SUCCESS) {
                goto cleanup_mutex;
        }
@@ -241,7 +240,7 @@ cleanup_mutex:
 
 void
 dns_sdb_unregister(dns_sdbimplementation_t **sdbimp) {
-       dns_sdbimplementation_t *imp;
+       dns_sdbimplementation_t *imp = NULL;
 
        REQUIRE(sdbimp != NULL && *sdbimp != NULL);
 
@@ -269,10 +268,10 @@ isc_result_t
 dns_sdb_putrdata(dns_sdblookup_t *lookup, dns_rdatatype_t typeval,
                 dns_ttl_t ttl, const unsigned char *rdatap,
                 unsigned int rdlen) {
-       dns_rdatalist_t *rdatalist;
-       dns_rdata_t *rdata;
+       dns_rdatalist_t *rdatalist = NULL;
+       dns_rdata_t *rdata = NULL;
        isc_buffer_t *rdatabuf = NULL;
-       isc_mem_t *mctx;
+       isc_mem_t *mctx = NULL;
        isc_region_t region;
 
        mctx = lookup->sdb->common.mctx;
@@ -322,9 +321,9 @@ dns_sdb_putrr(dns_sdblookup_t *lookup, const char *type, dns_ttl_t ttl,
        isc_result_t result;
        unsigned char *p = NULL;
        unsigned int size = 0; /* Init to suppress compiler warning */
-       isc_mem_t *mctx;
-       dns_sdbimplementation_t *imp;
-       const dns_name_t *origin;
+       isc_mem_t *mctx = NULL;
+       dns_sdbimplementation_t *imp = NULL;
+       const dns_name_t *origin = NULL;
        isc_buffer_t b;
        isc_buffer_t rb;
 
@@ -402,12 +401,12 @@ failure:
 
 static isc_result_t
 getnode(dns_sdballnodes_t *allnodes, const char *name, dns_sdbnode_t **nodep) {
-       dns_name_t *newname;
-       const dns_name_t *origin;
+       dns_name_t *newname = NULL;
+       const dns_name_t *origin = NULL;
        dns_fixedname_t fnewname;
        dns_sdb_t *sdb = (dns_sdb_t *)allnodes->common.db;
        dns_sdbimplementation_t *imp = sdb->implementation;
-       dns_sdbnode_t *sdbnode;
+       dns_sdbnode_t *sdbnode = NULL;
        isc_mem_t *mctx = sdb->common.mctx;
        isc_buffer_t b;
        isc_result_t result;
@@ -547,30 +546,6 @@ detach(dns_db_t **dbp) {
        }
 }
 
-static isc_result_t
-beginload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
-       UNUSED(db);
-       UNUSED(callbacks);
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
-static isc_result_t
-endload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
-       UNUSED(db);
-       UNUSED(callbacks);
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
-static isc_result_t
-dump(dns_db_t *db, dns_dbversion_t *version, const char *filename,
-     dns_masterformat_t masterformat) {
-       UNUSED(db);
-       UNUSED(version);
-       UNUSED(filename);
-       UNUSED(masterformat);
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
 static void
 currentversion(dns_db_t *db, dns_dbversion_t **versionp) {
        REQUIRE(versionp != NULL && *versionp == NULL);
@@ -581,14 +556,6 @@ currentversion(dns_db_t *db, dns_dbversion_t **versionp) {
        return;
 }
 
-static isc_result_t
-newversion(dns_db_t *db, dns_dbversion_t **versionp) {
-       UNUSED(db);
-       UNUSED(versionp);
-
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
 static void
 attachversion(dns_db_t *db, dns_dbversion_t *source,
              dns_dbversion_t **targetp) {
@@ -613,7 +580,7 @@ closeversion(dns_db_t *db, dns_dbversion_t **versionp, bool commit) {
 
 static isc_result_t
 createnode(dns_sdb_t *sdb, dns_sdbnode_t **nodep) {
-       dns_sdbnode_t *node;
+       dns_sdbnode_t *node = NULL;
 
        node = isc_mem_get(sdb->common.mctx, sizeof(dns_sdbnode_t));
 
@@ -635,11 +602,11 @@ createnode(dns_sdb_t *sdb, dns_sdbnode_t **nodep) {
 
 static void
 destroynode(dns_sdbnode_t *node) {
-       dns_rdatalist_t *list;
-       dns_rdata_t *rdata;
-       isc_buffer_t *b;
-       dns_sdb_t *sdb;
-       isc_mem_t *mctx;
+       dns_rdatalist_t *list = NULL;
+       dns_rdata_t *rdata = NULL;
+       isc_buffer_t *b = NULL;
+       dns_sdb_t *sdb = NULL;
+       isc_mem_t *mctx = NULL;
 
        sdb = node->sdb;
        mctx = sdb->common.mctx;
@@ -678,9 +645,9 @@ getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
        isc_result_t result;
        isc_buffer_t b;
        char namestr[DNS_NAME_MAXTEXT + 1];
-       dns_sdbimplementation_t *imp;
+       dns_sdbimplementation_t *imp = NULL;
        dns_name_t relname;
-       dns_name_t *name;
+       dns_name_t *name = NULL;
 
        REQUIRE(VALID_SDB(sdb));
        REQUIRE(nodep != NULL && *nodep == NULL);
@@ -755,7 +722,7 @@ findnodeext(dns_db_t *db, const dns_name_t *name, bool create,
        isc_buffer_t b;
        char namestr[DNS_NAME_MAXTEXT + 1];
        bool isorigin;
-       dns_sdbimplementation_t *imp;
+       dns_sdbimplementation_t *imp = NULL;
        dns_name_t relname;
        unsigned int labels;
 
@@ -843,7 +810,7 @@ findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
        dns_dbnode_t *node = NULL;
        dns_fixedname_t fname;
        dns_rdataset_t xrdataset;
-       dns_name_t *xname;
+       dns_name_t *xname = NULL;
        unsigned int nlabels, olabels;
        isc_result_t result;
        unsigned int i;
@@ -1009,24 +976,6 @@ findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
        return (result);
 }
 
-static isc_result_t
-findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
-           isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname,
-           dns_name_t *dcname, dns_rdataset_t *rdataset,
-           dns_rdataset_t *sigrdataset) {
-       UNUSED(db);
-       UNUSED(name);
-       UNUSED(options);
-       UNUSED(now);
-       UNUSED(nodep);
-       UNUSED(foundname);
-       UNUSED(dcname);
-       UNUSED(rdataset);
-       UNUSED(sigrdataset);
-
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
 static void
 attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) {
        dns_sdb_t *sdb = (dns_sdb_t *)db;
@@ -1044,7 +993,7 @@ attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) {
 static void
 detachnode(dns_db_t *db, dns_dbnode_t **targetp) {
        dns_sdb_t *sdb = (dns_sdb_t *)db;
-       dns_sdbnode_t *node;
+       dns_sdbnode_t *node = NULL;
 
        REQUIRE(VALID_SDB(sdb));
        REQUIRE(targetp != NULL && *targetp != NULL);
@@ -1060,29 +1009,13 @@ detachnode(dns_db_t *db, dns_dbnode_t **targetp) {
        }
 }
 
-static isc_result_t
-expirenode(dns_db_t *db, dns_dbnode_t *node, isc_stdtime_t now) {
-       UNUSED(db);
-       UNUSED(node);
-       UNUSED(now);
-       UNREACHABLE();
-}
-
-static void
-printnode(dns_db_t *db, dns_dbnode_t *node, FILE *out) {
-       UNUSED(db);
-       UNUSED(node);
-       UNUSED(out);
-       return;
-}
-
 static isc_result_t
 createiterator(dns_db_t *db, unsigned int options,
               dns_dbiterator_t **iteratorp) {
        dns_sdb_t *sdb = (dns_sdb_t *)db;
        REQUIRE(VALID_SDB(sdb));
 
-       sdb_dbiterator_t *sdbiter;
+       sdb_dbiterator_t *sdbiter = NULL;
        isc_result_t result;
        dns_sdbimplementation_t *imp = sdb->implementation;
 
@@ -1132,7 +1065,7 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
             dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
        REQUIRE(VALID_SDBNODE(node));
 
-       dns_rdatalist_t *list;
+       dns_rdatalist_t *list = NULL;
        dns_sdbnode_t *sdbnode = (dns_sdbnode_t *)node;
 
        UNUSED(db);
@@ -1165,7 +1098,7 @@ static isc_result_t
 allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
             unsigned int options, isc_stdtime_t now,
             dns_rdatasetiter_t **iteratorp) {
-       sdb_rdatasetiter_t *iterator;
+       sdb_rdatasetiter_t *iterator = NULL;
 
        REQUIRE(version == NULL || version == &dummy);
 
@@ -1188,125 +1121,58 @@ allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
        return (ISC_R_SUCCESS);
 }
 
-static isc_result_t
-addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
-           isc_stdtime_t now, dns_rdataset_t *rdataset, unsigned int options,
-           dns_rdataset_t *addedrdataset) {
-       UNUSED(db);
-       UNUSED(node);
-       UNUSED(version);
-       UNUSED(now);
-       UNUSED(rdataset);
-       UNUSED(options);
-       UNUSED(addedrdataset);
-
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
-static isc_result_t
-subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
-                dns_rdataset_t *rdataset, unsigned int options,
-                dns_rdataset_t *newrdataset) {
-       UNUSED(db);
-       UNUSED(node);
-       UNUSED(version);
-       UNUSED(rdataset);
-       UNUSED(options);
-       UNUSED(newrdataset);
-
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
-static isc_result_t
-deleterdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
-              dns_rdatatype_t type, dns_rdatatype_t covers) {
-       UNUSED(db);
-       UNUSED(node);
-       UNUSED(version);
-       UNUSED(type);
-       UNUSED(covers);
-
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
-static bool
-issecure(dns_db_t *db) {
-       UNUSED(db);
-
-       return (false);
-}
-
-static unsigned int
-nodecount(dns_db_t *db, dns_dbtree_t tree) {
-       UNUSED(db);
-       UNUSED(tree);
-
-       return (0);
-}
-
 static bool
 ispersistent(dns_db_t *db) {
        UNUSED(db);
        return (true);
 }
 
-static void
-overmem(dns_db_t *db, bool over) {
-       UNUSED(db);
-       UNUSED(over);
-}
-
-static void
-setloop(dns_db_t *db, isc_loop_t *loop) {
-       UNUSED(db);
-       UNUSED(loop);
-}
-
 static dns_dbmethods_t sdb_methods = {
-       attach,         detach,
-       beginload,      endload,
-       dump,           currentversion,
-       newversion,     attachversion,
-       closeversion,   NULL, /* findnode */
-       NULL,                 /* find */
-       findzonecut,    attachnode,
-       detachnode,     expirenode,
-       printnode,      createiterator,
-       findrdataset,   allrdatasets,
-       addrdataset,    subtractrdataset,
-       deleterdataset, issecure,
-       nodecount,      ispersistent,
-       overmem,        setloop,
-       getoriginnode, /* getoriginnode */
-       NULL,          /* transfernode */
-       NULL,          /* getnsec3parameters */
-       NULL,          /* findnsec3node */
-       NULL,          /* setsigningtime */
-       NULL,          /* getsigningtime */
-       NULL,          /* resigned */
-       NULL,          /* isdnssec */
-       NULL,          /* getrrsetstats */
-       findnodeext,    findext,
-       NULL, /* setcachestats */
-       NULL, /* hashsize */
-       NULL, /* nodefullname */
-       NULL, /* getsize */
-       NULL, /* setservestalettl */
-       NULL, /* getservestalettl */
-       NULL, /* setservestalerefresh */
-       NULL, /* getservestalerefresh */
-       NULL, /* setgluecachestats */
+       attach,         detach,       NULL,               /* beginload */
+       NULL,                                             /* endload */
+       NULL,                                             /* dump */
+       currentversion, NULL,                             /* newversion */
+       attachversion,  closeversion, NULL,               /* findnode */
+       NULL,                                             /* find */
+       NULL,                                             /* findzonecut */
+       attachnode,     detachnode,   NULL,               /* expirenode */
+       NULL,                                             /* printnode */
+       createiterator, findrdataset, allrdatasets, NULL, /* addrdataset */
+       NULL,                                             /* subtractrdataset */
+       NULL,                                             /* deleterdataset */
+       NULL,                                             /* issecure */
+       NULL,                                             /* nodecount */
+       ispersistent,   NULL,                             /* overmem */
+       NULL,                                             /* setloop */
+       getoriginnode,                                    /* getoriginnode */
+       NULL,                                             /* transfernode */
+       NULL,                               /* getnsec3parameters */
+       NULL,                               /* findnsec3node */
+       NULL,                               /* setsigningtime */
+       NULL,                               /* getsigningtime */
+       NULL,                               /* resigned */
+       NULL,                               /* isdnssec */
+       NULL,                               /* getrrsetstats */
+       findnodeext,    findext,      NULL, /* setcachestats */
+       NULL,                               /* hashsize */
+       NULL,                               /* nodefullname */
+       NULL,                               /* getsize */
+       NULL,                               /* setservestalettl */
+       NULL,                               /* getservestalettl */
+       NULL,                               /* setservestalerefresh */
+       NULL,                               /* getservestalerefresh */
+       NULL,                               /* setgluecachestats */
 };
 
 static isc_result_t
-dns_sdb_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type,
-              dns_rdataclass_t rdclass, unsigned int argc, char *argv[],
-              void *driverarg, dns_db_t **dbp) {
-       dns_sdb_t *sdb;
+create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type,
+       dns_rdataclass_t rdclass, unsigned int argc, char *argv[],
+       void *driverarg, dns_db_t **dbp) {
+       dns_sdb_t *sdb = NULL;
        isc_result_t result;
        char zonestr[DNS_NAME_MAXTEXT + 1];
        isc_buffer_t b;
-       dns_sdbimplementation_t *imp;
+       dns_sdbimplementation_t *imp = NULL;
 
        REQUIRE(driverarg != NULL);
 
index 85aefae02d32e540f7ea2d5bc967d04c2daf0eda..7ed5691b0eb5daf3c73a4a1a218ac73c9b66bc6e 100644 (file)
@@ -334,30 +334,6 @@ detach(dns_db_t **dbp) {
        }
 }
 
-static isc_result_t
-beginload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
-       UNUSED(db);
-       UNUSED(callbacks);
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
-static isc_result_t
-endload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
-       UNUSED(db);
-       UNUSED(callbacks);
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
-static isc_result_t
-dump(dns_db_t *db, dns_dbversion_t *version, const char *filename,
-     dns_masterformat_t masterformat) {
-       UNUSED(db);
-       UNUSED(version);
-       UNUSED(filename);
-       UNUSED(masterformat);
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
 static void
 currentversion(dns_db_t *db, dns_dbversion_t **versionp) {
        dns_sdlz_db_t *sdlz = (dns_sdlz_db_t *)db;
@@ -667,24 +643,6 @@ findnode(dns_db_t *db, const dns_name_t *name, bool create,
        return (getnodedata(db, name, create, 0, NULL, NULL, nodep));
 }
 
-static isc_result_t
-findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
-           isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname,
-           dns_name_t *dcname, dns_rdataset_t *rdataset,
-           dns_rdataset_t *sigrdataset) {
-       UNUSED(db);
-       UNUSED(name);
-       UNUSED(options);
-       UNUSED(now);
-       UNUSED(nodep);
-       UNUSED(foundname);
-       UNUSED(dcname);
-       UNUSED(rdataset);
-       UNUSED(sigrdataset);
-
-       return (ISC_R_NOTIMPLEMENTED);
-}
-
 static void
 attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) {
        dns_sdlz_db_t *sdlz = (dns_sdlz_db_t *)db;
@@ -1185,12 +1143,6 @@ nodecount(dns_db_t *db, dns_dbtree_t tree) {
        return (0);
 }
 
-static bool
-ispersistent(dns_db_t *db) {
-       UNUSED(db);
-       return (true);
-}
-
 static void
 overmem(dns_db_t *db, bool over) {
        UNUSED(db);
@@ -1227,15 +1179,17 @@ getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
 }
 
 static dns_dbmethods_t sdlzdb_methods = {
-       attach,         detach,         beginload,
-       endload,        dump,           currentversion,
-       newversion,     attachversion,  closeversion,
-       findnode,       find,           findzonecut,
+       attach,         detach,         NULL, /* beginload */
+       NULL,                                 /* endload */
+       NULL,                                 /* dump */
+       currentversion, newversion,     attachversion,
+       closeversion,   findnode,       find,
+       NULL, /* findzonecut */
        attachnode,     detachnode,     expirenode,
        printnode,      createiterator, findrdataset,
        allrdatasets,   addrdataset,    subtractrdataset,
        deleterdataset, issecure,       nodecount,
-       ispersistent,   overmem,        setloop,
+       NULL,           overmem,        setloop,
        getoriginnode,  NULL,                 /* transfernode */
        NULL,                                 /* getnsec3parameters */
        NULL,                                 /* findnsec3node */