From ad030332bdb14b5c0a0aacee2f89cedbd98ec041 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 4 Mar 2020 12:58:55 +1100 Subject: [PATCH 1/4] Test reloading of zones with special --- bin/tests/system/addzone/tests.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/tests/system/addzone/tests.sh b/bin/tests/system/addzone/tests.sh index 4ce96bcfdb..cfaee81c32 100755 --- a/bin/tests/system/addzone/tests.sh +++ b/bin/tests/system/addzone/tests.sh @@ -718,6 +718,8 @@ echo_i "check that named restarts with multiple added zones ($n)" ret=0 $RNDCCMD 10.53.0.3 addzone "test4.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1 $RNDCCMD 10.53.0.3 addzone "test5.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1 +$RNDCCMD 10.53.0.3 addzone '"test/.baz"' '{ type master; check-names ignore; file "e.db"; };' > /dev/null 2>&1 || ret=1 +$RNDCCMD 10.53.0.3 addzone '"test\".baz"' '{ type master; check-names ignore; file "e.db"; };' > /dev/null 2>&1 || ret=1 $PERL $SYSTEMTESTTOP/stop.pl addzone ns3 $PERL $SYSTEMTESTTOP/start.pl --noclean --restart --port ${PORT} addzone ns3 || ret=1 retry_quiet 10 _check_version_bind || ret=1 From 91efc587b22339e70cd2a4a11b6198a460b66a35 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 4 Mar 2020 13:02:50 +1100 Subject: [PATCH 2/4] Pass NUL terminated buffer name to cfg_parse_buffer --- bin/named/server.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bin/named/server.c b/bin/named/server.c index ee23f102d2..d191959066 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -7779,6 +7779,7 @@ data_to_cfg(dns_view_t *view, MDB_val *key, MDB_val *data, isc_buffer_t **text, const char *zone_config; size_t zone_config_len; cfg_obj_t *zoneconf = NULL; + char bufname[DNS_NAME_FORMATSIZE]; REQUIRE(view != NULL); REQUIRE(key != NULL); @@ -7813,8 +7814,11 @@ data_to_cfg(dns_view_t *view, MDB_val *key, MDB_val *data, isc_buffer_t **text, CHECK(putmem(text, (const void *)zone_config, zone_config_len)); CHECK(putstr(text, ";\n")); + snprintf(bufname, sizeof(bufname), "%.*s", (int)zone_name_len, + zone_name); + cfg_parser_reset(named_g_addparser); - result = cfg_parse_buffer(named_g_addparser, *text, zone_name, 0, + result = cfg_parse_buffer(named_g_addparser, *text, bufname, 0, &cfg_type_addzoneconf, 0, &zoneconf); if (result != ISC_R_SUCCESS) { isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL, From 59498ce17f3ced8e0046384cfef12d361760b66c Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 4 Mar 2020 13:04:15 +1100 Subject: [PATCH 3/4] Quote zone name so that specials are handled --- bin/named/server.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/named/server.c b/bin/named/server.c index d191959066..781d9e013d 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -7802,15 +7802,15 @@ data_to_cfg(dns_view_t *view, MDB_val *key, MDB_val *data, isc_buffer_t **text, INSIST(zone_config != NULL && zone_config_len > 0); /* zone zonename { config; }; */ - result = isc_buffer_reserve(text, 5 + zone_name_len + 1 + + result = isc_buffer_reserve(text, 6 + zone_name_len + 2 + zone_config_len + 2); if (result != ISC_R_SUCCESS) { goto cleanup; } - CHECK(putstr(text, "zone ")); + CHECK(putstr(text, "zone \"")); CHECK(putmem(text, (const void *)zone_name, zone_name_len)); - CHECK(putstr(text, " ")); + CHECK(putstr(text, "\" ")); CHECK(putmem(text, (const void *)zone_config, zone_config_len)); CHECK(putstr(text, ";\n")); From c9c59db5b3cc4a14aa13d6c198f4302736741ab0 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 4 Mar 2020 13:09:54 +1100 Subject: [PATCH 4/4] Add CHANGES note --- CHANGES | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES b/CHANGES index 825617fcc9..01ec0b7b26 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +5368. [bug] Named failed to restart if 'rndc addzone' names + contained special characters (e.g. '/'). [GL #1655] + 5367. [placeholder] 5366. [bug] Fix a race condition with the keymgr when the same