diff --git a/bin/named/statschannel.c b/bin/named/statschannel.c index b29b26f16a..ef1b77f4da 100644 --- a/bin/named/statschannel.c +++ b/bin/named/statschannel.c @@ -3463,6 +3463,11 @@ render_json_traffic(const isc_httpd_t *httpd, const isc_httpdurl_t *urlinfo, #endif /* HAVE_JSON_C */ +#if HAVE_LIBXML2 +/* + * This is only needed if we have libxml2 and was confusingly returned if + * neither of libxml2 or json-c is configured. + */ static isc_result_t render_xsl(const isc_httpd_t *httpd, const isc_httpdurl_t *urlinfo, void *args, unsigned int *retcode, const char **retmsg, const char **mimetype, @@ -3518,6 +3523,7 @@ send: end: return (ISC_R_SUCCESS); } +#endif static void shutdown_listener(named_statschannel_t *listener) { @@ -3530,6 +3536,7 @@ shutdown_listener(named_statschannel_t *listener) { isc_httpdmgr_shutdown(&listener->httpdmgr); } +#if defined(HAVE_LIBXML2) || defined(HAVE_JSON_C) static bool client_ok(const isc_sockaddr_t *fromaddr, void *arg) { named_statschannel_t *listener = arg; @@ -3560,7 +3567,9 @@ client_ok(const isc_sockaddr_t *fromaddr, void *arg) { return (false); } +#endif +#if defined(HAVE_LIBXML2) || defined(HAVE_JSON_C) static void destroy_listener(void *arg) { named_statschannel_t *listener = (named_statschannel_t *)arg; @@ -3574,12 +3583,24 @@ destroy_listener(void *arg) { isc_mutex_destroy(&listener->lock); isc_mem_putanddetach(&listener->mctx, listener, sizeof(*listener)); } +#endif static isc_result_t add_listener(named_server_t *server, named_statschannel_t **listenerp, const cfg_obj_t *listen_params, const cfg_obj_t *config, isc_sockaddr_t *addr, cfg_aclconfctx_t *aclconfctx, const char *socktext) { +#if !defined(HAVE_LIBXML2) && !defined(HAVE_JSON_C) + UNUSED(server); + UNUSED(listenerp); + UNUSED(listen_params); + UNUSED(config); + UNUSED(addr); + UNUSED(aclconfctx); + UNUSED(socktext); + + return (ISC_R_NOTIMPLEMENTED); +#else isc_result_t result; named_statschannel_t *listener = NULL; const cfg_obj_t *allow = NULL; @@ -3644,6 +3665,8 @@ add_listener(named_server_t *server, named_statschannel_t **listenerp, isc_httpdmgr_addurl(listener->httpdmgr, "/xml/v" STATS_XML_VERSION_MAJOR "/traffic", false, render_xml_traffic, server); + isc_httpdmgr_addurl(listener->httpdmgr, "/bind9.xsl", true, render_xsl, + server); #endif /* ifdef HAVE_LIBXML2 */ #ifdef HAVE_JSON_C isc_httpdmgr_addurl(listener->httpdmgr, "/json", false, render_json_all, @@ -3673,8 +3696,6 @@ add_listener(named_server_t *server, named_statschannel_t **listenerp, "/json/v" STATS_JSON_VERSION_MAJOR "/traffic", false, render_json_traffic, server); #endif /* ifdef HAVE_JSON_C */ - isc_httpdmgr_addurl(listener->httpdmgr, "/bind9.xsl", true, render_xsl, - server); *listenerp = listener; isc_log_write(NAMED_LOGCATEGORY_GENERAL, NAMED_LOGMODULE_SERVER, @@ -3691,6 +3712,7 @@ cleanup: isc_mem_putanddetach(&listener->mctx, listener, sizeof(*listener)); return (result); +#endif } static void diff --git a/bin/tests/system/statistics/ns1/named.conf.in b/bin/tests/system/statistics/ns1/named.conf.in index 8fd14f9855..2048d73bf9 100644 --- a/bin/tests/system/statistics/ns1/named.conf.in +++ b/bin/tests/system/statistics/ns1/named.conf.in @@ -24,9 +24,7 @@ options { notify yes; }; -statistics-channels { - inet 10.53.0.1 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; zone "." { type primary; diff --git a/bin/tests/system/statistics/ns1/statistics-channels.conf.in b/bin/tests/system/statistics/ns1/statistics-channels.conf.in new file mode 100644 index 0000000000..12a1e27003 --- /dev/null +++ b/bin/tests/system/statistics/ns1/statistics-channels.conf.in @@ -0,0 +1,16 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * 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 https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +statistics-channels { + inet 10.53.0.1 port @EXTRAPORT1@ allow { any; }; +}; diff --git a/bin/tests/system/statistics/ns2/named.conf.in b/bin/tests/system/statistics/ns2/named.conf.in index 877e26a16f..f23bac8d67 100644 --- a/bin/tests/system/statistics/ns2/named.conf.in +++ b/bin/tests/system/statistics/ns2/named.conf.in @@ -26,9 +26,7 @@ options { trust-anchors { }; -statistics-channels { - inet 10.53.0.2 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; key rndc_key { secret "1234abcd8765"; diff --git a/bin/tests/system/statistics/ns2/named2.conf.in b/bin/tests/system/statistics/ns2/named2.conf.in index 39772f9822..4b8e5030f1 100644 --- a/bin/tests/system/statistics/ns2/named2.conf.in +++ b/bin/tests/system/statistics/ns2/named2.conf.in @@ -24,9 +24,7 @@ options { notify yes; }; -statistics-channels { - inet 10.53.0.2 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; key rndc_key { secret "1234abcd8765"; diff --git a/bin/tests/system/statistics/ns2/statistics-channels.conf.in b/bin/tests/system/statistics/ns2/statistics-channels.conf.in new file mode 100644 index 0000000000..6dd1516962 --- /dev/null +++ b/bin/tests/system/statistics/ns2/statistics-channels.conf.in @@ -0,0 +1,16 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * 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 https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +statistics-channels { + inet 10.53.0.2 port @EXTRAPORT1@ allow { any; }; +}; diff --git a/bin/tests/system/statistics/ns3/named.conf.in b/bin/tests/system/statistics/ns3/named.conf.in index 1726d1d381..cacc0ec8e7 100644 --- a/bin/tests/system/statistics/ns3/named.conf.in +++ b/bin/tests/system/statistics/ns3/named.conf.in @@ -29,9 +29,7 @@ options { trust-anchors { }; -statistics-channels { - inet 10.53.0.3 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; key rndc_key { secret "1234abcd8765"; diff --git a/bin/tests/system/statistics/ns3/statistics-channels.conf.in b/bin/tests/system/statistics/ns3/statistics-channels.conf.in new file mode 100644 index 0000000000..a755c39439 --- /dev/null +++ b/bin/tests/system/statistics/ns3/statistics-channels.conf.in @@ -0,0 +1,16 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * 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 https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +statistics-channels { + inet 10.53.0.3 port @EXTRAPORT1@ allow { any; }; +}; diff --git a/bin/tests/system/statistics/setup.sh b/bin/tests/system/statistics/setup.sh index 7ffda5583c..37f52f5e32 100644 --- a/bin/tests/system/statistics/setup.sh +++ b/bin/tests/system/statistics/setup.sh @@ -13,6 +13,13 @@ . ../conf.sh -copy_setports ns1/named.conf.in ns1/named.conf -copy_setports ns2/named.conf.in ns2/named.conf -copy_setports ns3/named.conf.in ns3/named.conf +for d in ns1 ns2 ns3; do + conf=named.conf + copy_setports "${d}/${conf}.in" "${d}/${conf}" + conf=statistics-channels.conf + if $FEATURETEST --have-libxml2 || $FEATURETEST --have-json-c; then + copy_setports "${d}/${conf}.in" "${d}/${conf}" + else + echo "" >"${d}/${conf}" + fi +done diff --git a/bin/tests/system/statschannel/prereq.sh b/bin/tests/system/statschannel/prereq.sh index a0ad7a9bc7..df30423dc6 100644 --- a/bin/tests/system/statschannel/prereq.sh +++ b/bin/tests/system/statschannel/prereq.sh @@ -23,4 +23,9 @@ if ! ${PERL} -MFile::Fetch -e ''; then exit 1 fi +if ! $FEATURETEST --have-libxml2 && ! $FEATURETEST --have-json-c; then + echo_i "skip: one or both of --with-libxml2 and --with-json-c required" + exit 255 +fi + exit 0 diff --git a/bin/tests/system/synthfromdnssec/ns1/named.conf.in b/bin/tests/system/synthfromdnssec/ns1/named.conf.in index 9a86e24acc..6a5086e4b2 100644 --- a/bin/tests/system/synthfromdnssec/ns1/named.conf.in +++ b/bin/tests/system/synthfromdnssec/ns1/named.conf.in @@ -35,9 +35,7 @@ controls { inet 10.53.0.1 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; }; -statistics-channels { - inet 10.53.0.1 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; zone "." { type primary; diff --git a/bin/tests/system/synthfromdnssec/ns1/statistics-channels.conf.in b/bin/tests/system/synthfromdnssec/ns1/statistics-channels.conf.in new file mode 100644 index 0000000000..12a1e27003 --- /dev/null +++ b/bin/tests/system/synthfromdnssec/ns1/statistics-channels.conf.in @@ -0,0 +1,16 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * 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 https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +statistics-channels { + inet 10.53.0.1 port @EXTRAPORT1@ allow { any; }; +}; diff --git a/bin/tests/system/synthfromdnssec/ns2/named.conf.in b/bin/tests/system/synthfromdnssec/ns2/named.conf.in index f4b5059c44..efcf7e5d78 100644 --- a/bin/tests/system/synthfromdnssec/ns2/named.conf.in +++ b/bin/tests/system/synthfromdnssec/ns2/named.conf.in @@ -35,9 +35,7 @@ controls { inet 10.53.0.2 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; }; -statistics-channels { - inet 10.53.0.2 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; zone "." { type hint; diff --git a/bin/tests/system/synthfromdnssec/ns2/statistics-channels.conf.in b/bin/tests/system/synthfromdnssec/ns2/statistics-channels.conf.in new file mode 100644 index 0000000000..6dd1516962 --- /dev/null +++ b/bin/tests/system/synthfromdnssec/ns2/statistics-channels.conf.in @@ -0,0 +1,16 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * 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 https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +statistics-channels { + inet 10.53.0.2 port @EXTRAPORT1@ allow { any; }; +}; diff --git a/bin/tests/system/synthfromdnssec/ns3/named.conf.in b/bin/tests/system/synthfromdnssec/ns3/named.conf.in index 874143a543..7665d8a6e6 100644 --- a/bin/tests/system/synthfromdnssec/ns3/named.conf.in +++ b/bin/tests/system/synthfromdnssec/ns3/named.conf.in @@ -35,9 +35,7 @@ controls { inet 10.53.0.3 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; }; -statistics-channels { - inet 10.53.0.3 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; zone "." { type hint; diff --git a/bin/tests/system/synthfromdnssec/ns3/statistics-channels.conf.in b/bin/tests/system/synthfromdnssec/ns3/statistics-channels.conf.in new file mode 100644 index 0000000000..a755c39439 --- /dev/null +++ b/bin/tests/system/synthfromdnssec/ns3/statistics-channels.conf.in @@ -0,0 +1,16 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * 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 https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +statistics-channels { + inet 10.53.0.3 port @EXTRAPORT1@ allow { any; }; +}; diff --git a/bin/tests/system/synthfromdnssec/ns4/named.conf.in b/bin/tests/system/synthfromdnssec/ns4/named.conf.in index c9d921092e..85cbc38d98 100644 --- a/bin/tests/system/synthfromdnssec/ns4/named.conf.in +++ b/bin/tests/system/synthfromdnssec/ns4/named.conf.in @@ -36,9 +36,7 @@ controls { inet 10.53.0.4 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; }; -statistics-channels { - inet 10.53.0.4 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; zone "." { type hint; diff --git a/bin/tests/system/synthfromdnssec/ns4/statistics-channels.conf.in b/bin/tests/system/synthfromdnssec/ns4/statistics-channels.conf.in new file mode 100644 index 0000000000..5a89f8d489 --- /dev/null +++ b/bin/tests/system/synthfromdnssec/ns4/statistics-channels.conf.in @@ -0,0 +1,16 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * 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 https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +statistics-channels { + inet 10.53.0.4 port @EXTRAPORT1@ allow { any; }; +}; diff --git a/bin/tests/system/synthfromdnssec/ns5/named.conf.in b/bin/tests/system/synthfromdnssec/ns5/named.conf.in index 42495488c2..0875b7701e 100644 --- a/bin/tests/system/synthfromdnssec/ns5/named.conf.in +++ b/bin/tests/system/synthfromdnssec/ns5/named.conf.in @@ -37,9 +37,7 @@ controls { inet 10.53.0.5 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; }; -statistics-channels { - inet 10.53.0.5 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; zone "." { type hint; diff --git a/bin/tests/system/synthfromdnssec/ns5/statistics-channels.conf.in b/bin/tests/system/synthfromdnssec/ns5/statistics-channels.conf.in new file mode 100644 index 0000000000..12a9398c60 --- /dev/null +++ b/bin/tests/system/synthfromdnssec/ns5/statistics-channels.conf.in @@ -0,0 +1,16 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * 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 https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +statistics-channels { + inet 10.53.0.5 port @EXTRAPORT1@ allow { any; }; +}; diff --git a/bin/tests/system/synthfromdnssec/ns6/named.conf.in b/bin/tests/system/synthfromdnssec/ns6/named.conf.in index c10e0f70e2..1f631865ac 100644 --- a/bin/tests/system/synthfromdnssec/ns6/named.conf.in +++ b/bin/tests/system/synthfromdnssec/ns6/named.conf.in @@ -36,9 +36,7 @@ controls { inet 10.53.0.6 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; }; -statistics-channels { - inet 10.53.0.6 port @EXTRAPORT1@ allow { any; }; -}; +include "statistics-channels.conf"; zone "." { type hint; diff --git a/bin/tests/system/synthfromdnssec/ns6/statistics-channels.conf.in b/bin/tests/system/synthfromdnssec/ns6/statistics-channels.conf.in new file mode 100644 index 0000000000..138a84bde3 --- /dev/null +++ b/bin/tests/system/synthfromdnssec/ns6/statistics-channels.conf.in @@ -0,0 +1,16 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * 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 https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +statistics-channels { + inet 10.53.0.6 port @EXTRAPORT1@ allow { any; }; +}; diff --git a/bin/tests/system/synthfromdnssec/setup.sh b/bin/tests/system/synthfromdnssec/setup.sh index 5d0ddee2d3..85feba601d 100644 --- a/bin/tests/system/synthfromdnssec/setup.sh +++ b/bin/tests/system/synthfromdnssec/setup.sh @@ -16,12 +16,16 @@ set -e -copy_setports ns1/named.conf.in ns1/named.conf -copy_setports ns2/named.conf.in ns2/named.conf -copy_setports ns3/named.conf.in ns3/named.conf -copy_setports ns4/named.conf.in ns4/named.conf -copy_setports ns5/named.conf.in ns5/named.conf -copy_setports ns6/named.conf.in ns6/named.conf +for d in ns1 ns2 ns3 ns4 ns5 ns6; do + conf=named.conf + copy_setports "${d}/${conf}.in" "${d}/${conf}" + conf=statistics-channels.conf + if $FEATURETEST --have-libxml2 || $FEATURETEST --have-json-c; then + copy_setports "${d}/${conf}.in" "${d}/${conf}" + else + echo "" >"${d}/${conf}" + fi +done ( cd ns1 diff --git a/lib/isccfg/namedconf.c b/lib/isccfg/namedconf.c index 09275a830a..9adaec5eef 100644 --- a/lib/isccfg/namedconf.c +++ b/lib/isccfg/namedconf.c @@ -1259,8 +1259,13 @@ static cfg_clausedef_t namedconf_clauses[] = { { "options", &cfg_type_options, 0 }, { "parental-agents", &cfg_type_remoteservers, CFG_CLAUSEFLAG_MULTI }, { "primaries", &cfg_type_remoteservers, CFG_CLAUSEFLAG_MULTI }, +#if defined(HAVE_LIBXML2) || defined(HAVE_JSON_C) { "statistics-channels", &cfg_type_statschannels, CFG_CLAUSEFLAG_MULTI }, +#else + { "statistics-channels", &cfg_type_statschannels, + CFG_CLAUSEFLAG_MULTI | CFG_CLAUSEFLAG_NOTCONFIGURED }, +#endif { "tls", &cfg_type_tlsconf, CFG_CLAUSEFLAG_MULTI }, { "view", &cfg_type_view, CFG_CLAUSEFLAG_MULTI }, { NULL, NULL, 0 }