]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2031. [bug] Emit a error message when "rndc refresh" is called on
authorMark Andrews <marka@isc.org>
Wed, 24 May 2006 04:30:24 +0000 (04:30 +0000)
committerMark Andrews <marka@isc.org>
Wed, 24 May 2006 04:30:24 +0000 (04:30 +0000)
                        a non slave/stub zone. [RT # 16073]

CHANGES
bin/named/server.c

diff --git a/CHANGES b/CHANGES
index 052cd024314899283265631296f390cf0e813fd0..8f164ca3254125f4368b89e979d8041d55c7ccd2 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2031.  [bug]           Emit a error message when "rndc refresh" is called on
+                       a non slave/stub zone. [RT # 16073]
+
 2030.  [bug]           We were being overly conservative when disabling
                        openssl engine support. [RT #16030]
 
index 0c24f7572eeafaefeabbadb9072e1b92292a9069..f29321e5106016b902e715bae5112e732b6ba8a0 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: server.c,v 1.339.2.15.2.69 2006/02/28 06:32:53 marka Exp $ */
+/* $Id: server.c,v 1.339.2.15.2.70 2006/05/24 04:30:24 marka Exp $ */
 
 #include <config.h>
 
@@ -3460,20 +3460,29 @@ isc_result_t
 ns_server_refreshcommand(ns_server_t *server, char *args, isc_buffer_t *text) {
        isc_result_t result;
        dns_zone_t *zone = NULL;
-       const unsigned char msg[] = "zone refresh queued";
+       const unsigned char msg1[] = "zone refresh queued";
+       const unsigned char msg2[] = "not a slave or stub zone";
+       dns_zonetype_t type;
 
        result = zone_from_args(server, args, &zone);
        if (result != ISC_R_SUCCESS)
                return (result);
        if (zone == NULL)
                return (ISC_R_UNEXPECTEDEND);
-       
-       dns_zone_refresh(zone);
-       dns_zone_detach(&zone);
-       if (sizeof(msg) <= isc_buffer_availablelength(text))
-               isc_buffer_putmem(text, msg, sizeof(msg));
 
-       return (ISC_R_SUCCESS);
+       type = dns_zone_gettype(zone);
+       if (type == dns_zone_slave || type == dns_zone_stub) {
+               dns_zone_refresh(zone);
+               dns_zone_detach(&zone);
+               if (sizeof(msg1) <= isc_buffer_availablelength(text))
+                       isc_buffer_putmem(text, msg1, sizeof(msg1));
+               return (ISC_R_SUCCESS);
+       }
+               
+       dns_zone_detach(&zone);
+       if (sizeof(msg2) <= isc_buffer_availablelength(text))
+               isc_buffer_putmem(text, msg2, sizeof(msg2));
+       return (ISC_R_FAILURE);
 }      
 
 isc_result_t