control.c revision 72ddc4cef9c6a6de53aae530dea1ddbb90631131
7d98a1783f222964bcde7d56dab77b822706204dBob Halley * Copyright (C) 2001, 2002 Internet Software Consortium.
4cd3d6df39927315e3fadc07a8da3788175f4195Andreas Gustafsson * Permission to use, copy, modify, and distribute this software for any
4cd3d6df39927315e3fadc07a8da3788175f4195Andreas Gustafsson * purpose with or without fee is hereby granted, provided that the above
4cd3d6df39927315e3fadc07a8da3788175f4195Andreas Gustafsson * copyright notice and this permission notice appear in all copies.
15a44745412679c30a6d022733925af70a38b715David Lawrence * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
15a44745412679c30a6d022733925af70a38b715David Lawrence * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
15a44745412679c30a6d022733925af70a38b715David Lawrence * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
15a44745412679c30a6d022733925af70a38b715David Lawrence * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
15a44745412679c30a6d022733925af70a38b715David Lawrence * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
15a44745412679c30a6d022733925af70a38b715David Lawrence * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
15a44745412679c30a6d022733925af70a38b715David Lawrence * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
15a44745412679c30a6d022733925af70a38b715David Lawrence * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
35a1d7c80e14927d124d6ea6926cc29c64232c80Andreas Gustafsson/* $Id: control.c,v 1.18 2003/07/17 06:24:43 marka Exp $ */
4cd3d6df39927315e3fadc07a8da3788175f4195Andreas Gustafssoncommand_compare(const char *text, const char *command) {
4cd3d6df39927315e3fadc07a8da3788175f4195Andreas Gustafsson unsigned int commandlen = strlen(command);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson if (strncasecmp(text, command, commandlen) == 0 &&
4cd3d6df39927315e3fadc07a8da3788175f4195Andreas Gustafsson * This function is called to process the incoming command
4cd3d6df39927315e3fadc07a8da3788175f4195Andreas Gustafsson * when a control channel message is received.
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafssonns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson data = isccc_alist_lookup(message, "_data");
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson * No data section.
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson result = isccc_cc_lookupstring(data, "type", &command);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson * We have no idea what this is.
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson "received control channel command '%s'",
f4c0131a46ea183238027ef9c3400cc6079b8b85Andreas Gustafsson * Compare the 'command' parameter against all known control commands.
f4c0131a46ea183238027ef9c3400cc6079b8b85Andreas Gustafsson if (command_compare(command, NS_COMMAND_RELOAD)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson result = ns_server_reloadcommand(ns_g_server, command, text);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_RECONFIG)) {
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff result = ns_server_reconfigcommand(ns_g_server, command);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_REFRESH)) {
f4c0131a46ea183238027ef9c3400cc6079b8b85Andreas Gustafsson result = ns_server_refreshcommand(ns_g_server, command, text);
f4c0131a46ea183238027ef9c3400cc6079b8b85Andreas Gustafsson } else if (command_compare(command, NS_COMMAND_RETRANSFER)) {
f4c0131a46ea183238027ef9c3400cc6079b8b85Andreas Gustafsson result = ns_server_retransfercommand(ns_g_server, command);
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff } else if (command_compare(command, NS_COMMAND_HALT)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson ns_server_flushonshutdown(ns_g_server, ISC_FALSE);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_STOP)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson ns_server_flushonshutdown(ns_g_server, ISC_TRUE);
553727079c69cacf56aaa8fd2722d04bfbbc8ce1David Lawrence } else if (command_compare(command, NS_COMMAND_DUMPSTATS)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson result = ns_server_dumpstats(ns_g_server);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_QUERYLOG)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson result = ns_server_togglequerylog(ns_g_server);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_DUMPDB)) {
f4c0131a46ea183238027ef9c3400cc6079b8b85Andreas Gustafsson } else if (command_compare(command, NS_COMMAND_TRACE)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson result = ns_server_setdebuglevel(ns_g_server, command);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_NOTRACE)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson isc_log_setdebuglevel(ns_g_lctx, ns_g_debuglevel);
553727079c69cacf56aaa8fd2722d04bfbbc8ce1David Lawrence } else if (command_compare(command, NS_COMMAND_FLUSH)) {
94296c8d5b9c3c1ed13cf91c1f7b1d76d7fa0607David Lawrence result = ns_server_flushcache(ns_g_server, command);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_FLUSHNAME)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson result = ns_server_flushname(ns_g_server, command);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_STATUS)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson result = ns_server_status(ns_g_server, text);
f2fdfe7c42f3b10f3653f851ce5a0a90ee5ac1f9David Lawrence } else if (command_compare(command, NS_COMMAND_FREEZE)) {
f2fdfe7c42f3b10f3653f851ce5a0a90ee5ac1f9David Lawrence result = ns_server_freeze(ns_g_server, ISC_TRUE, command);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_UNFREEZE)) {
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson result = ns_server_freeze(ns_g_server, ISC_FALSE, command);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_RECURSING)) {
ea398d3eba82ec4d18a636e4e6e9e120e337dad2Andreas Gustafsson result = ns_server_dumprecursing(ns_g_server);
8803b0510877fd08044542edbb55e2be72fae36fAndreas Gustafsson } else if (command_compare(command, NS_COMMAND_TIMERPOKE)) {
94296c8d5b9c3c1ed13cf91c1f7b1d76d7fa0607David Lawrence } else if (command_compare(command, NS_COMMAND_NULL)) {
f4c0131a46ea183238027ef9c3400cc6079b8b85Andreas Gustafsson isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
4cd3d6df39927315e3fadc07a8da3788175f4195Andreas Gustafsson "unknown control channel command '%s'",