]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
5 years agoReformat sources using clang-format-11
Ondřej Surý [Mon, 24 Aug 2020 07:23:19 +0000 (09:23 +0200)] 
Reformat sources using clang-format-11

5 years agoExplicitly configure new clang-format-11 options
Ondřej Surý [Mon, 24 Aug 2020 07:23:06 +0000 (09:23 +0200)] 
Explicitly configure new clang-format-11 options

5 years agoMerge branch 'placeholder' into 'main'
Evan Hunt [Fri, 4 Dec 2020 19:40:42 +0000 (19:40 +0000)] 
Merge branch 'placeholder' into 'main'

placeholder for change 5546

See merge request isc-projects/bind9!4473

5 years agoplaceholder for change 5546
Evan Hunt [Fri, 4 Dec 2020 19:37:58 +0000 (11:37 -0800)] 
placeholder for change 5546

5 years agoMerge branch 'ondrej/fix-using-the-load-balanced-sockets' into 'main'
Ondřej Surý [Fri, 4 Dec 2020 13:55:56 +0000 (13:55 +0000)] 
Merge branch 'ondrej/fix-using-the-load-balanced-sockets' into 'main'

Fix s/HAVE_REUSEPORT_LB/HAVE_SO_REUSEPORT_LB/ typo in #define

See merge request isc-projects/bind9!4472

5 years agoFix HAVE_SO_REUSEPORT_LB macro name definition
Ondřej Surý [Fri, 4 Dec 2020 12:19:44 +0000 (13:19 +0100)] 
Fix HAVE_SO_REUSEPORT_LB macro name definition

A typo in macro definition caused the load-balanced sockets to be
disabled even on platforms with existing support for load-balanced
sockets.

5 years agoMerge branch 'ondrej/fix-the-windows-nchildren-problem' into 'main'
Ondřej Surý [Thu, 3 Dec 2020 17:42:53 +0000 (17:42 +0000)] 
Merge branch 'ondrej/fix-the-windows-nchildren-problem' into 'main'

Use sock->nchildren instead of mgr->nworkers when initializing NM

See merge request isc-projects/bind9!4469

5 years agoUse sock->nchildren instead of mgr->nworkers when initializing NM
Ondřej Surý [Thu, 3 Dec 2020 16:58:10 +0000 (17:58 +0100)] 
Use sock->nchildren instead of mgr->nworkers when initializing NM

On Windows, we were limiting the number of listening children to just 1,
but we were then iterating on mgr->nworkers.  That lead to scheduling
more async_*listen() than actually allocated and out-of-bound read-write
operation on the heap.

5 years agoMerge branch '2314-fix-datarace-in-nm-connect-functions' into 'main'
Ondřej Surý [Thu, 3 Dec 2020 14:41:57 +0000 (14:41 +0000)] 
Merge branch '2314-fix-datarace-in-nm-connect-functions' into 'main'

Fix datarace when UDP/TCP connect fails and we are in nmthread

Closes #2332 and #2314

See merge request isc-projects/bind9!4468

5 years agoMerge branch 'ondrej/set-openbsd-system-connection-timeout' into 'main'
Ondřej Surý [Thu, 3 Dec 2020 13:02:57 +0000 (13:02 +0000)] 
Merge branch 'ondrej/set-openbsd-system-connection-timeout' into 'main'

Configure the system-wide TCP connection timeout on OpenBSD

See merge request isc-projects/bind9!4466

5 years agoConfigure the system-wide TCP connection timeout on OpenBSD
Ondřej Surý [Thu, 3 Dec 2020 10:24:57 +0000 (11:24 +0100)] 
Configure the system-wide TCP connection timeout on OpenBSD

As there's no TCP connection timeout socket option that we can use, we
need to configure the TCP connection timeout system-wide in the CI, so
the netmgr unit tests doesn't cause assertion failure when there stuck
outgoing TCP connection waiting for 150 second timeout.

5 years agoFix datarace when UDP/TCP connect fails and we are in nmthread
Ondřej Surý [Thu, 3 Dec 2020 12:00:33 +0000 (13:00 +0100)] 
Fix datarace when UDP/TCP connect fails and we are in nmthread

When we were in nmthread, the isc__nm_async_<proto>connect() function
executes in the same thread as the isc__nm_<proto>connect() and on a
failure, it would block indefinitely because the failure branch was
setting sock->active to false before the condition around the wait had a
chance to skip the WAIT().

This also fixes the zero system test being stuck on FreeBSD 11, so we
re-enable the test in the commit.

5 years agoMerge branch '2333-temporarily-disable-the-legacy-test-on-windows' into 'main'
Michał Kępień [Thu, 3 Dec 2020 11:49:43 +0000 (11:49 +0000)] 
Merge branch '2333-temporarily-disable-the-legacy-test-on-windows' into 'main'

Temporarily disable the "legacy" test on Windows

See merge request isc-projects/bind9!4462

5 years agoTemporarily disable the "legacy" test on Windows
Michał Kępień [Thu, 3 Dec 2020 11:48:43 +0000 (12:48 +0100)] 
Temporarily disable the "legacy" test on Windows

The current issues with the way dig handles TCP "connection refused"
errors cause the "legacy" system test to consistently fail on Windows
due to the expected strings not being present in dig output.
Temporarily disable the "legacy" system test on Windows by moving it
from the PARALLEL_COMMON list to the PARALLEL_UNIX list until the
situation is rectified.

5 years agoMerge branch '2137-so_reuseport-doesn-t-distribute-udp-queries-to-multiple-netmgr...
Ondřej Surý [Thu, 3 Dec 2020 09:58:02 +0000 (09:58 +0000)] 
Merge branch '2137-so_reuseport-doesn-t-distribute-udp-queries-to-multiple-netmgr-workers-on-macos' into 'main'

Distribute queries among threads even on platforms without SO_REUSEPORT_LB

Closes #2137

See merge request isc-projects/bind9!4459

5 years agoAdd CHANGES and release note for GL #2137
Ondřej Surý [Wed, 2 Dec 2020 15:24:15 +0000 (16:24 +0100)] 
Add CHANGES and release note for GL #2137

5 years agoAdd FreeBSD connection timeout socket option
Ondřej Surý [Wed, 2 Dec 2020 20:54:25 +0000 (21:54 +0100)] 
Add FreeBSD connection timeout socket option

On FreeBSD, the option to configure connection timeout is called
TCP_KEEPINIT, use it to configure the connection timeout there.

This also fixes the dangling socket problems in the unit test, so
re-enable them.

5 years agoMerge branch '2332-fix-use-after-free-in-tcpdns_send_direct' into 'main'
Ondřej Surý [Thu, 3 Dec 2020 08:21:10 +0000 (08:21 +0000)] 
Merge branch '2332-fix-use-after-free-in-tcpdns_send_direct' into 'main'

Don't use stack allocated buffer for uv_write()

Closes #2332

See merge request isc-projects/bind9!4465

5 years agoDistribute queries among threads even on platforms without lb sockets
Ondřej Surý [Wed, 2 Dec 2020 14:37:18 +0000 (15:37 +0100)] 
Distribute queries among threads even on platforms without lb sockets

On platforms without load-balancing socket all the queries would be
handle by a single thread.  Currently, the support for load-balanced
sockets is present in Linux with SO_REUSEPORT and FreeBSD 12 with
SO_REUSEPORT_LB.

This commit adds workaround for such platforms that:

1. setups single shared listening socket for all listening nmthreads for
   UDP, TCP and TCPDNS netmgr transports

2. Calls uv_udp_bind/uv_tcp_bind on the underlying socket just once and
   for rest of the nmthreads only copy the internal libuv flags (should
   be just UV_HANDLE_BOUND and optionally UV_HANDLE_IPV6).

3. start reading on UDP socket or listening on TCP socket

The load distribution among the nmthreads is uneven, but it's still
better than utilizing just one thread for processing all the incoming
queries

5 years agoDon't use stack allocated buffer for uv_write()
Ondřej Surý [Thu, 3 Dec 2020 07:33:21 +0000 (08:33 +0100)] 
Don't use stack allocated buffer for uv_write()

On FreeBSD, the stack is destroyed more aggressively than on Linux and
that revealed a bug where we were allocating the 16-bit len for the
TCPDNS message on the stack and the buffer got garbled before the
uv_write() sendback was executed.  Now, the len is part of the uvreq, so
we can safely pass it to the uv_write() as the req gets destroyed after
the sendcb is executed.

5 years agoMerge branch 'artem/random-additions-to-the-gitignore' into 'main'
Artem Boldariev [Wed, 2 Dec 2020 22:25:55 +0000 (22:25 +0000)] 
Merge branch 'artem/random-additions-to-the-gitignore' into 'main'

Some small, random additions to the .gitignore.

See merge request isc-projects/bind9!4463

5 years agoSome small, random additions to the .gitignore.
Artem Boldariev [Wed, 2 Dec 2020 22:15:22 +0000 (00:15 +0200)] 
Some small, random additions to the .gitignore.

Ignores some auxiliary files generated/used by the following tools: -

- clangd
- GNU Global
- Emacs

5 years agoMerge branch '2328-make-netmgr-initialize-and-cleanup-winsock-itself' into 'main'
Michał Kępień [Wed, 2 Dec 2020 21:39:14 +0000 (21:39 +0000)] 
Merge branch '2328-make-netmgr-initialize-and-cleanup-winsock-itself' into 'main'

Make netmgr initialize and cleanup Winsock itself

Closes #2328

See merge request isc-projects/bind9!4458

5 years agoMake netmgr initialize and cleanup Winsock itself
Michał Kępień [Wed, 2 Dec 2020 21:36:23 +0000 (22:36 +0100)] 
Make netmgr initialize and cleanup Winsock itself

On Windows, WSAStartup() needs to be called to initialize Winsock before
any sockets are created or else socket() calls will return error code
10093 (WSANOTINITIALISED).  Since BIND's Network Manager is intended to
work as a reusable networking library, it should take care of calling
WSAStartup() - and its cleanup counterpart, WSACleanup() - itself rather
than relying on external code to do it.  Add the necessary WSAStartup()
and WSACleanup() calls to isc_nm_start() and isc_nm_destroy(),
respectively.

5 years agoExtend log message for unexpected socket() errors
Michał Kępień [Wed, 2 Dec 2020 21:36:23 +0000 (22:36 +0100)] 
Extend log message for unexpected socket() errors

Make sure the error code is included in the message logged for
unexpected socket creation errors in order to facilitate troubleshooting
on Windows.

5 years agoMerge branch '2327-error-uv_wrap-h-no-such-file-or-directory-on-unit-gcc-tarball...
Michal Nowak [Wed, 2 Dec 2020 15:09:45 +0000 (15:09 +0000)] 
Merge branch '2327-error-uv_wrap-h-no-such-file-or-directory-on-unit-gcc-tarball-ci-job' into 'main'

Add uv_wrap.h to libisctest_la_SOURCES

Closes #2327

See merge request isc-projects/bind9!4451

5 years agoAdd uv_wrap.h to libisctest_la_SOURCES
Michal Nowak [Wed, 2 Dec 2020 07:57:46 +0000 (08:57 +0100)] 
Add uv_wrap.h to libisctest_la_SOURCES

uv_wrap.h is included in tcp_test.c and udp_test.c and therefore should
be listed in lib/isc/tests/Makefile.am, otherwise unit test run from
distribution tarball fails to compile:

tcp_test.c:37:10: fatal error: uv_wrap.h: No such file or directory
 #include "uv_wrap.h"
          ^~~~~~~~~~~

udp_test.c:37:10: fatal error: uv_wrap.h: No such file or directory
 #include "uv_wrap.h"
          ^~~~~~~~~~~

5 years agoMerge branch '2250-dns-flag-day-2020-revert-nocookie-udp-size' into 'main'
Ondřej Surý [Wed, 2 Dec 2020 11:01:16 +0000 (11:01 +0000)] 
Merge branch '2250-dns-flag-day-2020-revert-nocookie-udp-size' into 'main'

Resolve "DNS Flag Day 2020 - EDNS buffer size configuring does not work anymore"

Closes #2250

See merge request isc-projects/bind9!4449

5 years agoAdd CHANGES and release not for GL #2250
Ondřej Surý [Tue, 1 Dec 2020 18:01:30 +0000 (19:01 +0100)] 
Add CHANGES and release not for GL #2250

5 years agoChange the default value for nocookie-udp-size back to 4096
Ondřej Surý [Tue, 1 Dec 2020 17:53:26 +0000 (18:53 +0100)] 
Change the default value for nocookie-udp-size back to 4096

The DNS Flag Day 2020 reduced all the EDNS buffer sizes to 1232.  In
this commit, we revert the default value for nocookie-udp-size back to
4096 because the option is too obscure and most people don't realize
that they also need to change this configuration option in addition to
max-udp-size.

5 years agoMerge branch '2320-avoid-netievent-allocations-if-not-needed' into 'main'
Ondřej Surý [Wed, 2 Dec 2020 10:04:25 +0000 (10:04 +0000)] 
Merge branch '2320-avoid-netievent-allocations-if-not-needed' into 'main'

Avoid netievent allocations when the callbacks can be called directly

Closes #2320

See merge request isc-projects/bind9!4452

5 years agoAdd CHANGES note for GL #2320
Ondřej Surý [Wed, 2 Dec 2020 08:56:11 +0000 (09:56 +0100)] 
Add CHANGES note for GL #2320

5 years agoFix the data race in accessing the isc_nm_t timers
Ondřej Surý [Wed, 2 Dec 2020 08:52:39 +0000 (09:52 +0100)] 
Fix the data race in accessing the isc_nm_t timers

The following TSAN report about accessing the mgr timers (mgr->init,
mgr->idle, mgr->keepalive and mgr->advertised) has been fixed in this
commit:

    ==================
    WARNING: ThreadSanitizer: data race (pid=2746)
    Read of size 4 at 0x7b440008a948 by thread T18:
    #0 isc__nm_tcpdns_read /home/ondrej/Projects/bind9/lib/isc/netmgr/tcpdns.c:849:25 (libisc.so.1706+0x2ba0f)
    #1 isc_nm_read /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:1679:3 (libisc.so.1706+0x22258)
    #2 tcpdns_connect_connect_cb /home/ondrej/Projects/bind9/lib/isc/tests/tcpdns_test.c:363:2 (tcpdns_test+0x4bc5fb)
    #3 isc__nm_async_connectcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:1816:2 (libisc.so.1706+0x228c9)
    #4 isc__nm_connectcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:1791:3 (libisc.so.1706+0x22713)
    #5 tcpdns_connect_cb /home/ondrej/Projects/bind9/lib/isc/netmgr/tcpdns.c:343:2 (libisc.so.1706+0x2d89d)
    #6 uv__stream_connect /home/ondrej/Projects/tsan/libuv/src/unix/stream.c:1381:5 (libuv.so.1+0x27c18)
    #7 uv__stream_io /home/ondrej/Projects/tsan/libuv/src/unix/stream.c:1298:5 (libuv.so.1+0x25977)
    #8 uv__io_poll /home/ondrej/Projects/tsan/libuv/src/unix/linux-core.c:462:11 (libuv.so.1+0x2e795)
    #9 uv_run /home/ondrej/Projects/tsan/libuv/src/unix/core.c:385:5 (libuv.so.1+0x158ec)
    #10 nm_thread /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:530:11 (libisc.so.1706+0x1c94a)

    Previous write of size 4 at 0x7b440008a948 by main thread:
    #0 isc_nm_settimeouts /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:490:12 (libisc.so.1706+0x1dda5)
    #1 tcpdns_recv_two /home/ondrej/Projects/bind9/lib/isc/tests/tcpdns_test.c:601:2 (tcpdns_test+0x4bad0e)
    #2 cmocka_run_one_test_or_fixture <null> (libcmocka.so.0+0x70be)
    #3 __libc_start_main /build/glibc-vjB4T1/glibc-2.28/csu/../csu/libc-start.c:308:16 (libc.so.6+0x2409a)

    Location is heap block of size 281 at 0x7b440008a840 allocated by main thread:
    #0 malloc <null> (tcpdns_test+0x42864b)
    #1 default_memalloc /home/ondrej/Projects/bind9/lib/isc/mem.c:713:8 (libisc.so.1706+0x6d261)
    #2 mem_get /home/ondrej/Projects/bind9/lib/isc/mem.c:622:8 (libisc.so.1706+0x69b9c)
    #3 isc___mem_get /home/ondrej/Projects/bind9/lib/isc/mem.c:1044:9 (libisc.so.1706+0x6d379)
    #4 isc__mem_get /home/ondrej/Projects/bind9/lib/isc/mem.c:2432:10 (libisc.so.1706+0x6889e)
    #5 isc_nm_start /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:203:8 (libisc.so.1706+0x1c219)
    #6 nm_setup /home/ondrej/Projects/bind9/lib/isc/tests/tcpdns_test.c:244:11 (tcpdns_test+0x4baaa4)
    #7 cmocka_run_one_test_or_fixture <null> (libcmocka.so.0+0x70fd)
    #8 __libc_start_main /build/glibc-vjB4T1/glibc-2.28/csu/../csu/libc-start.c:308:16 (libc.so.6+0x2409a)

    Thread T18 'isc-net-0000' (tid=3513, running) created by main thread at:
    #0 pthread_create <null> (tcpdns_test+0x429e7b)
    #1 isc_thread_create /home/ondrej/Projects/bind9/lib/isc/pthreads/thread.c:73:8 (libisc.so.1706+0x8476a)
    #2 isc_nm_start /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:271:3 (libisc.so.1706+0x1c66a)
    #3 nm_setup /home/ondrej/Projects/bind9/lib/isc/tests/tcpdns_test.c:244:11 (tcpdns_test+0x4baaa4)
    #4 cmocka_run_one_test_or_fixture <null> (libcmocka.so.0+0x70fd)
    #5 __libc_start_main /build/glibc-vjB4T1/glibc-2.28/csu/../csu/libc-start.c:308:16 (libc.so.6+0x2409a)

    SUMMARY: ThreadSanitizer: data race /home/ondrej/Projects/bind9/lib/isc/netmgr/tcpdns.c:849:25 in isc__nm_tcpdns_read
    ==================
    ThreadSanitizer: reported 1 warnings

5 years agoAvoid netievent allocations when the callbacks can be called directly
Ondřej Surý [Wed, 2 Dec 2020 07:54:51 +0000 (08:54 +0100)] 
Avoid netievent allocations when the callbacks can be called directly

After turning the users callbacks to be asynchronous, there was a
visible performance drop.  This commit prevents the unnecessary
allocations while keeping the code paths same for both asynchronous and
synchronous calls.

The same change was done to the isc__nm_udp_{read,send} as those two
functions are in the hot path.

5 years agoMerge branch '2321-netmgr-v2' into 'main'
Ondřej Surý [Tue, 1 Dec 2020 17:07:06 +0000 (17:07 +0000)] 
Merge branch '2321-netmgr-v2' into 'main'

Refactor netmgr and add more unit tests

Closes #2321, #2061, #1920, #2034, #2266, #2318, #2283, and #2194

See merge request isc-projects/bind9!4444

5 years agoDisable the new netmgr tests on non-Linux platforms
Ondřej Surý [Tue, 1 Dec 2020 15:08:44 +0000 (16:08 +0100)] 
Disable the new netmgr tests on non-Linux platforms

The new netmgr tests are not-yet fine-tuned for non-Linux platforms.
Disable them now, so we can move forward and fix the tests of *BSD
in the next iteration.

This commit will get reverted when we add support for netmgr
multi-threading.

5 years agoSkip the zero, xfer and ixfr tests on non-Linux platforms
Ondřej Surý [Tue, 1 Dec 2020 14:18:10 +0000 (15:18 +0100)] 
Skip the zero, xfer and ixfr tests on non-Linux platforms

Due to the platform differences, on non-Linux platforms, the xfer and
ixfr tests fails and zero test gets stuck.

This commit will get reverted when we add support for netmgr
multi-threading.

5 years agoThe cmocka.h header MUST be included before isc/util.h gets included
Ondřej Surý [Tue, 1 Dec 2020 14:08:49 +0000 (15:08 +0100)] 
The cmocka.h header MUST be included before isc/util.h gets included

The isc/util.h header redefine the DbC checks (REQUIRE, INSIST, ...)  to
be cmocka "fake" assertions.  However that means that cmocka.h needs to
be included after UNIT_TESTING is defined but before isc/util.h is
included.  Because isc/util.h is included in most of the project headers
this means that the sequence MUST be:

    #define UNIT_TESTING
    #include <cmocka.h>

    #include <isc/_anything_.h>

See !2204 for other header requirements for including cmocka.h.

5 years agoAdd release note for known issue #2137
Ondřej Surý [Tue, 1 Dec 2020 12:57:25 +0000 (13:57 +0100)] 
Add release note for known issue #2137

5 years agoAdd CHANGES note for multiple netmgr issues
Ondřej Surý [Tue, 1 Dec 2020 12:01:53 +0000 (13:01 +0100)] 
Add CHANGES note for multiple netmgr issues

5 years agoRefactor netmgr and add more unit tests
Ondřej Surý [Thu, 12 Nov 2020 09:32:18 +0000 (10:32 +0100)] 
Refactor netmgr and add more unit tests

This is a part of the works that intends to make the netmgr stable,
testable, maintainable and tested.  It contains a numerous changes to
the netmgr code and unfortunately, it was not possible to split this
into smaller chunks as the work here needs to be committed as a complete
works.

NOTE: There's a quite a lot of duplicated code between udp.c, tcp.c and
tcpdns.c and it should be a subject to refactoring in the future.

The changes that are included in this commit are listed here
(extensively, but not exclusively):

* The netmgr_test unit test was split into individual tests (udp_test,
  tcp_test, tcpdns_test and newly added tcp_quota_test)

* The udp_test and tcp_test has been extended to allow programatic
  failures from the libuv API.  Unfortunately, we can't use cmocka
  mock() and will_return(), so we emulate the behaviour with #define and
  including the netmgr/{udp,tcp}.c source file directly.

* The netievents that we put on the nm queue have variable number of
  members, out of these the isc_nmsocket_t and isc_nmhandle_t always
  needs to be attached before enqueueing the netievent_<foo> and
  detached after we have called the isc_nm_async_<foo> to ensure that
  the socket (handle) doesn't disappear between scheduling the event and
  actually executing the event.

* Cancelling the in-flight TCP connection using libuv requires to call
  uv_close() on the original uv_tcp_t handle which just breaks too many
  assumptions we have in the netmgr code.  Instead of using uv_timer for
  TCP connection timeouts, we use platform specific socket option.

* Fix the synchronization between {nm,async}_{listentcp,tcpconnect}

  When isc_nm_listentcp() or isc_nm_tcpconnect() is called it was
  waiting for socket to either end up with error (that path was fine) or
  to be listening or connected using condition variable and mutex.

  Several things could happen:

    0. everything is ok

    1. the waiting thread would miss the SIGNAL() - because the enqueued
       event would be processed faster than we could start WAIT()ing.
       In case the operation would end up with error, it would be ok, as
       the error variable would be unchanged.

    2. the waiting thread miss the sock->{connected,listening} = `true`
       would be set to `false` in the tcp_{listen,connect}close_cb() as
       the connection would be so short lived that the socket would be
       closed before we could even start WAIT()ing

* The tcpdns has been converted to using libuv directly.  Previously,
  the tcpdns protocol used tcp protocol from netmgr, this proved to be
  very complicated to understand, fix and make changes to.  The new
  tcpdns protocol is modeled in a similar way how tcp netmgr protocol.
Closes: #2194, #2283, #2318, #2266, #2034, #1920
* The tcp and tcpdns is now not using isc_uv_import/isc_uv_export to
  pass accepted TCP sockets between netthreads, but instead (similar to
  UDP) uses per netthread uv_loop listener.  This greatly reduces the
  complexity as the socket is always run in the associated nm and uv
  loops, and we are also not touching the libuv internals.

  There's an unfortunate side effect though, the new code requires
  support for load-balanced sockets from the operating system for both
  UDP and TCP (see #2137).  If the operating system doesn't support the
  load balanced sockets (either SO_REUSEPORT on Linux or SO_REUSEPORT_LB
  on FreeBSD 12+), the number of netthreads is limited to 1.

* The netmgr has now two debugging #ifdefs:

  1. Already existing NETMGR_TRACE prints any dangling nmsockets and
     nmhandles before triggering assertion failure.  This options would
     reduce performance when enabled, but in theory, it could be enabled
     on low-performance systems.

  2. New NETMGR_TRACE_VERBOSE option has been added that enables
     extensive netmgr logging that allows the software engineer to
     precisely track any attach/detach operations on the nmsockets and
     nmhandles.  This is not suitable for any kind of production
     machine, only for debugging.

* The tlsdns netmgr protocol has been split from the tcpdns and it still
  uses the old method of stacking the netmgr boxes on top of each other.
  We will have to refactor the tlsdns netmgr protocol to use the same
  approach - build the stack using only libuv and openssl.

* Limit but not assert the tcp buffer size in tcp_alloc_cb
Closes: #2061
5 years agoMerge branch '2305-adjust-recursion-limits' into 'main'
Mark Andrews [Tue, 1 Dec 2020 13:51:16 +0000 (13:51 +0000)] 
Merge branch '2305-adjust-recursion-limits' into 'main'

Adjust recursion limits

Closes #2305

See merge request isc-projects/bind9!4424

5 years agoAdjust default value of "max-recursion-queries"
Mark Andrews [Thu, 26 Nov 2020 04:59:14 +0000 (15:59 +1100)] 
Adjust default value of "max-recursion-queries"

Since the queries sent towards root and TLD servers are now included in
the count (as a result of the fix for CVE-2020-8616),
"max-recursion-queries" has a higher chance of being exceeded by
non-attack queries.  Increase its default value from 75 to 100.

5 years agoMerge branch '2315-bind-9-11-22-9-11-25-fails-to-build-for-aep-hsm-native-pkcs11...
Mark Andrews [Tue, 1 Dec 2020 12:15:57 +0000 (12:15 +0000)] 
Merge branch '2315-bind-9-11-22-9-11-25-fails-to-build-for-aep-hsm-native-pkcs11' into 'main'

Resolve "BIND 9.11.22 - 9.11.25 fails to build for AEP HSM native pkcs11"

Closes #2315

See merge request isc-projects/bind9!4441

5 years agoAdd release note for [GL #2315]
Mark Andrews [Mon, 30 Nov 2020 23:39:41 +0000 (10:39 +1100)] 
Add release note for [GL #2315]

5 years agoAdd CHANGES
Mark Andrews [Mon, 30 Nov 2020 01:16:41 +0000 (12:16 +1100)] 
Add CHANGES

5 years agoFix misplaced declaration
Mark Andrews [Fri, 27 Nov 2020 21:13:44 +0000 (08:13 +1100)] 
Fix misplaced declaration

5 years agoMerge branch 'mnowak/drop_headerdep_test.sh.in' into 'main'
Michal Nowak [Fri, 27 Nov 2020 12:14:29 +0000 (12:14 +0000)] 
Merge branch 'mnowak/drop_headerdep_test.sh.in' into 'main'

Drop bin/tests/headerdep_test.sh.in, revise OPTIONS.md

See merge request isc-projects/bind9!4401

5 years agoDrop bin/tests/headerdep_test.sh.in
Michal Nowak [Thu, 19 Nov 2020 11:33:27 +0000 (12:33 +0100)] 
Drop bin/tests/headerdep_test.sh.in

The bin/tests/headerdep_test.sh script has not been updated since it was
first created and it cannot be used as-is with the current BIND source
code.  Better tools (e.g. "include-what-you-use") emerged since the
script was committed back in 2000, so instead of trying to bring it up
to date, remove it from the source repository.

5 years agoRevise OPTIONS.md
Michal Nowak [Thu, 19 Nov 2020 09:35:57 +0000 (10:35 +0100)] 
Revise OPTIONS.md

  - The STD_CDEFINES build-time variable was dropped when the build
    system was migrated to Automake.  CPPFLAGS is the variable which
    should now be used for setting preprocessor macros.

  - Sort the list of preprocessor macros which affect BIND behavior.
    Remove ISC_BUFFER_USEINLINE from the list as it can be controlled
    using its relevant ./configure option (--enable-buffer-useinline).
    Rename NS_RUN_PID_DIR to NAMED_RUN_PID_DIR to match the source code.

  - Tweak Markdown formatting.

5 years agoMerge branch '2275-tighten-dns-cookie-response-handling' into 'main'
Mark Andrews [Thu, 26 Nov 2020 21:10:28 +0000 (21:10 +0000)] 
Merge branch '2275-tighten-dns-cookie-response-handling' into 'main'

Resolve "Tighten DNS COOKIE response handling"

Closes #2275

See merge request isc-projects/bind9!4391

5 years agoAdd release note for [GL #2275]
Mark Andrews [Tue, 24 Nov 2020 14:00:19 +0000 (01:00 +1100)] 
Add release note for [GL #2275]

5 years agoAdd CHANGES note for [GL #2275]
Mark Andrews [Fri, 13 Nov 2020 04:44:39 +0000 (15:44 +1100)] 
Add CHANGES note for [GL #2275]

5 years agoAdd comment about cookie sizes
Mark Andrews [Tue, 24 Nov 2020 13:12:00 +0000 (00:12 +1100)] 
Add comment about cookie sizes

5 years agoCheck that missing cookies are handled
Mark Andrews [Fri, 13 Nov 2020 04:38:49 +0000 (15:38 +1100)] 
Check that missing cookies are handled

5 years agoTighten DNS COOKIE response handling
Mark Andrews [Thu, 12 Nov 2020 22:45:47 +0000 (09:45 +1100)] 
Tighten DNS COOKIE response handling

Fallback to TCP when we have already seen a DNS COOKIE response
from the given address and don't have one in this UDP response. This
could be a server that has turned off DNS COOKIE support, a
misconfigured anycast server with partial DNS COOKIE support, or a
spoofed response. Falling back to TCP is the correct behaviour in
all 3 cases.

5 years agoMerge branch '2224-fixup-core-back-traces' into 'main' 4437/head
Michal Nowak [Thu, 26 Nov 2020 17:03:43 +0000 (17:03 +0000)] 
Merge branch '2224-fixup-core-back-traces' into 'main'

Resolve "Fixup core back traces."

Closes #2224

See merge request isc-projects/bind9!4279

5 years agoWrite traceback file to the same directory as core file
Michal Nowak [Tue, 24 Nov 2020 16:39:23 +0000 (17:39 +0100)] 
Write traceback file to the same directory as core file

The traceback files could overwrite each other on systems which do not
use different core dump file names for different processes.  Prevent
that by writing the traceback file to the same directory as the core
dump file.

These changes still do not prevent the operating system from overwriting
a core dump file if the same binary crashes multiple times in the same
directory and core dump files are named identically for different
processes.

5 years agoUnify whitespace in bin/tests/system/run.sh.in
Mark Andrews [Tue, 20 Oct 2020 23:11:39 +0000 (10:11 +1100)] 
Unify whitespace in bin/tests/system/run.sh.in

Replace tabs with spaces to make whitespace consistent across the entire
bin/tests/system/run.sh.in script.

5 years agoMerge branch '2281-cid-313104-error-handling-issues-in-lib-ns-query-c' into 'main'
Diego dos Santos Fronza [Thu, 26 Nov 2020 14:57:02 +0000 (14:57 +0000)] 
Merge branch '2281-cid-313104-error-handling-issues-in-lib-ns-query-c' into 'main'

Resolve "CID 313104: Error handling issues in lib/ns/query.c"

Closes #2281

See merge request isc-projects/bind9!4416

5 years agoSilence coverity warnings in query.c
Diego Fronza [Wed, 25 Nov 2020 19:01:06 +0000 (16:01 -0300)] 
Silence coverity warnings in query.c

Return value of dns_db_getservestalerefresh() and
dns_db_getservestalettl() functions were previously unhandled.

This commit purposefully ignore those return values since there is
no side effect if those results are != ISC_R_SUCCESS, it also supress
Coverity warnings.

5 years agoMerge branch '1620-dnssec-policy-nsec3-saltlen-followup' into 'main'
Matthijs Mekking [Thu, 26 Nov 2020 14:40:34 +0000 (14:40 +0000)] 
Merge branch '1620-dnssec-policy-nsec3-saltlen-followup' into 'main'

Add one missing check to nsec3param unit test

See merge request isc-projects/bind9!4432

5 years agoAdd one missing check to nsec3param unit test
Matthijs Mekking [Thu, 26 Nov 2020 12:37:24 +0000 (13:37 +0100)] 
Add one missing check to nsec3param unit test

Caught this missing check with clang-build while backporting #1620
to the v9_16 branch.

5 years agoMerge branch 'michal/use-proper-cmocka-macros-for-pointer-checks' into 'main'
Michał Kępień [Thu, 26 Nov 2020 12:12:02 +0000 (12:12 +0000)] 
Merge branch 'michal/use-proper-cmocka-macros-for-pointer-checks' into 'main'

Use proper cmocka macros for pointer checks

See merge request isc-projects/bind9!4415

5 years agoUse proper cmocka macros for pointer checks
Michał Kępień [Thu, 26 Nov 2020 12:10:40 +0000 (13:10 +0100)] 
Use proper cmocka macros for pointer checks

Make sure pointer checks in unit tests use cmocka assertion macros
dedicated for use with pointers instead of those dedicated for use with
integers or booleans.

5 years agoMerge branch '2310-update-release-checklist' into 'main'
Michał Kępień [Thu, 26 Nov 2020 12:08:09 +0000 (12:08 +0000)] 
Merge branch '2310-update-release-checklist' into 'main'

Update release checklist

See merge request isc-projects/bind9!4425

5 years agoUpdate release checklist
Michał Kępień [Thu, 26 Nov 2020 12:07:19 +0000 (13:07 +0100)] 
Update release checklist

Add an item to the release checklist to make sure the man pages
generated during release preparation are formatted correctly.

5 years agoMerge branch 'v9_17_7-release' into 'main'
Michał Kępień [Thu, 26 Nov 2020 11:19:45 +0000 (11:19 +0000)] 
Merge branch 'v9_17_7-release' into 'main'

Merge 9.17.7 release branch

See merge request isc-projects/bind9!4426

5 years agoSet up release notes for BIND 9.17.8
Michał Kępień [Thu, 26 Nov 2020 11:16:49 +0000 (12:16 +0100)] 
Set up release notes for BIND 9.17.8

5 years agoBump BIND_BASELINE_VERSION for ABI checks
Michał Kępień [Thu, 26 Nov 2020 11:16:49 +0000 (12:16 +0100)] 
Bump BIND_BASELINE_VERSION for ABI checks

5 years agoUpdate BIND version to 9.17.7
Michał Kępień [Mon, 16 Nov 2020 11:40:34 +0000 (12:40 +0100)] 
Update BIND version to 9.17.7

5 years agoAdd a CHANGES marker
Michał Kępień [Mon, 16 Nov 2020 11:40:34 +0000 (12:40 +0100)] 
Add a CHANGES marker

5 years agoUpdate library API versions
Michał Kępień [Mon, 16 Nov 2020 11:40:34 +0000 (12:40 +0100)] 
Update library API versions

5 years agoMerge branch 'michal/prepare-release-notes-for-bind-9.17.7' into 'v9_17_7-release'
Michał Kępień [Mon, 16 Nov 2020 11:30:59 +0000 (11:30 +0000)] 
Merge branch 'michal/prepare-release-notes-for-bind-9.17.7' into 'v9_17_7-release'

Prepare release notes for BIND 9.17.7

See merge request isc-private/bind9!220

5 years agoPrepare release notes for BIND 9.17.7
Michał Kępień [Mon, 16 Nov 2020 10:00:50 +0000 (11:00 +0100)] 
Prepare release notes for BIND 9.17.7

5 years agoAdd release note for GL #2244
Michał Kępień [Mon, 16 Nov 2020 10:00:50 +0000 (11:00 +0100)] 
Add release note for GL #2244

5 years agoAdd release note for GL #2236
Michał Kępień [Mon, 16 Nov 2020 10:00:50 +0000 (11:00 +0100)] 
Add release note for GL #2236

5 years agoAdd release note for GL #1736
Michał Kępień [Mon, 16 Nov 2020 10:00:50 +0000 (11:00 +0100)] 
Add release note for GL #1736

5 years agoReorder release notes
Michał Kępień [Mon, 16 Nov 2020 10:00:50 +0000 (11:00 +0100)] 
Reorder release notes

5 years agoTweak and reword release notes
Michał Kępień [Mon, 16 Nov 2020 10:00:50 +0000 (11:00 +0100)] 
Tweak and reword release notes

5 years agoTweak and reword recent CHANGES entries
Michał Kępień [Mon, 16 Nov 2020 10:00:50 +0000 (11:00 +0100)] 
Tweak and reword recent CHANGES entries

5 years agoRemove any mention of "make depend" from README.md
Michał Kępień [Mon, 16 Nov 2020 10:00:50 +0000 (11:00 +0100)] 
Remove any mention of "make depend" from README.md

5 years agoMerge branch '1620-dnssec-policy-nsec3-saltlen' into 'main'
Matthijs Mekking [Thu, 26 Nov 2020 10:12:26 +0000 (10:12 +0000)] 
Merge branch '1620-dnssec-policy-nsec3-saltlen' into 'main'

Resolve "dnssec-policy NSEC3 support"

Closes #1620

See merge request isc-projects/bind9!4299

5 years agoAdd NSEC3PARAM unit test, refactor zone.c
Matthijs Mekking [Fri, 13 Nov 2020 11:26:05 +0000 (12:26 +0100)] 
Add NSEC3PARAM unit test, refactor zone.c

Add unit test to ensure the right NSEC3PARAM event is scheduled in
'dns_zone_setnsec3param()'.  To avoid scheduling and managing actual
tasks, split up the 'dns_zone_setnsec3param()' function in two parts:

1. 'dns__zone_lookup_nsec3param()' that will check if the requested
   NSEC3 parameters already exist, and if a new salt needs to be
   generated.

2. The actual scheduling of the new NSEC3PARAM event (if needed).

5 years agoDetect NSEC3 salt collisions
Matthijs Mekking [Thu, 5 Nov 2020 10:12:24 +0000 (11:12 +0100)] 
Detect NSEC3 salt collisions

When generating a new salt, compare it with the previous NSEC3
paremeters to ensure the new parameters are different from the
previous ones.

This moves the salt generation call from 'bin/named/*.s' to
'lib/dns/zone.c'. When setting new NSEC3 parameters, you can set a new
function parameter 'resalt' to enforce a new salt to be generated. A
new salt will also be generated if 'salt' is set to NULL.

Logging salt with zone context can now be done with 'dnssec_log',
removing the need for 'dns_nsec3_log_salt'.

5 years agoAdd zone context to "generated salt" logs
Matthijs Mekking [Wed, 4 Nov 2020 15:30:19 +0000 (16:30 +0100)] 
Add zone context to "generated salt" logs

5 years agoMove logging of salt in separate function
Matthijs Mekking [Tue, 27 Oct 2020 09:23:16 +0000 (10:23 +0100)] 
Move logging of salt in separate function

There may be a desire to log the salt without losing the context
of log module, level, and category.

5 years agoChange nsec3param salt config to saltlen
Matthijs Mekking [Fri, 23 Oct 2020 13:02:19 +0000 (15:02 +0200)] 
Change nsec3param salt config to saltlen

Upon request from Mark, change the configuration of salt to salt
length.

Introduce a new function 'dns_zone_checknsec3aram' that can be used
upon reconfiguration to check if the existing NSEC3 parameters are
in sync with the configuration. If a salt is used that matches the
configured salt length, don't change the NSEC3 parameters.

5 years agoAdd check for NSEC3 and key algorithms
Matthijs Mekking [Mon, 19 Oct 2020 08:19:52 +0000 (10:19 +0200)] 
Add check for NSEC3 and key algorithms

NSEC3 is not backwards compatible with key algorithms that existed
before the RFC 5155 specification was published.

5 years agoDisable one nsec3 test due to GL #2216
Matthijs Mekking [Wed, 14 Oct 2020 14:56:22 +0000 (16:56 +0200)] 
Disable one nsec3 test due to GL #2216

This known bug makes the test fail. There is no trivial fix so disable
test case for now.

5 years agoAdd changes and notes for kasp NSEC3 support
Matthijs Mekking [Wed, 14 Oct 2020 08:10:01 +0000 (10:10 +0200)] 
Add changes and notes for kasp NSEC3 support

This feature is news worthy.

5 years agoAdd some NSEC3 optout tests
Matthijs Mekking [Wed, 14 Oct 2020 08:03:13 +0000 (10:03 +0200)] 
Add some NSEC3 optout tests

Make sure that just changing the optout value recreates the chain.

5 years agoCheck nsec3param configuration values
Matthijs Mekking [Tue, 13 Oct 2020 15:48:22 +0000 (17:48 +0200)] 
Check nsec3param configuration values

Check 'nsec3param' configuration for the number of iterations.  The
maximum number of iterations that are allowed are based on the key
size (see https://tools.ietf.org/html/rfc5155#section-10.3).

Check 'nsec3param' configuration for correct salt. If the string is
not "-" or hex-based, this is a bad salt.

5 years agoDon't use 'rndc signing' with kasp
Matthijs Mekking [Tue, 13 Oct 2020 12:52:02 +0000 (14:52 +0200)] 
Don't use 'rndc signing' with kasp

The 'rndc signing' command allows you to manipulate the private
records that are used to store signing state. Don't use these with
'dnssec-policy' as such manipulations may violate the policy (if you
want to change the NSEC3 parameters, change the policy and reconfig).

5 years agoFix a reconfig bug wrt inline-signing
Matthijs Mekking [Tue, 13 Oct 2020 12:48:04 +0000 (14:48 +0200)] 
Fix a reconfig bug wrt inline-signing

When doing 'rndc reconfig', named may complain about a zone not being
reusable because it has a raw version of the zone, and the new
configuration has not set 'inline-signing'. However, 'inline-signing'
may be implicitly true if a 'dnssec-policy' is used for the zone, and
the zone is not dynamic.

Improve the check in 'named_zone_reusable'.  Create a new function for
checking 'inline-signing' configuration that matches existing code in
'bin/named/server.c'.

5 years agoSupport for NSEC3 in dnssec-policy
Matthijs Mekking [Tue, 13 Oct 2020 12:39:21 +0000 (14:39 +0200)] 
Support for NSEC3 in dnssec-policy

Implement support for NSEC3 in dnssec-policy.  Store the configuration
in kasp objects. When configuring a zone, call 'dns_zone_setnsec3param'
to queue an nsec3param event. This will ensure that any previous
chains will be removed and a chain according to the dnssec-policy is
created.

Add tests for dnssec-policy zones that uses the new 'nsec3param'
option, as well as changing to new values, changing to NSEC, and
changing from NSEC.

5 years agoAdd kasp nsec3param configuration
Matthijs Mekking [Fri, 9 Oct 2020 12:19:10 +0000 (14:19 +0200)] 
Add kasp nsec3param configuration

Add configuration and documentation on how to enable NSEC3 when
using dnssec-policy for signing your zones.

5 years agoMove generate_salt function to lib/dns/nsec3
Matthijs Mekking [Fri, 23 Oct 2020 12:56:04 +0000 (14:56 +0200)] 
Move generate_salt function to lib/dns/nsec3

We will be using this function also on reconfig, so it should have
a wider availability than just bin/named/server.

5 years agoMerge branch 'michal/fix-cppcheck-2.2-issues' into 'main'
Michał Kępień [Wed, 25 Nov 2020 12:16:53 +0000 (12:16 +0000)] 
Merge branch 'michal/fix-cppcheck-2.2-issues' into 'main'

Fix cppcheck 2.2 issues

See merge request isc-projects/bind9!4292

5 years agoConvert add_quota() to a function
Michał Kępień [Wed, 25 Nov 2020 11:45:47 +0000 (12:45 +0100)] 
Convert add_quota() to a function

cppcheck 2.2 reports the following false positive:

    lib/isc/tests/quota_test.c:71:21: error: Array 'quotas[101]' accessed at index 110, which is out of bounds. [arrayIndexOutOfBounds]
     isc_quota_t *quotas[110];
                        ^

The above is not even an array access, so this report is obviously
caused by a cppcheck bug.  Yet, it seems to be triggered by the presence
of the add_quota() macro, which should really be a function.  Convert
the add_quota() macro to a function in order to make the code cleaner
and to prevent the above cppcheck 2.2 false positive from being
triggered.