From 2a71a21346ce6a098b7daf98358d5bdced8e6eb6 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Mon, 11 Oct 2004 05:30:20 +0000 Subject: [PATCH] 1710. [func] 'rndc notify zone [class [view]]' resend the NOTIFY messages for the specified zone. [RT #9479] --- CHANGES | 3 ++- bin/named/control.c | 4 +++- bin/named/include/named/control.h | 3 ++- bin/named/include/named/server.h | 8 +++++++- bin/named/server.c | 25 ++++++++++++++++++++++++- bin/rndc/rndc.c | 4 +++- 6 files changed, 41 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 06c6b6b740..9fa7c71fad 100644 --- a/CHANGES +++ b/CHANGES @@ -82,7 +82,8 @@ 1711. [func] 'rndc unfreeze' has been deprecated by 'rndc thaw'. -1710. [placeholder] rt9479 +1710. [func] 'rndc notify zone [class [view]]' resend the NOTIFY + messages for the specified zone. [RT #9479] 1709. [port] solaris: add SMF support from Sun. diff --git a/bin/named/control.c b/bin/named/control.c index f61bb957e7..917784868b 100644 --- a/bin/named/control.c +++ b/bin/named/control.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: control.c,v 1.21 2004/09/03 03:42:58 marka Exp $ */ +/* $Id: control.c,v 1.22 2004/10/11 05:30:15 marka Exp $ */ #include @@ -132,6 +132,8 @@ ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) { isc_timermgr_poke(ns_g_timermgr); } else if (command_compare(command, NS_COMMAND_NULL)) { result = ISC_R_SUCCESS; + } else if (command_compare(command, NS_COMMAND_NOTIFY)) { + result = ns_server_notifycommand(ns_g_server, command, text); } else { isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_CONTROL, ISC_LOG_WARNING, diff --git a/bin/named/include/named/control.h b/bin/named/include/named/control.h index 1c9a813173..8e2b2cdaf7 100644 --- a/bin/named/include/named/control.h +++ b/bin/named/include/named/control.h @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: control.h,v 1.15 2004/09/03 03:42:58 marka Exp $ */ +/* $Id: control.h,v 1.16 2004/10/11 05:30:19 marka Exp $ */ #ifndef NAMED_CONTROL_H #define NAMED_CONTROL_H 1 @@ -51,6 +51,7 @@ #define NS_COMMAND_TIMERPOKE "timerpoke" #define NS_COMMAND_RECURSING "recursing" #define NS_COMMAND_NULL "null" +#define NS_COMMAND_NOTIFY "notify" isc_result_t ns_controls_create(ns_server_t *server, ns_controls_t **ctrlsp); diff --git a/bin/named/include/named/server.h b/bin/named/include/named/server.h index 1d48e4bd5f..2aafc9cccc 100644 --- a/bin/named/include/named/server.h +++ b/bin/named/include/named/server.h @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: server.h,v 1.74 2004/07/20 07:13:34 marka Exp $ */ +/* $Id: server.h,v 1.75 2004/10/11 05:30:19 marka Exp $ */ #ifndef NAMED_SERVER_H #define NAMED_SERVER_H 1 @@ -141,6 +141,12 @@ ns_server_reconfigcommand(ns_server_t *server, char *args); * Act on a "reconfig" command from the command channel. */ +isc_result_t +ns_server_notifycommand(ns_server_t *server, char *args, isc_buffer_t *text); +/* + * Act on a "notify" command from the command channel. + */ + isc_result_t ns_server_refreshcommand(ns_server_t *server, char *args, isc_buffer_t *text); /* diff --git a/bin/named/server.c b/bin/named/server.c index 7688400d1b..c20ed69db8 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: server.c,v 1.430 2004/10/05 04:38:17 marka Exp $ */ +/* $Id: server.c,v 1.431 2004/10/11 05:30:16 marka Exp $ */ #include @@ -3438,6 +3438,29 @@ ns_server_reconfigcommand(ns_server_t *server, char *args) { return (ISC_R_SUCCESS); } +/* + * Act on a "notify" command from the command channel. + */ +isc_result_t +ns_server_notifycommand(ns_server_t *server, char *args, isc_buffer_t *text) { + isc_result_t result; + dns_zone_t *zone = NULL; + const unsigned char msg[] = "zone notify queued"; + + result = zone_from_args(server, args, &zone); + if (result != ISC_R_SUCCESS) + return (result); + if (zone == NULL) + return (ISC_R_UNEXPECTEDEND); + + dns_zone_notify(zone); + dns_zone_detach(&zone); + if (sizeof(msg) <= isc_buffer_availablelength(text)) + isc_buffer_putmem(text, msg, sizeof(msg)); + + return (ISC_R_SUCCESS); +} + /* * Act on a "refresh" command from the command channel. */ diff --git a/bin/rndc/rndc.c b/bin/rndc/rndc.c index 0430148d5c..d2f16edc56 100644 --- a/bin/rndc/rndc.c +++ b/bin/rndc/rndc.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rndc.c,v 1.99 2004/09/03 03:42:58 marka Exp $ */ +/* $Id: rndc.c,v 1.100 2004/10/11 05:30:20 marka Exp $ */ /* * Principal Author: DCL @@ -104,6 +104,8 @@ command is one of the following:\n\ Suspend updates to a dynamic zone.\n\ thaw zone [class [view]]\n\ Enable updates to a frozen dynamic zone and reload it.\n\ + notify zone [class [view]]\n\ + Resend NOTIFY messages for the zone.\n\ reconfig Reload configuration file and new zones only.\n\ stats Write server statistics to the statistics file.\n\ querylog Toggle query logging.\n\