2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-04 00:25:29 +00:00

add 'rndc -t' option to set timeout

Allow an arbitrary TCP timeout value to be specified when running
rndc, so that commands that take a long time to execute (for example,
reloading a very large configuration) can be given time to do so.
This commit is contained in:
Evan Hunt
2023-05-03 14:28:37 -07:00
parent 7a2784addd
commit 922a390852
2 changed files with 20 additions and 4 deletions

View File

@@ -82,6 +82,7 @@ static char program[256];
static uint32_t serial; static uint32_t serial;
static bool quiet = false; static bool quiet = false;
static bool showresult = false; static bool showresult = false;
static int32_t timeout = RNDC_TIMEOUT;
static void static void
rndc_startconnect(isc_sockaddr_t *addr); rndc_startconnect(isc_sockaddr_t *addr);
@@ -222,7 +223,7 @@ Version: %s\n",
exit(status); exit(status);
} }
#define CMDLINE_FLAGS "46b:c:hk:Mmp:qrs:Vy:" #define CMDLINE_FLAGS "46b:c:hk:Mmp:qrs:t:Vy:"
static void static void
preparse_args(int argc, char **argv) { preparse_args(int argc, char **argv) {
@@ -527,7 +528,7 @@ rndc_startconnect(isc_sockaddr_t *addr) {
} }
isc_nm_tcpconnect(netmgr, local, addr, rndc_connected, &rndc_ccmsg, isc_nm_tcpconnect(netmgr, local, addr, rndc_connected, &rndc_ccmsg,
RNDC_TIMEOUT); timeout);
} }
static void static void
@@ -827,7 +828,7 @@ main(int argc, char **argv) {
const char *keyname = NULL; const char *keyname = NULL;
struct in_addr in; struct in_addr in;
struct in6_addr in6; struct in6_addr in6;
char *p; char *p = NULL;
size_t argslen; size_t argslen;
int ch; int ch;
int i; int i;
@@ -913,6 +914,15 @@ main(int argc, char **argv) {
servername = isc_commandline_argument; servername = isc_commandline_argument;
break; break;
case 't':
timeout = strtol(isc_commandline_argument, &p, 10);
if (*p != '\0' || timeout < 0 || timeout > 86400) {
fatal("invalid timeout '%s'",
isc_commandline_argument);
}
timeout *= 1000;
break;
case 'V': case 'V':
verbose = true; verbose = true;
break; break;
@@ -956,7 +966,7 @@ main(int argc, char **argv) {
isc_managers_create(&rndc_mctx, 1, &loopmgr, &netmgr); isc_managers_create(&rndc_mctx, 1, &loopmgr, &netmgr);
isc_loopmgr_setup(loopmgr, rndc_start, NULL); isc_loopmgr_setup(loopmgr, rndc_start, NULL);
isc_nm_settimeouts(netmgr, RNDC_TIMEOUT, RNDC_TIMEOUT, RNDC_TIMEOUT, 0); isc_nm_settimeouts(netmgr, timeout, timeout, timeout, 0);
isc_log_create(rndc_mctx, &log, &logconfig); isc_log_create(rndc_mctx, &log, &logconfig);
isc_log_setcontext(log); isc_log_setcontext(log);

View File

@@ -97,6 +97,12 @@ Options
after executing the requested command (e.g., ISC_R_SUCCESS, after executing the requested command (e.g., ISC_R_SUCCESS,
ISC_R_FAILURE, etc.). ISC_R_FAILURE, etc.).
.. option:: -t timeout
This option sets the idle timeout period for :program:`rndc` to
``timeout`` seconds. The default is 60 seconds, and the maximum settable
value is 86400 seconds (1 day). If set to 0, there is no timeout.
.. option:: -V .. option:: -V
This option enables verbose logging. This option enables verbose logging.