From ece6e87818d70c6a7bea736bb20b2c20eb8e5ae8 Mon Sep 17 00:00:00 2001 From: Witold Krecicki Date: Fri, 12 Jun 2015 10:19:29 +0200 Subject: [PATCH] rndc reconfig reports configuration errors the same way rndc reload does [RT #39635] --- CHANGES | 3 +++ bin/named/control.c | 2 +- bin/named/include/named/server.h | 2 +- bin/named/server.c | 39 +++++++++++++------------------- bin/tests/system/rndc/tests.sh | 15 ++++++++++++ 5 files changed, 36 insertions(+), 25 deletions(-) diff --git a/CHANGES b/CHANGES index 970985ef55..28f4424ecb 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4137. [bug] rndc reconfig reports configuration errors the same + way rndc reload does [RT #39635] + 4132. [cleanup] dig: added +rd as a synonym for +recurse, added +class as an unabbreviated alternative to +cl. [RT #39686] diff --git a/bin/named/control.c b/bin/named/control.c index 306bca0b27..d4d7be28db 100644 --- a/bin/named/control.c +++ b/bin/named/control.c @@ -101,7 +101,7 @@ ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) { if (command_compare(command, NS_COMMAND_RELOAD)) { result = ns_server_reloadcommand(ns_g_server, command, text); } else if (command_compare(command, NS_COMMAND_RECONFIG)) { - result = ns_server_reconfigcommand(ns_g_server, command); + result = ns_server_reconfigcommand(ns_g_server); } else if (command_compare(command, NS_COMMAND_REFRESH)) { result = ns_server_refreshcommand(ns_g_server, command, text); } else if (command_compare(command, NS_COMMAND_RETRANSFER)) { diff --git a/bin/named/include/named/server.h b/bin/named/include/named/server.h index 1680776cd9..7c6104cfa9 100644 --- a/bin/named/include/named/server.h +++ b/bin/named/include/named/server.h @@ -213,7 +213,7 @@ ns_server_reloadcommand(ns_server_t *server, char *args, isc_buffer_t *text); */ isc_result_t -ns_server_reconfigcommand(ns_server_t *server, char *args); +ns_server_reconfigcommand(ns_server_t *server); /*%< * Act on a "reconfig" command from the command channel. */ diff --git a/bin/named/server.c b/bin/named/server.c index b3ecb8101a..eb02aef08f 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -6474,25 +6474,6 @@ reload(ns_server_t *server) { return (result); } -static void -reconfig(ns_server_t *server) { - isc_result_t result; - CHECK(loadconfig(server)); - - result = load_new_zones(server, ISC_FALSE); - if (result == ISC_R_SUCCESS) - isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, - NS_LOGMODULE_SERVER, ISC_LOG_INFO, - "any newly configured zones are now loaded"); - else - isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, - NS_LOGMODULE_SERVER, ISC_LOG_ERROR, - "loading new zones failed: %s", - isc_result_totext(result)); - - cleanup: ; -} - /* * Handle a reload event (from SIGHUP). */ @@ -6730,11 +6711,23 @@ ns_server_reloadcommand(ns_server_t *server, char *args, isc_buffer_t *text) { * Act on a "reconfig" command from the command channel. */ isc_result_t -ns_server_reconfigcommand(ns_server_t *server, char *args) { - UNUSED(args); +ns_server_reconfigcommand(ns_server_t *server) { + isc_result_t result; - reconfig(server); - return (ISC_R_SUCCESS); + CHECK(loadconfig(server)); + + result = load_new_zones(server, ISC_FALSE); + if (result == ISC_R_SUCCESS) + isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, + NS_LOGMODULE_SERVER, ISC_LOG_INFO, + "any newly configured zones are now loaded"); + else + isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, + NS_LOGMODULE_SERVER, ISC_LOG_ERROR, + "loading new zones failed: %s", + isc_result_totext(result)); +cleanup: + return (result); } /* diff --git a/bin/tests/system/rndc/tests.sh b/bin/tests/system/rndc/tests.sh index f54cb2a82a..1fcd2d7c20 100644 --- a/bin/tests/system/rndc/tests.sh +++ b/bin/tests/system/rndc/tests.sh @@ -275,5 +275,20 @@ grep "query: foo9876.bind CH TXT" ns3/named.run > /dev/null && ret=1 if [ $ret != 0 ]; then echo "I:failed"; fi status=`expr $status + $ret` +echo "I:test 'rndc reconfig' with a broken config" +ret=0 +$RNDC -s 10.53.0.3 -p 9953 -c ../common/rndc.conf reconfig > /dev/null || ret=1 +sleep 1 +mv ns3/named.conf ns3/named.conf.save +echo "error error error" >> ns3/named.conf +$RNDC -s 10.53.0.3 -p 9953 -c ../common/rndc.conf reconfig > rndc.output 2>&1 && ret=1 +grep "rndc: 'reconfig' failed: unexpected token" rndc.output > /dev/null || ret=1 +mv ns3/named.conf.save ns3/named.conf +sleep 1 +$RNDC -s 10.53.0.3 -p 9953 -c ../common/rndc.conf reconfig > /dev/null || ret=1 +sleep 1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + echo "I:exit status: $status" exit $status