From 2a34beb5ab81dd9420cb1b007df32c08d93eda81 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 5 Oct 2000 10:42:40 +0000 Subject: [PATCH] 508. [func] Add support for write of zone files on shutdown. --- bin/named/include/named/omapi.h | 5 ++++- bin/named/include/named/server.h | 9 ++++++++- bin/named/omapi.c | 13 ++++++++++++- bin/named/server.c | 17 ++++++++++++++--- bin/rndc/rndc.c | 6 ++++-- 5 files changed, 42 insertions(+), 8 deletions(-) diff --git a/bin/named/include/named/omapi.h b/bin/named/include/named/omapi.h index 33b8609919..3408fd65b7 100644 --- a/bin/named/include/named/omapi.h +++ b/bin/named/include/named/omapi.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: omapi.h,v 1.10 2000/08/01 01:12:14 tale Exp $ */ +/* $Id: omapi.h,v 1.11 2000/10/05 10:42:38 marka Exp $ */ #ifndef NAMED_OMAPI_H #define NAMED_OMAPI_H 1 @@ -32,6 +32,9 @@ */ #define NS_OMAPI_CONTROL "control" + +#define NS_OMAPI_COMMAND_STOP "stop" +#define NS_OMAPI_COMMAND_HALT "halt" #define NS_OMAPI_COMMAND_RELOAD "reload" #define NS_OMAPI_COMMAND_RELOADCONFIG "reload-config" #define NS_OMAPI_COMMAND_RELOADZONES "reload-zones" diff --git a/bin/named/include/named/server.h b/bin/named/include/named/server.h index a7e10155f3..cafbf4a57c 100644 --- a/bin/named/include/named/server.h +++ b/bin/named/include/named/server.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: server.h,v 1.37 2000/09/22 00:13:08 gson Exp $ */ +/* $Id: server.h,v 1.38 2000/10/05 10:42:39 marka Exp $ */ #ifndef NAMED_SERVER_H #define NAMED_SERVER_H 1 @@ -63,6 +63,8 @@ struct ns_server { isc_mutex_t reload_event_lock; isc_event_t * reload_event; + + isc_boolean_t flushonshutdown; }; #define NS_SERVER_MAGIC 0x53564552 /* SVER */ @@ -92,5 +94,10 @@ ns_server_reloadwanted(ns_server_t *server); * is ignored. */ +void +ns_server_flushonshutdown(ns_server_t *server); +/* + * Inform the server that the zones should be flushed to disk on shutdown. + */ #endif /* NAMED_SERVER_H */ diff --git a/bin/named/omapi.c b/bin/named/omapi.c index 796076545b..007ecd9a8b 100644 --- a/bin/named/omapi.c +++ b/bin/named/omapi.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: omapi.c,v 1.16 2000/08/01 01:11:55 tale Exp $ */ +/* $Id: omapi.c,v 1.17 2000/10/05 10:42:35 marka Exp $ */ /* * Principal Author: DCL @@ -23,6 +23,7 @@ #include +#include #include #include @@ -79,6 +80,16 @@ control_setvalue(omapi_object_t *handle, omapi_string_t *name, result = ISC_R_SUCCESS; + } else if (omapi_string_strcmp(name,NS_OMAPI_COMMAND_HALT) == 0) { + if (omapi_data_getint(value) != 0) + isc_app_shutdown(); + result = ISC_R_SUCCESS; + } else if (omapi_string_strcmp(name,NS_OMAPI_COMMAND_STOP) == 0) { + if (omapi_data_getint(value) != 0) { + ns_server_flushonshutdown(ns_g_server); + isc_app_shutdown(); + } + result = ISC_R_SUCCESS; } else if (omapi_string_strcmp(name, NS_OMAPI_COMMAND_RELOADCONFIG) == 0 || omapi_string_strcmp(name, diff --git a/bin/named/server.c b/bin/named/server.c index 9048db48fb..25fbc2baf1 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: server.c,v 1.224 2000/10/04 23:18:58 bwelling Exp $ */ +/* $Id: server.c,v 1.225 2000/10/05 10:42:36 marka Exp $ */ #include @@ -1668,24 +1668,34 @@ run_server(isc_task_t *task, isc_event_t *event) { ISC_LOG_INFO, "running"); } +void +ns_server_flushonshutdown(ns_server_t *server) { + server->flushonshutdown = ISC_TRUE; +} + static void shutdown_server(isc_task_t *task, isc_event_t *event) { dns_view_t *view, *view_next; ns_server_t *server = (ns_server_t *)event->ev_arg; + isc_boolean_t flush = server->flushonshutdown; UNUSED(task); RWLOCK(&server->conflock, isc_rwlocktype_write); isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, - ISC_LOG_INFO, "shutting down"); + ISC_LOG_INFO, "shutting down%s", + flush ? ": flushing changes" : ""); for (view = ISC_LIST_HEAD(server->viewlist); view != NULL; view = view_next) { view_next = ISC_LIST_NEXT(view, link); ISC_LIST_UNLINK(server->viewlist, view, link); - dns_view_detach(&view); + if (flush) + dns_view_flushanddetach(&view); + else + dns_view_detach(&view); } isc_timer_detach(&server->interface_timer); @@ -1781,6 +1791,7 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) { CHECKFATAL(dns_loadmgr_create(ns_g_mctx, &server->loadmgr), "dns_loadmgr_create"); + server->flushonshutdown = ISC_FALSE; server->magic = NS_SERVER_MAGIC; *serverp = server; } diff --git a/bin/rndc/rndc.c b/bin/rndc/rndc.c index 990808d05f..c4e834347f 100644 --- a/bin/rndc/rndc.c +++ b/bin/rndc/rndc.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rndc.c,v 1.24 2000/08/02 21:03:50 tale Exp $ */ +/* $Id: rndc.c,v 1.25 2000/10/05 10:42:40 marka Exp $ */ /* * Principal Author: DCL @@ -483,10 +483,12 @@ main(int argc, char **argv) { result = ISC_R_NOTIMPLEMENTED; } else if (strcmp(command, "stop") == 0) { - result = ISC_R_NOTIMPLEMENTED; + result = send_command(omapimgr, command); } else if (strcmp(command, "trace") == 0) { result = ISC_R_NOTIMPLEMENTED; + } else { + result = send_command(omapimgr, command); } if (result == ISC_R_NOTIMPLEMENTED)