RETERR(dns_db_create(mctx, dbtype, dns_zone_getorigin(zone),
dns_dbtype_stub, dns_zone_getclass(zone),
0, NULL, &db));
- dns_zone_setdb(zone, db);
+
+ dns_rdataset_init(&rdataset);
dns_rdatalist_init(&rdatalist_ns);
rdatalist_ns.rdclass = dns_zone_getclass(zone);
result = cfg_map_get(zconfig, "server-addresses", &obj);
if (result == ISC_R_SUCCESS) {
INSIST(obj != NULL);
- result = configure_staticstub_serveraddrs(obj, zone,
- &rdatalist_ns,
- &rdatalist_a,
- &rdatalist_aaaa);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
+ CHECK(configure_staticstub_serveraddrs(obj, zone,
+ &rdatalist_ns,
+ &rdatalist_a,
+ &rdatalist_aaaa));
}
obj = NULL;
result = cfg_map_get(zconfig, "server-names", &obj);
if (result == ISC_R_SUCCESS) {
INSIST(obj != NULL);
- result = configure_staticstub_servernames(obj, zone,
- &rdatalist_ns,
- zname);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
+ CHECK(configure_staticstub_servernames(obj, zone,
+ &rdatalist_ns,
+ zname));
}
/*
* First open a new version for the add operation and get a pointer
* to the apex node (all RRs are of the apex name).
*/
- result = dns_db_newversion(db, &dbversion);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
+ CHECK(dns_db_newversion(db, &dbversion));
+
dns_name_init(&apexname, NULL);
dns_name_clone(dns_zone_getorigin(zone), &apexname);
- result = dns_db_findnode(db, &apexname, false, &apexnode);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
+ CHECK(dns_db_findnode(db, &apexname, false, &apexnode));
/* Add NS RRset */
- dns_rdataset_init(&rdataset);
RUNTIME_CHECK(dns_rdatalist_tordataset(&rdatalist_ns, &rdataset)
== ISC_R_SUCCESS);
- result = dns_db_addrdataset(db, apexnode, dbversion, 0, &rdataset,
- 0, NULL);
+ CHECK(dns_db_addrdataset(db, apexnode, dbversion, 0, &rdataset,
+ 0, NULL));
dns_rdataset_disassociate(&rdataset);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
/* Add glue A RRset, if any */
if (!ISC_LIST_EMPTY(rdatalist_a.rdata)) {
RUNTIME_CHECK(dns_rdatalist_tordataset(&rdatalist_a, &rdataset)
== ISC_R_SUCCESS);
- result = dns_db_addrdataset(db, apexnode, dbversion, 0,
- &rdataset, 0, NULL);
+ CHECK(dns_db_addrdataset(db, apexnode, dbversion, 0,
+ &rdataset, 0, NULL));
dns_rdataset_disassociate(&rdataset);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
}
/* Add glue AAAA RRset, if any */
RUNTIME_CHECK(dns_rdatalist_tordataset(&rdatalist_aaaa,
&rdataset)
== ISC_R_SUCCESS);
- result = dns_db_addrdataset(db, apexnode, dbversion, 0,
- &rdataset, 0, NULL);
+ CHECK(dns_db_addrdataset(db, apexnode, dbversion, 0,
+ &rdataset, 0, NULL));
dns_rdataset_disassociate(&rdataset);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
}
+ dns_db_closeversion(db, &dbversion, true);
+ dns_zone_setdb(zone, db);
+
result = ISC_R_SUCCESS;
cleanup:
- if (apexnode != NULL)
+ if (dns_rdataset_isassociated(&rdataset)) {
+ dns_rdataset_disassociate(&rdataset);
+ }
+ if (apexnode != NULL) {
dns_db_detachnode(db, &apexnode);
- if (dbversion != NULL)
- dns_db_closeversion(db, &dbversion, true);
- if (db != NULL)
+ }
+ if (dbversion != NULL) {
+ dns_db_closeversion(db, &dbversion, false);
+ }
+ if (db != NULL) {
dns_db_detach(&db);
+ }
for (i = 0; rdatalists[i] != NULL; i++) {
while ((rdata = ISC_LIST_HEAD(rdatalists[i]->rdata)) != NULL) {
ISC_LIST_UNLINK(rdatalists[i]->rdata, rdata, link);