Merge branch '1695-addzone-system-tests-failing-in-mac-os-x' into 'master'

Resolve "addzone system tests failing in Mac OS X"

Closes #1695

See merge request isc-projects/bind9!3274
This commit is contained in:
Mark Andrews 2020-04-30 23:08:35 +00:00
commit 786b5a76f2
5 changed files with 126 additions and 8 deletions

View file

@ -670,12 +670,13 @@ scan-build:
when: on_failure
# Jobs for regular GCC builds on Debian Sid (amd64)
# Also tests configration option: --without-lmdb.
gcc:sid:amd64:
variables:
CC: gcc
CFLAGS: "${CFLAGS_COMMON} -O3"
EXTRA_CONFIGURE: "--enable-dnstap --with-libidn2"
EXTRA_CONFIGURE: "--enable-dnstap --with-libidn2 --without-lmdb"
RUN_MAKE_INSTALL: 1
<<: *debian_sid_amd64_image
<<: *build_job
@ -699,13 +700,14 @@ cppcheck:
<<: *cppcheck_job
# Job for out-of-tree GCC build on Debian Sid (amd64)
# Also tests configration option: --with-lmdb.
gcc:out-of-tree:
variables:
CC: gcc
CFLAGS: "${CFLAGS_COMMON} -Og"
CONFIGURE: ../configure
EXTRA_CONFIGURE: "--enable-dnstap --with-libidn2"
EXTRA_CONFIGURE: "--enable-dnstap --with-libidn2 --with-lmdb"
RUN_MAKE_INSTALL: 1
OOT_BUILD_WORKSPACE: workspace
<<: *base_image

View file

@ -1,3 +1,7 @@
5398. [bug] Named could fail to restart if a zone added with
'rndc addzone' contained a double quote (") in
its name. [GL #1695]
5397. [func] Update PKCS#11 EdDSA implementation to PKCS#11 v3.0.
Thanks to Aaron Thompson. [GL !3326]

View file

@ -719,9 +719,30 @@ $RNDCCMD 10.53.0.3 addzone "test4.baz" '{ type master; file "e.db"; };' > /dev/n
$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
$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\032.baz"' '{ type master; check-names ignore; file "e.db"; };' > /dev/null 2>&1 || ret=1
$RNDCCMD 10.53.0.3 addzone '"test\010.baz"' '{ type master; check-names ignore; file "e.db"; };' > /dev/null 2>&1 || ret=1
stop addzone ns3
start --noclean --restart --port ${PORT} addzone ns3 || ret=1
retry_quiet 10 _check_version_bind || ret=1
$DIG $DIGOPTS @10.53.0.3 SOA "test4.baz" > dig.out.1.test$n || ret=1
grep "status: NOERROR" dig.out.1.test$n > /dev/null || ret=1
grep "ANSWER: 1," dig.out.1.test$n > /dev/null || ret=1
$DIG $DIGOPTS @10.53.0.3 SOA "test5.baz" > dig.out.2.test$n || ret=1
grep "status: NOERROR" dig.out.2.test$n > /dev/null || ret=1
grep "ANSWER: 1," dig.out.2.test$n > /dev/null || ret=1
$DIG $DIGOPTS @10.53.0.3 SOA 'test/.baz' > dig.out.3.test$n || ret=1
grep "status: NOERROR" dig.out.3.test$n > /dev/null || ret=1
grep "ANSWER: 1," dig.out.3.test$n > /dev/null || ret=1
$DIG $DIGOPTS @10.53.0.3 SOA 'test\\.baz' > dig.out.4.test$n || ret=1
grep "status: NOERROR" dig.out.4.test$n > /dev/null || ret=1
grep "ANSWER: 1," dig.out.4.test$n > /dev/null || ret=1
$DIG $DIGOPTS @10.53.0.3 SOA 'test\032.baz' > dig.out.5.test$n || ret=1
grep "status: NOERROR" dig.out.5.test$n > /dev/null || ret=1
grep "ANSWER: 1," dig.out.5.test$n > /dev/null || ret=1
$DIG $DIGOPTS @10.53.0.3 SOA 'test\010.baz' > dig.out.6.test$n || ret=1
grep "status: NOERROR" dig.out.6.test$n > /dev/null || ret=1
grep "ANSWER: 1," dig.out.6.test$n > /dev/null || ret=1
if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret`
n=`expr $n + 1`

View file

@ -1671,7 +1671,12 @@ cfg_print_ustring(cfg_printer_t *pctx, const cfg_obj_t *obj) {
static void
print_qstring(cfg_printer_t *pctx, const cfg_obj_t *obj) {
cfg_print_cstr(pctx, "\"");
cfg_print_ustring(pctx, obj);
for (size_t i = 0; i < obj->value.string.length; i++) {
if (obj->value.string.base[i] == '"') {
cfg_print_cstr(pctx, "\\");
}
cfg_print_chars(pctx, &obj->value.string.base[i], 1);
}
cfg_print_cstr(pctx, "\"");
}

View file

@ -27,6 +27,8 @@
#include <isc/lex.h>
#include <isc/log.h>
#include <isc/mem.h>
#include <isc/print.h>
#include <isc/string.h>
#include <isc/types.h>
#include <isc/util.h>
@ -56,6 +58,7 @@ static isc_logcategory_t categories[] = { { "", 0 },
static void
cleanup(void) {
if (lctx != NULL) {
isc_log_setcontext(NULL);
isc_log_destroy(&lctx);
}
if (mctx != NULL) {
@ -92,6 +95,92 @@ cleanup:
return (result);
}
static int
_setup(void **state) {
isc_result_t result;
UNUSED(state);
result = setup();
assert_int_equal(result, ISC_R_SUCCESS);
return (0);
}
static int
_teardown(void **state) {
UNUSED(state);
cleanup();
return (0);
}
/* mimic calling nzf_append() */
static void
append(void *arg, const char *str, int len) {
char *buf = arg;
size_t l = strlen(buf);
snprintf(buf + l, 1024 - l, "%.*s", len, str);
}
static void
addzoneconf(void **state) {
isc_result_t result;
isc_buffer_t b;
cfg_parser_t *p = NULL;
const char *tests[] = {
"zone \"test4.baz\" { type master; file \"e.db\"; };",
"zone \"test/.baz\" { type master; file \"e.db\"; };",
"zone \"test\\\".baz\" { type master; file \"e.db\"; };",
"zone \"test\\.baz\" { type master; file \"e.db\"; };",
"zone \"test\\\\.baz\" { type master; file \"e.db\"; };",
"zone \"test\\032.baz\" { type master; file \"e.db\"; };",
"zone \"test\\010.baz\" { type master; file \"e.db\"; };"
};
char buf[1024];
UNUSED(state);
/* Parse with default line numbering */
result = cfg_parser_create(mctx, lctx, &p);
assert_int_equal(result, ISC_R_SUCCESS);
#define ARRAYSIZE(x) (sizeof(x) / sizeof(x[0]))
for (size_t i = 0; i < ARRAYSIZE(tests); i++) {
cfg_obj_t *conf = NULL;
const cfg_obj_t *obj = NULL, *zlist = NULL;
isc_buffer_constinit(&b, tests[i], strlen(tests[i]));
isc_buffer_add(&b, strlen(tests[i]));
result = cfg_parse_buffer(p, &b, "text1", 0,
&cfg_type_namedconf, 0, &conf);
assert_int_equal(result, ISC_R_SUCCESS);
/*
* Mimic calling nzf_append() from bin/named/server.c
* and check that the output matches the input.
*/
result = cfg_map_get(conf, "zone", &zlist);
assert_int_equal(result, ISC_R_SUCCESS);
obj = cfg_listelt_value(cfg_list_first(zlist));
assert_ptr_not_equal(obj, NULL);
strlcpy(buf, "zone ", sizeof(buf));
cfg_printx(obj, CFG_PRINTER_ONELINE, append, buf);
strlcat(buf, ";", sizeof(buf));
assert_string_equal(tests[i], buf);
cfg_obj_destroy(p, &conf);
cfg_parser_reset(p);
}
cfg_parser_destroy(&p);
}
/* test cfg_parse_buffer() */
static void
parse_buffer_test(void **state) {
@ -103,8 +192,6 @@ parse_buffer_test(void **state) {
UNUSED(state);
setup();
isc_buffer_init(&buf1, &text[0], sizeof(text) - 1);
isc_buffer_add(&buf1, sizeof(text) - 1);
@ -134,8 +221,6 @@ parse_buffer_test(void **state) {
cfg_parser_destroy(&p1);
cfg_parser_destroy(&p2);
cleanup();
}
/* test cfg_map_firstclause() */
@ -181,12 +266,13 @@ cfg_map_nextclause_test(void **state) {
int
main(void) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(addzoneconf),
cmocka_unit_test(parse_buffer_test),
cmocka_unit_test(cfg_map_firstclause_test),
cmocka_unit_test(cfg_map_nextclause_test),
};
return (cmocka_run_group_tests(tests, NULL, NULL));
return (cmocka_run_group_tests(tests, _setup, _teardown));
}
#else /* HAVE_CMOCKA */