2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-30 14:07:59 +00:00

fix: usr: Don't allow statistics-channel if libxml2 and libjson-c are unsupported

When the libxml2 and libjson-c libraries are not supported, the statistics channel can't return anything useful, so it is now disabled. Use of `statistics-channel` in `named.conf` is a fatal error.

Closes #4895

Merge branch '4895-link-style-sheet-to-libxml2-support' into 'main'

See merge request isc-projects/bind9!9423
This commit is contained in:
Mark Andrews 2024-09-12 03:27:10 +00:00
commit 0d4accd07f
24 changed files with 208 additions and 41 deletions

View File

@ -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

View File

@ -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;

View File

@ -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; };
};

View File

@ -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";

View File

@ -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";

View File

@ -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; };
};

View File

@ -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";

View File

@ -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; };
};

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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; };
};

View File

@ -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;

View File

@ -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; };
};

View File

@ -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;

View File

@ -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; };
};

View File

@ -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;

View File

@ -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; };
};

View File

@ -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;

View File

@ -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; };
};

View File

@ -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;

View File

@ -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; };
};

View File

@ -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

View File

@ -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 }