diff --git a/bin/check/check-tool.c b/bin/check/check-tool.c index dd3fec6478..5583ed15c6 100644 --- a/bin/check/check-tool.c +++ b/bin/check/check-tool.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: check-tool.c,v 1.4 2001/03/03 23:11:33 bwelling Exp $ */ +/* $Id: check-tool.c,v 1.5 2001/09/03 08:21:45 marka Exp $ */ #include @@ -24,9 +24,28 @@ #include "check-tool.h" #include +#include #include +#include #include +#include +#include +#include +#include +#include + +#define CHECK(r) \ + do { \ + result = (r); \ + if (result != ISC_R_SUCCESS) \ + goto cleanup; \ + } while (0) + +static const char *dbtype[] = { "rbt" }; + +int debug = 0; + isc_result_t setup_logging(isc_mem_t *mctx, isc_log_t **logp) { isc_logdestination_t destination; @@ -50,3 +69,54 @@ setup_logging(isc_mem_t *mctx, isc_log_t **logp) { *logp = log; return (ISC_R_SUCCESS); } + +isc_result_t +load_zone(isc_mem_t *mctx, const char *zonename, const char *filename, + const char *classname, dns_zone_t **zonep) +{ + isc_result_t result; + dns_rdataclass_t rdclass; + isc_textregion_t region; + isc_buffer_t buffer; + dns_fixedname_t fixorigin; + dns_name_t *origin; + dns_zone_t *zone = NULL; + + REQUIRE(zonep == NULL || *zonep == NULL); + + if (debug) + fprintf(stderr, "loading \"%s\" from \"%s\" class \"%s\"\n", + zonename, filename, classname); + + CHECK(dns_zone_create(&zone, mctx)); + + dns_zone_settype(zone, dns_zone_master); + + isc_buffer_init(&buffer, zonename, strlen(zonename)); + isc_buffer_add(&buffer, strlen(zonename)); + dns_fixedname_init(&fixorigin); + origin = dns_fixedname_name(&fixorigin); + CHECK(dns_name_fromtext(origin, &buffer, dns_rootname, + ISC_FALSE, NULL)); + CHECK(dns_zone_setorigin(zone, origin)); + CHECK(dns_zone_setdbtype(zone, 1, (const char * const *) dbtype)); + CHECK(dns_zone_setfile(zone, filename)); + + DE_CONST(classname, region.base); + region.length = strlen(classname); + CHECK(dns_rdataclass_fromtext(&rdclass, ®ion)); + + dns_zone_setclass(zone, rdclass); + dns_zone_setoption(zone, DNS_ZONEOPT_MANYERRORS, ISC_TRUE); + + CHECK(dns_zone_load(zone)); + if (zonep != NULL){ + *zonep = zone; + zone = NULL; + } + + cleanup: + if (zone != NULL) + dns_zone_detach(&zone); + return (result); +} diff --git a/bin/check/check-tool.h b/bin/check/check-tool.h index 17a68b2326..823ea0bc59 100644 --- a/bin/check/check-tool.h +++ b/bin/check/check-tool.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: check-tool.h,v 1.2 2001/01/09 21:39:09 bwelling Exp $ */ +/* $Id: check-tool.h,v 1.3 2001/09/03 08:21:46 marka Exp $ */ #ifndef CHECK_TOOL_H #define CHECK_TOOL_H @@ -23,12 +23,19 @@ #include #include +#include ISC_LANG_BEGINDECLS isc_result_t setup_logging(isc_mem_t *mctx, isc_log_t **logp); +isc_result_t +load_zone(isc_mem_t *mctx, const char *zonename, const char *filename, + const char *classname, dns_zone_t **zonep); + +extern int debug; + ISC_LANG_ENDDECLS #endif diff --git a/bin/check/named-checkzone.c b/bin/check/named-checkzone.c index 9625bbce77..84b2121a1c 100644 --- a/bin/check/named-checkzone.c +++ b/bin/check/named-checkzone.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: named-checkzone.c,v 1.13 2001/06/29 01:04:59 gson Exp $ */ +/* $Id: named-checkzone.c,v 1.14 2001/09/03 08:21:44 marka Exp $ */ #include @@ -41,12 +41,10 @@ #include "check-tool.h" -static int debug = 0; static int quiet = 0; static isc_mem_t *mctx = NULL; dns_zone_t *zone = NULL; dns_zonetype_t zonetype = dns_zone_master; -static const char *dbtype[] = { "rbt" }; #define ERRRET(result, function) \ do { \ @@ -65,53 +63,6 @@ usage(void) { exit(1); } -static isc_result_t -setup(char *zonename, char *filename, char *classname) { - isc_result_t result; - dns_rdataclass_t rdclass; - isc_textregion_t region; - isc_buffer_t buffer; - dns_fixedname_t fixorigin; - dns_name_t *origin; - - if (debug) - fprintf(stderr, "loading \"%s\" from \"%s\" class \"%s\"\n", - zonename, filename, classname); - result = dns_zone_create(&zone, mctx); - ERRRET(result, "dns_zone_new"); - - dns_zone_settype(zone, zonetype); - - isc_buffer_init(&buffer, zonename, strlen(zonename)); - isc_buffer_add(&buffer, strlen(zonename)); - dns_fixedname_init(&fixorigin); - result = dns_name_fromtext(dns_fixedname_name(&fixorigin), - &buffer, dns_rootname, ISC_FALSE, NULL); - ERRRET(result, "dns_name_fromtext"); - origin = dns_fixedname_name(&fixorigin); - - result = dns_zone_setorigin(zone, origin); - ERRRET(result, "dns_zone_setorigin"); - - result = dns_zone_setdbtype(zone, 1, (const char * const *) dbtype); - ERRRET(result, "dns_zone_setdatabase"); - - result = dns_zone_setfile(zone, filename); - ERRRET(result, "dns_zone_setdatabase"); - - region.base = classname; - region.length = strlen(classname); - result = dns_rdataclass_fromtext(&rdclass, ®ion); - ERRRET(result, "dns_rdataclass_fromtext"); - - dns_zone_setclass(zone, rdclass); - dns_zone_setoption(zone, DNS_ZONEOPT_MANYERRORS, ISC_TRUE); - - result = dns_zone_load(zone); - - return (result); -} - static void destroy(void) { if (zone != NULL) @@ -159,7 +110,7 @@ main(int argc, char **argv) { origin = argv[isc_commandline_index++]; filename = argv[isc_commandline_index++]; - result = setup(origin, filename, classname); + result = load_zone(mctx, origin, filename, classname, &zone); if (!quiet && result == ISC_R_SUCCESS) fprintf(stdout, "OK\n"); destroy();