diff --git a/CHANGES b/CHANGES index 558698f8f035ec079eea77a0e46ecc771e86b9e9..ffec9afc73f5a1345e543a083820cf59038c48cc 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,8 @@ -4904. [bug] Temporarily revert change #4859. [GL #124] +4905. [bug] irs_resconf_load() ignored resolv.conf syntax errors + when "domain" or "search" options were present in that + file. [GL #110] + +4904. [bug] Temporarily revert change #4859. [GL #124] 4903. [bug] "check-mx fail;" did not prevent MX records containing IP addresses from being added to a zone by a dynamic diff --git a/lib/irs/resconf.c b/lib/irs/resconf.c index 6cb4ce327ad4551cccc818051d21f200f8bde548..55a50979cf6e0d56b02b27a36f63d7c3b6a22867 100644 --- a/lib/irs/resconf.c +++ b/lib/irs/resconf.c @@ -503,6 +503,7 @@ irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp) conf->mctx = mctx; ISC_LIST_INIT(conf->nameservers); + ISC_LIST_INIT(conf->searchlist); conf->numns = 0; conf->domainname = NULL; conf->searchnxt = 0; @@ -557,6 +558,10 @@ irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp) } } + if (ret != ISC_R_SUCCESS) { + goto error; + } + /* If we don't find a nameserver fall back to localhost */ if (conf->numns == 0U) { INSIST(ISC_LIST_EMPTY(conf->nameservers)); @@ -570,7 +575,6 @@ irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp) * Construct unified search list from domain or configured * search list */ - ISC_LIST_INIT(conf->searchlist); if (conf->domainname != NULL) { ret = add_search(conf, conf->domainname); } else if (conf->searchnxt > 0) { @@ -581,6 +585,7 @@ irs_resconf_load(isc_mem_t *mctx, const char *filename, irs_resconf_t **confp) } } + error: conf->magic = IRS_RESCONF_MAGIC; if (ret != ISC_R_SUCCESS) diff --git a/lib/irs/tests/resconf_test.c b/lib/irs/tests/resconf_test.c index 7f527a83cba27f88b8d12e6e475e858e9fc76850..488ed5ba026fdcda5d9bf2cf49f6440f5aa965f7 100644 --- a/lib/irs/tests/resconf_test.c +++ b/lib/irs/tests/resconf_test.c @@ -56,9 +56,6 @@ ATF_TC_BODY(irs_resconf_load, tc) { isc_result_t checkres; } tests[] = { { - "testdata/sortlist-v4.conf", ISC_R_SUCCESS, - NULL, ISC_R_SUCCESS - }, { "testdata/domain.conf", ISC_R_SUCCESS, NULL, ISC_R_SUCCESS }, { @@ -82,6 +79,12 @@ ATF_TC_BODY(irs_resconf_load, tc) { }, { "testdata/options.conf", ISC_R_SUCCESS, NULL, ISC_R_SUCCESS + }, { + "testdata/options-bad-ndots.conf", ISC_R_RANGE, + NULL, ISC_R_SUCCESS + }, { + "testdata/options-empty.conf", ISC_R_UNEXPECTEDEND, + NULL, ISC_R_SUCCESS }, { "testdata/port.conf", ISC_R_SUCCESS, NULL, ISC_R_SUCCESS diff --git a/lib/irs/tests/testdata/options-bad-ndots.conf b/lib/irs/tests/testdata/options-bad-ndots.conf new file mode 100644 index 0000000000000000000000000000000000000000..5c104c74b55d9e32db32cb386ad067ddc06b0cbf --- /dev/null +++ b/lib/irs/tests/testdata/options-bad-ndots.conf @@ -0,0 +1,11 @@ +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + +search example.com example.net +options ndots:256 diff --git a/lib/irs/tests/testdata/options-empty.conf b/lib/irs/tests/testdata/options-empty.conf new file mode 100644 index 0000000000000000000000000000000000000000..e8b902ea2d832b764654cc72afc54e3531891eab --- /dev/null +++ b/lib/irs/tests/testdata/options-empty.conf @@ -0,0 +1,11 @@ +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + +domain example.com +options