char * secrootsfile; /*%< Secroots file name */
char * bindkeysfile; /*%< bind.keys file name */
char * recfile; /*%< Recursive file name */
- bool version_set; /*%< User has set version */
+ bool version_set; /*%< User has set version */
char * version; /*%< User-specified version */
- bool hostname_set; /*%< User has set hostname */
+ bool hostname_set; /*%< User has set hostname */
char * hostname; /*%< User-specified hostname */
/* Server data structures. */
isc_mutex_t reload_event_lock;
isc_event_t * reload_event;
- bool reload_in_progress;
+ named_reload_t reload_status;
- bool flushonshutdown;
+ bool flushonshutdown;
named_cachelist_t cachelist; /*%< Possibly shared caches */
isc_stats_t * zonestats; /*% Zone management stats */
dns_name_t *session_keyname;
unsigned int session_keyalg;
uint16_t session_keybits;
- bool interface_auto;
+ bool interface_auto;
unsigned char secret[32]; /*%< Server Cookie Secret */
ns_cookiealg_t cookiealg;
"FIPS mode is %s",
FIPS_mode() ? "enabled" : "disabled");
#endif
- server->reload_in_progress = false;
+ server->reload_status = NAMED_RELOAD_DONE;
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_SERVER, ISC_LOG_NOTICE,
CHECKFATAL(server->reload_event == NULL ?
ISC_R_NOMEMORY : ISC_R_SUCCESS,
"allocating reload event");
- server->reload_in_progress = true;
+ server->reload_status = NAMED_RELOAD_IN_PROGRESS;
/*
* Setup the server task, which is responsible for coordinating
NAMED_LOGMODULE_SERVER, ISC_LOG_ERROR,
"reloading configuration failed: %s",
isc_result_totext(result));
+ server->reload_status = NAMED_RELOAD_FAILED;
}
return (result);
static isc_result_t
reload(named_server_t *server) {
isc_result_t result;
- server->reload_in_progress = true;
+ server->reload_status = NAMED_RELOAD_IN_PROGRESS;
CHECK(loadconfig(server));
result = load_zones(server, false, false);
- if (result == ISC_R_SUCCESS)
+ if (result == ISC_R_SUCCESS) {
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_SERVER, ISC_LOG_INFO,
"reloading zones succeeded");
- else
+ } else {
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_SERVER, ISC_LOG_ERROR,
"reloading zones failed: %s",
isc_result_totext(result));
-
+ server->reload_status = NAMED_RELOAD_FAILED;
+ }
cleanup:
return (result);
}
isc_result_t
named_server_reconfigcommand(named_server_t *server) {
isc_result_t result;
- server->reload_in_progress = true;
+ server->reload_status = NAMED_RELOAD_IN_PROGRESS;
CHECK(loadconfig(server));
result = load_zones(server, false, true);
- if (result == ISC_R_SUCCESS)
+ if (result == ISC_R_SUCCESS) {
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_SERVER, ISC_LOG_INFO,
"scheduled loading new zones");
- else
+ } else {
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_SERVER, ISC_LOG_ERROR,
"loading new zones failed: %s",
isc_result_totext(result));
+ server->reload_status = NAMED_RELOAD_FAILED;
+ }
cleanup:
return (result);
}
isc_quota_getmax(&server->sctx->tcpquota));
CHECK(putstr(text, line));
- if (server->reload_in_progress) {
- CHECK(putstr(text, "reload/reconfig in progress"));
+ if (server->reload_status != NAMED_RELOAD_DONE) {
+ snprintf(line, sizeof(line), "reload/reconfig %s\n",
+ server->reload_status == NAMED_RELOAD_FAILED
+ ? "failed" : "in progress");
+ CHECK(putstr(text, line));
}
CHECK(putstr(text, "server is up and running"));
echo "error error error" >> ns4/named.conf
$RNDC -s 10.53.0.4 -p ${EXTRAPORT6} -c ns4/key6.conf reconfig > rndc.out.1.test$n 2>&1 && ret=1
grep "rndc: 'reconfig' failed: unexpected token" rndc.out.1.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo_i "failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo_i "check rndc status reports failure ($n)"
+ret=0
+$RNDC -s 10.53.0.4 -p ${EXTRAPORT6} -c ns4/key6.conf status > rndc.out.1.test$n 2>&1 || ret=1
+grep "reload/reconfig failed" rndc.out.1.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo_i "failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo_i "restore working config ($n)"
+ret=0
mv ns4/named.conf.save ns4/named.conf
sleep 1
$RNDC -s 10.53.0.4 -p ${EXTRAPORT6} -c ns4/key6.conf reconfig > /dev/null || ret=1
if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret`
+n=`expr $n + 1`
+echo_i "check 'rndc status' 'reload/reconfig failure' is cleared after successful reload/reconfig ($n)"
+ret=0
+$RNDC -s 10.53.0.4 -p ${EXTRAPORT6} -c ns4/key6.conf status > rndc.out.1.test$n 2>&1 || ret=1
+grep "reload/reconfig failed" rndc.out.1.test$n > /dev/null && ret=1
+if [ $ret != 0 ]; then echo_i "failed"; fi
+status=`expr $status + $ret`
+
n=`expr $n + 1`
echo_i "test read-only control channel access ($n)"
ret=0