]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[master] clearer "not found" message for rndc commands
authorEvan Hunt <each@isc.org>
Wed, 4 Dec 2013 20:47:56 +0000 (12:47 -0800)
committerEvan Hunt <each@isc.org>
Wed, 4 Dec 2013 20:47:56 +0000 (12:47 -0800)
3683. [cleanup] Add a more detailed "not found" message to rndc
commands which specify a zone name. [RT #35059]

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

diff --git a/CHANGES b/CHANGES
index 38e3bad85ae49ab6ae5680973d24fae7eb303bb7..ba9ef64a97c2c433e748346c69687708d42a2c50 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
+3683.  [cleanup]       Add a more detailed "not found" message to rndc
+                       commands which specify a zone name. [RT #35059]
+
 3682.  [bug]           Correct the behavior of rndc retransfer to allow
-                       inline-signing slave zones to retain NSEC3 parameters instead of
-                       reverting to NSEC [RT #34745]
+                       inline-signing slave zones to retain NSEC3 parameters
+                       instead of reverting to NSEC. [RT #34745]
 
 3681.  [port]          Update the Windows build system to support feature
                        selection and WIN64 builds.  This is a work in
index 8d85975c4bd6b1e4e97e4e056ab17b5fd98b23c5..2ab480b3168d6255f7022dbcd33cf53e7f091be5 100644 (file)
@@ -105,7 +105,8 @@ ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) {
        } else if (command_compare(command, NS_COMMAND_REFRESH)) {
                result = ns_server_refreshcommand(ns_g_server, command, text);
        } else if (command_compare(command, NS_COMMAND_RETRANSFER)) {
-               result = ns_server_retransfercommand(ns_g_server, command);
+               result = ns_server_retransfercommand(ns_g_server,
+                                                    command, text);
        } else if (command_compare(command, NS_COMMAND_HALT)) {
 #ifdef HAVE_LIBSCF
                /*
@@ -200,7 +201,7 @@ ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) {
                result = ns_server_validation(ns_g_server, command, text);
        } else if (command_compare(command, NS_COMMAND_SIGN) ||
                   command_compare(command, NS_COMMAND_LOADKEYS)) {
-               result = ns_server_rekey(ns_g_server, command);
+               result = ns_server_rekey(ns_g_server, command, text);
        } else if (command_compare(command, NS_COMMAND_ADDZONE)) {
                result = ns_server_add_zone(ns_g_server, command);
        } else if (command_compare(command, NS_COMMAND_DELZONE)) {
index b586f5c4acedb5fb1dc024af03b3883ea623c796..73c648b139a621c87c71940707830860c00de6ae 100644 (file)
@@ -231,7 +231,8 @@ ns_server_refreshcommand(ns_server_t *server, char *args, isc_buffer_t *text);
  */
 
 isc_result_t
-ns_server_retransfercommand(ns_server_t *server, char *args);
+ns_server_retransfercommand(ns_server_t *server, char *args,
+                           isc_buffer_t *text);
 /*%<
  * Act on a "retransfer" command from the command channel.
  */
@@ -320,7 +321,7 @@ ns_server_sync(ns_server_t *server, char *args, isc_buffer_t *text);
  * take place incrementally.
  */
 isc_result_t
-ns_server_rekey(ns_server_t *server, char *args);
+ns_server_rekey(ns_server_t *server, char *args, isc_buffer_t *text);
 
 /*%
  * Dump the current recursive queries.
index e88fb74d04e1f800a14b7d387a4fd9d796724b77..4acd0372c47efd804861ebe2258e5ad0c9bb26b2 100644 (file)
@@ -391,6 +391,9 @@ end_reserved_dispatches(ns_server_t *server, isc_boolean_t all);
 static void
 newzone_cfgctx_destroy(void **cfgp);
 
+static isc_result_t
+putstr(isc_buffer_t *b, const char *str);
+
 isc_result_t
 add_comment(FILE *fp, const char *viewname);
 
@@ -6877,7 +6880,8 @@ next_token(char **stringp, const char *delim) {
  */
 static isc_result_t
 zone_from_args(ns_server_t *server, char *args, const char *zonetxt,
-              dns_zone_t **zonep, const char **zonename, isc_boolean_t skip)
+              dns_zone_t **zonep, const char **zonename,
+              isc_buffer_t *text, isc_boolean_t skip)
 {
        char *input, *ptr;
        char *classtxt;
@@ -6887,6 +6891,7 @@ zone_from_args(ns_server_t *server, char *args, const char *zonetxt,
        isc_buffer_t buf;
        dns_view_t *view = NULL;
        dns_rdataclass_t rdclass;
+       char problem[1024] = "";
 
        REQUIRE(zonep != NULL && *zonep == NULL);
        REQUIRE(zonename == NULL || *zonename == NULL);
@@ -6938,15 +6943,24 @@ zone_from_args(ns_server_t *server, char *args, const char *zonetxt,
                                               dns_fixedname_name(&name),
                                               ISC_TF(classtxt == NULL),
                                               rdclass, zonep);
+               if (result == ISC_R_NOTFOUND)
+                       sprintf(problem, "no matching zone '%s' in any view",
+                               zonetxt);
        } else {
                result = dns_viewlist_find(&server->viewlist, viewtxt,
                                           rdclass, &view);
-               if (result != ISC_R_SUCCESS)
+               if (result != ISC_R_SUCCESS) {
+                       sprintf(problem, "no matching view '%s'", viewtxt);
                        goto fail1;
+               }
 
                result = dns_zt_find(view->zonetable, dns_fixedname_name(&name),
                                     0, NULL, zonep);
-               dns_view_detach(&view);
+               if (result != ISC_R_SUCCESS) {
+                       sprintf(problem, "no matching zone '%s' in view '%s'",
+                               zonetxt, viewtxt);
+                       goto fail1;
+               }
        }
 
        /* Partial match? */
@@ -6955,6 +6969,14 @@ zone_from_args(ns_server_t *server, char *args, const char *zonetxt,
        if (result == DNS_R_PARTIALMATCH)
                result = ISC_R_NOTFOUND;
  fail1:
+       if (result != ISC_R_SUCCESS) {
+               putstr(text, problem);
+               isc_buffer_putuint8(text, 0);
+       }
+
+       if (view != NULL)
+               dns_view_detach(&view);
+
        return (result);
 }
 
@@ -6962,13 +6984,16 @@ zone_from_args(ns_server_t *server, char *args, const char *zonetxt,
  * Act on a "retransfer" command from the command channel.
  */
 isc_result_t
-ns_server_retransfercommand(ns_server_t *server, char *args) {
+ns_server_retransfercommand(ns_server_t *server, char *args,
+                           isc_buffer_t *text)
+{
        isc_result_t result;
        dns_zone_t *zone = NULL;
        dns_zone_t *raw = NULL;
        dns_zonetype_t type;
 
-       result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
+       result = zone_from_args(server, args, NULL, &zone, NULL,
+                               text, ISC_TRUE);
        if (result != ISC_R_SUCCESS)
                return (result);
        if (zone == NULL)
@@ -6998,7 +7023,8 @@ ns_server_reloadcommand(ns_server_t *server, char *args, isc_buffer_t *text) {
        dns_zonetype_t type;
        const char *msg = NULL;
 
-       result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
+       result = zone_from_args(server, args, NULL, &zone, NULL,
+                               text, ISC_TRUE);
        if (result != ISC_R_SUCCESS)
                return (result);
        if (zone == NULL) {
@@ -7058,7 +7084,8 @@ ns_server_notifycommand(ns_server_t *server, char *args, isc_buffer_t *text) {
        dns_zone_t *zone = NULL;
        const unsigned char msg[] = "zone notify queued";
 
-       result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
+       result = zone_from_args(server, args, NULL, &zone, NULL,
+                               text, ISC_TRUE);
        if (result != ISC_R_SUCCESS)
                return (result);
        if (zone == NULL)
@@ -7083,7 +7110,8 @@ ns_server_refreshcommand(ns_server_t *server, char *args, isc_buffer_t *text) {
        const unsigned char msg2[] = "not a slave or stub zone";
        dns_zonetype_t type;
 
-       result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
+       result = zone_from_args(server, args, NULL, &zone, NULL,
+                               text, ISC_TRUE);
        if (result != ISC_R_SUCCESS)
                return (result);
        if (zone == NULL)
@@ -8259,7 +8287,7 @@ ns_server_tsiglist(ns_server_t *server, isc_buffer_t *text) {
  * Act on a "sign" or "loadkeys" command from the command channel.
  */
 isc_result_t
-ns_server_rekey(ns_server_t *server, char *args) {
+ns_server_rekey(ns_server_t *server, char *args, isc_buffer_t *text) {
        isc_result_t result;
        dns_zone_t *zone = NULL;
        dns_zonetype_t type;
@@ -8269,7 +8297,8 @@ ns_server_rekey(ns_server_t *server, char *args) {
        if (strncasecmp(args, NS_COMMAND_SIGN, strlen(NS_COMMAND_SIGN)) == 0)
            fullsign = ISC_TRUE;
 
-       result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
+       result = zone_from_args(server, args, NULL, &zone, NULL,
+                               text, ISC_TRUE);
        if (result != ISC_R_SUCCESS)
                return (result);
        if (zone == NULL)
@@ -8342,7 +8371,8 @@ ns_server_sync(ns_server_t *server, char *args, isc_buffer_t *text) {
                arg = next_token(&args, " \t");
        }
 
-       result = zone_from_args(server, args, arg, &zone, NULL, ISC_FALSE);
+       result = zone_from_args(server, args, arg, &zone, NULL,
+                               text, ISC_FALSE);
        if (result != ISC_R_SUCCESS)
                return (result);
 
@@ -8418,7 +8448,8 @@ ns_server_freeze(ns_server_t *server, isc_boolean_t freeze, char *args,
        isc_boolean_t frozen;
        const char *msg = NULL;
 
-       result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
+       result = zone_from_args(server, args, NULL, &zone, NULL,
+                               text, ISC_TRUE);
        if (result != ISC_R_SUCCESS)
                return (result);
        if (zone == NULL) {
@@ -8810,8 +8841,8 @@ ns_server_del_zone(ns_server_t *server, char *args, isc_buffer_t *text) {
                arg = next_token(&args, " \t");
        }
 
-       CHECK(zone_from_args(server, args, arg, &zone, &zonename, ISC_FALSE));
-
+       CHECK(zone_from_args(server, args, arg, &zone, &zonename,
+                            text, ISC_FALSE));
        if (zone == NULL) {
                result = ISC_R_UNEXPECTEDEND;
                goto cleanup;
@@ -9131,7 +9162,8 @@ ns_server_signing(ns_server_t *server, char *args, isc_buffer_t *text) {
        } else
                CHECK(DNS_R_SYNTAX);
 
-       CHECK(zone_from_args(server, args, NULL, &zone, NULL, ISC_FALSE));
+       CHECK(zone_from_args(server, args, NULL, &zone, NULL,
+                            text, ISC_FALSE));
        if (zone == NULL)
                CHECK(ISC_R_UNEXPECTEDEND);
 
@@ -9248,7 +9280,8 @@ ns_server_zonestatus(ns_server_t *server, char *args, isc_buffer_t *text) {
        isc_time_settoepoch(&refreshkeytime);
        isc_time_settoepoch(&resigntime);
 
-       CHECK(zone_from_args(server, args, NULL, &zone, &zonename, ISC_TRUE));
+       CHECK(zone_from_args(server, args, NULL, &zone, &zonename,
+                            text, ISC_TRUE));
        if (zone == NULL) {
                result = ISC_R_UNEXPECTEDEND;
                goto cleanup;