From: Mark Andrews Date: Mon, 17 May 2004 06:18:40 +0000 (+0000) Subject: 1634. [bug] named didn't supply a useful error message when it X-Git-Tag: v9.2.4rc4~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e45eee942a408b7dd3f6e767e739da15b5cc7b41;p=thirdparty%2Fbind9.git 1634. [bug] named didn't supply a useful error message when it detected duplicate views. [RT #11208] --- diff --git a/CHANGES b/CHANGES index a96bc882178..9e89c1dfaf8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ 1640. [bug] win32: isc_socket_cancel(ISC_SOCKCANCEL_ACCEPT) was incorrectly closing the socket. [RT #11291] +1634. [bug] named didn't supply a useful error message when it + detected duplicate views. [RT #11208] + 1633. [bug] named should return NOTIMP to update requests to a slaves without a allow-update-forwarding acl specified. [RT #11331] diff --git a/lib/isccfg/check.c b/lib/isccfg/check.c index 664a807f7b9..3e4a40b5fb5 100644 --- a/lib/isccfg/check.c +++ b/lib/isccfg/check.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: check.c,v 1.14.2.23 2004/04/16 00:02:00 marka Exp $ */ +/* $Id: check.c,v 1.14.2.24 2004/05/17 06:18:40 marka Exp $ */ #include @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -589,6 +590,7 @@ cfg_check_namedconf(cfg_obj_t *config, isc_log_t *logctx, isc_mem_t *mctx) { cfg_listelt_t *velement; isc_result_t result = ISC_R_SUCCESS; isc_result_t tresult; + isc_symtab_t *symtab = NULL; static const char *builtin[] = { "localhost", "localnets", "any", "none" }; @@ -622,17 +624,51 @@ cfg_check_namedconf(cfg_obj_t *config, isc_log_t *logctx, isc_mem_t *mctx) { } } + tresult = isc_symtab_create(mctx, 100, NULL, NULL, ISC_TRUE, &symtab); + if (tresult != ISC_R_SUCCESS) + result = tresult; for (velement = cfg_list_first(views); velement != NULL; velement = cfg_list_next(velement)) { cfg_obj_t *view = cfg_listelt_value(velement); + cfg_obj_t *vname = cfg_tuple_get(view, "name"); cfg_obj_t *voptions = cfg_tuple_get(view, "options"); + cfg_obj_t *vclassobj = cfg_tuple_get(view, "class"); + dns_rdataclass_t vclass = dns_rdataclass_in; + isc_result_t tresult = ISC_R_SUCCESS; + const char *key = cfg_obj_asstring(vname); + isc_symvalue_t symvalue; + if (cfg_obj_isstring(vclassobj)) { + isc_textregion_t r; + + DE_CONST(cfg_obj_asstring(vclassobj), r.base); + r.length = strlen(r.base); + tresult = dns_rdataclass_fromtext(&vclass, &r); + if (tresult != ISC_R_SUCCESS) + cfg_obj_log(vclassobj, logctx, ISC_LOG_ERROR, + "view '%s': invalid class %s", + cfg_obj_asstring(vname), r.base); + } + if (tresult == ISC_R_SUCCESS && symtab != NULL) { + symvalue.as_pointer = view; + tresult = isc_symtab_define(symtab, key, vclass, + symvalue, + isc_symexists_reject); + if (tresult == ISC_R_EXISTS) { + cfg_obj_log(view, logctx, ISC_LOG_ERROR, + "view '%s': already exists", key); + result = tresult; + } else if (result != ISC_R_SUCCESS) + result = tresult; + } if (check_viewconf(config, voptions, logctx, mctx) != ISC_R_SUCCESS) result = ISC_R_FAILURE; } + if (symtab != NULL) + isc_symtab_destroy(&symtab); if (views != NULL && options != NULL) { obj = NULL;