From c4b7dce376bc70c813b32c30104388fb0eebe6da Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Wed, 14 Jul 2021 18:54:01 -0700 Subject: [PATCH] Reduce code duplication combined named_server_togglequerylog() and named_server_toggleresponselog() into named_server_setortoggle(). --- bin/named/control.c | 8 ++++-- bin/named/include/named/server.h | 23 ++++++++------- bin/named/server.c | 49 ++++---------------------------- 3 files changed, 24 insertions(+), 56 deletions(-) diff --git a/bin/named/control.c b/bin/named/control.c index d430d903b0..a1a66a4eb3 100644 --- a/bin/named/control.c +++ b/bin/named/control.c @@ -247,7 +247,9 @@ named_control_docommand(isccc_sexpr_t *message, bool readonly, } else if (command_compare(command, NAMED_COMMAND_NULL)) { result = ISC_R_SUCCESS; } else if (command_compare(command, NAMED_COMMAND_QUERYLOG)) { - result = named_server_togglequerylog(named_g_server, lex); + result = named_server_setortoggle(named_g_server, + "query logging", + NS_SERVER_LOGQUERIES, lex); } else if (command_compare(command, NAMED_COMMAND_RECONFIG)) { result = named_server_reconfigcommand(named_g_server); } else if (command_compare(command, NAMED_COMMAND_RECURSING)) { @@ -257,7 +259,9 @@ named_control_docommand(isccc_sexpr_t *message, bool readonly, } else if (command_compare(command, NAMED_COMMAND_RELOAD)) { result = named_server_reloadcommand(named_g_server, lex, text); } else if (command_compare(command, NAMED_COMMAND_RESPONSELOG)) { - result = named_server_toggleresponselog(named_g_server, lex); + result = named_server_setortoggle(named_g_server, + "response logging", + NS_SERVER_LOGRESPONSES, lex); } else if (command_compare(command, NAMED_COMMAND_RETRANSFER)) { result = named_server_retransfercommand(named_g_server, lex, text); diff --git a/bin/named/include/named/server.h b/bin/named/include/named/server.h index 9bf79da718..90375260b8 100644 --- a/bin/named/include/named/server.h +++ b/bin/named/include/named/server.h @@ -181,17 +181,20 @@ named_server_retransfercommand(named_server_t *server, isc_lex_t *lex, */ isc_result_t -named_server_togglequerylog(named_server_t *server, isc_lex_t *lex); +named_server_setortoggle(named_server_t *server, const char *optname, + unsigned int option, isc_lex_t *lex); /*%< - * Enable/disable logging of queries. (Takes "yes" or "no" argument, - * but can also be used as a toggle for backward comptibility.) - */ - -isc_result_t -named_server_toggleresponselog(named_server_t *server, isc_lex_t *lex); -/*%< - * Enable/disable logging of responses. (Takes "yes" or "no" argument, - * but can also be used as a toggle for backward comptibility.) + * Enable/disable, or toggle, a server option via the command channel. + * 'option' is the option value to be changed (for example, + * NS_SERVER_LOGQUERIES or NS_SERVER_LOGRESPOSNES) and 'optname' is the + * option's human-readable name for logging purposes ("query logging" + * or "response logging"). + * + * If an explicit argument to enable the option was provided + * (i.e., "on", "enable", "true", or "yes") or an explicit argument + * to disable it ("off", "disable", "false", or "no"), it will be used. + * + * If no argument is provided, the option's current state will be reversed. */ /*% diff --git a/bin/named/server.c b/bin/named/server.c index 1fd36d01e8..35b3ac9253 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -10673,7 +10673,8 @@ named_server_refreshcommand(named_server_t *server, isc_lex_t *lex, } isc_result_t -named_server_togglequerylog(named_server_t *server, isc_lex_t *lex) { +named_server_setortoggle(named_server_t *server, const char *optname, + unsigned int option, isc_lex_t *lex) { bool prev, value; char *ptr = NULL; @@ -10683,7 +10684,7 @@ named_server_togglequerylog(named_server_t *server, isc_lex_t *lex) { return (ISC_R_UNEXPECTEDEND); } - prev = ns_server_getoption(server->sctx, NS_SERVER_LOGQUERIES); + prev = ns_server_getoption(server->sctx, option); ptr = next_token(lex, NULL); if (ptr == NULL) { @@ -10704,50 +10705,10 @@ named_server_togglequerylog(named_server_t *server, isc_lex_t *lex) { return (ISC_R_SUCCESS); } - ns_server_setoption(server->sctx, NS_SERVER_LOGQUERIES, value); + ns_server_setoption(server->sctx, option, value); isc_log_write(NAMED_LOGCATEGORY_GENERAL, NAMED_LOGMODULE_SERVER, - ISC_LOG_INFO, "query logging is now %s", - value ? "on" : "off"); - return (ISC_R_SUCCESS); -} - -isc_result_t -named_server_toggleresponselog(named_server_t *server, isc_lex_t *lex) { - bool prev, value; - char *ptr = NULL; - - /* Skip the command name. */ - ptr = next_token(lex, NULL); - if (ptr == NULL) { - return (ISC_R_UNEXPECTEDEND); - } - - prev = ns_server_getoption(server->sctx, NS_SERVER_LOGRESPONSES); - - ptr = next_token(lex, NULL); - if (ptr == NULL) { - value = !prev; - } else if (!strcasecmp(ptr, "on") || !strcasecmp(ptr, "yes") || - !strcasecmp(ptr, "enable") || !strcasecmp(ptr, "true")) - { - value = true; - } else if (!strcasecmp(ptr, "off") || !strcasecmp(ptr, "no") || - !strcasecmp(ptr, "disable") || !strcasecmp(ptr, "false")) - { - value = false; - } else { - return (DNS_R_SYNTAX); - } - - if (value == prev) { - return (ISC_R_SUCCESS); - } - - ns_server_setoption(server->sctx, NS_SERVER_LOGRESPONSES, value); - - isc_log_write(NAMED_LOGCATEGORY_GENERAL, NAMED_LOGMODULE_SERVER, - ISC_LOG_INFO, "response logging is now %s", + ISC_LOG_INFO, "%s is now %s", optname, value ? "on" : "off"); return (ISC_R_SUCCESS); }