On 2020/10/09 21:35, Stuart Henderson wrote: > Here's an update to NSD 4.3.3. Any tests/comments/OKs?
Updated to reinstate the pledge lost in nsd.c (merge error as we had a local commit post 4.3.2), spotted by tb. (I didn't reorder the diff for easier reading this time). Index: Makefile.in =================================================================== RCS file: /cvs/src/usr.sbin/nsd/Makefile.in,v retrieving revision 1.29 diff -u -p -r1.29 Makefile.in --- Makefile.in 23 Jul 2020 13:54:07 -0000 1.29 +++ Makefile.in 9 Oct 2020 21:36:14 -0000 @@ -126,7 +126,7 @@ install: orig-install: all $(INSTALL) -d $(DESTDIR)$(sbindir) $(INSTALL) -d $(DESTDIR)$(configdir) - $(INSTALL) -d $(DESTDIR)$(piddir) + if test -n "$(piddir)"; then $(INSTALL) -d $(DESTDIR)$(piddir); fi $(INSTALL) -d $(DESTDIR)$(xfrdir) $(INSTALL) -d $(DESTDIR)$(dbdir) $(INSTALL) -d $(DESTDIR)$(mandir) Index: acx_nlnetlabs.m4 =================================================================== RCS file: /cvs/src/usr.sbin/nsd/acx_nlnetlabs.m4,v retrieving revision 1.3 diff -u -p -r1.3 acx_nlnetlabs.m4 --- acx_nlnetlabs.m4 24 Jun 2016 08:34:03 -0000 1.3 +++ acx_nlnetlabs.m4 9 Oct 2020 21:36:14 -0000 @@ -2,7 +2,8 @@ # Copyright 2009, Wouter Wijngaards, NLnet Labs. # BSD licensed. # -# Version 34 +# Version 35 +# 2020-08-24 Use EVP_sha256 instead of HMAC_Update (for openssl-3.0.0). # 2016-03-21 Check -ldl -pthread for libcrypto for ldns and openssl 1.1.0. # 2016-03-21 Use HMAC_Update instead of HMAC_CTX_Init (for openssl-1.1.0). # 2016-01-04 -D_DEFAULT_SOURCE defined with -D_BSD_SOURCE for Linux glibc 2.20 @@ -673,30 +674,30 @@ AC_DEFUN([ACX_SSL_CHECKS], [ ACX_RUNTIME_PATH_ADD([$ssldir/lib]) fi - AC_MSG_CHECKING([for HMAC_Update in -lcrypto]) + AC_MSG_CHECKING([for EVP_sha256 in -lcrypto]) LIBS="$LIBS -lcrypto" LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto" AC_TRY_LINK(, [ - int HMAC_Update(void); - (void)HMAC_Update(); + int EVP_sha256(void); + (void)EVP_sha256(); ], [ AC_MSG_RESULT(yes) - AC_DEFINE([HAVE_HMAC_UPDATE], 1, - [If you have HMAC_Update]) + AC_DEFINE([HAVE_EVP_SHA256], 1, + [If you have EVP_sha256]) ], [ AC_MSG_RESULT(no) # check if -lwsock32 or -lgdi32 are needed. BAKLIBS="$LIBS" BAKSSLLIBS="$LIBSSL_LIBS" - LIBS="$LIBS -lgdi32" - LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32" + LIBS="$LIBS -lgdi32 -lws2_32" + LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32" AC_MSG_CHECKING([if -lcrypto needs -lgdi32]) AC_TRY_LINK([], [ - int HMAC_Update(void); - (void)HMAC_Update(); + int EVP_sha256(void); + (void)EVP_sha256(); ],[ - AC_DEFINE([HAVE_HMAC_UPDATE], 1, - [If you have HMAC_Update]) + AC_DEFINE([HAVE_EVP_SHA256], 1, + [If you have EVP_sha256]) AC_MSG_RESULT(yes) ],[ AC_MSG_RESULT(no) @@ -706,11 +707,11 @@ AC_DEFUN([ACX_SSL_CHECKS], [ LIBSSL_LIBS="$LIBSSL_LIBS -ldl" AC_MSG_CHECKING([if -lcrypto needs -ldl]) AC_TRY_LINK([], [ - int HMAC_Update(void); - (void)HMAC_Update(); + int EVP_sha256(void); + (void)EVP_sha256(); ],[ - AC_DEFINE([HAVE_HMAC_UPDATE], 1, - [If you have HMAC_Update]) + AC_DEFINE([HAVE_EVP_SHA256], 1, + [If you have EVP_sha256]) AC_MSG_RESULT(yes) ],[ AC_MSG_RESULT(no) @@ -720,11 +721,11 @@ AC_DEFUN([ACX_SSL_CHECKS], [ LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread" AC_MSG_CHECKING([if -lcrypto needs -ldl -pthread]) AC_TRY_LINK([], [ - int HMAC_Update(void); - (void)HMAC_Update(); + int EVP_sha256(void); + (void)EVP_sha256(); ],[ - AC_DEFINE([HAVE_HMAC_UPDATE], 1, - [If you have HMAC_Update]) + AC_DEFINE([HAVE_EVP_SHA256], 1, + [If you have EVP_sha256]) AC_MSG_RESULT(yes) ],[ AC_MSG_RESULT(no) @@ -839,7 +840,11 @@ dnl see if on windows if test "$ac_cv_header_windows_h" = "yes"; then AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used]) USE_WINSOCK="1" - LIBS="$LIBS -lws2_32" + if echo $LIBS | grep 'lws2_32' >/dev/null; then + : + else + LIBS="$LIBS -lws2_32" + fi fi ], dnl no quick getaddrinfo, try mingw32 and winsock2 library. Index: config.h.in =================================================================== RCS file: /cvs/src/usr.sbin/nsd/config.h.in,v retrieving revision 1.33 diff -u -p -r1.33 config.h.in --- config.h.in 23 Jul 2020 13:54:08 -0000 1.33 +++ config.h.in 9 Oct 2020 21:36:14 -0000 @@ -139,6 +139,12 @@ /* Define to 1 if you have the `EVP_cleanup' function. */ #undef HAVE_EVP_CLEANUP +/* Define to 1 if you have the `EVP_MAC_CTX_new' function. */ +#undef HAVE_EVP_MAC_CTX_NEW + +/* Define to 1 if you have the `EVP_MAC_CTX_set_params' function. */ +#undef HAVE_EVP_MAC_CTX_SET_PARAMS + /* Define to 1 if you have the `ev_default_loop' function. */ #undef HAVE_EV_DEFAULT_LOOP @@ -166,6 +172,9 @@ /* Define to 1 if you have the `gethostname' function. */ #undef HAVE_GETHOSTNAME +/* Define to 1 if you have the `getifaddrs' function. */ +#undef HAVE_GETIFADDRS + /* Define to 1 if you have the `getnameinfo' function. */ #undef HAVE_GETNAMEINFO @@ -250,6 +259,9 @@ /* Define to 1 if you have the <netinet/tcp.h> header file. */ #undef HAVE_NETINET_TCP_H + +/* Define to 1 if you have the <openssl/core_names.h> header file. */ +#undef HAVE_OPENSSL_CORE_NAMES_H /* Define to 1 if you have the <openssl/err.h> header file. */ #undef HAVE_OPENSSL_ERR_H Index: configure =================================================================== RCS file: /cvs/src/usr.sbin/nsd/configure,v retrieving revision 1.46 diff -u -p -r1.46 configure --- configure 23 Jul 2020 13:54:08 -0000 1.46 +++ configure 9 Oct 2020 21:36:14 -0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for NSD 4.3.2. +# Generated by GNU Autoconf 2.69 for NSD 4.3.3. # # Report bugs to <nsd-b...@nlnetlabs.nl>. # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='NSD' PACKAGE_TARNAME='nsd' -PACKAGE_VERSION='4.3.2' -PACKAGE_STRING='NSD 4.3.2' +PACKAGE_VERSION='4.3.3' +PACKAGE_STRING='NSD 4.3.3' PACKAGE_BUGREPORT='nsd-b...@nlnetlabs.nl' PACKAGE_URL='' @@ -1314,7 +1314,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures NSD 4.3.2 to adapt to many kinds of systems. +\`configure' configures NSD 4.3.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1376,7 +1376,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of NSD 4.3.2:";; + short | recursive ) echo "Configuration of NSD 4.3.3:";; esac cat <<\_ACEOF @@ -1536,7 +1536,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -NSD configure 4.3.2 +NSD configure 4.3.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2245,7 +2245,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by NSD $as_me 4.3.2, which was +It was created by NSD $as_me 4.3.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -8350,7 +8350,7 @@ done fi -for ac_func in tzset alarm chroot dup2 endpwent gethostname memset memcpy pwrite socket strcasecmp strchr strdup strerror strncasecmp strtol writev getaddrinfo getnameinfo freeaddrinfo gai_strerror sigaction sigprocmask strptime strftime localtime_r setusercontext glob initgroups setresuid setreuid setresgid setregid getpwnam mmap ppoll clock_gettime accept4 +for ac_func in tzset alarm chroot dup2 endpwent gethostname memset memcpy pwrite socket strcasecmp strchr strdup strerror strncasecmp strtol writev getaddrinfo getnameinfo freeaddrinfo gai_strerror sigaction sigprocmask strptime strftime localtime_r setusercontext glob initgroups setresuid setreuid setresgid setregid getpwnam mmap ppoll clock_gettime accept4 getifaddrs do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -9099,7 +9099,7 @@ _ACEOF cat >>confdefs.h <<_ACEOF -#define EDNS_MAX_MESSAGE_LEN 4096 +#define EDNS_MAX_MESSAGE_LEN 1232 _ACEOF @@ -9560,6 +9560,8 @@ fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext + # remove space after -ldl if there. + LIBS=`echo "$LIBS" | sed -e 's/ $//'` # Check for -pthread BAKLIBS="$LIBS" @@ -9571,8 +9573,8 @@ int main () { - int HMAC_Update(void); - (void)HMAC_Update(); + int EVP_sha256(void); + (void)EVP_sha256(); ; return 0; @@ -9595,11 +9597,11 @@ $as_echo_n "checking if libcrypto needs #ifdef __cplusplus extern "C" #endif -char HMAC_Update (); +char EVP_sha256 (); int main () { -return HMAC_Update (); +return EVP_sha256 (); ; return 0; } @@ -9625,9 +9627,9 @@ rm -f core conftest.err conftest.$ac_obj LIBS="$BAKLIBS" if test -n "$ssldir"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HMAC_Update in -lcrypto" >&5 -$as_echo_n "checking for HMAC_Update in -lcrypto... " >&6; } -if ${ac_cv_lib_crypto_HMAC_Update+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EVP_sha256 in -lcrypto" >&5 +$as_echo_n "checking for EVP_sha256 in -lcrypto... " >&6; } +if ${ac_cv_lib_crypto_EVP_sha256+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -9641,27 +9643,27 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ #ifdef __cplusplus extern "C" #endif -char HMAC_Update (); +char EVP_sha256 (); int main () { -return HMAC_Update (); +return EVP_sha256 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypto_HMAC_Update=yes + ac_cv_lib_crypto_EVP_sha256=yes else - ac_cv_lib_crypto_HMAC_Update=no + ac_cv_lib_crypto_EVP_sha256=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_HMAC_Update" >&5 -$as_echo "$ac_cv_lib_crypto_HMAC_Update" >&6; } -if test "x$ac_cv_lib_crypto_HMAC_Update" = xyes; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_EVP_sha256" >&5 +$as_echo "$ac_cv_lib_crypto_EVP_sha256" >&6; } +if test "x$ac_cv_lib_crypto_EVP_sha256" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBCRYPTO 1 _ACEOF @@ -9677,7 +9679,7 @@ fi fi SSL_LIBS="-lssl" - for ac_header in openssl/ssl.h openssl/err.h openssl/rand.h openssl/ocsp.h + for ac_header in openssl/ssl.h openssl/err.h openssl/rand.h openssl/ocsp.h openssl/core_names.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default @@ -9691,7 +9693,7 @@ fi done - for ac_func in HMAC_CTX_reset HMAC_CTX_new EVP_cleanup ERR_load_crypto_strings OPENSSL_init_crypto SSL_CTX_set_security_level CRYPTO_memcmp EC_KEY_new_by_curve_name + for ac_func in HMAC_CTX_reset HMAC_CTX_new EVP_cleanup ERR_load_crypto_strings OPENSSL_init_crypto SSL_CTX_set_security_level CRYPTO_memcmp EC_KEY_new_by_curve_name EVP_MAC_CTX_new EVP_MAC_CTX_set_params do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -10833,7 +10835,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by NSD $as_me 4.3.2, which was +This file was extended by NSD $as_me 4.3.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -10895,7 +10897,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -NSD config.status 4.3.2 +NSD config.status 4.3.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Index: configure.ac =================================================================== RCS file: /cvs/src/usr.sbin/nsd/configure.ac,v retrieving revision 1.46 diff -u -p -r1.46 configure.ac --- configure.ac 23 Jul 2020 13:54:08 -0000 1.46 +++ configure.ac 9 Oct 2020 21:36:14 -0000 @@ -5,7 +5,7 @@ dnl sinclude(acx_nlnetlabs.m4) sinclude(dnstap/dnstap.m4) -AC_INIT(NSD,4.3.2,nsd-b...@nlnetlabs.nl) +AC_INIT(NSD,4.3.3,nsd-b...@nlnetlabs.nl) AC_CONFIG_HEADER([config.h]) # @@ -657,7 +657,7 @@ AC_CHECK_SIZEOF(void*) AC_CHECK_SIZEOF(off_t) AC_CHECK_FUNCS([getrandom arc4random arc4random_uniform]) AC_SEARCH_LIBS([setusercontext],[util],[AC_CHECK_HEADERS([login_cap.h])]) -AC_CHECK_FUNCS([tzset alarm chroot dup2 endpwent gethostname memset memcpy pwrite socket strcasecmp strchr strdup strerror strncasecmp strtol writev getaddrinfo getnameinfo freeaddrinfo gai_strerror sigaction sigprocmask strptime strftime localtime_r setusercontext glob initgroups setresuid setreuid setresgid setregid getpwnam mmap ppoll clock_gettime accept4]) +AC_CHECK_FUNCS([tzset alarm chroot dup2 endpwent gethostname memset memcpy pwrite socket strcasecmp strchr strdup strerror strncasecmp strtol writev getaddrinfo getnameinfo freeaddrinfo gai_strerror sigaction sigprocmask strptime strftime localtime_r setusercontext glob initgroups setresuid setreuid setresgid setregid getpwnam mmap ppoll clock_gettime accept4 getifaddrs]) AC_CHECK_TYPE([struct mmsghdr], AC_DEFINE(HAVE_MMSGHDR, 1, [If sys/socket.h has a struct mmsghdr.]), [], [ AC_INCLUDES_DEFAULT @@ -908,7 +908,7 @@ AC_DEFINE_UNQUOTED([TCP_PORT], ["53"], [ AC_DEFINE_UNQUOTED([TCP_MAX_MESSAGE_LEN], [65535], [Define to the default maximum message length.]) AC_DEFINE_UNQUOTED([UDP_PORT], ["53"], [Define to the default udp port.]) AC_DEFINE_UNQUOTED([UDP_MAX_MESSAGE_LEN], [512], [Define to the default maximum udp message length.]) -AC_DEFINE_UNQUOTED([EDNS_MAX_MESSAGE_LEN], [4096], [Define to the default maximum message length with EDNS.]) +AC_DEFINE_UNQUOTED([EDNS_MAX_MESSAGE_LEN], [1232], [Define to the default maximum message length with EDNS.]) AC_DEFINE_UNQUOTED([TLS_PORT], ["853"], [Define to the default DNS over TLS port.]) AC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [512], [Define to the maximum message length to pass to syslog.]) AC_DEFINE_UNQUOTED([NSD_CONTROL_PORT], [8952], [Define to the default nsd-control port.]) @@ -1019,19 +1019,21 @@ AC_SUBST(ratelimit_default) CHECK_SSL if test x$HAVE_SSL = x"yes"; then ACX_LIB_SSL + # remove space after -ldl if there. + LIBS=`echo "$LIBS" | sed -e 's/ $//'` # Check for -pthread BAKLIBS="$LIBS" LIBS="-lcrypto $LIBS" AC_TRY_LINK([], [ - int HMAC_Update(void); - (void)HMAC_Update(); + int EVP_sha256(void); + (void)EVP_sha256(); ], [],[ - dnl so link fails for HMAC_Update, try with -pthread. + dnl so link fails for EVP_sha256, try with -pthread. BAKCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -pthread" AC_MSG_CHECKING([if libcrypto needs -pthread]) - AC_TRY_LINK_FUNC([HMAC_Update], [ + AC_TRY_LINK_FUNC([EVP_sha256], [ AC_MSG_RESULT([yes]) ] , [ AC_MSG_RESULT([no]) @@ -1042,14 +1044,14 @@ if test x$HAVE_SSL = x"yes"; then LIBS="$BAKLIBS" if test -n "$ssldir"; then - AC_CHECK_LIB(crypto, HMAC_Update,, [ + AC_CHECK_LIB(crypto, EVP_sha256,, [ AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required]) ]) fi SSL_LIBS="-lssl" AC_SUBST(SSL_LIBS) - AC_CHECK_HEADERS([openssl/ssl.h openssl/err.h openssl/rand.h openssl/ocsp.h],,, [AC_INCLUDES_DEFAULT]) - AC_CHECK_FUNCS([HMAC_CTX_reset HMAC_CTX_new EVP_cleanup ERR_load_crypto_strings OPENSSL_init_crypto SSL_CTX_set_security_level CRYPTO_memcmp EC_KEY_new_by_curve_name]) + AC_CHECK_HEADERS([openssl/ssl.h openssl/err.h openssl/rand.h openssl/ocsp.h openssl/core_names.h],,, [AC_INCLUDES_DEFAULT]) + AC_CHECK_FUNCS([HMAC_CTX_reset HMAC_CTX_new EVP_cleanup ERR_load_crypto_strings OPENSSL_init_crypto SSL_CTX_set_security_level CRYPTO_memcmp EC_KEY_new_by_curve_name EVP_MAC_CTX_new EVP_MAC_CTX_set_params]) AC_CHECK_DECLS([SSL_CTX_set_ecdh_auto,SSL_CTX_set_tmp_ecdh], [], [], [ AC_INCLUDES_DEFAULT #ifdef HAVE_OPENSSL_ERR_H Index: dbaccess.c =================================================================== RCS file: /cvs/src/usr.sbin/nsd/dbaccess.c,v retrieving revision 1.6 diff -u -p -r1.6 dbaccess.c --- dbaccess.c 14 May 2020 06:08:40 -0000 1.6 +++ dbaccess.c 9 Oct 2020 21:36:14 -0000 @@ -391,13 +391,13 @@ try_read_udb(namedb_type* db, int fd, co if(!(db->udb=udb_base_create_fd(filename, fd, &namedb_walkfunc, NULL))) { /* fd is closed by failed udb create call */ - VERBOSITY(1, (LOG_WARNING, "can not use %s, " + VERBOSITY(1, (LOG_ERR, "can not use %s, " "will create anew", filename)); return 0; } /* sanity check if can be opened */ if(udb_base_get_userflags(db->udb) != 0) { - log_msg(LOG_WARNING, "%s was not closed properly, it might " + log_msg(LOG_ERR, "%s was not closed properly, it might " "be corrupted, will create anew", filename); udb_base_free(db->udb); db->udb = NULL; Index: ipc.c =================================================================== RCS file: /cvs/src/usr.sbin/nsd/ipc.c,v retrieving revision 1.8 diff -u -p -r1.8 ipc.c --- ipc.c 14 May 2020 06:08:40 -0000 1.8 +++ ipc.c 9 Oct 2020 21:36:14 -0000 @@ -50,6 +50,7 @@ ipc_child_quit(struct nsd* nsd) region_destroy(nsd->server_region); #endif server_shutdown(nsd); + /* ENOTREACH */ exit(0); } Index: mini_event.h =================================================================== RCS file: /cvs/src/usr.sbin/nsd/mini_event.h,v retrieving revision 1.2 diff -u -p -r1.2 mini_event.h --- mini_event.h 17 Feb 2017 20:04:45 -0000 1.2 +++ mini_event.h 9 Oct 2020 21:36:14 -0000 @@ -55,6 +55,11 @@ struct region; #if defined(USE_MINI_EVENT) && !defined(USE_WINSOCK) +#ifdef HAVE_SYS_SELECT_H +/* for fd_set on OpenBSD */ +#include <sys/select.h> +#endif + #ifndef HAVE_EVENT_BASE_FREE #define HAVE_EVENT_BASE_FREE #endif Index: nsd-checkconf.8.in =================================================================== RCS file: /cvs/src/usr.sbin/nsd/nsd-checkconf.8.in,v retrieving revision 1.29 diff -u -p -r1.29 nsd-checkconf.8.in --- nsd-checkconf.8.in 23 Jul 2020 13:54:08 -0000 1.29 +++ nsd-checkconf.8.in 9 Oct 2020 21:36:14 -0000 @@ -1,4 +1,4 @@ -.TH "nsd\-checkconf" "8" "Jul 14, 2020" "NLnet Labs" "nsd 4.3.2" +.TH "nsd\-checkconf" "8" "Oct 8, 2020" "NLnet Labs" "nsd 4.3.3" .\" Copyright (c) 2001\-2008, NLnet Labs. All rights reserved. .\" See LICENSE for the license. .SH "NAME" Index: nsd-checkzone.8.in =================================================================== RCS file: /cvs/src/usr.sbin/nsd/nsd-checkzone.8.in,v retrieving revision 1.13 diff -u -p -r1.13 nsd-checkzone.8.in --- nsd-checkzone.8.in 23 Jul 2020 13:54:08 -0000 1.13 +++ nsd-checkzone.8.in 9 Oct 2020 21:36:14 -0000 @@ -1,4 +1,4 @@ -.TH "nsd\-checkzone" "8" "Jul 14, 2020" "NLnet Labs" "nsd 4.3.2" +.TH "nsd\-checkzone" "8" "Oct 8, 2020" "NLnet Labs" "nsd 4.3.3" .\" Copyright (c) 2014, NLnet Labs. All rights reserved. .\" See LICENSE for the license. .SH "NAME" Index: nsd-control.8.in =================================================================== RCS file: /cvs/src/usr.sbin/nsd/nsd-control.8.in,v retrieving revision 1.17 diff -u -p -r1.17 nsd-control.8.in --- nsd-control.8.in 23 Jul 2020 13:54:08 -0000 1.17 +++ nsd-control.8.in 9 Oct 2020 21:36:14 -0000 @@ -1,4 +1,4 @@ -.TH "nsd\-control" "8" "Jul 14, 2020" "NLnet Labs" "nsd 4.3.2" +.TH "nsd\-control" "8" "Oct 8, 2020" "NLnet Labs" "nsd 4.3.3" .\" Copyright (c) 2011, NLnet Labs. All rights reserved. .\" See LICENSE for the license. .SH "NAME" Index: nsd-control.c =================================================================== RCS file: /cvs/src/usr.sbin/nsd/nsd-control.c,v retrieving revision 1.11 diff -u -p -r1.11 nsd-control.c --- nsd-control.c 14 May 2020 06:08:40 -0000 1.11 +++ nsd-control.c 9 Oct 2020 21:36:14 -0000 @@ -63,7 +63,7 @@ #include "tsig.h" #include "options.h" -static void usage() ATTR_NORETURN; +static void usage(void) ATTR_NORETURN; static void ssl_err(const char* s) ATTR_NORETURN; static void ssl_path_err(const char* s, const char *path) ATTR_NORETURN; Index: nsd.8.in =================================================================== RCS file: /cvs/src/usr.sbin/nsd/nsd.8.in,v retrieving revision 1.30 diff -u -p -r1.30 nsd.8.in --- nsd.8.in 23 Jul 2020 13:54:08 -0000 1.30 +++ nsd.8.in 9 Oct 2020 21:36:14 -0000 @@ -1,9 +1,9 @@ -.TH "NSD" "8" "Jul 14, 2020" "NLnet Labs" "NSD 4.3.2" +.TH "NSD" "8" "Oct 8, 2020" "NLnet Labs" "NSD 4.3.3" .\" Copyright (c) 2001\-2008, NLnet Labs. All rights reserved. .\" See LICENSE for the license. .SH "NAME" .B nsd -\- Name Server Daemon (NSD) version 4.3.2. +\- Name Server Daemon (NSD) version 4.3.3. .SH "SYNOPSIS" .B nsd .RB [ \-4 ] Index: nsd.c =================================================================== RCS file: /cvs/src/usr.sbin/nsd/nsd.c,v retrieving revision 1.38 diff -u -p -r1.38 nsd.c --- nsd.c 23 Jul 2020 14:34:55 -0000 1.38 +++ nsd.c 9 Oct 2020 21:36:14 -0000 @@ -139,12 +139,141 @@ version(void) ); #endif fprintf(stderr, - "Copyright (C) 2001-2006 NLnet Labs. This is free software.\n" + "Copyright (C) 2001-2020 NLnet Labs. This is free software.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS\n" "FOR A PARTICULAR PURPOSE.\n"); exit(0); } +#ifdef HAVE_GETIFADDRS +static void +resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addresses, size_t *ip_addresses_size) +{ + struct ifaddrs *ifa; + size_t last_ip_addresses_size = *ip_addresses_size; + + for(ifa = ifas; ifa != NULL; ifa = ifa->ifa_next) { + sa_family_t family; + const char* atsign; +#ifdef INET6 /* | address ip | % | ifa name | @ | port | nul */ + char addr_buf[INET6_ADDRSTRLEN + 1 + IF_NAMESIZE + 1 + 16 + 1]; +#else + char addr_buf[INET_ADDRSTRLEN + 1 + 16 + 1]; +#endif + + if((atsign=strrchr(search_ifa, '@')) != NULL) { + if(strlen(ifa->ifa_name) != (size_t)(atsign-search_ifa) + || strncmp(ifa->ifa_name, search_ifa, + atsign-search_ifa) != 0) + continue; + } else { + if(strcmp(ifa->ifa_name, search_ifa) != 0) + continue; + atsign = ""; + } + + if(ifa->ifa_addr == NULL) + continue; + + family = ifa->ifa_addr->sa_family; + if(family == AF_INET) { + char a4[INET_ADDRSTRLEN + 1]; + struct sockaddr_in *in4 = (struct sockaddr_in *) + ifa->ifa_addr; + if(!inet_ntop(family, &in4->sin_addr, a4, sizeof(a4))) + error("inet_ntop"); + snprintf(addr_buf, sizeof(addr_buf), "%s%s", + a4, atsign); + } +#ifdef INET6 + else if(family == AF_INET6) { + struct sockaddr_in6 *in6 = (struct sockaddr_in6 *) + ifa->ifa_addr; + char a6[INET6_ADDRSTRLEN + 1]; + char if_index_name[IF_NAMESIZE + 1]; + if_index_name[0] = 0; + if(!inet_ntop(family, &in6->sin6_addr, a6, sizeof(a6))) + error("inet_ntop"); + if_indextoname(in6->sin6_scope_id, + (char *)if_index_name); + if (strlen(if_index_name) != 0) { + snprintf(addr_buf, sizeof(addr_buf), + "%s%%%s%s", a6, if_index_name, atsign); + } else { + snprintf(addr_buf, sizeof(addr_buf), "%s%s", + a6, atsign); + } + } +#endif + else { + continue; + } + VERBOSITY(4, (LOG_INFO, "interface %s has address %s", + search_ifa, addr_buf)); + + *ip_addresses = xrealloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); + (*ip_addresses)[*ip_addresses_size] = xstrdup(addr_buf); + (*ip_addresses_size)++; + } + + if (*ip_addresses_size == last_ip_addresses_size) { + *ip_addresses = xrealloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); + (*ip_addresses)[*ip_addresses_size] = xstrdup(search_ifa); + (*ip_addresses_size)++; + } +} +#endif /* HAVE_GETIFADDRS */ + +static void +resolve_interface_names(struct nsd_options* options) +{ +#ifdef HAVE_GETIFADDRS + struct ifaddrs *addrs; + struct ip_address_option *ip_addr; + struct ip_address_option *last = NULL; + struct ip_address_option *first = NULL; + + if(getifaddrs(&addrs) == -1) + error("failed to list interfaces"); + + /* replace the list of ip_adresses with a new list where the + * interface names are replaced with their ip-address strings + * from getifaddrs. An interface can have several addresses. */ + for(ip_addr = options->ip_addresses; ip_addr; ip_addr = ip_addr->next) { + char **ip_addresses = NULL; + size_t ip_addresses_size = 0, i; + resolve_ifa_name(addrs, ip_addr->address, &ip_addresses, + &ip_addresses_size); + + for (i = 0; i < ip_addresses_size; i++) { + struct ip_address_option *current; + /* this copies the range_option, dev, and fib from + * the original ip_address option to the new ones + * with the addresses spelled out by resolve_ifa_name*/ + current = region_alloc_init(options->region, ip_addr, + sizeof(*ip_addr)); + current->address = region_strdup(options->region, + ip_addresses[i]); + current->next = NULL; + free(ip_addresses[i]); + + if(first == NULL) { + first = current; + } else { + last->next = current; + } + last = current; + } + free(ip_addresses); + } + + freeifaddrs(addrs); + options->ip_addresses = first; +#else + (void)options; +#endif /* HAVE_GETIFADDRS */ +} + static void copyaddrinfo(struct nsd_addrinfo *dest, struct addrinfo *src) { @@ -170,7 +299,7 @@ setup_socket( if(node) { char *sep; - if(strlcpy(host_buf, node, sizeof(host_buf)) >= sizeof(host_buf)) { + if (strlcpy(host_buf, node, sizeof(host_buf)) >= sizeof(host_buf)) { error("cannot parse address '%s': %s", node, strerror(ENAMETOOLONG)); } @@ -657,8 +786,9 @@ unlinkpid(const char* file) if (fd == -1) { /* Truncate the pid file. */ log_msg(LOG_ERR, "can not truncate the pid file %s: %s", file, strerror(errno)); - } else + } else { close(fd); + } /* unlink pidfile */ if (unlink(file) == -1) { @@ -1238,6 +1368,7 @@ main(int argc, char *argv[]) nsd.this_child = NULL; + resolve_interface_names(nsd.options); figure_sockets(&nsd.udp, &nsd.tcp, &nsd.ifs, nsd.options->ip_addresses, udp_port, tcp_port, &hints); Index: nsd.conf.5.in =================================================================== RCS file: /cvs/src/usr.sbin/nsd/nsd.conf.5.in,v retrieving revision 1.35 diff -u -p -r1.35 nsd.conf.5.in --- nsd.conf.5.in 23 Jul 2020 13:54:08 -0000 1.35 +++ nsd.conf.5.in 9 Oct 2020 21:36:14 -0000 @@ -1,4 +1,4 @@ -.TH "nsd.conf" "5" "Jul 14, 2020" "NLnet Labs" "nsd 4.3.2" +.TH "nsd.conf" "5" "Oct 8, 2020" "NLnet Labs" "nsd 4.3.3" .\" Copyright (c) 2001\-2008, NLnet Labs. All rights reserved. .\" See LICENSE for the license. .SH "NAME" @@ -143,11 +143,15 @@ NSD will bind to the listed ip\-address. to bind multiple ip\-addresses. Optionally, a port number can be given. If none are given NSD listens to the wildcard interface. Same as commandline option .BR \-a. +.IP To limit which NSD server(s) listen on the given interface, specify one or more servers separated by whitespace after <ip>[@port]. Ranges can be used as a shorthand to specify multiple consecutive servers. By default every server will listen. -.BR +.IP +If an interface name is used instead of ip4 or ip6, the list of IP addresses +associated with that interface is picked up and used at server start. +.IP For servers with multiple IP addresses that can be used to send traffic to the internet, list them one by one, or the source address of replies could be wrong. This is because if the udp socket associates a source @@ -298,10 +302,10 @@ Default is system default MSS determined negotiation between NSD and other servers. .TP .B ipv4\-edns\-size:\fR <number> -Preferred EDNS buffer size for IPv4. Default 4096. +Preferred EDNS buffer size for IPv4. Default 1232. .TP .B ipv6\-edns\-size:\fR <number> -Preferred EDNS buffer size for IPv6. Default 4096. +Preferred EDNS buffer size for IPv6. Default 1232. .TP .B pidfile:\fR <filename> Use the pid file instead of the platform specific default, usually Index: nsd.conf.sample.in =================================================================== RCS file: /cvs/src/usr.sbin/nsd/nsd.conf.sample.in,v retrieving revision 1.14 diff -u -p -r1.14 nsd.conf.sample.in --- nsd.conf.sample.in 23 Jul 2020 13:54:08 -0000 1.14 +++ nsd.conf.sample.in 9 Oct 2020 21:36:14 -0000 @@ -175,10 +175,10 @@ server: # outgoing-tcp-mss: 0 # Preferred EDNS buffer size for IPv4. - # ipv4-edns-size: 4096 + # ipv4-edns-size: 1232 # Preferred EDNS buffer size for IPv6. - # ipv6-edns-size: 4096 + # ipv6-edns-size: 1232 # statistics are produced every number of seconds. Prints to log. # Default is 0, meaning no statistics are produced. Index: options.c =================================================================== RCS file: /cvs/src/usr.sbin/nsd/options.c,v retrieving revision 1.19 diff -u -p -r1.19 options.c --- options.c 23 Jul 2020 13:54:08 -0000 1.19 +++ options.c 9 Oct 2020 21:36:14 -0000 @@ -9,6 +9,7 @@ #include "config.h" #include <string.h> #include <stdio.h> +#include <sys/stat.h> #include <errno.h> #include "options.h" #include "query.h" @@ -161,6 +162,20 @@ nsd_options_insert_pattern(struct nsd_op return 1; } +void +warn_if_directory(const char* filetype, FILE* f, const char* fname) +{ + if(fileno(f) != -1) { + struct stat st; + memset(&st, 0, sizeof(st)); + if(fstat(fileno(f), &st) != -1) { + if(S_ISDIR(st.st_mode)) { + log_msg(LOG_WARNING, "trying to read %s but it is a directory: %s", filetype, fname); + } + } + } +} + int parse_options_file(struct nsd_options* opt, const char* file, void (*err)(void*,const char*), void* err_arg) @@ -197,6 +212,7 @@ parse_options_file(struct nsd_options* o } return 0; } + warn_if_directory("configfile", in, file); c_in = in; c_parse(); fclose(in); Index: options.h =================================================================== RCS file: /cvs/src/usr.sbin/nsd/options.h,v retrieving revision 1.18 diff -u -p -r1.18 options.h --- options.h 23 Jul 2020 13:54:08 -0000 1.18 +++ options.h 9 Oct 2020 21:36:14 -0000 @@ -468,5 +468,9 @@ void nsd_options_destroy(struct nsd_opti void replace_str(char* buf, size_t len, const char* one, const char* two); /* apply pattern to the existing pattern in the parser */ void config_apply_pattern(struct pattern_options *dest, const char* name); +/* if the file is a directory, print a warning, because flex just exit()s + * when a fileread fails because it is a directory, helps the user figure + * out what just happened */ +void warn_if_directory(const char* filetype, FILE* f, const char* fname); #endif /* OPTIONS_H */ Index: server.c =================================================================== RCS file: /cvs/src/usr.sbin/nsd/server.c,v retrieving revision 1.39 diff -u -p -r1.39 server.c --- server.c 23 Jul 2020 13:54:08 -0000 1.39 +++ server.c 9 Oct 2020 21:36:14 -0000 @@ -1660,6 +1660,7 @@ server_send_soa_xfrd(struct nsd* nsd, in udb_base_sync(nsd->db->udb, 1); udb_base_close(nsd->db->udb); server_shutdown(nsd); + /* ENOTREACH */ exit(0); } } @@ -1857,6 +1858,7 @@ listen_sslctx_setup_2(void* ctxt) (void)ctx; #if HAVE_DECL_SSL_CTX_SET_ECDH_AUTO if(!SSL_CTX_set_ecdh_auto(ctx,1)) { + /* ENOTREACH */ log_crypto_err("Error in SSL_CTX_ecdh_auto, not enabling ECDHE"); } #elif defined(HAVE_DECL_SSL_CTX_SET_TMP_ECDH) && defined(NID_X9_62_prime256v1) && defined(HAVE_EC_KEY_NEW_BY_CURVE_NAME) Index: tsig-openssl.c =================================================================== RCS file: /cvs/src/usr.sbin/nsd/tsig-openssl.c,v retrieving revision 1.4 diff -u -p -r1.4 tsig-openssl.c --- tsig-openssl.c 24 Oct 2016 09:44:43 -0000 1.4 +++ tsig-openssl.c 9 Oct 2020 21:36:14 -0000 @@ -11,6 +11,9 @@ #if defined(HAVE_SSL) +#ifdef HAVE_OPENSSL_CORE_NAMES_H +#include <openssl/core_names.h> +#endif #include "tsig-openssl.h" #include "tsig.h" #include "util.h" @@ -22,11 +25,36 @@ static void init_context(void *context, static void update(void *context, const void *data, size_t size); static void final(void *context, uint8_t *digest, size_t *size); +#ifdef HAVE_EVP_MAC_CTX_NEW +struct tsig_openssl_data { + /* the MAC for the algorithm, 'hmac' */ + EVP_MAC* mac; + /* the digest name for creating the EVP_MAC_CTX with, 'sha256' */ + const char* digest; +}; + +struct tsig_openssl_context { + /* the evp mac context, if notNULL it has algo and key set. */ + EVP_MAC_CTX* hmac_ctx; + /* the size of destination buffers */ + size_t outsize; +}; + +static void +cleanup_tsig_openssl_data(void *data) +{ + struct tsig_openssl_data* d = (struct tsig_openssl_data*)data; + EVP_MAC_free(d->mac); + d->mac = NULL; +} +#endif + static int tsig_openssl_init_algorithm(region_type* region, const char* digest, const char* name, const char* wireformat) { tsig_algorithm_type* algorithm; +#ifndef HAVE_EVP_MAC_CTX_NEW const EVP_MD *hmac_algorithm; hmac_algorithm = EVP_get_digestbyname(digest); @@ -34,6 +62,44 @@ tsig_openssl_init_algorithm(region_type* /* skip but don't error */ return 0; } +#else + struct tsig_openssl_data* data; + EVP_MAC_CTX* hmac_ctx; + OSSL_PARAM params[3]; + data = region_alloc(region, sizeof(*data)); + data->digest = digest; + data->mac = EVP_MAC_fetch(NULL, "hmac", NULL); + if(!data->mac) { + log_msg(LOG_ERR, "could not fetch MAC implementation 'hmac' with EVP_MAC_fetch"); + return 0; + } + /* this context is created to see what size the output is */ + hmac_ctx = EVP_MAC_CTX_new(data->mac); + if(!hmac_ctx) { + EVP_MAC_free(data->mac); + return 0; + } + params[0] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, + (char*)digest, 0); + params[1] = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY, + "", 1); + params[2] = OSSL_PARAM_construct_end(); +#ifdef HAVE_EVP_MAC_CTX_SET_PARAMS + if(EVP_MAC_CTX_set_params(hmac_ctx, params) <= 0) { + log_msg(LOG_ERR, "could not EVP_MAC_CTX_set_params"); + EVP_MAC_CTX_free(hmac_ctx); + EVP_MAC_free(data->mac); + return 0; + } +#else + if(EVP_MAC_set_ctx_params(hmac_ctx, params) <= 0) { + log_msg(LOG_ERR, "could not EVP_MAC_set_ctx_params"); + EVP_MAC_CTX_free(hmac_ctx); + EVP_MAC_free(data->mac); + return 0; + } +#endif +#endif algorithm = (tsig_algorithm_type *) region_alloc( region, sizeof(tsig_algorithm_type)); @@ -42,18 +108,34 @@ tsig_openssl_init_algorithm(region_type* = dname_parse(region, wireformat); if (!algorithm->wireformat_name) { log_msg(LOG_ERR, "cannot parse %s algorithm", wireformat); +#ifdef HAVE_EVP_MAC_CTX_NEW + EVP_MAC_CTX_free(hmac_ctx); + EVP_MAC_free(data->mac); +#endif return 0; } +#ifndef HAVE_EVP_MAC_CTX_NEW algorithm->maximum_digest_size = EVP_MD_size(hmac_algorithm); +#else + algorithm->maximum_digest_size = EVP_MAC_size(hmac_ctx); +#endif if(algorithm->maximum_digest_size < 20) algorithm->maximum_digest_size = EVP_MAX_MD_SIZE; +#ifndef HAVE_EVP_MAC_CTX_NEW algorithm->data = hmac_algorithm; +#else + algorithm->data = data; + region_add_cleanup(region, cleanup_tsig_openssl_data, data); +#endif algorithm->hmac_create_context = create_context; algorithm->hmac_init_context = init_context; algorithm->hmac_update = update; algorithm->hmac_final = final; tsig_add_algorithm(algorithm); +#ifdef HAVE_EVP_MAC_CTX_NEW + EVP_MAC_CTX_free(hmac_ctx); +#endif return 1; } @@ -86,6 +168,7 @@ tsig_openssl_init(region_type *region) static void cleanup_context(void *data) { +#ifndef HAVE_EVP_MAC_CTX_NEW HMAC_CTX *context = (HMAC_CTX *) data; #ifdef HAVE_HMAC_CTX_NEW HMAC_CTX_free(context); @@ -93,11 +176,17 @@ cleanup_context(void *data) HMAC_CTX_cleanup(context); free(context); #endif +#else + struct tsig_openssl_context* c = (struct tsig_openssl_context*)data; + EVP_MAC_CTX_free(c->hmac_ctx); + c->hmac_ctx = NULL; +#endif } static void * create_context(region_type *region) { +#ifndef HAVE_EVP_MAC_CTX_NEW #ifdef HAVE_HMAC_CTX_NEW HMAC_CTX *context = HMAC_CTX_new(); #else @@ -109,6 +198,12 @@ create_context(region_type *region) #else HMAC_CTX_init(context); #endif +#else + struct tsig_openssl_context* context = region_alloc(region, + sizeof(*context)); + memset(context, 0, sizeof(*context)); + region_add_cleanup(region, cleanup_context, context); +#endif return context; } @@ -117,25 +212,75 @@ init_context(void *context, tsig_algorithm_type *algorithm, tsig_key_type *key) { +#ifndef HAVE_EVP_MAC_CTX_NEW HMAC_CTX *ctx = (HMAC_CTX *) context; const EVP_MD *md = (const EVP_MD *) algorithm->data; HMAC_Init_ex(ctx, key->data, key->size, md, NULL); +#else + OSSL_PARAM params[3]; + struct tsig_openssl_data* algo_data = (struct tsig_openssl_data*) + algorithm->data; + struct tsig_openssl_context* c = (struct tsig_openssl_context*)context; + if(c->hmac_ctx) { + EVP_MAC_CTX_free(c->hmac_ctx); + } + c->hmac_ctx = EVP_MAC_CTX_new(algo_data->mac); + if(!c->hmac_ctx) { + log_msg(LOG_ERR, "could not EVP_MAC_CTX_new"); + return; + } + params[0] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, + (char*)algo_data->digest, 0); + params[1] = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY, + key->data, key->size); + params[2] = OSSL_PARAM_construct_end(); +#ifdef HAVE_EVP_MAC_CTX_SET_PARAMS + if(EVP_MAC_CTX_set_params(c->hmac_ctx, params) <= 0) { + log_msg(LOG_ERR, "could not EVP_MAC_CTX_set_params"); + EVP_MAC_CTX_free(c->hmac_ctx); + c->hmac_ctx = NULL; + return; + } +#else + if(EVP_MAC_set_ctx_params(hmac_ctx, params) <= 0) { + log_msg(LOG_ERR, "could not EVP_MAC_set_ctx_params"); + EVP_MAC_CTX_free(c->hmac_ctx); + c->hmac_ctx = NULL; + return; + } +#endif + c->outsize = algorithm->maximum_digest_size; +#endif } static void update(void *context, const void *data, size_t size) { +#ifndef HAVE_EVP_MAC_CTX_NEW HMAC_CTX *ctx = (HMAC_CTX *) context; HMAC_Update(ctx, (unsigned char *) data, (int) size); +#else + struct tsig_openssl_context* c = (struct tsig_openssl_context*)context; + if(EVP_MAC_update(c->hmac_ctx, data, size) <= 0) { + log_msg(LOG_ERR, "could not EVP_MAC_update"); + } +#endif } static void final(void *context, uint8_t *digest, size_t *size) { +#ifndef HAVE_EVP_MAC_CTX_NEW HMAC_CTX *ctx = (HMAC_CTX *) context; unsigned len = (unsigned) *size; HMAC_Final(ctx, digest, &len); *size = (size_t) len; +#else + struct tsig_openssl_context* c = (struct tsig_openssl_context*)context; + if(EVP_MAC_final(c->hmac_ctx, digest, size, c->outsize) <= 0) { + log_msg(LOG_ERR, "could not EVP_MAC_final"); + } +#endif } void Index: tsig-openssl.h =================================================================== RCS file: /cvs/src/usr.sbin/nsd/tsig-openssl.h,v retrieving revision 1.1.1.4 diff -u -p -r1.1.1.4 tsig-openssl.h --- tsig-openssl.h 26 Nov 2013 12:50:10 -0000 1.1.1.4 +++ tsig-openssl.h 9 Oct 2020 21:36:14 -0000 @@ -22,7 +22,7 @@ */ int tsig_openssl_init(region_type *region); -void tsig_openssl_finalize(); +void tsig_openssl_finalize(void); #endif /* defined(HAVE_SSL) */ Index: util.c =================================================================== RCS file: /cvs/src/usr.sbin/nsd/util.c,v retrieving revision 1.25 diff -u -p -r1.25 util.c --- util.c 23 Jul 2020 14:34:55 -0000 1.25 +++ util.c 9 Oct 2020 21:36:14 -0000 @@ -266,6 +266,19 @@ lookup_by_id(lookup_table_type *table, i return NULL; } +char * +xstrdup(const char *src) +{ + char *result = strdup(src); + + if(!result) { + log_msg(LOG_ERR, "strdup failed: %s", strerror(errno)); + exit(1); + } + + return result; +} + void * xalloc(size_t size) { Index: util.h =================================================================== RCS file: /cvs/src/usr.sbin/nsd/util.h,v retrieving revision 1.16 diff -u -p -r1.16 util.h --- util.h 23 Jul 2020 13:54:08 -0000 1.16 +++ util.h 9 Oct 2020 21:36:14 -0000 @@ -148,6 +148,7 @@ void *xmallocarray(size_t num, size_t si void *xalloc_zero(size_t size); void *xalloc_array_zero(size_t num, size_t size); void *xrealloc(void *ptr, size_t size); +char *xstrdup(const char *src); /* * Mmap allocator routines. @@ -400,7 +401,7 @@ struct state_pretty_rr { struct state_pretty_rr* create_pretty_rr(struct region* region); /* print rr to file, returns 0 on failure(nothing is written) */ int print_rr(FILE *out, struct state_pretty_rr* state, struct rr *record, - struct region* tmp_region, struct buffer* tmp_buffer); + struct region* tmp_region, struct buffer* tmp_buffer); /* * Convert a numeric rcode value to a human readable string Index: zonec.c =================================================================== RCS file: /cvs/src/usr.sbin/nsd/zonec.c,v retrieving revision 1.26 diff -u -p -r1.26 zonec.c --- zonec.c 17 Sep 2019 16:19:35 -0000 1.26 +++ zonec.c 9 Oct 2020 21:36:14 -0000 @@ -1341,8 +1341,12 @@ zone_open(const char *filename, uint32_t if (strcmp(filename, "-") == 0) { yyin = stdin; filename = "<stdin>"; - } else if (!(yyin = fopen(filename, "r"))) { - return 0; + warn_if_directory("zonefile from stdin", yyin, filename); + } else { + if (!(yyin = fopen(filename, "r"))) { + return 0; + } + warn_if_directory("zonefile", yyin, filename); } zparser_init(filename, ttl, klass, origin); Index: zonec.h =================================================================== RCS file: /cvs/src/usr.sbin/nsd/zonec.h,v retrieving revision 1.9 diff -u -p -r1.9 zonec.h --- zonec.h 17 Sep 2019 16:19:35 -0000 1.9 +++ zonec.h 9 Oct 2020 21:36:14 -0000 @@ -117,7 +117,7 @@ void parse_unknown_rdata(uint16_t type, uint32_t zparser_ttl2int(const char *ttlstr, int* error); void zadd_rdata_wireformat(uint16_t *data); void zadd_rdata_txt_wireformat(uint16_t *data, int first); -void zadd_rdata_txt_clean_wireformat(); +void zadd_rdata_txt_clean_wireformat(void); void zadd_rdata_domain(domain_type *domain); void set_bitnsec(uint8_t bits[NSEC_WINDOW_COUNT][NSEC_WINDOW_BITS_SIZE], Index: doc/ChangeLog =================================================================== RCS file: /cvs/src/usr.sbin/nsd/doc/ChangeLog,v retrieving revision 1.4 diff -u -p -r1.4 ChangeLog --- doc/ChangeLog 23 Jul 2020 13:54:08 -0000 1.4 +++ doc/ChangeLog 9 Oct 2020 21:36:14 -0000 @@ -1,3 +1,58 @@ +1 October 2020: Wouter + - tag for 4.3.3rc1 release. + +30 September 2020: Wouter + - Updated date in nsd -v output. + - Fixup bug013_truncate, checkconf and cutest_qroot tests for new + default EDNS size. + +29 September 2020: Willem + - Follow DNS flag day 2020 advice and + set default EDNS message size to 1232. + +4 September 2020: Wouter + - Remove unused space from LIBS on link line. + +3 September 2020: Wouter + - Merge PR #121: Increase log level of recreated database from + WARNING to ERR. + +1 September 2020: Wouter + - Fix #119: fix compile warnings from new gcc. + - Fix #119: warn when trying to parse a directory. + +27 August 2020: Wouter + - Merged PR #113 with fixes. Instead of listing an IP-address to + listen on, an interface name can be specified in nsd.conf, with + ip-address: eth0. The IP-addresses for that interface are then used. + +26 August 2020: Wouter + - Add xstrdup for PR #113. + - Tidy up code like in PR #113. + - Import code from PR #113. + - Fix for unknown EVP_MAC_CTX_free function in openssl 3.0.0 tsig code. + +24 August 2020: Wouter + - Fix that configure checks for EVP_sha256 to detect openssl, because + HMAC_CTX_new is deprecated in 3.0.0. + - Port TSIG code for openssl 3.0.0-alpha6. + - Sync acx_nlnetlabs.m4 with the unbound repo. + - Review fixes for tsig, defensive free and zero. + +4 August 2020: Wouter + - Merge #117: mini_event.h (4.3.2 and 4.3.1) on OpenBSD cannot find + fd_set - patch. + +23 July 2020: Wouter + - Merge #115 from millert: Fix strlcpy() usage. From OpenBSD. + +15 July 2020: Wouter + - Fix make install with --with-pidfile="". + +14 July 2020: Wouter + - Tag for 4.3.2 release. Master branch contains the next version + in development, 4.3.3. + 7 July 2020: Wouter - Tag for 4.3.2rc1. Index: doc/RELNOTES =================================================================== RCS file: /cvs/src/usr.sbin/nsd/doc/RELNOTES,v retrieving revision 1.3 diff -u -p -r1.3 RELNOTES --- doc/RELNOTES 23 Jul 2020 13:54:08 -0000 1.3 +++ doc/RELNOTES 9 Oct 2020 21:36:14 -0000 @@ -1,5 +1,29 @@ NSD RELEASE NOTES +4.3.3 +================ +FEATURES: + - Follow DNS flag day 2020 advice and + set default EDNS message size to 1232. + - Merged PR #113 with fixes. Instead of listing an IP-address to + listen on, an interface name can be specified in nsd.conf, with + ip-address: eth0. The IP-addresses for that interface are then used. + - Port TSIG code for openssl 3.0.0-alpha6. +BUG FIXES: + - Fix make install with --with-pidfile="". + - Merge #115 from millert: Fix strlcpy() usage. From OpenBSD. + - Merge #117: mini_event.h (4.3.2 and 4.3.1) on OpenBSD cannot find + fd_set - patch. + - Fix that configure checks for EVP_sha256 to detect openssl, because + HMAC_CTX_new is deprecated in 3.0.0. + - Fix #119: fix compile warnings from new gcc. + - Fix #119: warn when trying to parse a directory. + - Merge PR #121: Increase log level of recreated database from + WARNING to ERR. + - Remove unused space from LIBS on link line. + - Updated date in nsd -v output. + + 4.3.2 ================ FEATURES: