2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-03 08:05:21 +00:00

508. [func] Add support for write of zone files on shutdown.

This commit is contained in:
Mark Andrews
2000-10-05 10:42:40 +00:00
parent 2a37aa188c
commit 2a34beb5ab
5 changed files with 42 additions and 8 deletions

View File

@@ -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"

View File

@@ -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 */

View File

@@ -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 <config.h>
#include <isc/app.h>
#include <isc/event.h>
#include <isc/util.h>
@@ -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,

View File

@@ -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 <config.h>
@@ -1668,23 +1668,33 @@ 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);
if (flush)
dns_view_flushanddetach(&view);
else
dns_view_detach(&view);
}
@@ -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;
}

View File

@@ -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)