Module Name: src
Committed By: christos
Date: Mon Jun 26 22:03:01 UTC 2023
Modified Files:
src/external/mpl/bind/dist: configure
src/external/mpl/bind/dist/bin/dig: dighost.c
src/external/mpl/bind/dist/bin/named: controlconf.c logconf.c main.c
server.c zoneconf.c
src/external/mpl/bind/dist/bin/nsupdate: nsupdate.c
src/external/mpl/bind/dist/bin/rndc: rndc.c
src/external/mpl/bind/dist/bin/tests/optional: ratelimiter_test.c
rbt_test.c shutdown_test.c sock_test.c task_test.c timer_test.c
src/external/mpl/bind/dist/bin/tests/system: feature-test.c
src/external/mpl/bind/dist/fuzz: fuzz.h
src/external/mpl/bind/dist/lib/dns: catz.c dnsrps.c hmac_link.c
keymgr.c keytable.c master.c nsec3.c nta.c rbt.c rbtdb.c request.c
resolver.c rpz.c validator.c view.c xfrin.c zone.c
src/external/mpl/bind/dist/lib/dns/include/dns: view.h zt.h
src/external/mpl/bind/dist/lib/irs: getaddrinfo.c resconf.c
src/external/mpl/bind/dist/lib/isc: iterated_hash.c lib.c log.c mem.c
ratelimiter.c task.c timer.c
src/external/mpl/bind/dist/lib/isc/include/isc: task.h timer.h
src/external/mpl/bind/dist/lib/isc/netmgr: netmgr.c
src/external/mpl/bind/dist/lib/isc/tests: task_test.c timer_test.c
src/external/mpl/bind/dist/lib/ns: query.c
src/external/mpl/bind/lib/libisc: Makefile
Removed Files:
src/external/mpl/bind/dist: tsan-suppressions.txt
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1:
controls.conf.in named.dirconf named.iso8601 named.iso8601-utc
named.pipeconf named.plain named.plainconf named.symconf
named.tsconf named.unlimited named.versconf rndc.conf.in root.db
src/external/mpl/bind/dist/bin/tests/system/ttl: tests.sh
src/external/mpl/bind/dist/doc/man: named-compilezone.1in
Log Message:
merge conflicts between 9.16.37 and 9.16.42
To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/external/mpl/bind/dist/configure
cvs rdiff -u -r1.1.1.1 -r0 src/external/mpl/bind/dist/tsan-suppressions.txt
cvs rdiff -u -r1.14 -r1.15 src/external/mpl/bind/dist/bin/dig/dighost.c
cvs rdiff -u -r1.10 -r1.11 src/external/mpl/bind/dist/bin/named/controlconf.c
cvs rdiff -u -r1.7 -r1.8 src/external/mpl/bind/dist/bin/named/logconf.c
cvs rdiff -u -r1.14 -r1.15 src/external/mpl/bind/dist/bin/named/main.c
cvs rdiff -u -r1.19 -r1.20 src/external/mpl/bind/dist/bin/named/server.c
cvs rdiff -u -r1.13 -r1.14 src/external/mpl/bind/dist/bin/named/zoneconf.c
cvs rdiff -u -r1.12 -r1.13 src/external/mpl/bind/dist/bin/nsupdate/nsupdate.c
cvs rdiff -u -r1.9 -r1.10 src/external/mpl/bind/dist/bin/rndc/rndc.c
cvs rdiff -u -r1.6 -r1.7 \
src/external/mpl/bind/dist/bin/tests/optional/ratelimiter_test.c \
src/external/mpl/bind/dist/bin/tests/optional/sock_test.c \
src/external/mpl/bind/dist/bin/tests/optional/task_test.c
cvs rdiff -u -r1.7 -r1.8 \
src/external/mpl/bind/dist/bin/tests/optional/rbt_test.c \
src/external/mpl/bind/dist/bin/tests/optional/shutdown_test.c \
src/external/mpl/bind/dist/bin/tests/optional/timer_test.c
cvs rdiff -u -r1.10 -r1.11 \
src/external/mpl/bind/dist/bin/tests/system/feature-test.c
cvs rdiff -u -r1.1.1.2 -r0 \
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/controls.conf.in \
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/rndc.conf.in \
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/root.db
cvs rdiff -u -r1.1.1.3 -r0 \
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.dirconf
\
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.iso8601
\
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.iso8601-utc
\
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.pipeconf \
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.plain \
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.plainconf \
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.symconf
\
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.tsconf \
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.unlimited \
src/external/mpl/bind/dist/bin/tests/system/logfileconfig/ns1/named.versconf
cvs rdiff -u -r1.1.1.3 -r0 \
src/external/mpl/bind/dist/bin/tests/system/ttl/tests.sh
cvs rdiff -u -r1.1.1.1 -r0 \
src/external/mpl/bind/dist/doc/man/named-compilezone.1in
cvs rdiff -u -r1.5 -r1.6 src/external/mpl/bind/dist/fuzz/fuzz.h
cvs rdiff -u -r1.9 -r1.10 src/external/mpl/bind/dist/lib/dns/catz.c \
src/external/mpl/bind/dist/lib/dns/dnsrps.c \
src/external/mpl/bind/dist/lib/dns/keymgr.c
cvs rdiff -u -r1.7 -r1.8 src/external/mpl/bind/dist/lib/dns/hmac_link.c \
src/external/mpl/bind/dist/lib/dns/request.c
cvs rdiff -u -r1.8 -r1.9 src/external/mpl/bind/dist/lib/dns/keytable.c \
src/external/mpl/bind/dist/lib/dns/nta.c
cvs rdiff -u -r1.10 -r1.11 src/external/mpl/bind/dist/lib/dns/master.c
cvs rdiff -u -r1.11 -r1.12 src/external/mpl/bind/dist/lib/dns/nsec3.c
cvs rdiff -u -r1.12 -r1.13 src/external/mpl/bind/dist/lib/dns/rbt.c \
src/external/mpl/bind/dist/lib/dns/rpz.c \
src/external/mpl/bind/dist/lib/dns/validator.c \
src/external/mpl/bind/dist/lib/dns/xfrin.c
cvs rdiff -u -r1.16 -r1.17 src/external/mpl/bind/dist/lib/dns/rbtdb.c \
src/external/mpl/bind/dist/lib/dns/resolver.c
cvs rdiff -u -r1.13 -r1.14 src/external/mpl/bind/dist/lib/dns/view.c
cvs rdiff -u -r1.17 -r1.18 src/external/mpl/bind/dist/lib/dns/zone.c
cvs rdiff -u -r1.8 -r1.9 \
src/external/mpl/bind/dist/lib/dns/include/dns/view.h
cvs rdiff -u -r1.7 -r1.8 src/external/mpl/bind/dist/lib/dns/include/dns/zt.h
cvs rdiff -u -r1.8 -r1.9 src/external/mpl/bind/dist/lib/irs/getaddrinfo.c
cvs rdiff -u -r1.6 -r1.7 src/external/mpl/bind/dist/lib/irs/resconf.c
cvs rdiff -u -r1.6 -r1.7 src/external/mpl/bind/dist/lib/isc/iterated_hash.c
cvs rdiff -u -r1.9 -r1.10 src/external/mpl/bind/dist/lib/isc/lib.c
cvs rdiff -u -r1.8 -r1.9 src/external/mpl/bind/dist/lib/isc/log.c
cvs rdiff -u -r1.13 -r1.14 src/external/mpl/bind/dist/lib/isc/mem.c
cvs rdiff -u -r1.7 -r1.8 src/external/mpl/bind/dist/lib/isc/ratelimiter.c
cvs rdiff -u -r1.17 -r1.18 src/external/mpl/bind/dist/lib/isc/task.c
cvs rdiff -u -r1.11 -r1.12 src/external/mpl/bind/dist/lib/isc/timer.c
cvs rdiff -u -r1.7 -r1.8 \
src/external/mpl/bind/dist/lib/isc/include/isc/task.h \
src/external/mpl/bind/dist/lib/isc/include/isc/timer.h
cvs rdiff -u -r1.9 -r1.10 src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c
cvs rdiff -u -r1.11 -r1.12 \
src/external/mpl/bind/dist/lib/isc/tests/task_test.c
cvs rdiff -u -r1.9 -r1.10 \
src/external/mpl/bind/dist/lib/isc/tests/timer_test.c
cvs rdiff -u -r1.16 -r1.17 src/external/mpl/bind/dist/lib/ns/query.c
cvs rdiff -u -r1.19 -r1.20 src/external/mpl/bind/lib/libisc/Makefile
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/mpl/bind/dist/configure
diff -u src/external/mpl/bind/dist/configure:1.15 src/external/mpl/bind/dist/configure:1.16
--- src/external/mpl/bind/dist/configure:1.15 Wed Jan 25 16:43:22 2023
+++ src/external/mpl/bind/dist/configure Mon Jun 26 18:02:59 2023
@@ -686,6 +686,7 @@ PDFTARGET
HTMLTARGET
PDFLATEX
RELEASE_DATE
+BUILD_MANPAGES
HAVE_XELATEX_FALSE
HAVE_XELATEX_TRUE
LATEXMK
@@ -16140,23 +16141,21 @@ done
# libuv
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libuv" >&5
-$as_echo_n "checking for libuv... " >&6; }
pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libuv >= 1.0.0" >&5
-$as_echo_n "checking for libuv >= 1.0.0... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libuv >= 1.37.0" >&5
+printf %s "checking for libuv >= 1.37.0... " >&6; }
if test -n "$LIBUV_CFLAGS"; then
pkg_cv_LIBUV_CFLAGS="$LIBUV_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuv >= 1.0.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libuv >= 1.0.0") 2>&5
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuv >= 1.37.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libuv >= 1.37.0") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LIBUV_CFLAGS=`$PKG_CONFIG --cflags "libuv >= 1.0.0" 2>/dev/null`
+ pkg_cv_LIBUV_CFLAGS=`$PKG_CONFIG --cflags "libuv >= 1.37.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -16168,12 +16167,12 @@ if test -n "$LIBUV_LIBS"; then
pkg_cv_LIBUV_LIBS="$LIBUV_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuv >= 1.0.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libuv >= 1.0.0") 2>&5
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuv >= 1.37.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libuv >= 1.37.0") 2>&5
ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LIBUV_LIBS=`$PKG_CONFIG --libs "libuv >= 1.0.0" 2>/dev/null`
+ pkg_cv_LIBUV_LIBS=`$PKG_CONFIG --libs "libuv >= 1.37.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -16185,8 +16184,67 @@ fi
if test $pkg_failed = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LIBUV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libuv >= 1.37.0" 2>&1`
+ else
+ LIBUV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libuv >= 1.37.0" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBUV_PKG_ERRORS" >&5
+
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libuv >= 1.0.0 libuv < 1.35.0" >&5
+printf %s "checking for libuv >= 1.0.0 libuv < 1.35.0... " >&6; }
+
+if test -n "$LIBUV_CFLAGS"; then
+ pkg_cv_LIBUV_CFLAGS="$LIBUV_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuv >= 1.0.0 libuv < 1.35.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libuv >= 1.0.0 libuv < 1.35.0") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBUV_CFLAGS=`$PKG_CONFIG --cflags "libuv >= 1.0.0 libuv < 1.35.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$LIBUV_LIBS"; then
+ pkg_cv_LIBUV_LIBS="$LIBUV_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuv >= 1.0.0 libuv < 1.35.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libuv >= 1.0.0 libuv < 1.35.0") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBUV_LIBS=`$PKG_CONFIG --libs "libuv >= 1.0.0 libuv < 1.35.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
@@ -16194,23 +16252,104 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- LIBUV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libuv >= 1.0.0" 2>&1`
+ LIBUV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libuv >= 1.0.0 libuv < 1.35.0" 2>&1`
else
- LIBUV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libuv >= 1.0.0" 2>&1`
+ LIBUV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libuv >= 1.0.0 libuv < 1.35.0" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$LIBUV_PKG_ERRORS" >&5
- as_fn_error $? "libuv not found" "$LINENO" 5
+ as_fn_error $? "libuv >= 1.0.0 (except 1.35.0 and 1.36.0) not found" "$LINENO" 5
elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "libuv not found" "$LINENO" 5
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ as_fn_error $? "libuv >= 1.0.0 (except 1.35.0 and 1.36.0) not found" "$LINENO" 5
else
LIBUV_CFLAGS=$pkg_cv_LIBUV_CFLAGS
LIBUV_LIBS=$pkg_cv_LIBUV_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+fi
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libuv >= 1.0.0 libuv < 1.35.0" >&5
+printf %s "checking for libuv >= 1.0.0 libuv < 1.35.0... " >&6; }
+
+if test -n "$LIBUV_CFLAGS"; then
+ pkg_cv_LIBUV_CFLAGS="$LIBUV_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuv >= 1.0.0 libuv < 1.35.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libuv >= 1.0.0 libuv < 1.35.0") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBUV_CFLAGS=`$PKG_CONFIG --cflags "libuv >= 1.0.0 libuv < 1.35.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$LIBUV_LIBS"; then
+ pkg_cv_LIBUV_LIBS="$LIBUV_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuv >= 1.0.0 libuv < 1.35.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libuv >= 1.0.0 libuv < 1.35.0") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBUV_LIBS=`$PKG_CONFIG --libs "libuv >= 1.0.0 libuv < 1.35.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LIBUV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libuv >= 1.0.0 libuv < 1.35.0" 2>&1`
+ else
+ LIBUV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libuv >= 1.0.0 libuv < 1.35.0" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBUV_PKG_ERRORS" >&5
+
+ as_fn_error $? "libuv >= 1.0.0 (except 1.35.0 and 1.36.0) not found" "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ as_fn_error $? "libuv >= 1.0.0 (except 1.35.0 and 1.36.0) not found" "$LINENO" 5
+else
+ LIBUV_CFLAGS=$pkg_cv_LIBUV_CFLAGS
+ LIBUV_LIBS=$pkg_cv_LIBUV_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+fi
+else
+ LIBUV_CFLAGS=$pkg_cv_LIBUV_CFLAGS
+ LIBUV_LIBS=$pkg_cv_LIBUV_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
fi
@@ -17511,7 +17650,12 @@ PKCS11_MANS=
#
# was --enable-native-pkcs11 specified?
#
-# [pairwise: --enable-native-pkcs11 --with-dlopen, --disable-native-pkcs11 --with-dlopen, --disable-native-pkcs11 --without-dlopen]
+# DNSRPS builds are included in pairwise testing here and not later because both
+# --enable-native-pkcs11 and --enable-dnsrps-dl require --with-dlopen and the
+# ordering of the set of ./configure arguments generated during pairwise testing
+# is random.
+#
+# [pairwise: --enable-native-pkcs11 --enable-dnsrps --enable-dnsrps-dl --with-dlopen, --disable-native-pkcs11 --enable-dnsrps --enable-dnsrps-dl --with-dlopen, --disable-native-pkcs11 --enable-dnsrps --enable-dnsrps-dl --with-dlopen, --disable-native-pkcs11 --disable-dnsrps --without-dlopen]
# Check whether --enable-native-pkcs11 was given.
if test "${enable_native_pkcs11+set}" = set; then :
enableval=$enable_native_pkcs11; :
@@ -21462,6 +21606,16 @@ fi
#
+# Build the man pages only if we have prebuilt manpages or we can build them from RST sources
+#
+BUILD_MANPAGES=
+if test -e doc/man/named.conf.5in || test "$SPHINX_BUILD" != ":"
+then :
+ BUILD_MANPAGES=man
+fi
+
+
+#
# Pull release date from CHANGES file last modification date
# for reproducible builds
#
@@ -22935,8 +23089,9 @@ $as_echo "no" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# DNSRPS is not included in pairwise testing as the librpz library is not
-# present in the relevant Docker image.
+# DNSRPS builds are included in pairwise testing along --enable-native-pkcs11
+# tests above as both of these features require --with-dlopen (see also the
+# relevant comment there).
#
# [pairwise: skip]
# Check whether --enable-dnsrps-dl was given.
Index: src/external/mpl/bind/dist/bin/dig/dighost.c
diff -u src/external/mpl/bind/dist/bin/dig/dighost.c:1.14 src/external/mpl/bind/dist/bin/dig/dighost.c:1.15
--- src/external/mpl/bind/dist/bin/dig/dighost.c:1.14 Wed Jan 25 16:43:23 2023
+++ src/external/mpl/bind/dist/bin/dig/dighost.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: dighost.c,v 1.14 2023/01/25 21:43:23 christos Exp $ */
+/* $NetBSD: dighost.c,v 1.15 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1586,7 +1586,7 @@ clear_query(dig_query_t *query) {
debug("clear_query(%p)", query);
if (query->timer != NULL) {
- isc_timer_detach(&query->timer);
+ isc_timer_destroy(&query->timer);
}
lookup = query->lookup;
@@ -2702,7 +2702,7 @@ bringup_timer(dig_query_t *query, unsign
debug("have local timeout of %d", local_timeout);
isc_interval_set(&l->interval, local_timeout, 0);
if (query->timer != NULL) {
- isc_timer_detach(&query->timer);
+ isc_timer_destroy(&query->timer);
}
result = isc_timer_create(timermgr, isc_timertype_once, NULL,
&l->interval, global_task, connect_timeout,
@@ -2726,7 +2726,7 @@ force_timeout(dig_query_t *query) {
* ourselves due to the duplicate events.
*/
if (query->timer != NULL) {
- isc_timer_detach(&query->timer);
+ isc_timer_destroy(&query->timer);
}
}
Index: src/external/mpl/bind/dist/bin/named/controlconf.c
diff -u src/external/mpl/bind/dist/bin/named/controlconf.c:1.10 src/external/mpl/bind/dist/bin/named/controlconf.c:1.11
--- src/external/mpl/bind/dist/bin/named/controlconf.c:1.10 Wed Jan 25 16:43:23 2023
+++ src/external/mpl/bind/dist/bin/named/controlconf.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: controlconf.c,v 1.10 2023/01/25 21:43:23 christos Exp $ */
+/* $NetBSD: controlconf.c,v 1.11 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -179,7 +179,7 @@ maybe_free_connection(controlconnection_
}
if (conn->timer != NULL) {
- isc_timer_detach(&conn->timer);
+ isc_timer_destroy(&conn->timer);
}
if (conn->ccmsg_valid) {
@@ -572,10 +572,10 @@ control_timeout(isc_task_t *task, isc_ev
UNUSED(task);
- isc_timer_detach(&conn->timer);
- maybe_free_connection(conn);
-
isc_event_free(&event);
+
+ isc_timer_destroy(&conn->timer);
+ maybe_free_connection(conn);
}
static isc_result_t
@@ -623,7 +623,7 @@ cleanup:
}
isccc_ccmsg_invalidate(&conn->ccmsg);
if (conn->timer != NULL) {
- isc_timer_detach(&conn->timer);
+ isc_timer_destroy(&conn->timer);
}
isc_mem_put(listener->mctx, conn, sizeof(*conn));
#ifdef ENABLE_AFL
Index: src/external/mpl/bind/dist/bin/named/logconf.c
diff -u src/external/mpl/bind/dist/bin/named/logconf.c:1.7 src/external/mpl/bind/dist/bin/named/logconf.c:1.8
--- src/external/mpl/bind/dist/bin/named/logconf.c:1.7 Fri Sep 23 08:15:21 2022
+++ src/external/mpl/bind/dist/bin/named/logconf.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: logconf.c,v 1.7 2022/09/23 12:15:21 christos Exp $ */
+/* $NetBSD: logconf.c,v 1.8 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -302,10 +302,6 @@ channel_fromconf(const cfg_obj_t *channe
dest.file.name,
isc_result_totext(result));
}
- fprintf(stderr,
- "isc_stdio_open '%s' failed: %s\n",
- dest.file.name,
- isc_result_totext(result));
} else {
(void)isc_stdio_close(fp);
}
@@ -315,8 +311,6 @@ channel_fromconf(const cfg_obj_t *channe
syslog(LOG_ERR, "isc_file_isplainfile '%s' failed: %s",
dest.file.name, isc_result_totext(result));
}
- fprintf(stderr, "isc_file_isplainfile '%s' failed: %s\n",
- dest.file.name, isc_result_totext(result));
}
done:
Index: src/external/mpl/bind/dist/bin/named/main.c
diff -u src/external/mpl/bind/dist/bin/named/main.c:1.14 src/external/mpl/bind/dist/bin/named/main.c:1.15
--- src/external/mpl/bind/dist/bin/named/main.c:1.14 Wed Jan 25 16:43:23 2023
+++ src/external/mpl/bind/dist/bin/named/main.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.14 2023/01/25 21:43:23 christos Exp $ */
+/* $NetBSD: main.c,v 1.15 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -707,6 +707,7 @@ printversion(bool verbose) {
isc_buffer_init(&b, buf, sizeof(buf));
format_supported_algorithms(printit);
printf("\n");
+ dst_lib_destroy();
} else {
printf("DST initialization failure: %s\n",
isc_result_totext(result));
@@ -1282,6 +1283,13 @@ setup(void) {
"linked to OpenSSL version: %s",
SSLeay_version(SSLEAY_VERSION));
#endif /* OPENSSL_VERSION_NUMBER >= 0x10100000L */
+ isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
+ NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
+ "compiled with libuv version: %d.%d.%d", UV_VERSION_MAJOR,
+ UV_VERSION_MINOR, UV_VERSION_PATCH);
+ isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
+ NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
+ "linked to libuv version: %s", uv_version_string());
#ifdef HAVE_LIBXML2
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
Index: src/external/mpl/bind/dist/bin/named/server.c
diff -u src/external/mpl/bind/dist/bin/named/server.c:1.19 src/external/mpl/bind/dist/bin/named/server.c:1.20
--- src/external/mpl/bind/dist/bin/named/server.c:1.19 Wed Jan 25 16:43:23 2023
+++ src/external/mpl/bind/dist/bin/named/server.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: server.c,v 1.19 2023/01/25 21:43:23 christos Exp $ */
+/* $NetBSD: server.c,v 1.20 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -2673,6 +2673,7 @@ configure_rpz(dns_view_t *view, dns_view
if (*old_rpz_okp) {
dns_rpz_detach_rpzs(&view->rpzs);
dns_rpz_attach_rpzs(pview->rpzs, &view->rpzs);
+ dns_rpz_detach_rpzs(&pview->rpzs);
} else if (old != NULL && pview != NULL) {
++pview->rpzs->rpz_ver;
view->rpzs->rpz_ver = pview->rpzs->rpz_ver;
@@ -3175,6 +3176,7 @@ configure_catz(dns_view_t *view, dns_vie
if (old != NULL) {
dns_catz_catzs_detach(&view->catzs);
dns_catz_catzs_attach(pview->catzs, &view->catzs);
+ dns_catz_catzs_detach(&pview->catzs);
dns_catz_prereconfig(view->catzs);
}
@@ -3979,7 +3981,8 @@ configure_view(dns_view_t *view, dns_vie
const cfg_obj_t *dyndb_list, *plugin_list;
const cfg_obj_t *disabled;
const cfg_obj_t *obj, *obj2;
- const cfg_listelt_t *element;
+ const cfg_listelt_t *element = NULL;
+ const cfg_listelt_t *zone_element_latest = NULL;
in_port_t port;
dns_cache_t *cache = NULL;
isc_result_t result;
@@ -3996,7 +3999,6 @@ configure_view(dns_view_t *view, dns_vie
dns_dispatch_t *dispatch6 = NULL;
bool rpz_configured = false;
bool catz_configured = false;
- bool zones_configured = false;
bool reused_cache = false;
bool shared_cache = false;
int i = 0, j = 0, k = 0;
@@ -4100,8 +4102,8 @@ configure_view(dns_view_t *view, dns_vie
CHECK(configure_zone(config, zconfig, vconfig, mctx, view,
viewlist, kasplist, actx, false,
old_rpz_ok, false));
+ zone_element_latest = element;
}
- zones_configured = true;
/*
* Check that a master or slave zone was found for each
@@ -5880,9 +5882,6 @@ cleanup:
named_config_get(maps, "catalog-zones", &obj) ==
ISC_R_SUCCESS)
{
- if (pview->catzs != NULL) {
- dns_catz_catzs_detach(&pview->catzs);
- }
/*
* We are swapping the places of the `view` and
* `pview` in the function's parameters list
@@ -5910,7 +5909,7 @@ cleanup:
dns_view_detach(&pview);
}
- if (zones_configured) {
+ if (zone_element_latest != NULL) {
for (element = cfg_list_first(zonelist);
element != NULL; element = cfg_list_next(element))
{
@@ -5918,6 +5917,13 @@ cleanup:
cfg_listelt_value(element);
configure_zone_setviewcommit(result, zconfig,
view);
+ if (element == zone_element_latest) {
+ /*
+ * This was the latest element that was
+ * successfully configured earlier.
+ */
+ break;
+ }
}
}
}
@@ -6772,6 +6778,7 @@ add_keydata_zone(dns_view_t *view, const
dns_zone_attach(pview->managed_keys,
&view->managed_keys);
dns_zone_setview(pview->managed_keys, view);
+ dns_zone_setviewcommit(pview->managed_keys);
dns_view_detach(&pview);
dns_zone_synckeyzone(view->managed_keys);
return (ISC_R_SUCCESS);
@@ -9291,8 +9298,8 @@ load_configuration(const char *filename,
logobj = NULL;
(void)cfg_map_get(config, "logging", &logobj);
if (logobj != NULL) {
- CHECKM(named_logconfig(logc, logobj), "configuring "
- "logging");
+ CHECKM(named_logconfig(logc, logobj),
+ "configuring logging");
} else {
named_log_setdefaultchannels(logc);
CHECKM(named_log_setunmatchedcategory(logc),
@@ -9663,6 +9670,7 @@ view_loaded(void *arg) {
if (isc_refcount_decrement(&zl->refs) == 1) {
named_server_t *server = zl->server;
bool reconfig = zl->reconfig;
+ dns_view_t *view = NULL;
isc_refcount_destroy(&zl->refs);
isc_mem_put(server->mctx, zl, sizeof(*zl));
@@ -9683,6 +9691,28 @@ view_loaded(void *arg) {
"all zones loaded");
}
+ for (view = ISC_LIST_HEAD(server->viewlist); view != NULL;
+ view = ISC_LIST_NEXT(view, link))
+ {
+ if (view->managed_keys != NULL) {
+ result = dns_zone_synckeyzone(
+ view->managed_keys);
+ if (result != ISC_R_SUCCESS) {
+ isc_log_write(
+ named_g_lctx,
+ DNS_LOGCATEGORY_DNSSEC,
+ DNS_LOGMODULE_DNSSEC,
+ ISC_LOG_ERROR,
+ "failed to initialize "
+ "managed-keys for view %s "
+ "(%s): DNSSEC validation is "
+ "at risk",
+ view->name,
+ isc_result_totext(result));
+ }
+ }
+ }
+
CHECKFATAL(dns_zonemgr_forcemaint(server->zonemgr),
"forcing zone maintenance");
@@ -9931,10 +9961,10 @@ shutdown_server(isc_task_t *task, isc_ev
isc_mem_put(server->mctx, nsc, sizeof(*nsc));
}
- isc_timer_detach(&server->interface_timer);
- isc_timer_detach(&server->heartbeat_timer);
- isc_timer_detach(&server->pps_timer);
- isc_timer_detach(&server->tat_timer);
+ isc_timer_destroy(&server->interface_timer);
+ isc_timer_destroy(&server->heartbeat_timer);
+ isc_timer_destroy(&server->pps_timer);
+ isc_timer_destroy(&server->tat_timer);
ns_interfacemgr_detach(&server->interfacemgr);
Index: src/external/mpl/bind/dist/bin/named/zoneconf.c
diff -u src/external/mpl/bind/dist/bin/named/zoneconf.c:1.13 src/external/mpl/bind/dist/bin/named/zoneconf.c:1.14
--- src/external/mpl/bind/dist/bin/named/zoneconf.c:1.13 Wed Jan 25 16:43:23 2023
+++ src/external/mpl/bind/dist/bin/named/zoneconf.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: zoneconf.c,v 1.13 2023/01/25 21:43:23 christos Exp $ */
+/* $NetBSD: zoneconf.c,v 1.14 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -927,8 +927,8 @@ named_zone_configure(const cfg_obj_t *co
maps[i] = NULL;
if (vconfig != NULL) {
- RETERR(named_config_getclass(cfg_tuple_get(vconfig, "class"),
- dns_rdataclass_in, &vclass));
+ CHECK(named_config_getclass(cfg_tuple_get(vconfig, "class"),
+ dns_rdataclass_in, &vclass));
} else {
vclass = dns_rdataclass_in;
}
@@ -939,8 +939,8 @@ named_zone_configure(const cfg_obj_t *co
zname = cfg_obj_asstring(cfg_tuple_get(zconfig, "name"));
- RETERR(named_config_getclass(cfg_tuple_get(zconfig, "class"), vclass,
- &zclass));
+ CHECK(named_config_getclass(cfg_tuple_get(zconfig, "class"), vclass,
+ &zclass));
dns_zone_setclass(zone, zclass);
if (raw != NULL) {
dns_zone_setclass(raw, zclass);
@@ -960,7 +960,7 @@ named_zone_configure(const cfg_obj_t *co
cpval = isc_mem_strdup(mctx, cfg_obj_asstring(obj));
}
if (cpval == NULL) {
- return (ISC_R_NOMEMORY);
+ CHECK(ISC_R_NOMEMORY);
}
obj = NULL;
@@ -975,7 +975,7 @@ named_zone_configure(const cfg_obj_t *co
"zone '%s': both 'database' and 'dlz' "
"specified",
zname);
- return (ISC_R_FAILURE);
+ CHECK(ISC_R_FAILURE);
}
len = strlen(dlzname) + 5;
@@ -986,7 +986,7 @@ named_zone_configure(const cfg_obj_t *co
result = strtoargv(mctx, cpval, &dbargc, &dbargv);
if (result != ISC_R_SUCCESS && cpval != default_dbtype) {
isc_mem_free(mctx, cpval);
- return (result);
+ CHECK(result);
}
/*
@@ -1016,7 +1016,7 @@ named_zone_configure(const cfg_obj_t *co
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_SERVER, ISC_LOG_ERROR,
"zone '%s': 'file' not specified", zname);
- return (ISC_R_FAILURE);
+ CHECK(ISC_R_FAILURE);
}
if (ztype == dns_zone_secondary || ztype == dns_zone_mirror) {
@@ -1054,7 +1054,7 @@ named_zone_configure(const cfg_obj_t *co
"can only be used with "
"'masterfile-format text'",
zname);
- return (ISC_R_FAILURE);
+ CHECK(ISC_R_FAILURE);
}
if (strcasecmp(masterstylestr, "full") == 0) {
@@ -1079,47 +1079,45 @@ named_zone_configure(const cfg_obj_t *co
size_t signedlen = strlen(filename) + sizeof(SIGNED);
char *signedname;
- RETERR(dns_zone_setfile(raw, filename, masterformat,
- masterstyle));
+ CHECK(dns_zone_setfile(raw, filename, masterformat,
+ masterstyle));
signedname = isc_mem_get(mctx, signedlen);
(void)snprintf(signedname, signedlen, "%s" SIGNED, filename);
result = dns_zone_setfile(zone, signedname,
dns_masterformat_raw, NULL);
isc_mem_put(mctx, signedname, signedlen);
- if (result != ISC_R_SUCCESS) {
- return (result);
- }
+ CHECK(result);
} else {
- RETERR(dns_zone_setfile(zone, filename, masterformat,
- masterstyle));
+ CHECK(dns_zone_setfile(zone, filename, masterformat,
+ masterstyle));
}
obj = NULL;
result = cfg_map_get(zoptions, "journal", &obj);
if (result == ISC_R_SUCCESS) {
- RETERR(dns_zone_setjournal(mayberaw, cfg_obj_asstring(obj)));
+ CHECK(dns_zone_setjournal(mayberaw, cfg_obj_asstring(obj)));
}
/*
* Notify messages are processed by the raw zone if it exists.
*/
if (ztype == dns_zone_secondary || ztype == dns_zone_mirror) {
- RETERR(configure_zone_acl(
- zconfig, vconfig, config, allow_notify, ac, mayberaw,
- dns_zone_setnotifyacl, dns_zone_clearnotifyacl));
+ CHECK(configure_zone_acl(zconfig, vconfig, config, allow_notify,
+ ac, mayberaw, dns_zone_setnotifyacl,
+ dns_zone_clearnotifyacl));
}
/*
* XXXAG This probably does not make sense for stubs.
*/
- RETERR(configure_zone_acl(zconfig, vconfig, config, allow_query, ac,
- zone, dns_zone_setqueryacl,
- dns_zone_clearqueryacl));
-
- RETERR(configure_zone_acl(zconfig, vconfig, config, allow_query_on, ac,
- zone, dns_zone_setqueryonacl,
- dns_zone_clearqueryonacl));
+ CHECK(configure_zone_acl(zconfig, vconfig, config, allow_query, ac,
+ zone, dns_zone_setqueryacl,
+ dns_zone_clearqueryacl));
+
+ CHECK(configure_zone_acl(zconfig, vconfig, config, allow_query_on, ac,
+ zone, dns_zone_setqueryonacl,
+ dns_zone_clearqueryonacl));
obj = NULL;
result = named_config_get(maps, "dialup", &obj);
@@ -1176,10 +1174,10 @@ named_zone_configure(const cfg_obj_t *co
rcvquerystats = NULL;
dnssecsignstats = NULL;
if (statlevel == dns_zonestat_full) {
- RETERR(isc_stats_create(mctx, &zoneqrystats,
- ns_statscounter_max));
- RETERR(dns_rdatatypestats_create(mctx, &rcvquerystats));
- RETERR(dns_dnssecsignstats_create(mctx, &dnssecsignstats));
+ CHECK(isc_stats_create(mctx, &zoneqrystats,
+ ns_statscounter_max));
+ CHECK(dns_rdatatypestats_create(mctx, &rcvquerystats));
+ CHECK(dns_dnssecsignstats_create(mctx, &dnssecsignstats));
}
dns_zone_setrequeststats(zone, zoneqrystats);
dns_zone_setrcvquerystats(zone, rcvquerystats);
@@ -1218,7 +1216,7 @@ named_zone_configure(const cfg_obj_t *co
ISC_LOG_ERROR,
"dnssec-policy '%s' not found ",
kaspname);
- RETERR(result);
+ CHECK(result);
}
dns_zone_setkasp(zone, kasp);
use_kasp = true;
@@ -1267,62 +1265,62 @@ named_zone_configure(const cfg_obj_t *co
dns_ipkeylist_t ipkl;
dns_ipkeylist_init(&ipkl);
- RETERR(named_config_getipandkeylist(config, "primaries",
- obj, mctx, &ipkl));
+ CHECK(named_config_getipandkeylist(config, "primaries",
+ obj, mctx, &ipkl));
result = dns_zone_setalsonotifydscpkeys(
zone, ipkl.addrs, ipkl.dscps, ipkl.keys,
ipkl.count);
dns_ipkeylist_clear(mctx, &ipkl);
- RETERR(result);
+ CHECK(result);
} else {
- RETERR(dns_zone_setalsonotify(zone, NULL, 0));
+ CHECK(dns_zone_setalsonotify(zone, NULL, 0));
}
obj = NULL;
result = named_config_get(maps, "parental-source", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setparentalsrc4(zone, cfg_obj_assockaddr(obj)));
+ CHECK(dns_zone_setparentalsrc4(zone, cfg_obj_assockaddr(obj)));
dscp = cfg_obj_getdscp(obj);
if (dscp == -1) {
dscp = named_g_dscp;
}
- RETERR(dns_zone_setparentalsrc4dscp(zone, dscp));
+ CHECK(dns_zone_setparentalsrc4dscp(zone, dscp));
named_add_reserved_dispatch(named_g_server,
cfg_obj_assockaddr(obj));
obj = NULL;
result = named_config_get(maps, "parental-source-v6", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setparentalsrc6(zone, cfg_obj_assockaddr(obj)));
+ CHECK(dns_zone_setparentalsrc6(zone, cfg_obj_assockaddr(obj)));
dscp = cfg_obj_getdscp(obj);
if (dscp == -1) {
dscp = named_g_dscp;
}
- RETERR(dns_zone_setparentalsrc6dscp(zone, dscp));
+ CHECK(dns_zone_setparentalsrc6dscp(zone, dscp));
named_add_reserved_dispatch(named_g_server,
cfg_obj_assockaddr(obj));
obj = NULL;
result = named_config_get(maps, "notify-source", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setnotifysrc4(zone, cfg_obj_assockaddr(obj)));
+ CHECK(dns_zone_setnotifysrc4(zone, cfg_obj_assockaddr(obj)));
dscp = cfg_obj_getdscp(obj);
if (dscp == -1) {
dscp = named_g_dscp;
}
- RETERR(dns_zone_setnotifysrc4dscp(zone, dscp));
+ CHECK(dns_zone_setnotifysrc4dscp(zone, dscp));
named_add_reserved_dispatch(named_g_server,
cfg_obj_assockaddr(obj));
obj = NULL;
result = named_config_get(maps, "notify-source-v6", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setnotifysrc6(zone, cfg_obj_assockaddr(obj)));
+ CHECK(dns_zone_setnotifysrc6(zone, cfg_obj_assockaddr(obj)));
dscp = cfg_obj_getdscp(obj);
if (dscp == -1) {
dscp = named_g_dscp;
}
- RETERR(dns_zone_setnotifysrc6dscp(zone, dscp));
+ CHECK(dns_zone_setnotifysrc6dscp(zone, dscp));
named_add_reserved_dispatch(named_g_server,
cfg_obj_assockaddr(obj));
@@ -1334,7 +1332,7 @@ named_zone_configure(const cfg_obj_t *co
dns_zone_setisself(zone, isself, named_g_server->interfacemgr);
- RETERR(configure_zone_acl(
+ CHECK(configure_zone_acl(
zconfig, vconfig, config, allow_transfer, ac, zone,
dns_zone_setxfracl, dns_zone_clearxfracl));
@@ -1372,7 +1370,7 @@ named_zone_configure(const cfg_obj_t *co
"%" PRId64 "' "
"is too large",
value);
- RETERR(ISC_R_RANGE);
+ CHECK(ISC_R_RANGE);
}
journal_size = (uint32_t)value;
}
@@ -1512,7 +1510,7 @@ named_zone_configure(const cfg_obj_t *co
"%" PRId64 "' "
"is too large",
value);
- RETERR(ISC_R_RANGE);
+ CHECK(ISC_R_RANGE);
}
journal_size = (uint32_t)value;
}
@@ -1542,9 +1540,9 @@ named_zone_configure(const cfg_obj_t *co
if (ztype == dns_zone_primary) {
dns_acl_t *updateacl;
- RETERR(configure_zone_acl(
- zconfig, vconfig, config, allow_update, ac, mayberaw,
- dns_zone_setupdateacl, dns_zone_clearupdateacl));
+ CHECK(configure_zone_acl(zconfig, vconfig, config, allow_update,
+ ac, mayberaw, dns_zone_setupdateacl,
+ dns_zone_clearupdateacl));
updateacl = dns_zone_getupdateacl(mayberaw);
if (updateacl != NULL && dns_acl_isinsecure(updateacl)) {
@@ -1555,7 +1553,7 @@ named_zone_configure(const cfg_obj_t *co
zname);
}
- RETERR(configure_zone_ssutable(zoptions, mayberaw, zname));
+ CHECK(configure_zone_ssutable(zoptions, mayberaw, zname));
}
/*
@@ -1632,7 +1630,7 @@ named_zone_configure(const cfg_obj_t *co
result = named_config_get(maps, "key-directory", &obj);
if (result == ISC_R_SUCCESS) {
filename = cfg_obj_asstring(obj);
- RETERR(dns_zone_setkeydirectory(zone, filename));
+ CHECK(dns_zone_setkeydirectory(zone, filename));
}
obj = NULL;
@@ -1674,8 +1672,8 @@ named_zone_configure(const cfg_obj_t *co
result = named_config_get(maps, "dnssec-loadkeys-interval",
&obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setrefreshkeyinterval(zone,
- cfg_obj_asuint32(obj)));
+ CHECK(dns_zone_setrefreshkeyinterval(zone,
+ cfg_obj_asuint32(obj)));
obj = NULL;
result = cfg_map_get(zoptions, "auto-dnssec", &obj);
@@ -1703,10 +1701,10 @@ named_zone_configure(const cfg_obj_t *co
}
if (ztype == dns_zone_secondary || ztype == dns_zone_mirror) {
- RETERR(configure_zone_acl(zconfig, vconfig, config,
- allow_update_forwarding, ac, mayberaw,
- dns_zone_setforwardacl,
- dns_zone_clearforwardacl));
+ CHECK(configure_zone_acl(zconfig, vconfig, config,
+ allow_update_forwarding, ac, mayberaw,
+ dns_zone_setforwardacl,
+ dns_zone_clearforwardacl));
}
/*%
@@ -1718,14 +1716,14 @@ named_zone_configure(const cfg_obj_t *co
if (obj != NULL) {
dns_ipkeylist_t ipkl;
dns_ipkeylist_init(&ipkl);
- RETERR(named_config_getipandkeylist(
+ CHECK(named_config_getipandkeylist(
config, "parental-agents", obj, mctx, &ipkl));
result = dns_zone_setparentals(zone, ipkl.addrs,
ipkl.keys, ipkl.count);
dns_ipkeylist_clear(mctx, &ipkl);
- RETERR(result);
+ CHECK(result);
} else {
- RETERR(dns_zone_setparentals(zone, NULL, NULL, 0));
+ CHECK(dns_zone_setparentals(zone, NULL, NULL, 0));
}
}
@@ -1896,7 +1894,7 @@ named_zone_configure(const cfg_obj_t *co
(void)cfg_map_get(zoptions, "allow-transfer", &obj);
if (obj == NULL) {
dns_acl_t *none;
- RETERR(dns_acl_none(mctx, &none));
+ CHECK(dns_acl_none(mctx, &none));
dns_zone_setxfracl(zone, none);
dns_acl_detach(&none);
}
@@ -1921,23 +1919,23 @@ named_zone_configure(const cfg_obj_t *co
result = named_config_getremotesdef(
named_g_config, "primaries",
DEFAULT_IANA_ROOT_ZONE_PRIMARIES, &obj);
- RETERR(result);
+ CHECK(result);
}
if (obj != NULL) {
dns_ipkeylist_t ipkl;
dns_ipkeylist_init(&ipkl);
- RETERR(named_config_getipandkeylist(config, "primaries",
- obj, mctx, &ipkl));
+ CHECK(named_config_getipandkeylist(config, "primaries",
+ obj, mctx, &ipkl));
result = dns_zone_setprimarieswithkeys(
mayberaw, ipkl.addrs, ipkl.keys, ipkl.count);
count = ipkl.count;
dns_ipkeylist_clear(mctx, &ipkl);
- RETERR(result);
+ CHECK(result);
} else {
result = dns_zone_setprimaries(mayberaw, NULL, 0);
}
- RETERR(result);
+ CHECK(result);
multi = false;
if (count > 1) {
@@ -1981,50 +1979,50 @@ named_zone_configure(const cfg_obj_t *co
obj = NULL;
result = named_config_get(maps, "transfer-source", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setxfrsource4(mayberaw,
- cfg_obj_assockaddr(obj)));
+ CHECK(dns_zone_setxfrsource4(mayberaw,
+ cfg_obj_assockaddr(obj)));
dscp = cfg_obj_getdscp(obj);
if (dscp == -1) {
dscp = named_g_dscp;
}
- RETERR(dns_zone_setxfrsource4dscp(mayberaw, dscp));
+ CHECK(dns_zone_setxfrsource4dscp(mayberaw, dscp));
named_add_reserved_dispatch(named_g_server,
cfg_obj_assockaddr(obj));
obj = NULL;
result = named_config_get(maps, "transfer-source-v6", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setxfrsource6(mayberaw,
- cfg_obj_assockaddr(obj)));
+ CHECK(dns_zone_setxfrsource6(mayberaw,
+ cfg_obj_assockaddr(obj)));
dscp = cfg_obj_getdscp(obj);
if (dscp == -1) {
dscp = named_g_dscp;
}
- RETERR(dns_zone_setxfrsource6dscp(mayberaw, dscp));
+ CHECK(dns_zone_setxfrsource6dscp(mayberaw, dscp));
named_add_reserved_dispatch(named_g_server,
cfg_obj_assockaddr(obj));
obj = NULL;
result = named_config_get(maps, "alt-transfer-source", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setaltxfrsource4(mayberaw,
- cfg_obj_assockaddr(obj)));
+ CHECK(dns_zone_setaltxfrsource4(mayberaw,
+ cfg_obj_assockaddr(obj)));
dscp = cfg_obj_getdscp(obj);
if (dscp == -1) {
dscp = named_g_dscp;
}
- RETERR(dns_zone_setaltxfrsource4dscp(mayberaw, dscp));
+ CHECK(dns_zone_setaltxfrsource4dscp(mayberaw, dscp));
obj = NULL;
result = named_config_get(maps, "alt-transfer-source-v6", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setaltxfrsource6(mayberaw,
- cfg_obj_assockaddr(obj)));
+ CHECK(dns_zone_setaltxfrsource6(mayberaw,
+ cfg_obj_assockaddr(obj)));
dscp = cfg_obj_getdscp(obj);
if (dscp == -1) {
dscp = named_g_dscp;
}
- RETERR(dns_zone_setaltxfrsource6dscp(mayberaw, dscp));
+ CHECK(dns_zone_setaltxfrsource6dscp(mayberaw, dscp));
obj = NULL;
(void)named_config_get(maps, "use-alt-transfer-source", &obj);
@@ -2052,15 +2050,21 @@ named_zone_configure(const cfg_obj_t *co
break;
case dns_zone_staticstub:
- RETERR(configure_staticstub(zoptions, zone, zname,
- default_dbtype));
+ CHECK(configure_staticstub(zoptions, zone, zname,
+ default_dbtype));
break;
default:
break;
}
- return (ISC_R_SUCCESS);
+ result = ISC_R_SUCCESS;
+
+cleanup:
+ if (kasp != NULL) {
+ dns_kasp_detach(&kasp);
+ }
+ return (result);
}
/*
Index: src/external/mpl/bind/dist/bin/nsupdate/nsupdate.c
diff -u src/external/mpl/bind/dist/bin/nsupdate/nsupdate.c:1.12 src/external/mpl/bind/dist/bin/nsupdate/nsupdate.c:1.13
--- src/external/mpl/bind/dist/bin/nsupdate/nsupdate.c:1.12 Wed Jan 25 16:43:23 2023
+++ src/external/mpl/bind/dist/bin/nsupdate/nsupdate.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: nsupdate.c,v 1.12 2023/01/25 21:43:23 christos Exp $ */
+/* $NetBSD: nsupdate.c,v 1.13 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -2707,8 +2707,8 @@ recvsoa(isc_task_t *task, isc_event_t *e
dns_request_destroy(&request);
dns_message_detach(&soaquery);
ddebug("Out of recvsoa");
- done_update();
seenerror = true;
+ done_update();
return;
}
@@ -2815,7 +2815,14 @@ lookforsoa:
master_total = get_addresses(serverstr, dnsport, master_servers,
master_alloc);
if (master_total == 0) {
- exit(1);
+ seenerror = true;
+ dns_rdata_freestruct(&soa);
+ dns_message_detach(&soaquery);
+ dns_request_destroy(&request);
+ dns_message_detach(&rcvmsg);
+ ddebug("Out of recvsoa");
+ done_update();
+ return;
}
master_inuse = 0;
} else {
Index: src/external/mpl/bind/dist/bin/rndc/rndc.c
diff -u src/external/mpl/bind/dist/bin/rndc/rndc.c:1.9 src/external/mpl/bind/dist/bin/rndc/rndc.c:1.10
--- src/external/mpl/bind/dist/bin/rndc/rndc.c:1.9 Wed Jan 25 16:43:24 2023
+++ src/external/mpl/bind/dist/bin/rndc/rndc.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rndc.c,v 1.9 2023/01/25 21:43:24 christos Exp $ */
+/* $NetBSD: rndc.c,v 1.10 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -123,7 +123,7 @@ command is one of the following:\n\
Requires the zone to have a dnssec-policy.\n\
dnstap -reopen\n\
Close, truncate and re-open the DNSTAP output file.\n\
- dnstap -roll count\n\
+ dnstap -roll [count]\n\
Close, rename and re-open the DNSTAP output file(s).\n\
dumpdb [-all|-cache|-zones|-adb|-bad|-expired|-fail] [view ...]\n\
Dump cache(s) to the dump file (named_dump.db).\n\
Index: src/external/mpl/bind/dist/bin/tests/optional/ratelimiter_test.c
diff -u src/external/mpl/bind/dist/bin/tests/optional/ratelimiter_test.c:1.6 src/external/mpl/bind/dist/bin/tests/optional/ratelimiter_test.c:1.7
--- src/external/mpl/bind/dist/bin/tests/optional/ratelimiter_test.c:1.6 Fri Sep 23 08:15:23 2022
+++ src/external/mpl/bind/dist/bin/tests/optional/ratelimiter_test.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ratelimiter_test.c,v 1.6 2022/09/23 12:15:23 christos Exp $ */
+/* $NetBSD: ratelimiter_test.c,v 1.7 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -88,7 +88,7 @@ shutdown_all(isc_task_t *task, isc_event
UNUSED(event);
printf("shutdown all\n");
for (i = 0; i < NEVENTS; i++) {
- isc_timer_detach(&timers[i]);
+ isc_timer_destroy(&timers[i]);
}
isc_app_shutdown();
Index: src/external/mpl/bind/dist/bin/tests/optional/sock_test.c
diff -u src/external/mpl/bind/dist/bin/tests/optional/sock_test.c:1.6 src/external/mpl/bind/dist/bin/tests/optional/sock_test.c:1.7
--- src/external/mpl/bind/dist/bin/tests/optional/sock_test.c:1.6 Fri Sep 23 08:15:23 2022
+++ src/external/mpl/bind/dist/bin/tests/optional/sock_test.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: sock_test.c,v 1.6 2022/09/23 12:15:23 christos Exp $ */
+/* $NetBSD: sock_test.c,v 1.7 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -247,7 +247,7 @@ timeout(isc_task_t *task, isc_event_t *e
printf("Timeout, canceling IO on socket %p (task %p)\n", sock, task);
isc_socket_cancel(sock, NULL, ISC_SOCKCANCEL_ALL);
- isc_timer_detach((isc_timer_t **)&event->ev_sender);
+ isc_timer_destroy((isc_timer_t **)&event->ev_sender);
isc_event_free(&event);
}
Index: src/external/mpl/bind/dist/bin/tests/optional/task_test.c
diff -u src/external/mpl/bind/dist/bin/tests/optional/task_test.c:1.6 src/external/mpl/bind/dist/bin/tests/optional/task_test.c:1.7
--- src/external/mpl/bind/dist/bin/tests/optional/task_test.c:1.6 Fri Sep 23 08:15:23 2022
+++ src/external/mpl/bind/dist/bin/tests/optional/task_test.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: task_test.c,v 1.6 2022/09/23 12:15:23 christos Exp $ */
+/* $NetBSD: task_test.c,v 1.7 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -196,8 +196,8 @@ main(int argc, char *argv[]) {
Sleep(10000);
#endif /* ifndef WIN32 */
printf("destroy\n");
- isc_timer_detach(&ti1);
- isc_timer_detach(&ti2);
+ isc_timer_destroy(&ti1);
+ isc_timer_destroy(&ti2);
isc_timermgr_destroy(&timgr);
isc_managers_destroy(&netmgr, &taskmgr);
printf("destroyed\n");
Index: src/external/mpl/bind/dist/bin/tests/optional/rbt_test.c
diff -u src/external/mpl/bind/dist/bin/tests/optional/rbt_test.c:1.7 src/external/mpl/bind/dist/bin/tests/optional/rbt_test.c:1.8
--- src/external/mpl/bind/dist/bin/tests/optional/rbt_test.c:1.7 Wed Jan 25 16:43:24 2023
+++ src/external/mpl/bind/dist/bin/tests/optional/rbt_test.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rbt_test.c,v 1.7 2023/01/25 21:43:24 christos Exp $ */
+/* $NetBSD: rbt_test.c,v 1.8 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -186,8 +186,8 @@ iterate(dns_rbt_t *rbt, bool forward) {
dns_rbtnodechain_t chain;
dns_fixedname_t fixedorigin;
isc_result_t result;
- isc_result_t (*move)(dns_rbtnodechain_t * chain, dns_name_t * name,
- dns_name_t * origin);
+ isc_result_t (*move)(dns_rbtnodechain_t *chain, dns_name_t *name,
+ dns_name_t *origin);
dns_rbtnodechain_init(&chain);
Index: src/external/mpl/bind/dist/bin/tests/optional/shutdown_test.c
diff -u src/external/mpl/bind/dist/bin/tests/optional/shutdown_test.c:1.7 src/external/mpl/bind/dist/bin/tests/optional/shutdown_test.c:1.8
--- src/external/mpl/bind/dist/bin/tests/optional/shutdown_test.c:1.7 Fri Sep 23 08:15:23 2022
+++ src/external/mpl/bind/dist/bin/tests/optional/shutdown_test.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: shutdown_test.c,v 1.7 2022/09/23 12:15:23 christos Exp $ */
+/* $NetBSD: shutdown_test.c,v 1.8 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -75,7 +75,7 @@ shutdown_action(isc_task_t *task, isc_ev
printf("task %s (%p) shutdown\n", info->name, task);
if (strcmp(info->name, "0") == 0) {
- isc_timer_detach(&info->timer);
+ isc_timer_destroy(&info->timer);
nevent = isc_event_allocate(info->mctx, info, T2_SHUTDOWNOK,
t2_shutdown, &tasks[1],
sizeof(*event));
@@ -106,7 +106,7 @@ tick(isc_task_t *task, isc_event_t *even
if (info->ticks == 10) {
isc_app_shutdown();
} else if (info->ticks >= 15 && info->exiting) {
- isc_timer_detach(&info->timer);
+ isc_timer_destroy(&info->timer);
isc_task_detach(&info->task);
nevent = isc_event_allocate(
info->mctx, info, T2_SHUTDOWNDONE, t1_shutdown,
@@ -116,7 +116,7 @@ tick(isc_task_t *task, isc_event_t *even
isc_task_detach(&info->peer);
}
} else if (strcmp(info->name, "foo") == 0) {
- isc_timer_detach(&info->timer);
+ isc_timer_destroy(&info->timer);
nevent = isc_event_allocate(info->mctx, info, FOO_EVENT,
foo_event, task, sizeof(*event));
RUNTIME_CHECK(nevent != NULL);
Index: src/external/mpl/bind/dist/bin/tests/optional/timer_test.c
diff -u src/external/mpl/bind/dist/bin/tests/optional/timer_test.c:1.7 src/external/mpl/bind/dist/bin/tests/optional/timer_test.c:1.8
--- src/external/mpl/bind/dist/bin/tests/optional/timer_test.c:1.7 Fri Sep 23 08:15:23 2022
+++ src/external/mpl/bind/dist/bin/tests/optional/timer_test.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: timer_test.c,v 1.7 2022/09/23 12:15:23 christos Exp $ */
+/* $NetBSD: timer_test.c,v 1.8 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -166,9 +166,9 @@ main(int argc, char *argv[]) {
Sleep(15000);
#endif /* ifndef WIN32 */
printf("destroy\n");
- isc_timer_detach(&ti1);
- isc_timer_detach(&ti2);
- isc_timer_detach(&ti3);
+ isc_timer_destroy(&ti1);
+ isc_timer_destroy(&ti2);
+ isc_timer_destroy(&ti3);
#ifndef WIN32
sleep(2);
#else /* ifndef WIN32 */
Index: src/external/mpl/bind/dist/bin/tests/system/feature-test.c
diff -u src/external/mpl/bind/dist/bin/tests/system/feature-test.c:1.10 src/external/mpl/bind/dist/bin/tests/system/feature-test.c:1.11
--- src/external/mpl/bind/dist/bin/tests/system/feature-test.c:1.10 Wed Jan 25 16:43:24 2023
+++ src/external/mpl/bind/dist/bin/tests/system/feature-test.c Mon Jun 26 18:02:59 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: feature-test.c,v 1.10 2023/01/25 21:43:24 christos Exp $ */
+/* $NetBSD: feature-test.c,v 1.11 2023/06/26 22:02:59 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -19,6 +19,7 @@
#include <string.h>
#include <unistd.h>
+#include <isc/md.h>
#include <isc/net.h>
#include <isc/print.h>
#include <isc/util.h>
@@ -47,6 +48,7 @@ usage() {
fprintf(stderr, "\t--have-json-c\n");
fprintf(stderr, "\t--have-libxml2\n");
fprintf(stderr, "\t--ipv6only=no\n");
+ fprintf(stderr, "\t--md5\n");
fprintf(stderr, "\t--tsan\n");
fprintf(stderr, "\t--with-dlz-filesystem\n");
fprintf(stderr, "\t--with-idn\n");
@@ -176,6 +178,20 @@ main(int argc, char **argv) {
#endif /* ifdef WIN32 */
}
+ if (strcmp(argv[1], "--md5") == 0) {
+ unsigned char digest[ISC_MAX_MD_SIZE];
+ const unsigned char test[] = "test";
+ unsigned int size = sizeof(digest);
+
+ if (isc_md(ISC_MD_MD5, test, sizeof(test), digest, &size) ==
+ ISC_R_SUCCESS)
+ {
+ return (0);
+ } else {
+ return (1);
+ }
+ }
+
if (strcmp(argv[1], "--tsan") == 0) {
#if defined(__has_feature)
#if __has_feature(thread_sanitizer)
Index: src/external/mpl/bind/dist/fuzz/fuzz.h
diff -u src/external/mpl/bind/dist/fuzz/fuzz.h:1.5 src/external/mpl/bind/dist/fuzz/fuzz.h:1.6
--- src/external/mpl/bind/dist/fuzz/fuzz.h:1.5 Fri Sep 23 08:15:29 2022
+++ src/external/mpl/bind/dist/fuzz/fuzz.h Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: fuzz.h,v 1.5 2022/09/23 12:15:29 christos Exp $ */
+/* $NetBSD: fuzz.h,v 1.6 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -32,16 +32,4 @@ extern bool debug;
int
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
-static isc_mem_t *mctx = NULL;
-
-static void __attribute__((constructor)) init(void) {
- isc_mem_create(&mctx);
- RUNTIME_CHECK(dst_lib_init(mctx, NULL) == ISC_R_SUCCESS);
-}
-
-static void __attribute__((destructor)) deinit(void) {
- dst_lib_destroy();
- isc_mem_destroy(&mctx);
-}
-
ISC_LANG_ENDDECLS
Index: src/external/mpl/bind/dist/lib/dns/catz.c
diff -u src/external/mpl/bind/dist/lib/dns/catz.c:1.9 src/external/mpl/bind/dist/lib/dns/catz.c:1.10
--- src/external/mpl/bind/dist/lib/dns/catz.c:1.9 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/catz.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: catz.c,v 1.9 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: catz.c,v 1.10 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -632,7 +632,7 @@ cleanup_ht:
isc_ht_destroy(&new_zones->zones);
isc_refcount_destroy(&new_zones->refs);
isc_mutex_destroy(&new_zones->lock);
- isc_mem_put(mctx, new_zones, sizeof(*new_zones));
+ isc_mem_putanddetach(&new_zones->mctx, new_zones, sizeof(*new_zones));
return (result);
}
@@ -754,8 +754,10 @@ dns_catz_get_zone(dns_catz_zones_t *catz
REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
+ LOCK(&catzs->lock);
result = isc_ht_find(catzs->zones, name->ndata, name->length,
(void **)&found);
+ UNLOCK(&catzs->lock);
if (result != ISC_R_SUCCESS) {
return (NULL);
}
@@ -810,7 +812,7 @@ dns_catz_zone_detach(dns_catz_zone_t **z
isc_ht_destroy(&zone->entries);
}
zone->magic = 0;
- isc_timer_detach(&zone->updatetimer);
+ isc_timer_destroy(&zone->updatetimer);
if (zone->db_registered) {
dns_db_updatenotify_unregister(
zone->db, dns_catz_dbupdate_callback,
@@ -1763,6 +1765,8 @@ dns_catz_dbupdate_callback(dns_db_t *db,
if (zone->dbversion != NULL) {
dns_db_closeversion(zone->db, &zone->dbversion, false);
}
+ dns_db_updatenotify_unregister(
+ zone->db, dns_catz_dbupdate_callback, zone->catzs);
dns_db_detach(&zone->db);
/*
* We're not registering db update callback, it will be
@@ -1860,6 +1864,14 @@ dns_catz_update_from_db(dns_db_t *db, dn
return;
}
+ if (!oldzone->active) {
+ /* This can happen during a reconfiguration. */
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
+ DNS_LOGMODULE_MASTER, ISC_LOG_INFO,
+ "catz: zone '%s' is no longer active", bname);
+ return;
+ }
+
isc_buffer_init(&ibname, bname, DNS_NAME_FORMATSIZE);
result = dns_name_totext(&db->origin, true, &ibname);
INSIST(result == ISC_R_SUCCESS);
@@ -2028,6 +2040,7 @@ dns_catz_prereconfig(dns_catz_zones_t *c
REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
+ LOCK(&catzs->lock);
isc_ht_iter_create(catzs->zones, &iter);
for (result = isc_ht_iter_first(iter); result == ISC_R_SUCCESS;
result = isc_ht_iter_next(iter))
@@ -2036,6 +2049,7 @@ dns_catz_prereconfig(dns_catz_zones_t *c
isc_ht_iter_current(iter, (void **)&zone);
zone->active = false;
}
+ UNLOCK(&catzs->lock);
INSIST(result == ISC_R_NOMORE);
isc_ht_iter_destroy(&iter);
}
Index: src/external/mpl/bind/dist/lib/dns/dnsrps.c
diff -u src/external/mpl/bind/dist/lib/dns/dnsrps.c:1.9 src/external/mpl/bind/dist/lib/dns/dnsrps.c:1.10
--- src/external/mpl/bind/dist/lib/dns/dnsrps.c:1.9 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/dnsrps.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: dnsrps.c,v 1.9 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: dnsrps.c,v 1.10 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -640,6 +640,7 @@ rpsdb_allrdatasets(dns_db_t *db, dns_dbn
rpsdb_iter->common.magic = DNS_RDATASETITER_MAGIC;
rpsdb_iter->common.methods = &rpsdb_rdatasetiter_methods;
rpsdb_iter->common.db = db;
+ rpsdb_iter->common.options = options;
rpsdb_attachnode(db, node, &rpsdb_iter->common.node);
*iteratorp = &rpsdb_iter->common;
Index: src/external/mpl/bind/dist/lib/dns/keymgr.c
diff -u src/external/mpl/bind/dist/lib/dns/keymgr.c:1.9 src/external/mpl/bind/dist/lib/dns/keymgr.c:1.10
--- src/external/mpl/bind/dist/lib/dns/keymgr.c:1.9 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/keymgr.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: keymgr.c,v 1.9 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: keymgr.c,v 1.10 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -2278,9 +2278,19 @@ keymgr_checkds(dns_kasp_t *kasp, dns_dns
}
if (dspublish) {
+ dst_key_state_t s;
dst_key_settime(ksk_key->key, DST_TIME_DSPUBLISH, when);
+ result = dst_key_getstate(ksk_key->key, DST_KEY_DS, &s);
+ if (result != ISC_R_SUCCESS || s != RUMOURED) {
+ dst_key_setstate(ksk_key->key, DST_KEY_DS, RUMOURED);
+ }
} else {
+ dst_key_state_t s;
dst_key_settime(ksk_key->key, DST_TIME_DSDELETE, when);
+ result = dst_key_getstate(ksk_key->key, DST_KEY_DS, &s);
+ if (result != ISC_R_SUCCESS || s != UNRETENTIVE) {
+ dst_key_setstate(ksk_key->key, DST_KEY_DS, UNRETENTIVE);
+ }
}
if (isc_log_wouldlog(dns_lctx, ISC_LOG_NOTICE)) {
Index: src/external/mpl/bind/dist/lib/dns/hmac_link.c
diff -u src/external/mpl/bind/dist/lib/dns/hmac_link.c:1.7 src/external/mpl/bind/dist/lib/dns/hmac_link.c:1.8
--- src/external/mpl/bind/dist/lib/dns/hmac_link.c:1.7 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/hmac_link.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: hmac_link.c,v 1.7 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: hmac_link.c,v 1.8 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -172,6 +172,7 @@ hmac_createctx(const isc_md_type_t *type
result = isc_hmac_init(ctx, hkey->key, isc_md_type_get_block_size(type),
type);
if (result != ISC_R_SUCCESS) {
+ isc_hmac_free(ctx);
return (DST_R_UNSUPPORTEDALG);
}
Index: src/external/mpl/bind/dist/lib/dns/request.c
diff -u src/external/mpl/bind/dist/lib/dns/request.c:1.7 src/external/mpl/bind/dist/lib/dns/request.c:1.8
--- src/external/mpl/bind/dist/lib/dns/request.c:1.7 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/request.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: request.c,v 1.7 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: request.c,v 1.8 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1300,6 +1300,9 @@ req_connected(isc_task_t *task, isc_even
req_log(ISC_LOG_DEBUG(3), "req_connected: request %p", request);
+ result = sevent->result;
+ isc_event_free(&event);
+
LOCK(&request->requestmgr->locks[request->hash]);
request->flags &= ~DNS_REQUEST_F_CONNECTING;
@@ -1314,7 +1317,6 @@ req_connected(isc_task_t *task, isc_even
}
} else {
dns_dispatch_starttcp(request->dispatch);
- result = sevent->result;
if (result == ISC_R_SUCCESS) {
result = req_send(request, task, NULL);
}
@@ -1325,13 +1327,13 @@ req_connected(isc_task_t *task, isc_even
}
}
UNLOCK(&request->requestmgr->locks[request->hash]);
- isc_event_free(&event);
}
static void
req_senddone(isc_task_t *task, isc_event_t *event) {
isc_socketevent_t *sevent = (isc_socketevent_t *)event;
dns_request_t *request = event->ev_arg;
+ isc_result_t result = sevent->result;
REQUIRE(event->ev_type == ISC_SOCKEVENT_SENDDONE);
REQUIRE(VALID_REQUEST(request));
@@ -1341,6 +1343,8 @@ req_senddone(isc_task_t *task, isc_event
UNUSED(task);
+ isc_event_free(&event);
+
LOCK(&request->requestmgr->locks[request->hash]);
request->flags &= ~DNS_REQUEST_F_SENDING;
@@ -1353,13 +1357,11 @@ req_senddone(isc_task_t *task, isc_event
} else {
send_if_done(request, ISC_R_CANCELED);
}
- } else if (sevent->result != ISC_R_SUCCESS) {
+ } else if (result != ISC_R_SUCCESS) {
req_cancel(request);
send_if_done(request, ISC_R_CANCELED);
}
UNLOCK(&request->requestmgr->locks[request->hash]);
-
- isc_event_free(&event);
}
static void
@@ -1409,14 +1411,18 @@ static void
req_timeout(isc_task_t *task, isc_event_t *event) {
dns_request_t *request = event->ev_arg;
isc_result_t result;
+ isc_eventtype_t ev_type = event->ev_type;
REQUIRE(VALID_REQUEST(request));
req_log(ISC_LOG_DEBUG(3), "req_timeout: request %p", request);
UNUSED(task);
+
+ isc_event_free(&event);
+
LOCK(&request->requestmgr->locks[request->hash]);
- if (event->ev_type == ISC_TIMEREVENT_TICK && request->udpcount-- != 0) {
+ if (ev_type == ISC_TIMEREVENT_TICK && request->udpcount-- != 0) {
if (!DNS_REQUEST_SENDING(request)) {
result = req_send(request, task, &request->destaddr);
if (result != ISC_R_SUCCESS) {
@@ -1430,7 +1436,6 @@ req_timeout(isc_task_t *task, isc_event_
send_if_done(request, ISC_R_TIMEDOUT);
}
UNLOCK(&request->requestmgr->locks[request->hash]);
- isc_event_free(&event);
}
static void
@@ -1473,7 +1478,7 @@ req_destroy(dns_request_t *request) {
dns_dispatch_detach(&request->dispatch);
}
if (request->timer != NULL) {
- isc_timer_detach(&request->timer);
+ isc_timer_destroy(&request->timer);
}
if (request->tsig != NULL) {
isc_buffer_free(&request->tsig);
@@ -1505,7 +1510,7 @@ req_cancel(dns_request_t *request) {
request->flags |= DNS_REQUEST_F_CANCELED;
if (request->timer != NULL) {
- isc_timer_detach(&request->timer);
+ isc_timer_destroy(&request->timer);
}
dispattr = dns_dispatch_getattributes(request->dispatch);
sock = NULL;
Index: src/external/mpl/bind/dist/lib/dns/keytable.c
diff -u src/external/mpl/bind/dist/lib/dns/keytable.c:1.8 src/external/mpl/bind/dist/lib/dns/keytable.c:1.9
--- src/external/mpl/bind/dist/lib/dns/keytable.c:1.8 Fri Sep 23 08:15:29 2022
+++ src/external/mpl/bind/dist/lib/dns/keytable.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: keytable.c,v 1.8 2022/09/23 12:15:29 christos Exp $ */
+/* $NetBSD: keytable.c,v 1.9 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -461,10 +461,6 @@ dns_keytable_deletekey(dns_keytable_t *k
REQUIRE(VALID_KEYTABLE(keytable));
REQUIRE(dnskey != NULL);
- isc_buffer_init(&b, data, sizeof(data));
- dns_rdata_fromstruct(&rdata, dnskey->common.rdclass,
- dns_rdatatype_dnskey, dnskey, &b);
-
RWLOCK(&keytable->rwlock, isc_rwlocktype_write);
result = dns_rbt_findnode(keytable->table, keyname, NULL, &node, NULL,
DNS_RBTFIND_NOOPTIONS, NULL, NULL);
@@ -491,6 +487,13 @@ dns_keytable_deletekey(dns_keytable_t *k
}
RWUNLOCK(&knode->rwlock, isc_rwlocktype_read);
+ isc_buffer_init(&b, data, sizeof(data));
+ result = dns_rdata_fromstruct(&rdata, dnskey->common.rdclass,
+ dns_rdatatype_dnskey, dnskey, &b);
+ if (result != ISC_R_SUCCESS) {
+ goto finish;
+ }
+
result = dns_ds_fromkeyrdata(keyname, &rdata, DNS_DSDIGEST_SHA256,
digest, &ds);
if (result != ISC_R_SUCCESS) {
Index: src/external/mpl/bind/dist/lib/dns/nta.c
diff -u src/external/mpl/bind/dist/lib/dns/nta.c:1.8 src/external/mpl/bind/dist/lib/dns/nta.c:1.9
--- src/external/mpl/bind/dist/lib/dns/nta.c:1.8 Fri Sep 23 08:15:30 2022
+++ src/external/mpl/bind/dist/lib/dns/nta.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: nta.c,v 1.8 2022/09/23 12:15:30 christos Exp $ */
+/* $NetBSD: nta.c,v 1.9 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -79,7 +79,7 @@ nta_detach(isc_mem_t *mctx, dns_nta_t **
(void)isc_timer_reset(nta->timer,
isc_timertype_inactive, NULL,
NULL, true);
- isc_timer_detach(&nta->timer);
+ isc_timer_destroy(&nta->timer);
}
if (dns_rdataset_isassociated(&nta->rdataset)) {
dns_rdataset_disassociate(&nta->rdataset);
@@ -295,6 +295,9 @@ settimer(dns_ntatable_t *ntatable, dns_n
result = isc_timer_create(ntatable->timermgr, isc_timertype_ticker,
NULL, &interval, ntatable->task, checkbogus,
nta, &nta->timer);
+ if (result != ISC_R_SUCCESS) {
+ isc_timer_destroy(&nta->timer);
+ }
return (result);
}
@@ -481,7 +484,7 @@ again:
(void)isc_timer_reset(nta->timer,
isc_timertype_inactive, NULL,
NULL, true);
- isc_timer_detach(&nta->timer);
+ isc_timer_destroy(&nta->timer);
}
result = deletenode(ntatable, foundname);
Index: src/external/mpl/bind/dist/lib/dns/master.c
diff -u src/external/mpl/bind/dist/lib/dns/master.c:1.10 src/external/mpl/bind/dist/lib/dns/master.c:1.11
--- src/external/mpl/bind/dist/lib/dns/master.c:1.10 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/master.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: master.c,v 1.10 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: master.c,v 1.11 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1103,7 +1103,7 @@ load_text(dns_loadctx_t *lctx) {
char *lhs = NULL;
char *gtype = NULL;
char *rhs = NULL;
- const char *source = "";
+ const char *source;
unsigned long line = 0;
bool explicit_ttl;
char classname1[DNS_RDATACLASS_FORMATSIZE];
Index: src/external/mpl/bind/dist/lib/dns/nsec3.c
diff -u src/external/mpl/bind/dist/lib/dns/nsec3.c:1.11 src/external/mpl/bind/dist/lib/dns/nsec3.c:1.12
--- src/external/mpl/bind/dist/lib/dns/nsec3.c:1.11 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/nsec3.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: nsec3.c,v 1.11 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: nsec3.c,v 1.12 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1445,7 +1445,7 @@ dns_nsec3_delnsec3(dns_db_t *db, dns_dbv
result = dns_dbiterator_seek(dbit, hashname);
if (result == ISC_R_NOTFOUND || result == DNS_R_PARTIALMATCH) {
- goto success;
+ goto cleanup_orphaned_ents;
}
if (result != ISC_R_SUCCESS) {
goto failure;
@@ -1457,7 +1457,7 @@ dns_nsec3_delnsec3(dns_db_t *db, dns_dbv
(isc_stdtime_t)0, &rdataset, NULL);
dns_db_detachnode(db, &node);
if (result == ISC_R_NOTFOUND) {
- goto success;
+ goto cleanup_orphaned_ents;
}
if (result != ISC_R_SUCCESS) {
goto failure;
@@ -1542,6 +1542,7 @@ dns_nsec3_delnsec3(dns_db_t *db, dns_dbv
/*
* Delete NSEC3 records for now non active nodes.
*/
+cleanup_orphaned_ents:
dns_name_init(&empty, NULL);
dns_name_clone(name, &empty);
do {
Index: src/external/mpl/bind/dist/lib/dns/rbt.c
diff -u src/external/mpl/bind/dist/lib/dns/rbt.c:1.12 src/external/mpl/bind/dist/lib/dns/rbt.c:1.13
--- src/external/mpl/bind/dist/lib/dns/rbt.c:1.12 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/rbt.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rbt.c,v 1.12 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: rbt.c,v 1.13 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -37,6 +37,7 @@
* efficient macro calls instead of functions for a few operations.
*/
#define DNS_NAME_USEINLINE 1
+#define ALIGNMENT_SIZE 8U /* see lib/isc/mem.c */
#include <unistd.h>
@@ -801,8 +802,12 @@ treefix(dns_rbt_t *rbt, void *base, size
return (ISC_R_SUCCESS);
}
+#define CHECK_ALIGNMENT(n) \
+ (((uintptr_t)n & ~((uintptr_t)ALIGNMENT_SIZE - 1)) == (uintptr_t)n)
+
CONFIRM((void *)n >= base);
CONFIRM((size_t)((char *)n - (char *)base) <= nodemax);
+ CONFIRM(CHECK_ALIGNMENT(n));
CONFIRM(DNS_RBTNODE_VALID(n));
dns_name_init(&nodename, NULL);
@@ -823,6 +828,7 @@ treefix(dns_rbt_t *rbt, void *base, size
CONFIRM(n->left <= (dns_rbtnode_t *)nodemax);
n->left = getleft(n, rbt->mmap_location);
n->left_is_relative = 0;
+ CONFIRM(CHECK_ALIGNMENT(n->left));
CONFIRM(DNS_RBTNODE_VALID(n->left));
} else {
CONFIRM(n->left == NULL);
@@ -832,6 +838,7 @@ treefix(dns_rbt_t *rbt, void *base, size
CONFIRM(n->right <= (dns_rbtnode_t *)nodemax);
n->right = getright(n, rbt->mmap_location);
n->right_is_relative = 0;
+ CONFIRM(CHECK_ALIGNMENT(n->right));
CONFIRM(DNS_RBTNODE_VALID(n->right));
} else {
CONFIRM(n->right == NULL);
@@ -842,6 +849,7 @@ treefix(dns_rbt_t *rbt, void *base, size
n->down = getdown(n, rbt->mmap_location);
n->down_is_relative = 0;
CONFIRM(n->down > (dns_rbtnode_t *)n);
+ CONFIRM(CHECK_ALIGNMENT(n->down));
CONFIRM(DNS_RBTNODE_VALID(n->down));
} else {
CONFIRM(n->down == NULL);
@@ -852,6 +860,7 @@ treefix(dns_rbt_t *rbt, void *base, size
n->parent = getparent(n, rbt->mmap_location);
n->parent_is_relative = 0;
CONFIRM(n->parent < (dns_rbtnode_t *)n);
+ CONFIRM(CHECK_ALIGNMENT(n->parent));
CONFIRM(DNS_RBTNODE_VALID(n->parent));
} else {
CONFIRM(n->parent == NULL);
@@ -862,6 +871,7 @@ treefix(dns_rbt_t *rbt, void *base, size
n->data = getdata(n, rbt->mmap_location);
n->data_is_relative = 0;
CONFIRM(n->data > (void *)n);
+ CONFIRM(CHECK_ALIGNMENT(n->data));
} else {
CONFIRM(n->data == NULL);
}
Index: src/external/mpl/bind/dist/lib/dns/rpz.c
diff -u src/external/mpl/bind/dist/lib/dns/rpz.c:1.12 src/external/mpl/bind/dist/lib/dns/rpz.c:1.13
--- src/external/mpl/bind/dist/lib/dns/rpz.c:1.12 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/rpz.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rpz.c,v 1.12 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: rpz.c,v 1.13 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -2232,7 +2232,7 @@ rpz_detach(dns_rpz_zone_t **rpzp) {
isc_timer_reset(rpz->updatetimer, isc_timertype_inactive, NULL,
NULL, true);
- isc_timer_detach(&rpz->updatetimer);
+ isc_timer_destroy(&rpz->updatetimer);
isc_ht_destroy(&rpz->nodes);
Index: src/external/mpl/bind/dist/lib/dns/validator.c
diff -u src/external/mpl/bind/dist/lib/dns/validator.c:1.12 src/external/mpl/bind/dist/lib/dns/validator.c:1.13
--- src/external/mpl/bind/dist/lib/dns/validator.c:1.12 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/validator.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: validator.c,v 1.12 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: validator.c,v 1.13 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1399,26 +1399,50 @@ selfsigned_dnskey(dns_validator_t *val)
continue;
}
- result = dns_dnssec_keyfromrdata(name, &keyrdata, mctx,
- &dstkey);
- if (result != ISC_R_SUCCESS) {
+ /*
+ * If the REVOKE bit is not set we have a
+ * theoretically self signed DNSKEY RRset.
+ * This will be verified later.
+ */
+ if ((key.flags & DNS_KEYFLAG_REVOKE) == 0) {
+ answer = true;
continue;
}
- result = dns_dnssec_verify(name, rdataset, dstkey, true,
- val->view->maxbits, mctx,
- &sigrdata, NULL);
- dst_key_free(&dstkey);
+ result = dns_dnssec_keyfromrdata(name, &keyrdata, mctx,
+ &dstkey);
if (result != ISC_R_SUCCESS) {
continue;
}
- if ((key.flags & DNS_KEYFLAG_REVOKE) == 0) {
- answer = true;
- continue;
+ /*
+ * If this RRset is pending and it is trusted,
+ * see if it was self signed by this DNSKEY.
+ */
+ if (DNS_TRUST_PENDING(rdataset->trust) &&
+ dns_view_istrusted(val->view, name, &key))
+ {
+ result = dns_dnssec_verify(
+ name, rdataset, dstkey, true,
+ val->view->maxbits, mctx, &sigrdata,
+ NULL);
+ if (result == ISC_R_SUCCESS) {
+ /*
+ * The key with the REVOKE flag has
+ * self signed the RRset so it is no
+ * good.
+ */
+ dns_view_untrust(val->view, name, &key);
+ }
+ } else if (rdataset->trust >= dns_trust_secure) {
+ /*
+ * We trust this RRset so if the key is
+ * marked revoked remove it.
+ */
+ dns_view_untrust(val->view, name, &key);
}
- dns_view_untrust(val->view, name, &key);
+ dst_key_free(&dstkey);
}
}
Index: src/external/mpl/bind/dist/lib/dns/xfrin.c
diff -u src/external/mpl/bind/dist/lib/dns/xfrin.c:1.12 src/external/mpl/bind/dist/lib/dns/xfrin.c:1.13
--- src/external/mpl/bind/dist/lib/dns/xfrin.c:1.12 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/xfrin.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: xfrin.c,v 1.12 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: xfrin.c,v 1.13 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -952,7 +952,7 @@ xfrin_create(isc_mem_t *mctx, dns_zone_t
failure:
if (xfr->timer != NULL) {
- isc_timer_detach(&xfr->timer);
+ isc_timer_destroy(&xfr->timer);
}
if (dns_name_dynamic(&xfr->name)) {
dns_name_free(&xfr->name, xfr->mctx);
@@ -1582,7 +1582,7 @@ maybe_free(dns_xfrin_ctx_t *xfr) {
}
if (xfr->timer != NULL) {
- isc_timer_detach(&xfr->timer);
+ isc_timer_destroy(&xfr->timer);
}
if (xfr->task != NULL) {
Index: src/external/mpl/bind/dist/lib/dns/rbtdb.c
diff -u src/external/mpl/bind/dist/lib/dns/rbtdb.c:1.16 src/external/mpl/bind/dist/lib/dns/rbtdb.c:1.17
--- src/external/mpl/bind/dist/lib/dns/rbtdb.c:1.16 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/rbtdb.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rbtdb.c,v 1.16 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: rbtdb.c,v 1.17 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -607,7 +607,7 @@ static void
expire_header(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, bool tree_locked,
expire_t reason);
static void
-overmem_purge(dns_rbtdb_t *rbtdb, unsigned int locknum_start, isc_stdtime_t now,
+overmem_purge(dns_rbtdb_t *rbtdb, unsigned int locknum_start, size_t purgesize,
bool tree_locked);
static void
resign_insert(dns_rbtdb_t *rbtdb, int idx, rdatasetheader_t *newheader);
@@ -2787,7 +2787,7 @@ end:
* tree_lock(write) must be held.
*/
static isc_result_t
-add_wildcard_magic(dns_rbtdb_t *rbtdb, const dns_name_t *name) {
+add_wildcard_magic(dns_rbtdb_t *rbtdb, const dns_name_t *name, bool lock) {
isc_result_t result;
dns_name_t foundname;
dns_offsets_t offsets;
@@ -2807,7 +2807,15 @@ add_wildcard_magic(dns_rbtdb_t *rbtdb, c
node->nsec = DNS_RBT_NSEC_NORMAL;
}
node->find_callback = 1;
+ if (lock) {
+ NODE_LOCK(&rbtdb->node_locks[node->locknum].lock,
+ isc_rwlocktype_write);
+ }
node->wild = 1;
+ if (lock) {
+ NODE_UNLOCK(&rbtdb->node_locks[node->locknum].lock,
+ isc_rwlocktype_write);
+ }
return (ISC_R_SUCCESS);
}
@@ -2815,7 +2823,7 @@ add_wildcard_magic(dns_rbtdb_t *rbtdb, c
* tree_lock(write) must be held.
*/
static isc_result_t
-add_empty_wildcards(dns_rbtdb_t *rbtdb, const dns_name_t *name) {
+add_empty_wildcards(dns_rbtdb_t *rbtdb, const dns_name_t *name, bool lock) {
isc_result_t result;
dns_name_t foundname;
dns_offsets_t offsets;
@@ -2829,7 +2837,7 @@ add_empty_wildcards(dns_rbtdb_t *rbtdb,
dns_rbtnode_t *node = NULL; /* dummy */
dns_name_getlabelsequence(name, n - i, i, &foundname);
if (dns_name_iswildcard(&foundname)) {
- result = add_wildcard_magic(rbtdb, &foundname);
+ result = add_wildcard_magic(rbtdb, &foundname, lock);
if (result != ISC_R_SUCCESS) {
return (result);
}
@@ -2881,11 +2889,11 @@ findnodeintree(dns_rbtdb_t *rbtdb, dns_r
dns_rbt_namefromnode(node, &nodename);
node->locknum = node->hashval % rbtdb->node_lock_count;
if (tree == rbtdb->tree) {
- add_empty_wildcards(rbtdb, name);
+ add_empty_wildcards(rbtdb, name, true);
if (dns_name_iswildcard(name)) {
- result = add_wildcard_magic(rbtdb,
- name);
+ result = add_wildcard_magic(rbtdb, name,
+ true);
if (result != ISC_R_SUCCESS) {
RWUNLOCK(&rbtdb->tree_lock,
locktype);
@@ -6817,6 +6825,16 @@ cleanup:
static dns_dbmethods_t zone_methods;
+static size_t
+rdataset_size(rdatasetheader_t *header) {
+ if (!NONEXISTENT(header)) {
+ return (dns_rdataslab_size((unsigned char *)header,
+ sizeof(*header)));
+ }
+
+ return (sizeof(*header));
+}
+
static isc_result_t
addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
isc_stdtime_t now, dns_rdataset_t *rdataset, unsigned int options,
@@ -6981,7 +6999,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *
}
if (cache_is_overmem) {
- overmem_purge(rbtdb, rbtnode->locknum, now, tree_locked);
+ overmem_purge(rbtdb, rbtnode->locknum, rdataset_size(newheader),
+ tree_locked);
}
NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock,
@@ -7000,10 +7019,18 @@ addrdataset(dns_db_t *db, dns_dbnode_t *
}
header = isc_heap_element(rbtdb->heaps[rbtnode->locknum], 1);
- if (header != NULL && header->rdh_ttl + rbtdb->serve_stale_ttl <
- now - RBTDB_VIRTUAL)
- {
- expire_header(rbtdb, header, tree_locked, expire_ttl);
+ if (header != NULL) {
+ dns_ttl_t rdh_ttl = header->rdh_ttl;
+
+ /* Only account for stale TTL if cache is not overmem */
+ if (!cache_is_overmem) {
+ rdh_ttl += rbtdb->serve_stale_ttl;
+ }
+
+ if (rdh_ttl < now - RBTDB_VIRTUAL) {
+ expire_header(rbtdb, header, tree_locked,
+ expire_ttl);
+ }
}
/*
@@ -7451,7 +7478,7 @@ loading_addrdataset(void *arg, const dns
if (rdataset->type != dns_rdatatype_nsec3 &&
rdataset->covers != dns_rdatatype_nsec3)
{
- add_empty_wildcards(rbtdb, name);
+ add_empty_wildcards(rbtdb, name, false);
}
if (dns_name_iswildcard(name)) {
@@ -7467,7 +7494,7 @@ loading_addrdataset(void *arg, const dns
if (rdataset->type == dns_rdatatype_nsec3) {
return (DNS_R_INVALIDNSEC3);
}
- result = add_wildcard_magic(rbtdb, name);
+ result = add_wildcard_magic(rbtdb, name, false);
if (result != ISC_R_SUCCESS) {
return (result);
}
@@ -10541,52 +10568,58 @@ update_header(dns_rbtdb_t *rbtdb, rdatas
ISC_LIST_PREPEND(rbtdb->rdatasets[header->node->locknum], header, link);
}
+static size_t
+expire_lru_headers(dns_rbtdb_t *rbtdb, unsigned int locknum, size_t purgesize,
+ bool tree_locked) {
+ rdatasetheader_t *header, *header_prev;
+ size_t purged = 0;
+
+ for (header = ISC_LIST_TAIL(rbtdb->rdatasets[locknum]);
+ header != NULL && purged <= purgesize; header = header_prev)
+ {
+ header_prev = ISC_LIST_PREV(header, link);
+ /*
+ * Unlink the entry at this point to avoid checking it
+ * again even if it's currently used someone else and
+ * cannot be purged at this moment. This entry won't be
+ * referenced any more (so unlinking is safe) since the
+ * TTL was reset to 0.
+ */
+ ISC_LIST_UNLINK(rbtdb->rdatasets[locknum], header, link);
+ size_t header_size = rdataset_size(header);
+ expire_header(rbtdb, header, tree_locked, expire_lru);
+ purged += header_size;
+ }
+
+ return (purged);
+}
+
/*%
- * Purge some expired and/or stale (i.e. unused for some period) cache entries
- * under an overmem condition. To recover from this condition quickly, up to
- * 2 entries will be purged. This process is triggered while adding a new
- * entry, and we specifically avoid purging entries in the same LRU bucket as
- * the one to which the new entry will belong. Otherwise, we might purge
- * entries of the same name of different RR types while adding RRsets from a
- * single response (consider the case where we're adding A and AAAA glue records
- * of the same NS name).
+ * Purge some stale (i.e. unused for some period - LRU based cleaning) cache
+ * entries under the overmem condition. To recover from this condition quickly,
+ * we cleanup entries up to the size of newly added rdata (passed as purgesize).
+ *
+ * This process is triggered while adding a new entry, and we specifically avoid
+ * purging entries in the same LRU bucket as the one to which the new entry will
+ * belong. Otherwise, we might purge entries of the same name of different RR
+ * types while adding RRsets from a single response (consider the case where
+ * we're adding A and AAAA glue records of the same NS name).
*/
static void
-overmem_purge(dns_rbtdb_t *rbtdb, unsigned int locknum_start, isc_stdtime_t now,
+overmem_purge(dns_rbtdb_t *rbtdb, unsigned int locknum_start, size_t purgesize,
bool tree_locked) {
- rdatasetheader_t *header, *header_prev;
unsigned int locknum;
- int purgecount = 2;
+ size_t purged = 0;
for (locknum = (locknum_start + 1) % rbtdb->node_lock_count;
- locknum != locknum_start && purgecount > 0;
+ locknum != locknum_start && purged <= purgesize;
locknum = (locknum + 1) % rbtdb->node_lock_count)
{
NODE_LOCK(&rbtdb->node_locks[locknum].lock,
isc_rwlocktype_write);
- header = isc_heap_element(rbtdb->heaps[locknum], 1);
- if (header && header->rdh_ttl < now - RBTDB_VIRTUAL) {
- expire_header(rbtdb, header, tree_locked, expire_ttl);
- purgecount--;
- }
-
- for (header = ISC_LIST_TAIL(rbtdb->rdatasets[locknum]);
- header != NULL && purgecount > 0; header = header_prev)
- {
- header_prev = ISC_LIST_PREV(header, link);
- /*
- * Unlink the entry at this point to avoid checking it
- * again even if it's currently used someone else and
- * cannot be purged at this moment. This entry won't be
- * referenced any more (so unlinking is safe) since the
- * TTL was reset to 0.
- */
- ISC_LIST_UNLINK(rbtdb->rdatasets[locknum], header,
- link);
- expire_header(rbtdb, header, tree_locked, expire_lru);
- purgecount--;
- }
+ purged += expire_lru_headers(rbtdb, locknum, purgesize - purged,
+ tree_locked);
NODE_UNLOCK(&rbtdb->node_locks[locknum].lock,
isc_rwlocktype_write);
Index: src/external/mpl/bind/dist/lib/dns/resolver.c
diff -u src/external/mpl/bind/dist/lib/dns/resolver.c:1.16 src/external/mpl/bind/dist/lib/dns/resolver.c:1.17
--- src/external/mpl/bind/dist/lib/dns/resolver.c:1.16 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/resolver.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: resolver.c,v 1.16 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: resolver.c,v 1.17 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -4708,9 +4708,9 @@ fctx_destroy(fetchctx_t *fctx) {
isc_counter_detach(&fctx->qc);
fcount_decr(fctx);
- isc_timer_detach(&fctx->timer);
+ isc_timer_destroy(&fctx->timer);
if (fctx->timer_try_stale != NULL) {
- isc_timer_detach(&fctx->timer_try_stale);
+ isc_timer_destroy(&fctx->timer_try_stale);
}
dns_message_detach(&fctx->qmessage);
if (dns_name_countlabels(&fctx->domain) > 0) {
@@ -5485,8 +5485,8 @@ cleanup_mctx:
isc_mem_detach(&fctx->mctx);
dns_adb_detach(&fctx->adb);
dns_db_detach(&fctx->cache);
- isc_timer_detach(&fctx->timer);
- isc_timer_detach(&fctx->timer_try_stale);
+ isc_timer_destroy(&fctx->timer);
+ isc_timer_destroy(&fctx->timer_try_stale);
cleanup_qmessage:
dns_message_detach(&fctx->qmessage);
@@ -10488,7 +10488,7 @@ destroy(dns_resolver_t *res) {
#if USE_MBSLOCK
isc_rwlock_destroy(&res->mbslock);
#endif /* if USE_MBSLOCK */
- isc_timer_detach(&res->spillattimer);
+ isc_timer_destroy(&res->spillattimer);
res->magic = 0;
isc_mem_put(res->mctx, res, sizeof(*res));
}
Index: src/external/mpl/bind/dist/lib/dns/view.c
diff -u src/external/mpl/bind/dist/lib/dns/view.c:1.13 src/external/mpl/bind/dist/lib/dns/view.c:1.14
--- src/external/mpl/bind/dist/lib/dns/view.c:1.13 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/view.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: view.c,v 1.13 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: view.c,v 1.14 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1994,26 +1994,28 @@ dns_view_issecuredomain(dns_view_t *view
void
dns_view_untrust(dns_view_t *view, const dns_name_t *keyname,
- dns_rdata_dnskey_t *dnskey) {
+ const dns_rdata_dnskey_t *dnskey) {
isc_result_t result;
dns_keytable_t *sr = NULL;
+ dns_rdata_dnskey_t tmpkey;
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(keyname != NULL);
REQUIRE(dnskey != NULL);
- /*
- * Clear the revoke bit, if set, so that the key will match what's
- * in secroots now.
- */
- dnskey->flags &= ~DNS_KEYFLAG_REVOKE;
-
result = dns_view_getsecroots(view, &sr);
if (result != ISC_R_SUCCESS) {
return;
}
- result = dns_keytable_deletekey(sr, keyname, dnskey);
+ /*
+ * Clear the revoke bit, if set, so that the key will match what's
+ * in secroots now.
+ */
+ tmpkey = *dnskey;
+ tmpkey.flags &= ~DNS_KEYFLAG_REVOKE;
+
+ result = dns_keytable_deletekey(sr, keyname, &tmpkey);
if (result == ISC_R_SUCCESS) {
/*
* If key was found in secroots, then it was a
@@ -2028,6 +2030,88 @@ dns_view_untrust(dns_view_t *view, const
dns_keytable_detach(&sr);
}
+bool
+dns_view_istrusted(dns_view_t *view, const dns_name_t *keyname,
+ const dns_rdata_dnskey_t *dnskey) {
+ isc_result_t result;
+ dns_keytable_t *sr = NULL;
+ dns_keynode_t *knode = NULL;
+ bool answer = false;
+ dns_rdataset_t dsset;
+
+ REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(keyname != NULL);
+ REQUIRE(dnskey != NULL);
+
+ result = dns_view_getsecroots(view, &sr);
+ if (result != ISC_R_SUCCESS) {
+ return (false);
+ }
+
+ dns_rdataset_init(&dsset);
+ result = dns_keytable_find(sr, keyname, &knode);
+ if (result == ISC_R_SUCCESS) {
+ if (dns_keynode_dsset(knode, &dsset)) {
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ unsigned char data[4096], digest[DNS_DS_BUFFERSIZE];
+ dns_rdata_dnskey_t tmpkey = *dnskey;
+ dns_rdata_ds_t ds;
+ isc_buffer_t b;
+ dns_rdataclass_t rdclass = tmpkey.common.rdclass;
+
+ /*
+ * Clear the revoke bit, if set, so that the key
+ * will match what's in secroots now.
+ */
+ tmpkey.flags &= ~DNS_KEYFLAG_REVOKE;
+
+ isc_buffer_init(&b, data, sizeof(data));
+ result = dns_rdata_fromstruct(&rdata, rdclass,
+ dns_rdatatype_dnskey,
+ &tmpkey, &b);
+ if (result != ISC_R_SUCCESS) {
+ goto finish;
+ }
+
+ result = dns_ds_fromkeyrdata(keyname, &rdata,
+ DNS_DSDIGEST_SHA256,
+ digest, &ds);
+ if (result != ISC_R_SUCCESS) {
+ goto finish;
+ }
+
+ dns_rdata_reset(&rdata);
+ isc_buffer_init(&b, data, sizeof(data));
+ result = dns_rdata_fromstruct(
+ &rdata, rdclass, dns_rdatatype_ds, &ds, &b);
+ if (result != ISC_R_SUCCESS) {
+ goto finish;
+ }
+
+ result = dns_rdataset_first(&dsset);
+ while (result == ISC_R_SUCCESS) {
+ dns_rdata_t this = DNS_RDATA_INIT;
+ dns_rdataset_current(&dsset, &this);
+ if (dns_rdata_compare(&rdata, &this) == 0) {
+ answer = true;
+ break;
+ }
+ result = dns_rdataset_next(&dsset);
+ }
+ }
+ }
+
+finish:
+ if (dns_rdataset_isassociated(&dsset)) {
+ dns_rdataset_disassociate(&dsset);
+ }
+ if (knode != NULL) {
+ dns_keytable_detachkeynode(sr, &knode);
+ }
+ dns_keytable_detach(&sr);
+ return (answer);
+}
+
/*
* Create path to a directory and a filename constructed from viewname.
* This is a front-end to isc_file_sanitize(), allowing backward
Index: src/external/mpl/bind/dist/lib/dns/zone.c
diff -u src/external/mpl/bind/dist/lib/dns/zone.c:1.17 src/external/mpl/bind/dist/lib/dns/zone.c:1.18
--- src/external/mpl/bind/dist/lib/dns/zone.c:1.17 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/zone.c Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: zone.c,v 1.17 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: zone.c,v 1.18 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1259,6 +1259,8 @@ zone_free(dns_zone_t *zone) {
INSIST(zone->readio == NULL);
INSIST(zone->statelist == NULL);
INSIST(zone->writeio == NULL);
+ INSIST(zone->view == NULL);
+ INSIST(zone->prev_view == NULL);
if (zone->task != NULL) {
isc_task_detach(&zone->task);
@@ -1266,12 +1268,6 @@ zone_free(dns_zone_t *zone) {
if (zone->loadtask != NULL) {
isc_task_detach(&zone->loadtask);
}
- if (zone->view != NULL) {
- dns_view_weakdetach(&zone->view);
- }
- if (zone->prev_view != NULL) {
- dns_view_weakdetach(&zone->prev_view);
- }
/* Unmanaged objects */
while (!ISC_LIST_EMPTY(zone->setnsec3param_queue)) {
@@ -2421,6 +2417,9 @@ zone_asyncload(isc_task_t *task, isc_eve
(asl->loaded)(asl->loaded_arg, zone, task);
}
+ /* Reduce the quantum */
+ isc_task_setquantum(zone->loadtask, 1);
+
isc_mem_put(zone->mctx, asl, sizeof(*asl));
dns_zone_idetach(&zone);
}
@@ -4744,8 +4743,7 @@ sync_keyzone(dns_zone_t *zone, dns_db_t
}
failure:
- if (result != ISC_R_SUCCESS && !DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED))
- {
+ if (result != ISC_R_SUCCESS) {
dnssec_log(zone, ISC_LOG_ERROR,
"unable to synchronize managed keys: %s",
dns_result_totext(result));
@@ -5210,10 +5208,7 @@ zone_postload(dns_zone_t *zone, dns_db_t
break;
case dns_zone_key:
- result = sync_keyzone(zone, db);
- if (result != ISC_R_SUCCESS) {
- goto cleanup;
- }
+ /* Nothing needs to be done now */
break;
default:
@@ -5371,13 +5366,6 @@ zone_postload(dns_zone_t *zone, dns_db_t
goto done;
cleanup:
- if (zone->type == dns_zone_key && result != ISC_R_SUCCESS) {
- dnssec_log(zone, ISC_LOG_ERROR,
- "failed to initialize managed-keys (%s): "
- "DNSSEC validation is at risk",
- isc_result_totext(result));
- }
-
if (result != ISC_R_SUCCESS) {
dns_zone_rpz_disable_db(zone, db);
dns_zone_catz_disable_db(zone, db);
@@ -5866,11 +5854,11 @@ dns_zone_setkasp(dns_zone_t *zone, dns_k
LOCK_ZONE(zone);
if (zone->kasp != NULL) {
- dns_kasp_t *oldkasp = zone->kasp;
- zone->kasp = NULL;
- dns_kasp_detach(&oldkasp);
+ dns_kasp_detach(&zone->kasp);
+ }
+ if (kasp != NULL) {
+ dns_kasp_attach(kasp, &zone->kasp);
}
- zone->kasp = kasp;
UNLOCK_ZONE(zone);
}
@@ -7361,8 +7349,14 @@ zone_resigninc(dns_zone_t *zone) {
}
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
- dns_db_attach(zone->db, &db);
+ if (zone->db != NULL) {
+ dns_db_attach(zone->db, &db);
+ }
ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_read);
+ if (db == NULL) {
+ result = ISC_R_FAILURE;
+ goto failure;
+ }
result = dns_db_newversion(db, &version);
if (result != ISC_R_SUCCESS) {
@@ -9624,14 +9618,14 @@ zone_sign(dns_zone_t *zone) {
use_kasp ? "yes" : "no");
/* Determine which type of chain to build */
- if (use_kasp) {
- build_nsec3 = dns_kasp_nsec3(kasp);
- build_nsec = !build_nsec3;
- } else {
- CHECK(dns_private_chains(db, version, zone->privatetype,
- &build_nsec, &build_nsec3));
- /* If neither chain is found, default to NSEC */
- if (!build_nsec && !build_nsec3) {
+ CHECK(dns_private_chains(db, version, zone->privatetype, &build_nsec,
+ &build_nsec3));
+ if (!build_nsec && !build_nsec3) {
+ if (use_kasp) {
+ build_nsec3 = dns_kasp_nsec3(kasp);
+ build_nsec = !build_nsec3;
+ } else {
+ /* If neither chain is found, default to NSEC */
build_nsec = true;
}
}
@@ -11064,6 +11058,11 @@ retry_keyfetch(dns_keyfetch_t *kfetch, d
isc_time_t timenow, timethen;
dns_zone_t *zone = kfetch->zone;
bool free_needed;
+ char namebuf[DNS_NAME_FORMATSIZE];
+
+ dns_name_format(kname, namebuf, sizeof(namebuf));
+ dnssec_log(zone, ISC_LOG_WARNING,
+ "Failed to create fetch for %s DNSKEY update", namebuf);
/*
* Error during a key fetch; cancel and retry in an hour.
@@ -11075,8 +11074,6 @@ retry_keyfetch(dns_keyfetch_t *kfetch, d
dns_rdataset_disassociate(&kfetch->keydataset);
dns_name_free(kname, zone->mctx);
isc_mem_putanddetach(&kfetch->mctx, kfetch, sizeof(*kfetch));
- dnssec_log(zone, ISC_LOG_WARNING,
- "Failed to create fetch for DNSKEY update");
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_EXITING)) {
/* Don't really retry if we are exiting */
@@ -14939,6 +14936,7 @@ zone_shutdown(isc_task_t *task, isc_even
dns_zone_t *zone = (dns_zone_t *)event->ev_arg;
bool free_needed, linked = false;
dns_zone_t *raw = NULL, *secure = NULL;
+ dns_view_t *view = NULL, *prev_view = NULL;
UNUSED(task);
REQUIRE(DNS_ZONE_VALID(zone));
@@ -14984,6 +14982,17 @@ zone_shutdown(isc_task_t *task, isc_even
LOCK_ZONE(zone);
INSIST(zone != zone->raw);
+
+ /*
+ * Detach the views early, we don't need them anymore. However, we need
+ * to detach them outside of the zone lock to break the lock loop
+ * between view, adb and zone locks.
+ */
+ view = zone->view;
+ zone->view = NULL;
+ prev_view = zone->prev_view;
+ zone->prev_view = NULL;
+
if (linked) {
isc_refcount_decrement(&zone->irefs);
}
@@ -15018,7 +15027,7 @@ zone_shutdown(isc_task_t *task, isc_even
forward_cancel(zone);
if (zone->timer != NULL) {
- isc_timer_detach(&zone->timer);
+ isc_timer_destroy(&zone->timer);
isc_refcount_decrement(&zone->irefs);
}
@@ -15044,6 +15053,14 @@ zone_shutdown(isc_task_t *task, isc_even
zone->secure = NULL;
}
UNLOCK_ZONE(zone);
+
+ if (view != NULL) {
+ dns_view_weakdetach(&view);
+ }
+ if (prev_view != NULL) {
+ dns_view_weakdetach(&prev_view);
+ }
+
if (raw != NULL) {
dns_zone_detach(&raw);
}
@@ -19075,7 +19092,7 @@ dns_zonemgr_setsize(dns_zonemgr_t *zmgr,
pool = NULL;
if (zmgr->loadtasks == NULL) {
result = isc_taskpool_create(zmgr->taskmgr, zmgr->mctx, ntasks,
- 2, true, &pool);
+ UINT_MAX, true, &pool);
} else {
result = isc_taskpool_expand(&zmgr->loadtasks, ntasks, true,
&pool);
Index: src/external/mpl/bind/dist/lib/dns/include/dns/view.h
diff -u src/external/mpl/bind/dist/lib/dns/include/dns/view.h:1.8 src/external/mpl/bind/dist/lib/dns/include/dns/view.h:1.9
--- src/external/mpl/bind/dist/lib/dns/include/dns/view.h:1.8 Fri Sep 23 08:15:30 2022
+++ src/external/mpl/bind/dist/lib/dns/include/dns/view.h Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: view.h,v 1.8 2022/09/23 12:15:30 christos Exp $ */
+/* $NetBSD: view.h,v 1.9 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1199,7 +1199,7 @@ dns_view_ntacovers(dns_view_t *view, isc
void
dns_view_untrust(dns_view_t *view, const dns_name_t *keyname,
- dns_rdata_dnskey_t *dnskey);
+ const dns_rdata_dnskey_t *dnskey);
/*%<
* Remove keys that match 'keyname' and 'dnskey' from the views trust
* anchors.
@@ -1216,6 +1216,19 @@ dns_view_untrust(dns_view_t *view, const
* \li 'dnskey' is valid.
*/
+bool
+dns_view_istrusted(dns_view_t *view, const dns_name_t *keyname,
+ const dns_rdata_dnskey_t *dnskey);
+/*%<
+ * Determine if the key defined by 'keyname' and 'dnskey' is
+ * trusted by 'view'.
+ *
+ * Requires:
+ * \li 'view' is valid.
+ * \li 'keyname' is valid.
+ * \li 'dnskey' is valid.
+ */
+
isc_result_t
dns_view_setnewzones(dns_view_t *view, bool allow, void *cfgctx,
void (*cfg_destroy)(void **), uint64_t mapsize);
Index: src/external/mpl/bind/dist/lib/dns/include/dns/zt.h
diff -u src/external/mpl/bind/dist/lib/dns/include/dns/zt.h:1.7 src/external/mpl/bind/dist/lib/dns/include/dns/zt.h:1.8
--- src/external/mpl/bind/dist/lib/dns/include/dns/zt.h:1.7 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/include/dns/zt.h Mon Jun 26 18:03:00 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: zt.h,v 1.7 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: zt.h,v 1.8 2023/06/26 22:03:00 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -21,6 +21,7 @@
#include <stdbool.h>
#include <isc/lang.h>
+#include <isc/rwlock.h>
#include <dns/types.h>
Index: src/external/mpl/bind/dist/lib/irs/getaddrinfo.c
diff -u src/external/mpl/bind/dist/lib/irs/getaddrinfo.c:1.8 src/external/mpl/bind/dist/lib/irs/getaddrinfo.c:1.9
--- src/external/mpl/bind/dist/lib/irs/getaddrinfo.c:1.8 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/irs/getaddrinfo.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: getaddrinfo.c,v 1.8 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: getaddrinfo.c,v 1.9 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1358,7 +1358,8 @@ ai_concat(struct addrinfo *ai1, struct a
for (ai_tmp = ai1; ai_tmp != NULL && ai_tmp->ai_next != NULL;
ai_tmp = ai_tmp->ai_next)
- {}
+ {
+ }
ai_tmp->ai_next = ai2;
Index: src/external/mpl/bind/dist/lib/irs/resconf.c
diff -u src/external/mpl/bind/dist/lib/irs/resconf.c:1.6 src/external/mpl/bind/dist/lib/irs/resconf.c:1.7
--- src/external/mpl/bind/dist/lib/irs/resconf.c:1.6 Fri Sep 23 08:15:32 2022
+++ src/external/mpl/bind/dist/lib/irs/resconf.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: resconf.c,v 1.6 2022/09/23 12:15:32 christos Exp $ */
+/* $NetBSD: resconf.c,v 1.7 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -290,10 +290,6 @@ resconf_parsenameserver(irs_resconf_t *c
int cp;
isc_result_t result;
- if (conf->numns == RESCONFMAXNAMESERVERS) {
- return (ISC_R_SUCCESS);
- }
-
cp = getword(fp, word, sizeof(word));
if (strlen(word) == 0U) {
return (ISC_R_UNEXPECTEDEND); /* Nothing on line. */
@@ -305,6 +301,10 @@ resconf_parsenameserver(irs_resconf_t *c
return (ISC_R_UNEXPECTEDTOKEN); /* Extra junk on line. */
}
+ if (conf->numns == RESCONFMAXNAMESERVERS) {
+ return (ISC_R_SUCCESS);
+ }
+
result = add_server(conf->mctx, word, &conf->nameservers);
if (result != ISC_R_SUCCESS) {
return (result);
Index: src/external/mpl/bind/dist/lib/isc/iterated_hash.c
diff -u src/external/mpl/bind/dist/lib/isc/iterated_hash.c:1.6 src/external/mpl/bind/dist/lib/isc/iterated_hash.c:1.7
--- src/external/mpl/bind/dist/lib/isc/iterated_hash.c:1.6 Fri Sep 23 08:15:33 2022
+++ src/external/mpl/bind/dist/lib/isc/iterated_hash.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: iterated_hash.c,v 1.6 2022/09/23 12:15:33 christos Exp $ */
+/* $NetBSD: iterated_hash.c,v 1.7 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -15,8 +15,11 @@
#include <stdio.h>
+#include <openssl/opensslv.h>
+#include <openssl/sha.h>
+
#include <isc/iterated_hash.h>
-#include <isc/md.h>
+#include <isc/thread.h>
#include <isc/util.h>
int
@@ -24,55 +27,40 @@ isc_iterated_hash(unsigned char *out, co
const int iterations, const unsigned char *salt,
const int saltlength, const unsigned char *in,
const int inlength) {
- isc_md_t *md;
- isc_result_t result;
+ REQUIRE(out != NULL);
+
int n = 0;
- unsigned int outlength = 0;
size_t len;
const unsigned char *buf;
-
- REQUIRE(out != NULL);
+ SHA_CTX ctx;
if (hashalg != 1) {
return (0);
}
- if ((md = isc_md_new()) == NULL) {
- return (0);
- }
-
- len = inlength;
buf = in;
+ len = inlength;
+
do {
- result = isc_md_init(md, ISC_MD_SHA1);
- if (result != ISC_R_SUCCESS) {
- goto md_fail;
+ if (SHA1_Init(&ctx) != 1) {
+ return (0);
}
- result = isc_md_update(md, buf, len);
- if (result != ISC_R_SUCCESS) {
- goto md_fail;
- }
- result = isc_md_update(md, salt, saltlength);
- if (result != ISC_R_SUCCESS) {
- goto md_fail;
+
+ if (SHA1_Update(&ctx, buf, len) != 1) {
+ return (0);
}
- result = isc_md_final(md, out, &outlength);
- if (result != ISC_R_SUCCESS) {
- goto md_fail;
+
+ if (SHA1_Update(&ctx, salt, saltlength) != 1) {
+ return (0);
}
- result = isc_md_reset(md);
- if (result != ISC_R_SUCCESS) {
- goto md_fail;
+
+ if (SHA1_Final(out, &ctx) != 1) {
+ return (0);
}
+
buf = out;
- len = outlength;
+ len = SHA_DIGEST_LENGTH;
} while (n++ < iterations);
- isc_md_free(md);
-
- return (outlength);
-md_fail:
- isc_md_free(md);
- return (0);
+ return (SHA_DIGEST_LENGTH);
}
-#undef RETERR
Index: src/external/mpl/bind/dist/lib/isc/lib.c
diff -u src/external/mpl/bind/dist/lib/isc/lib.c:1.9 src/external/mpl/bind/dist/lib/isc/lib.c:1.10
--- src/external/mpl/bind/dist/lib/isc/lib.c:1.9 Fri Sep 23 08:15:33 2022
+++ src/external/mpl/bind/dist/lib/isc/lib.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lib.c,v 1.9 2022/09/23 12:15:33 christos Exp $ */
+/* $NetBSD: lib.c,v 1.10 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -16,6 +16,7 @@
/*! \file */
#include <isc/bind9.h>
+#include <isc/iterated_hash.h>
#include <isc/lib.h>
#include <isc/mem.h>
#include <isc/util.h>
Index: src/external/mpl/bind/dist/lib/isc/log.c
diff -u src/external/mpl/bind/dist/lib/isc/log.c:1.8 src/external/mpl/bind/dist/lib/isc/log.c:1.9
--- src/external/mpl/bind/dist/lib/isc/log.c:1.8 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/isc/log.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: log.c,v 1.8 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: log.c,v 1.9 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1105,7 +1105,7 @@ greatest_version(isc_logfile_t *file, in
}
static void
-insert_sort(int64_t to_keep[], int64_t versions, int version) {
+insert_sort(int64_t to_keep[], int64_t versions, int64_t version) {
int i = 0;
while (i < versions && version < to_keep[i]) {
i++;
@@ -1122,12 +1122,13 @@ insert_sort(int64_t to_keep[], int64_t v
static int64_t
last_to_keep(int64_t versions, isc_dir_t *dirp, char *bname, size_t bnamelen) {
+ int64_t to_keep[ISC_LOG_MAX_VERSIONS] = { 0 };
+ int64_t version = 0;
+
if (versions <= 0) {
- return INT64_MAX;
+ return (INT64_MAX);
}
- int64_t to_keep[ISC_LOG_MAX_VERSIONS] = { 0 };
- int64_t version = 0;
if (versions > ISC_LOG_MAX_VERSIONS) {
versions = ISC_LOG_MAX_VERSIONS;
}
@@ -1136,6 +1137,9 @@ last_to_keep(int64_t versions, isc_dir_t
*/
memset(to_keep, 0, sizeof(to_keep));
while (isc_dir_read(dirp) == ISC_R_SUCCESS) {
+ char *digit_end = NULL;
+ char *ename = NULL;
+
if (dirp->entry.length <= bnamelen ||
strncmp(dirp->entry.name, bname, bnamelen) != 0 ||
dirp->entry.name[bnamelen] != '.')
@@ -1143,8 +1147,7 @@ last_to_keep(int64_t versions, isc_dir_t
continue;
}
- char *digit_end;
- char *ename = &dirp->entry.name[bnamelen + 1];
+ ename = &dirp->entry.name[bnamelen + 1];
version = strtoull(ename, &digit_end, 10);
if (*digit_end == '\0') {
insert_sort(to_keep, versions, version);
@@ -1162,8 +1165,8 @@ last_to_keep(int64_t versions, isc_dir_t
static isc_result_t
remove_old_tsversions(isc_logfile_t *file, int versions) {
isc_result_t result;
- char *bname, *digit_end;
- const char *dirname;
+ char *bname = NULL, *digit_end = NULL;
+ const char *dirname = NULL;
int64_t version, last = INT64_MAX;
size_t bnamelen;
isc_dir_t dir;
Index: src/external/mpl/bind/dist/lib/isc/mem.c
diff -u src/external/mpl/bind/dist/lib/isc/mem.c:1.13 src/external/mpl/bind/dist/lib/isc/mem.c:1.14
--- src/external/mpl/bind/dist/lib/isc/mem.c:1.13 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/isc/mem.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: mem.c,v 1.13 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: mem.c,v 1.14 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -60,9 +60,10 @@ LIBISC_EXTERNAL_DATA unsigned int isc_me
* Constants.
*/
-#define DEF_MAX_SIZE 1100
-#define DEF_MEM_TARGET 4096
-#define ALIGNMENT_SIZE 8U /*%< must be a power of 2 */
+#define DEF_MAX_SIZE 1100
+#define DEF_MEM_TARGET 4096
+#define ALIGNMENT_SIZE \
+ 8U /*%< must be a power of 2, also update lib/dns/rbt.c */
#define NUM_BASIC_BLOCKS 64 /*%< must be > 1 */
#define TABLE_INCREMENT 1024
#define DEBUG_TABLE_COUNT 512U
Index: src/external/mpl/bind/dist/lib/isc/ratelimiter.c
diff -u src/external/mpl/bind/dist/lib/isc/ratelimiter.c:1.7 src/external/mpl/bind/dist/lib/isc/ratelimiter.c:1.8
--- src/external/mpl/bind/dist/lib/isc/ratelimiter.c:1.7 Fri Sep 23 08:15:33 2022
+++ src/external/mpl/bind/dist/lib/isc/ratelimiter.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ratelimiter.c,v 1.7 2022/09/23 12:15:33 christos Exp $ */
+/* $NetBSD: ratelimiter.c,v 1.8 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -244,6 +244,7 @@ void
isc_ratelimiter_shutdown(isc_ratelimiter_t *rl) {
isc_event_t *ev;
isc_task_t *task;
+ isc_result_t result;
REQUIRE(rl != NULL);
@@ -259,7 +260,11 @@ isc_ratelimiter_shutdown(isc_ratelimiter
}
task = NULL;
isc_task_attach(rl->task, &task);
- isc_timer_detach(&rl->timer);
+
+ result = isc_timer_reset(rl->timer, isc_timertype_inactive, NULL, NULL,
+ false);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ isc_timer_destroy(&rl->timer);
/*
* Send an event to our task. The delivery of this event
Index: src/external/mpl/bind/dist/lib/isc/task.c
diff -u src/external/mpl/bind/dist/lib/isc/task.c:1.17 src/external/mpl/bind/dist/lib/isc/task.c:1.18
--- src/external/mpl/bind/dist/lib/isc/task.c:1.17 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/isc/task.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: task.c,v 1.17 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: task.c,v 1.18 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -622,12 +622,10 @@ isc_task_purge(isc_task_t *task, void *s
bool
isc_task_purgeevent(isc_task_t *task, isc_event_t *event) {
- isc_event_t *curr_event, *next_event;
+ bool found = false;
/*
* Purge 'event' from a task's event queue.
- *
- * XXXRTH: WARNING: This method may be removed before beta.
*/
REQUIRE(VALID_TASK(task));
@@ -643,23 +641,18 @@ isc_task_purgeevent(isc_task_t *task, is
*/
LOCK(&task->lock);
- for (curr_event = HEAD(task->events); curr_event != NULL;
- curr_event = next_event)
- {
- next_event = NEXT(curr_event, ev_link);
- if (curr_event == event && PURGE_OK(event)) {
- DEQUEUE(task->events, curr_event, ev_link);
- task->nevents--;
- break;
- }
+ if (ISC_LINK_LINKED(event, ev_link)) {
+ DEQUEUE(task->events, event, ev_link);
+ task->nevents--;
+ found = true;
}
UNLOCK(&task->lock);
- if (curr_event == NULL) {
+ if (!found) {
return (false);
}
- isc_event_free(&curr_event);
+ isc_event_free(&event);
return (true);
}
@@ -809,6 +802,16 @@ isc_task_getnetmgr(isc_task_t *task) {
return (task->manager->netmgr);
}
+void
+isc_task_setquantum(isc_task_t *task, unsigned int quantum) {
+ REQUIRE(VALID_TASK(task));
+
+ LOCK(&task->lock);
+ task->quantum = (quantum > 0) ? quantum
+ : task->manager->default_quantum;
+ UNLOCK(&task->lock);
+}
+
/***
*** Task Manager.
***/
@@ -819,10 +822,13 @@ task_run(isc_task_t *task) {
bool finished = false;
isc_event_t *event = NULL;
isc_result_t result = ISC_R_SUCCESS;
+ uint32_t quantum;
REQUIRE(VALID_TASK(task));
LOCK(&task->lock);
+ quantum = task->quantum;
+
/*
* It is possible because that we have a paused task in the queue - it
* might have been paused in the meantime and we never hold both queue
@@ -914,7 +920,7 @@ task_run(isc_task_t *task) {
XTRACE("pausing");
task->state = task_state_paused;
break;
- } else if (dispatch_count >= task->quantum) {
+ } else if (dispatch_count >= quantum) {
/*
* Our quantum has expired, but there is more work to be
* done. We'll requeue it to the ready queue later.
Index: src/external/mpl/bind/dist/lib/isc/timer.c
diff -u src/external/mpl/bind/dist/lib/isc/timer.c:1.11 src/external/mpl/bind/dist/lib/isc/timer.c:1.12
--- src/external/mpl/bind/dist/lib/isc/timer.c:1.11 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/isc/timer.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: timer.c,v 1.11 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: timer.c,v 1.12 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -64,9 +64,9 @@ struct isc_timer {
unsigned int magic;
isc_timermgr_t *manager;
isc_mutex_t lock;
- isc_refcount_t references;
/*! Locked by timer lock. */
isc_time_t idle;
+ ISC_LIST(isc_timerevent_t) active;
/*! Locked by manager lock. */
isc_timertype_t type;
isc_time_t expires;
@@ -210,26 +210,36 @@ deschedule(isc_timer_t *timer) {
}
static void
-destroy(isc_timer_t *timer) {
- isc_timermgr_t *manager = timer->manager;
+timerevent_unlink(isc_timer_t *timer, isc_timerevent_t *event) {
+ REQUIRE(ISC_LINK_LINKED(event, ev_timerlink));
+ ISC_LIST_UNLINK(timer->active, event, ev_timerlink);
+}
- /*
- * The caller must ensure it is safe to destroy the timer.
- */
+static void
+timerevent_destroy(isc_event_t *event0) {
+ isc_timer_t *timer = event0->ev_destroy_arg;
+ isc_timerevent_t *event = (isc_timerevent_t *)event0;
- LOCK(&manager->lock);
+ LOCK(&timer->lock);
+ if (ISC_LINK_LINKED(event, ev_timerlink)) {
+ /* The event was unlinked via timer_purge() */
+ timerevent_unlink(timer, event);
+ }
+ UNLOCK(&timer->lock);
- (void)isc_task_purgerange(timer->task, timer, ISC_TIMEREVENT_FIRSTEVENT,
- ISC_TIMEREVENT_LASTEVENT, NULL);
- deschedule(timer);
- UNLINK(manager->timers, timer, link);
+ isc_mem_put(timer->manager->mctx, event, event0->ev_size);
+}
- UNLOCK(&manager->lock);
+static void
+timer_purge(isc_timer_t *timer) {
+ isc_timerevent_t *event = NULL;
- isc_task_detach(&timer->task);
- isc_mutex_destroy(&timer->lock);
- timer->magic = 0;
- isc_mem_put(manager->mctx, timer, sizeof(*timer));
+ while ((event = ISC_LIST_HEAD(timer->active)) != NULL) {
+ timerevent_unlink(timer, event);
+ UNLOCK(&timer->lock);
+ (void)isc_task_purgeevent(timer->task, (isc_event_t *)event);
+ LOCK(&timer->lock);
+ }
}
isc_result_t
@@ -281,7 +291,6 @@ isc_timer_create(isc_timermgr_t *manager
timer = isc_mem_get(manager->mctx, sizeof(*timer));
timer->manager = manager;
- isc_refcount_init(&timer->references, 1);
if (type == isc_timertype_once && !isc_interval_iszero(interval)) {
result = isc_time_add(&now, interval, &timer->idle);
@@ -313,6 +322,9 @@ isc_timer_create(isc_timermgr_t *manager
timer->index = 0;
isc_mutex_init(&timer->lock);
ISC_LINK_INIT(timer, link);
+
+ ISC_LIST_INIT(timer->active);
+
timer->magic = TIMER_MAGIC;
LOCK(&manager->lock);
@@ -392,9 +404,7 @@ isc_timer_reset(isc_timer_t *timer, isc_
LOCK(&timer->lock);
if (purge) {
- (void)isc_task_purgerange(timer->task, timer,
- ISC_TIMEREVENT_FIRSTEVENT,
- ISC_TIMEREVENT_LASTEVENT, NULL);
+ timer_purge(timer);
}
timer->type = type;
timer->expires = *expires;
@@ -465,41 +475,60 @@ isc_timer_touch(isc_timer_t *timer) {
}
void
-isc_timer_attach(isc_timer_t *timer, isc_timer_t **timerp) {
- /*
- * Attach *timerp to timer.
- */
+isc_timer_destroy(isc_timer_t **timerp) {
+ isc_timer_t *timer = NULL;
+ isc_timermgr_t *manager = NULL;
- REQUIRE(VALID_TIMER(timer));
- REQUIRE(timerp != NULL && *timerp == NULL);
- isc_refcount_increment(&timer->references);
+ REQUIRE(timerp != NULL && VALID_TIMER(*timerp));
+
+ timer = *timerp;
+ *timerp = NULL;
+
+ manager = timer->manager;
+
+ LOCK(&manager->lock);
+
+ LOCK(&timer->lock);
+ timer_purge(timer);
+ deschedule(timer);
+ UNLOCK(&timer->lock);
+
+ UNLINK(manager->timers, timer, link);
- *timerp = timer;
+ UNLOCK(&manager->lock);
+
+ isc_task_detach(&timer->task);
+ isc_mutex_destroy(&timer->lock);
+ timer->magic = 0;
+ isc_mem_put(manager->mctx, timer, sizeof(*timer));
}
-void
-isc_timer_detach(isc_timer_t **timerp) {
- isc_timer_t *timer;
+static void
+timer_post_event(isc_timermgr_t *manager, isc_timer_t *timer,
+ isc_eventtype_t type) {
+ isc_timerevent_t *event;
+ XTRACEID("posting", timer);
- /*
- * Detach *timerp from its timer.
- */
+ event = (isc_timerevent_t *)isc_event_allocate(
+ manager->mctx, timer, type, timer->action, timer->arg,
+ sizeof(*event));
- REQUIRE(timerp != NULL);
- timer = *timerp;
- REQUIRE(VALID_TIMER(timer));
+ ISC_LINK_INIT(event, ev_timerlink);
+ ((isc_event_t *)event)->ev_destroy = timerevent_destroy;
+ ((isc_event_t *)event)->ev_destroy_arg = timer;
- if (isc_refcount_decrement(&timer->references) == 1) {
- destroy(timer);
- }
+ event->due = timer->due;
- *timerp = NULL;
+ LOCK(&timer->lock);
+ ISC_LIST_APPEND(timer->active, event, ev_timerlink);
+ UNLOCK(&timer->lock);
+
+ isc_task_send(timer->task, ISC_EVENT_PTR(&event));
}
static void
dispatch(isc_timermgr_t *manager, isc_time_t *now) {
bool done = false, post_event, need_schedule;
- isc_timerevent_t *event;
isc_eventtype_t type = 0;
isc_timer_t *timer;
isc_result_t result;
@@ -561,25 +590,7 @@ dispatch(isc_timermgr_t *manager, isc_ti
}
if (post_event) {
- XTRACEID("posting", timer);
- /*
- * XXX We could preallocate this event.
- */
- event = (isc_timerevent_t *)isc_event_allocate(
- manager->mctx, timer, type,
- timer->action, timer->arg,
- sizeof(*event));
-
- if (event != NULL) {
- event->due = timer->due;
- isc_task_send(timer->task,
- ISC_EVENT_PTR(&event));
- } else {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "%s",
- "couldn't allocate "
- "event");
- }
+ timer_post_event(manager, timer, type);
}
timer->index = 0;
Index: src/external/mpl/bind/dist/lib/isc/include/isc/task.h
diff -u src/external/mpl/bind/dist/lib/isc/include/isc/task.h:1.7 src/external/mpl/bind/dist/lib/isc/include/isc/task.h:1.8
--- src/external/mpl/bind/dist/lib/isc/include/isc/task.h:1.7 Fri Sep 23 08:15:33 2022
+++ src/external/mpl/bind/dist/lib/isc/include/isc/task.h Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: task.h,v 1.7 2022/09/23 12:15:33 christos Exp $ */
+/* $NetBSD: task.h,v 1.8 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -375,27 +375,27 @@ isc_task_unsend(isc_task_t *task, void *
*
* Notes:
*
- *\li This function is equivalent to
+ *\li This function is equivalent to
*
*\code
- * isc_task_unsendrange(task, sender, type, type, tag, events);
+ * isc_task_unsendrange(task, sender, type, type, tag, events);
*\endcode
*
* Requires:
*
- *\li 'task' is a valid task.
+ *\li 'task' is a valid task.
*
- *\li *events is a valid list.
+ *\li *events is a valid list.
*
* Ensures:
*
- *\li Events in the event queue of 'task' whose sender is 'sender', whose
- * type is 'type', and whose tag is 'tag' will be dequeued and appended
- * to *events.
+ *\li Events in the event queue of 'task' whose sender is 'sender', whose
+ * type is 'type', and whose tag is 'tag' will be dequeued and appended
+ * to *events.
*
* Returns:
*
- *\li The number of events unsent.
+ *\li The number of events unsent.
*/
isc_result_t
@@ -530,6 +530,15 @@ isc_task_gettag(isc_task_t *task);
*\li 'task' is a valid task.
*/
+void
+isc_task_setquantum(isc_task_t *task, unsigned int quantum);
+/*%<
+ * Set future 'task' quantum to 'quantum'. The current 'task' quantum will be
+ * kept for the current isc_task_run() loop, and will be changed for the next
+ * run. Therefore, the function is safe to use from the event callback as it
+ * will not affect the current event loop processing.
+ */
+
isc_result_t
isc_task_beginexclusive(isc_task_t *task);
/*%<
Index: src/external/mpl/bind/dist/lib/isc/include/isc/timer.h
diff -u src/external/mpl/bind/dist/lib/isc/include/isc/timer.h:1.7 src/external/mpl/bind/dist/lib/isc/include/isc/timer.h:1.8
--- src/external/mpl/bind/dist/lib/isc/include/isc/timer.h:1.7 Fri Sep 23 08:15:33 2022
+++ src/external/mpl/bind/dist/lib/isc/include/isc/timer.h Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: timer.h,v 1.7 2022/09/23 12:15:33 christos Exp $ */
+/* $NetBSD: timer.h,v 1.8 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -90,10 +90,13 @@ typedef enum {
isc_timertype_inactive = 3 /*%< Inactive */
} isc_timertype_t;
-typedef struct isc_timerevent {
+typedef struct isc_timerevent isc_timerevent_t;
+
+struct isc_timerevent {
struct isc_event common;
isc_time_t due;
-} isc_timerevent_t;
+ ISC_LINK(isc_timerevent_t) ev_timerlink;
+};
#define ISC_TIMEREVENT_FIRSTEVENT (ISC_EVENTCLASS_TIMER + 0)
#define ISC_TIMEREVENT_TICK (ISC_EVENTCLASS_TIMER + 1)
@@ -225,25 +228,9 @@ isc_timer_touch(isc_timer_t *timer);
*/
void
-isc_timer_attach(isc_timer_t *timer, isc_timer_t **timerp);
-/*%<
- * Attach *timerp to timer.
- *
- * Requires:
- *
- *\li 'timer' is a valid timer.
- *
- *\li 'timerp' points to a NULL timer.
- *
- * Ensures:
- *
- *\li *timerp is attached to timer.
- */
-
-void
-isc_timer_detach(isc_timer_t **timerp);
+isc_timer_destroy(isc_timer_t **timerp);
/*%<
- * Detach *timerp from its timer.
+ * Destroy *timerp.
*
* Requires:
*
@@ -253,9 +240,6 @@ isc_timer_detach(isc_timer_t **timerp);
*
*\li *timerp is NULL.
*
- *\li If '*timerp' is the last reference to the timer,
- * then:
- *
*\code
* The timer will be shutdown
*
@@ -264,9 +248,13 @@ isc_timer_detach(isc_timer_t **timerp);
* All resources used by the timer have been freed
*
* Any events already posted by the timer will be purged.
- * Therefore, if isc_timer_detach() is called in the context
+ * Therefore, if isc_timer_destroy() is called in the context
* of the timer's task, it is guaranteed that no more
* timer event callbacks will run after the call.
+ *
+ * If this function is called from the timer event callback
+ * the event itself must be destroyed before the timer
+ * itself.
*\endcode
*/
Index: src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c
diff -u src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c:1.9 src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c:1.10
--- src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c:1.9 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: netmgr.c,v 1.9 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: netmgr.c,v 1.10 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -243,15 +243,15 @@ isc__nm_threadpool_initialize(uint32_t w
}
}
-#if HAVE_DECL_UV_UDP_LINUX_RECVERR
-#define MINIMAL_UV_VERSION UV_VERSION(1, 42, 0)
-#elif HAVE_DECL_UV_UDP_MMSG_FREE
+#if HAVE_DECL_UV_UDP_MMSG_FREE
#define MINIMAL_UV_VERSION UV_VERSION(1, 40, 0)
#elif HAVE_DECL_UV_UDP_RECVMMSG
+#define MAXIMAL_UV_VERSION UV_VERSION(1, 39, 99)
#define MINIMAL_UV_VERSION UV_VERSION(1, 37, 0)
-#elif HAVE_DECL_UV_UDP_MMSG_CHUNK
-#define MINIMAL_UV_VERSION UV_VERSION(1, 35, 0)
+#elif _WIN32
+#define MINIMAL_UV_VERSION UV_VERSION(1, 0, 0)
#else
+#define MAXIMAL_UV_VERSION UV_VERSION(1, 34, 99)
#define MINIMAL_UV_VERSION UV_VERSION(1, 0, 0)
#endif
@@ -262,11 +262,21 @@ isc__netmgr_create(isc_mem_t *mctx, uint
REQUIRE(workers > 0);
+#ifdef MAXIMAL_UV_VERSION
+ if (uv_version() > MAXIMAL_UV_VERSION) {
+ isc_error_fatal(__FILE__, __LINE__,
+ "libuv version too new: running with libuv %s "
+ "when compiled with libuv %s will lead to "
+ "libuv failures",
+ uv_version_string(), UV_VERSION_STRING);
+ }
+#endif /* MAXIMAL_UV_VERSION */
+
if (uv_version() < MINIMAL_UV_VERSION) {
isc_error_fatal(__FILE__, __LINE__,
"libuv version too old: running with libuv %s "
"when compiled with libuv %s will lead to "
- "libuv failures because of unknown flags",
+ "libuv failures",
uv_version_string(), UV_VERSION_STRING);
}
Index: src/external/mpl/bind/dist/lib/isc/tests/task_test.c
diff -u src/external/mpl/bind/dist/lib/isc/tests/task_test.c:1.11 src/external/mpl/bind/dist/lib/isc/tests/task_test.c:1.12
--- src/external/mpl/bind/dist/lib/isc/tests/task_test.c:1.11 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/isc/tests/task_test.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: task_test.c,v 1.11 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: task_test.c,v 1.12 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -633,8 +633,8 @@ basic(void **state) {
#else /* ifndef WIN32 */
Sleep(10000);
#endif /* ifndef WIN32 */
- isc_timer_detach(&ti1);
- isc_timer_detach(&ti2);
+ isc_timer_destroy(&ti1);
+ isc_timer_destroy(&ti2);
}
/*
@@ -1521,20 +1521,6 @@ purgeevent(void **state) {
try_purgeevent(true);
}
-/*
- * Purge event not purgeable test:
- * When the event is not marked as purgable, a call to
- * isc_task_purgeevent(task, event) does not purge the event
- * 'event' from the task's queue and returns false.
- */
-
-static void
-purgeevent_notpurge(void **state) {
- UNUSED(state);
-
- try_purgeevent(false);
-}
-
int
main(int argc, char **argv) {
const struct CMUnitTest tests[] = {
@@ -1552,8 +1538,6 @@ main(int argc, char **argv) {
_teardown),
cmocka_unit_test_setup_teardown(purge, _setup2, _teardown),
cmocka_unit_test_setup_teardown(purgeevent, _setup2, _teardown),
- cmocka_unit_test_setup_teardown(purgeevent_notpurge, _setup,
- _teardown),
cmocka_unit_test_setup_teardown(purgerange, _setup, _teardown),
cmocka_unit_test_setup_teardown(task_shutdown, _setup4,
_teardown),
Index: src/external/mpl/bind/dist/lib/isc/tests/timer_test.c
diff -u src/external/mpl/bind/dist/lib/isc/tests/timer_test.c:1.9 src/external/mpl/bind/dist/lib/isc/tests/timer_test.c:1.10
--- src/external/mpl/bind/dist/lib/isc/tests/timer_test.c:1.9 Fri Sep 23 08:15:34 2022
+++ src/external/mpl/bind/dist/lib/isc/tests/timer_test.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: timer_test.c,v 1.9 2022/09/23 12:15:34 christos Exp $ */
+/* $NetBSD: timer_test.c,v 1.10 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -246,14 +246,14 @@ ticktock(isc_task_t *task, isc_event_t *
isc_mutex_unlock(&lasttime_mx);
subthread_assert_result_equal(result, ISC_R_SUCCESS);
+ isc_event_free(&event);
+
if (atomic_load(&eventcnt) == nevents) {
result = isc_time_now(&endtime);
subthread_assert_result_equal(result, ISC_R_SUCCESS);
- isc_timer_detach(&timer);
+ isc_timer_destroy(&timer);
isc_task_shutdown(task);
}
-
- isc_event_free(&event);
}
/*
@@ -341,9 +341,10 @@ test_idle(isc_task_t *task, isc_event_t
subthread_assert_int_equal(event->ev_type, ISC_TIMEREVENT_IDLE);
- isc_timer_detach(&timer);
- isc_task_shutdown(task);
isc_event_free(&event);
+
+ isc_timer_destroy(&timer);
+ isc_task_shutdown(task);
}
/* timer type once idles out */
@@ -428,14 +429,15 @@ test_reset(isc_task_t *task, isc_event_t
&expires, &interval, false);
subthread_assert_result_equal(result, ISC_R_SUCCESS);
}
+
+ isc_event_free(&event);
} else {
subthread_assert_int_equal(event->ev_type, ISC_TIMEREVENT_LIFE);
- isc_timer_detach(&timer);
+ isc_event_free(&event);
+ isc_timer_destroy(&timer);
isc_task_shutdown(task);
}
-
- isc_event_free(&event);
}
static void
@@ -593,8 +595,8 @@ purge(void **state) {
assert_int_equal(atomic_load(&eventcnt), 1);
- isc_timer_detach(&tickertimer);
- isc_timer_detach(&oncetimer);
+ isc_timer_destroy(&tickertimer);
+ isc_timer_destroy(&oncetimer);
isc_task_destroy(&task1);
isc_task_destroy(&task2);
}
Index: src/external/mpl/bind/dist/lib/ns/query.c
diff -u src/external/mpl/bind/dist/lib/ns/query.c:1.16 src/external/mpl/bind/dist/lib/ns/query.c:1.17
--- src/external/mpl/bind/dist/lib/ns/query.c:1.16 Wed Jan 25 16:43:32 2023
+++ src/external/mpl/bind/dist/lib/ns/query.c Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: query.c,v 1.16 2023/01/25 21:43:32 christos Exp $ */
+/* $NetBSD: query.c,v 1.17 2023/06/26 22:03:01 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -5726,6 +5726,7 @@ query_refresh_rrset(query_ctx_t *orig_qc
qctx.client->query.dboptions &= ~(DNS_DBFIND_STALETIMEOUT |
DNS_DBFIND_STALEOK |
DNS_DBFIND_STALEENABLED);
+ qctx.client->nodetach = false;
/*
* We'll need some resources...
@@ -5752,6 +5753,27 @@ query_refresh_rrset(query_ctx_t *orig_qc
}
/*%
+ * Depending on the db lookup result, we can respond to the
+ * client this stale answer.
+ */
+static bool
+stale_client_answer(isc_result_t result) {
+ switch (result) {
+ case ISC_R_SUCCESS:
+ case DNS_R_EMPTYNAME:
+ case DNS_R_NXRRSET:
+ case DNS_R_NCACHENXRRSET:
+ case DNS_R_CNAME:
+ case DNS_R_DNAME:
+ return (true);
+ default:
+ return (false);
+ }
+
+ UNREACHABLE();
+}
+
+/*%
* Perform a local database lookup, in either an authoritative or
* cache database. If unable to answer, call ns_query_done(); otherwise
* hand off processing to query_gotanswer().
@@ -5880,7 +5902,6 @@ query_lookup(query_ctx_t *qctx) {
{
/* Found non-stale usable rdataset. */
answer_found = true;
- goto gotanswer;
}
if (dbfind_stale || stale_refresh_window || stale_timeout) {
@@ -5906,7 +5927,7 @@ query_lookup(query_ctx_t *qctx) {
NS_LOGMODULE_QUERY, ISC_LOG_INFO,
"%s resolver failure, stale answer %s", namebuf,
stale_found ? "used" : "unavailable");
- if (!stale_found) {
+ if (!stale_found && !answer_found) {
/*
* Resolver failure, no stale data, nothing more we
* can do, return SERVFAIL.
@@ -5925,7 +5946,7 @@ query_lookup(query_ctx_t *qctx) {
"answer %s",
namebuf, stale_found ? "used" : "unavailable");
- if (!stale_found) {
+ if (!stale_found && !answer_found) {
/*
* During the stale refresh window explicitly do not try
* to refresh the data, because a recent lookup failed.
@@ -5935,7 +5956,7 @@ query_lookup(query_ctx_t *qctx) {
}
} else if (stale_timeout) {
if ((qctx->options & DNS_GETDB_STALEFIRST) != 0) {
- if (!stale_found) {
+ if (!stale_found && !answer_found) {
/*
* We have nothing useful in cache to return
* immediately.
@@ -5952,7 +5973,7 @@ query_lookup(query_ctx_t *qctx) {
&qctx->client->query.fetch);
}
return (query_lookup(qctx));
- } else {
+ } else if (stale_client_answer(result)) {
/*
* Immediately return the stale answer, start a
* resolver fetch to refresh the data in cache.
@@ -5963,7 +5984,14 @@ query_lookup(query_ctx_t *qctx) {
"%s stale answer used, an attempt to "
"refresh the RRset will still be made",
namebuf);
+
qctx->refresh_rrset = STALE(qctx->rdataset);
+
+ /*
+ * If we are refreshing the RRSet, we must not
+ * detach from the client in query_send().
+ */
+ qctx->client->nodetach = qctx->refresh_rrset;
}
} else {
/*
@@ -5976,7 +6004,11 @@ query_lookup(query_ctx_t *qctx) {
"%s client timeout, stale answer %s",
namebuf,
stale_found ? "used" : "unavailable");
- if (!stale_found) {
+ if (!stale_found && !answer_found) {
+ return (result);
+ }
+
+ if (!stale_client_answer(result)) {
return (result);
}
@@ -5989,7 +6021,6 @@ query_lookup(query_ctx_t *qctx) {
}
}
-gotanswer:
if (stale_timeout && (answer_found || stale_found)) {
/*
* Mark RRsets that we are adding to the client message on a
@@ -6308,7 +6339,7 @@ ns_query_recurse(ns_client_t *client, dn
if (recparam_match(&client->query.recparam, qtype, qname, qdomain)) {
ns_client_log(client, NS_LOGCATEGORY_CLIENT, NS_LOGMODULE_QUERY,
ISC_LOG_INFO, "recursion loop detected");
- return (ISC_R_FAILURE);
+ return (ISC_R_ALREADYRUNNING);
}
recparam_update(&client->query.recparam, qtype, qname, qdomain);
@@ -7272,10 +7303,21 @@ query_usestale(query_ctx_t *qctx, isc_re
return (false);
}
- if (result == DNS_R_DUPLICATE || result == DNS_R_DROP) {
+ if (qctx->refresh_rrset) {
+ /*
+ * This is a refreshing query, we have already prioritized
+ * stale data, so don't enable serve-stale again.
+ */
+ return (false);
+ }
+
+ if (result == DNS_R_DUPLICATE || result == DNS_R_DROP ||
+ result == ISC_R_ALREADYRUNNING)
+ {
/*
* Don't enable serve-stale if the result signals a duplicate
- * query or query that is being dropped.
+ * query or a query that is being dropped or can't proceed
+ * because of a recursion loop.
*/
return (false);
}
@@ -11538,12 +11580,7 @@ ns_query_done(query_ctx_t *qctx) {
/*
* Client may have been detached after query_send(), so
* we test and store the flag state here, for safety.
- * If we are refreshing the RRSet, we must not detach from the client
- * in the query_send(), so we need to override the flag.
*/
- if (qctx->refresh_rrset) {
- qctx->client->nodetach = true;
- }
nodetach = qctx->client->nodetach;
query_send(qctx->client);
Index: src/external/mpl/bind/lib/libisc/Makefile
diff -u src/external/mpl/bind/lib/libisc/Makefile:1.19 src/external/mpl/bind/lib/libisc/Makefile:1.20
--- src/external/mpl/bind/lib/libisc/Makefile:1.19 Tue May 9 10:08:18 2023
+++ src/external/mpl/bind/lib/libisc/Makefile Mon Jun 26 18:03:01 2023
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.19 2023/05/09 14:08:18 christos Exp $
+# $NetBSD: Makefile,v 1.20 2023/06/26 22:03:01 christos Exp $
LIB=isc
#USE_SHLIBDIR= yes
@@ -67,6 +67,7 @@ LDADD+=-Wl,-Bdynamic
LDADD+=-lz
DPADD+=${LIBZ}
+COPTS.iterated_hash.c+= -Wno-error=deprecated-declarations
COPTS.hmac.c+= -Wno-error=deprecated-declarations
COPTS.md.c+= -Wno-error=deprecated-declarations