} 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)) {
} 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);
*/
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.
*/
/*%
}
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;
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) {
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);
}