]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[master] error on bad parameter to 'rndc dumpdb'
authorEvan Hunt <each@isc.org>
Thu, 11 Aug 2016 22:56:30 +0000 (15:56 -0700)
committerEvan Hunt <each@isc.org>
Thu, 11 Aug 2016 23:02:57 +0000 (16:02 -0700)
4433. [cleanup] Report an error when passing an invalid option or
view name to "rndc dumpdb". [RT #42958]

CHANGES
bin/named/control.c
bin/named/include/named/server.h
bin/named/server.c

diff --git a/CHANGES b/CHANGES
index 887f29b2a539d700383a6f73a290d2f2c5e6c7ab..caaabd520b3f8617b1bed324e338d69deb8bf60d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,5 @@
-4433.  [placeholder]
+4433.  [cleanup]       Report an error when passing an invalid option or
+                       view name to "rndc dumpdb". [RT #42958]
 
 4432.  [test]          Hide rndc output on expected failures in logfileconfig
                        system test. [RT #27996]
index bd2f36b6802bfd2707a3657fce088064930b1f01..5d9027a6adf5a2682e188a7ae2ce1af527faf6c3 100644 (file)
@@ -207,7 +207,7 @@ ns_control_docommand(isccc_sexpr_t *message, isc_boolean_t readonly,
        } else if (command_compare(command, NS_COMMAND_QUERYLOG)) {
                result = ns_server_togglequerylog(ns_g_server, lex);
        } else if (command_compare(command, NS_COMMAND_DUMPDB)) {
-               ns_server_dumpdb(ns_g_server, lex);
+               ns_server_dumpdb(ns_g_server, lex, text);
                result = ISC_R_SUCCESS;
        } else if (command_compare(command, NS_COMMAND_SECROOTS)) {
                result = ns_server_dumpsecroots(ns_g_server, lex, text);
index 8fd3899a7d940d91da10ca5f66a3c7aef6696967..8550cba424740d7061884aef2aa0385e024c0cbd 100644 (file)
@@ -596,7 +596,7 @@ ns_server_dumpstats(ns_server_t *server);
  * Dump the current cache to the dump file.
  */
 isc_result_t
-ns_server_dumpdb(ns_server_t *server, isc_lex_t *lex);
+ns_server_dumpdb(ns_server_t *server, isc_lex_t *lex, isc_buffer_t **text);
 
 /*%
  * Dump the current security roots to the secroots file.
index e0ebf18f98675a178cf1f709b3c499638b2999c7..743ef3ad8f86a8bbc9930d79bf562e8e7ef5c89e 100644 (file)
@@ -9478,12 +9478,13 @@ dumpdone(void *arg, isc_result_t result) {
 }
 
 isc_result_t
-ns_server_dumpdb(ns_server_t *server, isc_lex_t *lex) {
+ns_server_dumpdb(ns_server_t *server, isc_lex_t *lex, isc_buffer_t **text) {
        struct dumpcontext *dctx = NULL;
        dns_view_t *view;
        isc_result_t result;
        char *ptr;
        const char *sep;
+       isc_boolean_t found;
 
        /* Skip the command name. */
        ptr = next_token(lex, NULL);
@@ -9557,15 +9558,26 @@ ns_server_dumpdb(ns_server_t *server, isc_lex_t *lex) {
        }
 
  nextview:
+       found = ISC_FALSE;
        for (view = ISC_LIST_HEAD(server->viewlist);
             view != NULL;
             view = ISC_LIST_NEXT(view, link))
        {
                if (ptr != NULL && strcmp(view->name, ptr) != 0)
                        continue;
+               found = ISC_TRUE;
                CHECK(add_view_tolist(dctx, view));
        }
        if (ptr != NULL) {
+               if (!found) {
+                       putstr(text, "view '");
+                       putstr(text, ptr);
+                       putstr(text, "' not found");
+                       putnull(text);
+                       result = ISC_R_NOTFOUND;
+                       dumpdone(dctx, result);
+                       return (result);
+               }
                ptr = next_token(lex, NULL);
                if (ptr != NULL)
                        goto nextview;