]> git.ipfire.org Git - thirdparty/pdns.git/log
thirdparty/pdns.git
23 months agoTCPIOHandler: Fix a race when creating the first TLS connections 13167/head
Remi Gacogne [Wed, 23 Aug 2023 14:46:55 +0000 (16:46 +0200)] 
TCPIOHandler: Fix a race when creating the first TLS connections

We used to get a index from OpenSSL when the first incoming or
outgoing TLS connection was created. That index is later used
to store application-related data along the TLS connection, to
be able to access it in callbacks called from inside the OpenSSL
library.
Unfortunately the atomic flag construction used was racy: if a second
connection is created while the first one is still getting the index,
it could be reading the initial value (-1) instead of the actual index,
which might prevent the callback from working properly because they
cannot retrieve the necessary data. The good news is that this should
not have a serious impact: a TLS session might not be properly resumed
while it should have been, leading to a full TLS session negotiation.
This commit fixes the race by using a full mutex and only releasing
it once the value has been computed. In order to avoid a performance
penalty, the index is now computed when a TLS connection _context_
is created, instead of a TLS connection. TLS contexts should be
reused for a large number of connections, and mostly created during
startup or in the first few seconds of the application.

The race was reported by Thread Sanitizer during the
`test_TLS.py::TestTLSFrontendLimits::testTCPConnsPerTLSFrontend`
regression test as:
```
WARNING: ThreadSanitizer: data race (pid=120466)
  Read of size 4 at 0x55a12bf3d758 by thread T4:
    #0 OpenSSLTLSConnection::OpenSSLTLSConnection(int, timeval const&, std::shared_ptr<OpenSSLFrontendContext>) /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:106 (dnsdist+0x97ece8) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #1 std::__detail::_MakeUniq<OpenSSLTLSConnection>::__single_object std::make_unique<OpenSSLTLSConnection, int&, timeval const&, std::shared_ptr<OpenSSLFrontendContext>&>(int&, timeval const&, std::shared_ptr<OpenSSLFrontendContext>&) /usr/include/c++/13.2.1/bits/unique_ptr.h:1070 (dnsdist+0x97eff6) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #2 OpenSSLTLSIOCtx::getConnection(int, timeval const&, long) /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:797 (dnsdist+0x97eff6)
    #3 TCPIOHandler::TCPIOHandler(int, timeval const&, std::shared_ptr<TLSCtx>, long) /work/pdns/pdns/dnsdistdist/tcpiohandler.hh:246 (dnsdist+0x88c24f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #4 IncomingTCPConnectionState::IncomingTCPConnectionState(ConnectionInfo&&, TCPClientThreadData&, timeval const&) /work/pdns/pdns/dnsdistdist/dnsdist-tcp-upstream.hh:29 (dnsdist+0x88c24f)
    #5 void std::_Construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/stl_construct.h:119 (dnsdist+0x878b1e) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #6 void std::allocator_traits<std::allocator<void> >::construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<void>&, IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/alloc_traits.h:660 (dnsdist+0x878b1e)
    #7 std::_Sp_counted_ptr_inplace<IncomingTCPConnectionState, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<void>, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:604 (dnsdist+0x878b1e)
    #8 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<IncomingTCPConnectionState, std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*&, std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:971 (dnsdist+0x878b1e)
    #9 std::__shared_ptr<IncomingTCPConnectionState, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:1712 (dnsdist+0x878b1e)
    #10 std::shared_ptr<IncomingTCPConnectionState>::shared_ptr<std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr.h:464 (dnsdist+0x878b1e)
    #11 std::shared_ptr<std::enable_if<!std::is_array<IncomingTCPConnectionState>::value, IncomingTCPConnectionState>::type> std::make_shared<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr.h:1010 (dnsdist+0x878b1e)
    #12 handleIncomingTCPQuery /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1118 (dnsdist+0x878b1e)
    #13 void std::__invoke_impl<void, void (*&)(int, boost::any&), int, boost::any&>(std::__invoke_other, void (*&)(int, boost::any&), int&&, boost::any&) /usr/include/c++/13.2.1/bits/invoke.h:61 (dnsdist+0x32d951) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #14 std::enable_if<is_invocable_r_v<void, void (*&)(int, boost::any&), int, boost::any&>, void>::type std::__invoke_r<void, void (*&)(int, boost::any&), int, boost::any&>(void (*&)(int, boost::any&), int&&, boost::any&) /usr/include/c++/13.2.1/bits/invoke.h:111 (dnsdist+0x32d951)
    #15 std::_Function_handler<void (int, boost::any&), void (*)(int, boost::any&)>::_M_invoke(std::_Any_data const&, int&&, boost::any&) /usr/include/c++/13.2.1/bits/std_function.h:290 (dnsdist+0x32d951)
    #16 std::function<void (int, boost::any&)>::operator()(int, boost::any&) const /usr/include/c++/13.2.1/bits/std_function.h:591 (dnsdist+0x98fc0f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #17 EpollFDMultiplexer::run(timeval*, int) /work/pdns/pdns/dnsdistdist/epollmplexer.cc:190 (dnsdist+0x98fc0f)
    #18 tcpClientThread /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1251 (dnsdist+0x86cb7f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #19 void std::__invoke_impl<void, void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >(std::__invoke_other, void (*&&)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/invoke.h:61 (dnsdist+0x87aab1) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #20 std::__invoke_result<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >::type std::__invoke<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >(void (*&&)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/invoke.h:96 (dnsdist+0x87aab1)
    #21 void std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > >::_M_invoke<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>(std::_Index_tuple<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>) /usr/include/c++/13.2.1/bits/std_thread.h:292 (dnsdist+0x87aab1)
    #22 std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > >::operator()() /usr/include/c++/13.2.1/bits/std_thread.h:299 (dnsdist+0x87aab1)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > > >::_M_run() /usr/include/c++/13.2.1/bits/std_thread.h:244 (dnsdist+0x87aab1)
    #24 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104 (libstdc++.so.6+0xe1942) (BuildId: 207eb738c5976dd9aac1ae0640fc4de5946b547e)

  Previous write of size 4 at 0x55a12bf3d758 by thread T3:
    #0 OpenSSLTLSConnection::OpenSSLTLSConnection(int, timeval const&, std::shared_ptr<OpenSSLFrontendContext>) /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:88 (dnsdist+0x97ed98) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #1 std::__detail::_MakeUniq<OpenSSLTLSConnection>::__single_object std::make_unique<OpenSSLTLSConnection, int&, timeval const&, std::shared_ptr<OpenSSLFrontendContext>&>(int&, timeval const&, std::shared_ptr<OpenSSLFrontendContext>&) /usr/include/c++/13.2.1/bits/unique_ptr.h:1070 (dnsdist+0x97eff6) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #2 OpenSSLTLSIOCtx::getConnection(int, timeval const&, long) /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:797 (dnsdist+0x97eff6)
    #3 TCPIOHandler::TCPIOHandler(int, timeval const&, std::shared_ptr<TLSCtx>, long) /work/pdns/pdns/dnsdistdist/tcpiohandler.hh:246 (dnsdist+0x88c24f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #4 IncomingTCPConnectionState::IncomingTCPConnectionState(ConnectionInfo&&, TCPClientThreadData&, timeval const&) /work/pdns/pdns/dnsdistdist/dnsdist-tcp-upstream.hh:29 (dnsdist+0x88c24f)
    #5 void std::_Construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/stl_construct.h:119 (dnsdist+0x878b1e) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #6 void std::allocator_traits<std::allocator<void> >::construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<void>&, IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/alloc_traits.h:660 (dnsdist+0x878b1e)
    #7 std::_Sp_counted_ptr_inplace<IncomingTCPConnectionState, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<void>, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:604 (dnsdist+0x878b1e)
    #8 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<IncomingTCPConnectionState, std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*&, std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:971 (dnsdist+0x878b1e)
    #9 std::__shared_ptr<IncomingTCPConnectionState, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:1712 (dnsdist+0x878b1e)
    #10 std::shared_ptr<IncomingTCPConnectionState>::shared_ptr<std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr.h:464 (dnsdist+0x878b1e)
    #11 std::shared_ptr<std::enable_if<!std::is_array<IncomingTCPConnectionState>::value, IncomingTCPConnectionState>::type> std::make_shared<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr.h:1010 (dnsdist+0x878b1e)
    #12 handleIncomingTCPQuery /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1118 (dnsdist+0x878b1e)
    #13 void std::__invoke_impl<void, void (*&)(int, boost::any&), int, boost::any&>(std::__invoke_other, void (*&)(int, boost::any&), int&&, boost::any&) /usr/include/c++/13.2.1/bits/invoke.h:61 (dnsdist+0x32d951) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #14 std::enable_if<is_invocable_r_v<void, void (*&)(int, boost::any&), int, boost::any&>, void>::type std::__invoke_r<void, void (*&)(int, boost::any&), int, boost::any&>(void (*&)(int, boost::any&), int&&, boost::any&) /usr/include/c++/13.2.1/bits/invoke.h:111 (dnsdist+0x32d951)
    #15 std::_Function_handler<void (int, boost::any&), void (*)(int, boost::any&)>::_M_invoke(std::_Any_data const&, int&&, boost::any&) /usr/include/c++/13.2.1/bits/std_function.h:290 (dnsdist+0x32d951)
    #16 std::function<void (int, boost::any&)>::operator()(int, boost::any&) const /usr/include/c++/13.2.1/bits/std_function.h:591 (dnsdist+0x98fc0f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #17 EpollFDMultiplexer::run(timeval*, int) /work/pdns/pdns/dnsdistdist/epollmplexer.cc:190 (dnsdist+0x98fc0f)
    #18 tcpClientThread /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1251 (dnsdist+0x86cb7f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #19 void std::__invoke_impl<void, void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >(std::__invoke_other, void (*&&)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/invoke.h:61 (dnsdist+0x87aab1) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #20 std::__invoke_result<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >::type std::__invoke<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >(void (*&&)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/invoke.h:96 (dnsdist+0x87aab1)
    #21 void std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > >::_M_invoke<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>(std::_Index_tuple<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>) /usr/include/c++/13.2.1/bits/std_thread.h:292 (dnsdist+0x87aab1)
    #22 std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > >::operator()() /usr/include/c++/13.2.1/bits/std_thread.h:299 (dnsdist+0x87aab1)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > > >::_M_run() /usr/include/c++/13.2.1/bits/std_thread.h:244 (dnsdist+0x87aab1)
    #24 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104 (libstdc++.so.6+0xe1942) (BuildId: 207eb738c5976dd9aac1ae0640fc4de5946b547e)

  Location is global 'OpenSSLTLSConnection::s_tlsConnIndex' of size 4 at 0x55a12bf3d758 (dnsdist+0xc49758)

  Thread T4 'dnsdist/tcpClie' (tid=120471, running) created by main thread at:
    #0 pthread_create /usr/src/debug/gcc/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1036 (libtsan.so.2+0x44219) (BuildId: 7e8fcb9ed0a63b98f2293e37c92ac955413efd9e)
    #1 __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663 (libstdc++.so.6+0xe1a29) (BuildId: 207eb738c5976dd9aac1ae0640fc4de5946b547e)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172 (libstdc++.so.6+0xe1a29)
    #3 TCPClientCollection::addTCPClientThread(std::vector<ClientState*, std::allocator<ClientState*> >&) /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:149 (dnsdist+0x8685a1) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #4 TCPClientCollection::TCPClientCollection(unsigned long, std::vector<ClientState*, std::allocator<ClientState*> >) /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:126 (dnsdist+0x868912) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #5 std::__detail::_MakeUniq<TCPClientCollection>::__single_object std::make_unique<TCPClientCollection, unsigned long&, std::vector<ClientState*, std::allocator<ClientState*> > >(unsigned long&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/unique_ptr.h:1070 (dnsdist+0x20adef) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #6 main /work/pdns/pdns/dnsdistdist/dnsdist.cc:2865 (dnsdist+0x20adef)

  Thread T3 'dnsdist/tcpClie' (tid=120470, running) created by main thread at:
    #0 pthread_create /usr/src/debug/gcc/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1036 (libtsan.so.2+0x44219) (BuildId: 7e8fcb9ed0a63b98f2293e37c92ac955413efd9e)
    #1 __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663 (libstdc++.so.6+0xe1a29) (BuildId: 207eb738c5976dd9aac1ae0640fc4de5946b547e)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172 (libstdc++.so.6+0xe1a29)
    #3 TCPClientCollection::addTCPClientThread(std::vector<ClientState*, std::allocator<ClientState*> >&) /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:149 (dnsdist+0x8685a1) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #4 TCPClientCollection::TCPClientCollection(unsigned long, std::vector<ClientState*, std::allocator<ClientState*> >) /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:126 (dnsdist+0x868912) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #5 std::__detail::_MakeUniq<TCPClientCollection>::__single_object std::make_unique<TCPClientCollection, unsigned long&, std::vector<ClientState*, std::allocator<ClientState*> > >(unsigned long&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/unique_ptr.h:1070 (dnsdist+0x20adef) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #6 main /work/pdns/pdns/dnsdistdist/dnsdist.cc:2865 (dnsdist+0x20adef)

SUMMARY: ThreadSanitizer: data race /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:106 in OpenSSLTLSConnection::OpenSSLTLSConnection(int, timeval const&, std::shared_ptr<OpenSSLFrontendContext>)
```

23 months agoMerge pull request #13166 from omoerbeek/rec-buildbot-nosnmp
Otto Moerbeek [Wed, 23 Aug 2023 13:03:43 +0000 (15:03 +0200)] 
Merge pull request #13166 from omoerbeek/rec-buildbot-nosnmp

rec/buildbot: Avoid running SNMP tests on the current buildbot setup

23 months agoAvoid running SNMP tests on the current buildbot setup 13166/head
Otto Moerbeek [Wed, 23 Aug 2023 11:23:56 +0000 (13:23 +0200)] 
Avoid running SNMP tests on the current buildbot setup

Since the change from nose to pytest, the SNMP exclusion via the environment
var NOSE_EXLUDE does no longer work.

23 months agoMerge pull request #13095 from rgacogne/coding-guidelines
Remi Gacogne [Wed, 23 Aug 2023 07:40:09 +0000 (09:40 +0200)] 
Merge pull request #13095 from rgacogne/coding-guidelines

Add a coding guidelines document to the public repository

23 months agoMerge pull request #13071 from omoerbeek/json-encoding
Otto Moerbeek [Tue, 22 Aug 2023 13:55:15 +0000 (15:55 +0200)] 
Merge pull request #13071 from omoerbeek/json-encoding

Fix code producing json

23 months agoCoding Guidelines: Apply suggestions from reviews 13095/head
Remi Gacogne [Mon, 21 Aug 2023 15:35:30 +0000 (17:35 +0200)] 
Coding Guidelines: Apply suggestions from reviews

23 months agoMerge pull request #13155 from rgacogne/channel-make-blocking-params-explicit
Remi Gacogne [Mon, 21 Aug 2023 09:26:16 +0000 (11:26 +0200)] 
Merge pull request #13155 from rgacogne/channel-make-blocking-params-explicit

channel: Make the blocking parameters of the object queue explicit

23 months agoMerge pull request #13102 from omoerbeek/rec-nodata-condition
Otto Moerbeek [Mon, 21 Aug 2023 08:25:17 +0000 (10:25 +0200)] 
Merge pull request #13102 from omoerbeek/rec-nodata-condition

rec: Do not assume the records are in a particular order when determining if an answer is NODATA

23 months agoMerge pull request #13106 from omoerbeek/rec-aggr-cache-replace
Otto Moerbeek [Mon, 21 Aug 2023 08:24:55 +0000 (10:24 +0200)] 
Merge pull request #13106 from omoerbeek/rec-aggr-cache-replace

rec: replace data in the aggressive cache if new data becomes available

23 months agoMerge pull request #13144 from fredmorcos/iputils-cleanup
Fred Morcos [Fri, 18 Aug 2023 19:57:53 +0000 (21:57 +0200)] 
Merge pull request #13144 from fredmorcos/iputils-cleanup

Consistency: Use #ifdef instead of #if in `iputils.cc`

23 months agoMerge pull request #13152 from fredmorcos/cleanup-yaml-to-json
Fred Morcos [Fri, 18 Aug 2023 19:44:16 +0000 (21:44 +0200)] 
Merge pull request #13152 from fredmorcos/cleanup-yaml-to-json

Cleanup `convert-yaml-to-json.py`

23 months agoConsistency: Use #ifdef instead of #if in iputils.cc 13144/head
Fred Morcos [Wed, 16 Aug 2023 12:14:21 +0000 (14:14 +0200)] 
Consistency: Use #ifdef instead of #if in iputils.cc

23 months agochannel: Make the blocking parameters of the object queue explicit 13155/head
Remi Gacogne [Wed, 16 Aug 2023 14:42:26 +0000 (16:42 +0200)] 
channel: Make the blocking parameters of the object queue explicit

23 months agoMerge pull request #13151 from aj-gh/fixtypos
Remi Gacogne [Fri, 18 Aug 2023 11:03:04 +0000 (13:03 +0200)] 
Merge pull request #13151 from aj-gh/fixtypos

Fix a few typos in log messages

23 months agoMerge pull request #13147 from chbruyand/dnsdist-channel-fix
Remi Gacogne [Fri, 18 Aug 2023 11:02:36 +0000 (13:02 +0200)] 
Merge pull request #13147 from chbruyand/dnsdist-channel-fix

dnsdist: DOH - make query channel receiving part blocking

23 months agoCleanup convert-yaml-to-json.py 13152/head
Fred Morcos [Thu, 17 Aug 2023 14:59:37 +0000 (16:59 +0200)] 
Cleanup convert-yaml-to-json.py

23 months agoFix a few typos. 13151/head
Andreas Jakum [Thu, 17 Aug 2023 13:24:05 +0000 (15:24 +0200)] 
Fix a few typos.

23 months agoMerge pull request #13149 from rgacogne/ddist-fix-frontend-metrics-recvmmsg
Remi Gacogne [Thu, 17 Aug 2023 10:06:50 +0000 (12:06 +0200)] 
Merge pull request #13149 from rgacogne/ddist-fix-frontend-metrics-recvmmsg

dnsdist: Properly record self-answered UDP responses with recvmmsg

23 months agoMerge pull request #13146 from chbruyand/dnsdist-cosmetic-fixes
Remi Gacogne [Thu, 17 Aug 2023 09:37:30 +0000 (11:37 +0200)] 
Merge pull request #13146 from chbruyand/dnsdist-cosmetic-fixes

dnsdist: cosmetic compilation warning fixes

23 months agodnsdist: Properly record self-answered UDP responses with recvmmsg 13149/head
Remi Gacogne [Thu, 17 Aug 2023 09:19:15 +0000 (11:19 +0200)] 
dnsdist: Properly record self-answered UDP responses with recvmmsg

Responses sent directly from dnsdist, without reaching out to a backend
(self-generated and cache hits answers, mostly) where not properly
accounted for in frontend metrics, ring buffer entries and latency
computation when recvmmsg/sendmmsg support was enabled via
`setUDPMultipleMessagesVectorSize()`.

23 months agodnsdsit: reset IncomingTCPConnectionState's buffer with clear() instead of resize() 13146/head
Charles-Henri Bruyand [Wed, 16 Aug 2023 15:20:21 +0000 (17:20 +0200)] 
dnsdsit: reset IncomingTCPConnectionState's buffer with clear() instead of resize()

23 months agodnsdist: remove unused variables warnings
Charles-Henri Bruyand [Wed, 16 Aug 2023 14:32:22 +0000 (16:32 +0200)] 
dnsdist: remove unused variables warnings

23 months agodnsdist: make query channel receiving part blocking to avoid unnecessary CPU consumption 13147/head
Charles-Henri Bruyand [Wed, 16 Aug 2023 15:28:23 +0000 (17:28 +0200)] 
dnsdist: make query channel receiving part blocking to avoid unnecessary CPU consumption

23 months agoMerge pull request #13141 from rgacogne/auth-coverity-4
Remi Gacogne [Wed, 16 Aug 2023 13:59:21 +0000 (15:59 +0200)] 
Merge pull request #13141 from rgacogne/auth-coverity-4

tools: Address more Coverity warnings

23 months agoMerge pull request #13005 from jellekaufmann/master
Peter van Dijk [Wed, 16 Aug 2023 11:31:20 +0000 (13:31 +0200)] 
Merge pull request #13005 from jellekaufmann/master

optsize off by -4 when including DNS cookie

23 months agodnsbulktest: Fix warnings from clang-tidy 13141/head
Remi Gacogne [Wed, 16 Aug 2023 09:46:03 +0000 (11:46 +0200)] 
dnsbulktest: Fix warnings from clang-tidy

23 months agocalidns: Fix warnings from clang-tidy
Remi Gacogne [Wed, 16 Aug 2023 09:45:49 +0000 (11:45 +0200)] 
calidns: Fix warnings from clang-tidy

23 months agodnsgram: Fix Coverity CID 1401647
Remi Gacogne [Wed, 16 Aug 2023 09:13:09 +0000 (11:13 +0200)] 
dnsgram: Fix Coverity CID 1401647

23 months agoixfrdist: Fix Coverity CID 1504137: Uncaught exception
Remi Gacogne [Wed, 16 Aug 2023 08:15:42 +0000 (10:15 +0200)] 
ixfrdist: Fix Coverity CID 1504137: Uncaught exception

23 months agodnsbulktest: Fix Coverity CID 1401681 and 1401676
Remi Gacogne [Wed, 16 Aug 2023 08:15:07 +0000 (10:15 +0200)] 
dnsbulktest: Fix Coverity CID 1401681 and 1401676

23 months agocalidns: Fix Coverity CID 1401679: Uncaught exception
Remi Gacogne [Wed, 16 Aug 2023 08:14:25 +0000 (10:14 +0200)] 
calidns: Fix Coverity CID 1401679: Uncaught exception

23 months agoCoding Guidelines: Mention reserve()/resize() explicitly, with links
Remi Gacogne [Wed, 16 Aug 2023 07:36:21 +0000 (09:36 +0200)] 
Coding Guidelines: Mention reserve()/resize() explicitly, with links

23 months agoMerge pull request #13135 from rgacogne/ddist-gettc
Remi Gacogne [Wed, 16 Aug 2023 07:28:01 +0000 (09:28 +0200)] 
Merge pull request #13135 from rgacogne/ddist-gettc

dnsdist: Add a DNSHeader:getTC() Lua binding

23 months agoMerge pull request #13138 from Habbie/cid398388
Peter van Dijk [Tue, 15 Aug 2023 19:02:14 +0000 (21:02 +0200)] 
Merge pull request #13138 from Habbie/cid398388

coverity CID 398388: useless <0 check on unsigned value

23 months agodnsdist: Remove a second useless check, useless static casts 13138/head
Remi Gacogne [Tue, 15 Aug 2023 16:07:52 +0000 (18:07 +0200)] 
dnsdist: Remove a second useless check, useless static casts

23 months agoMerge pull request #13139 from fredmorcos/minor-cleanups
Peter van Dijk [Tue, 15 Aug 2023 16:27:24 +0000 (18:27 +0200)] 
Merge pull request #13139 from fredmorcos/minor-cleanups

Minor cleanup

23 months agogettime: fix minor compilation warnings 13139/head
Fred Morcos [Tue, 15 Aug 2023 11:22:34 +0000 (13:22 +0200)] 
gettime: fix minor compilation warnings

23 months agoMakefile whitespace
Fred Morcos [Tue, 15 Aug 2023 11:22:51 +0000 (13:22 +0200)] 
Makefile whitespace

23 months agoMerge pull request #13136 from Habbie/ixfrdist-soa-aa
Peter van Dijk [Tue, 15 Aug 2023 11:41:04 +0000 (13:41 +0200)] 
Merge pull request #13136 from Habbie/ixfrdist-soa-aa

ixfrdist: set AA=1 on SOA responses

23 months agoMerge pull request #13134 from Habbie/ixfrdist-pytest
Peter van Dijk [Tue, 15 Aug 2023 11:40:49 +0000 (13:40 +0200)] 
Merge pull request #13134 from Habbie/ixfrdist-pytest

ixfrdist: switch testing to pytest

23 months agocoverity CID 398388: useless <0 check on unsigned value
Peter van Dijk [Tue, 15 Aug 2023 08:28:46 +0000 (10:28 +0200)] 
coverity CID 398388: useless <0 check on unsigned value

23 months agodnsdist: Fix the documented return value of DNSHeader:getTC() 13135/head
Remi Gacogne [Mon, 14 Aug 2023 15:50:52 +0000 (17:50 +0200)] 
dnsdist: Fix the documented return value of DNSHeader:getTC()

23 months agoixfrdist: set AA=1 on SOA responses 13136/head
Peter van Dijk [Mon, 14 Aug 2023 14:52:27 +0000 (16:52 +0200)] 
ixfrdist: set AA=1 on SOA responses

23 months agoeqdnsmessage: adjust to type changes in dnspython
Peter van Dijk [Mon, 14 Aug 2023 15:10:10 +0000 (17:10 +0200)] 
eqdnsmessage: adjust to type changes in dnspython

23 months agoMerge pull request #13094 from rgacogne/ixfrdist-main-complexity
Remi Gacogne [Mon, 14 Aug 2023 15:08:05 +0000 (17:08 +0200)] 
Merge pull request #13094 from rgacogne/ixfrdist-main-complexity

ixfrdist: Reduce the complexity of the main function

23 months agodnsdist: Add a DNSHeader:getTC() Lua binding
Remi Gacogne [Mon, 14 Aug 2023 15:02:39 +0000 (17:02 +0200)] 
dnsdist: Add a DNSHeader:getTC() Lua binding

23 months agoixfrdist: switch testing to pytest 13134/head
Peter van Dijk [Mon, 14 Aug 2023 14:55:02 +0000 (16:55 +0200)] 
ixfrdist: switch testing to pytest

23 months agoixfrdist: after --help or --version, exit (includes var rename) 13094/head
Peter van Dijk [Mon, 14 Aug 2023 13:32:30 +0000 (15:32 +0200)] 
ixfrdist: after --help or --version, exit (includes var rename)

23 months agoMerge pull request #13114 from rgacogne/auth-coverity-3
Remi Gacogne [Mon, 14 Aug 2023 12:39:15 +0000 (14:39 +0200)] 
Merge pull request #13114 from rgacogne/auth-coverity-3

auth: Fix uninitialized scalar field warnings from Coverity

23 months agoCoding Guidelines: More suggestions from Chris Hofstaedtler (thanks!)
Remi Gacogne [Mon, 14 Aug 2023 12:38:04 +0000 (14:38 +0200)] 
Coding Guidelines: More suggestions from Chris Hofstaedtler (thanks!)

23 months agoMerge pull request #13093 from rgacogne/ixfrdist-fix-max-soa-refresh
Peter van Dijk [Mon, 14 Aug 2023 12:23:02 +0000 (14:23 +0200)] 
Merge pull request #13093 from rgacogne/ixfrdist-fix-max-soa-refresh

ixfrdist: Fix the validation of 'max-soa-refresh'

23 months agoMerge pull request #13113 from rgacogne/ddist-discovery-short-read
Remi Gacogne [Mon, 14 Aug 2023 11:23:40 +0000 (13:23 +0200)] 
Merge pull request #13113 from rgacogne/ddist-discovery-short-read

dnsdist: Properly handle short reads on backend upgrade discovery

23 months agoCoding Guidelines: Apply suggestions from review
Remi Gacogne [Mon, 14 Aug 2023 11:22:48 +0000 (13:22 +0200)] 
Coding Guidelines: Apply suggestions from review

23 months agoixfrdist: Call `getpwuid()` before going multi-threaded
Remi Gacogne [Mon, 14 Aug 2023 10:15:53 +0000 (12:15 +0200)] 
ixfrdist: Call `getpwuid()` before going multi-threaded

23 months agoauth: Fix Coverity CID 1504120: Uninitialized scalar field 13114/head
Remi Gacogne [Mon, 14 Aug 2023 10:09:40 +0000 (12:09 +0200)] 
auth: Fix Coverity CID 1504120: Uninitialized scalar field

23 months agoauth: Fix coverity CID 1030024: Uninitialized scalar field
Remi Gacogne [Mon, 14 Aug 2023 10:09:00 +0000 (12:09 +0200)] 
auth: Fix coverity CID 1030024: Uninitialized scalar field

23 months agodnsdist: Uglify the code to make the formatter happy 13113/head
Remi Gacogne [Mon, 14 Aug 2023 09:01:41 +0000 (11:01 +0200)] 
dnsdist: Uglify the code to make the formatter happy

23 months agoMerge pull request #13105 from Habbie/rec-ixfr-debugging
Peter van Dijk [Mon, 14 Aug 2023 08:58:27 +0000 (10:58 +0200)] 
Merge pull request #13105 from Habbie/rec-ixfr-debugging

(I)XFR: handle partial read of len prefix

23 months agodnsdist: Add a 'partial read' case to the backend upgrade tests
Remi Gacogne [Mon, 14 Aug 2023 08:57:38 +0000 (10:57 +0200)] 
dnsdist: Add a 'partial read' case to the backend upgrade tests

23 months agosstuff: Document that Socket::readWithTimeout() does not handle partial reads
Remi Gacogne [Mon, 14 Aug 2023 08:56:53 +0000 (10:56 +0200)] 
sstuff: Document that Socket::readWithTimeout() does not handle partial reads

23 months agodnsdist: Properly handle short reads on backend upgrade discovery
Remi Gacogne [Mon, 14 Aug 2023 08:56:21 +0000 (10:56 +0200)] 
dnsdist: Properly handle short reads on backend upgrade discovery

23 months agoMerge pull request #13111 from franklouwers/master
Peter van Dijk [Mon, 14 Aug 2023 08:23:30 +0000 (10:23 +0200)] 
Merge pull request #13111 from franklouwers/master

Document default for `webserver-loglevel`

23 months agoCoding Guidelines: Formatting of the C++ casts bullet points
Fred Morcos [Thu, 10 Aug 2023 14:57:34 +0000 (16:57 +0200)] 
Coding Guidelines: Formatting of the C++ casts bullet points

23 months agoCoding Guidelines: Some formatting of C++ keywords
Fred Morcos [Thu, 10 Aug 2023 14:57:18 +0000 (16:57 +0200)] 
Coding Guidelines: Some formatting of C++ keywords

23 months agoCoding Guidelines: More descriptive section titles
Fred Morcos [Thu, 10 Aug 2023 14:56:45 +0000 (16:56 +0200)] 
Coding Guidelines: More descriptive section titles

23 months agoCoding Guidelines: Capitalize list items
Fred Morcos [Thu, 10 Aug 2023 14:56:26 +0000 (16:56 +0200)] 
Coding Guidelines: Capitalize list items

23 months agoCoding Guidelines: Use decltype in code example
Fred Morcos [Thu, 10 Aug 2023 14:55:43 +0000 (16:55 +0200)] 
Coding Guidelines: Use decltype in code example

23 months agoCoding Guidelines: BadFileDescriptorWrapper -> GoodFileDescriptorWrapper
Fred Morcos [Thu, 10 Aug 2023 14:55:31 +0000 (16:55 +0200)] 
Coding Guidelines: BadFileDescriptorWrapper -> GoodFileDescriptorWrapper

23 months agoCoding Guidelines: Some code formatting and minor fixes
Fred Morcos [Thu, 10 Aug 2023 14:55:15 +0000 (16:55 +0200)] 
Coding Guidelines: Some code formatting and minor fixes

23 months agoCoding Guidelines: Rewording and typos
Fred Morcos [Thu, 10 Aug 2023 14:54:18 +0000 (16:54 +0200)] 
Coding Guidelines: Rewording and typos

23 months agoCoding Guidelines: Properly capitalize section names
Fred Morcos [Thu, 10 Aug 2023 14:51:23 +0000 (16:51 +0200)] 
Coding Guidelines: Properly capitalize section names

23 months agoDocument default for `webserver-loglevel` 13111/head
Frank Louwers [Thu, 10 Aug 2023 12:44:51 +0000 (14:44 +0200)] 
Document default for `webserver-loglevel`

23 months agoMerge pull request #12565 from jsoref/harmonize-xfr-out-messages
Peter van Dijk [Thu, 10 Aug 2023 12:14:39 +0000 (14:14 +0200)] 
Merge pull request #12565 from jsoref/harmonize-xfr-out-messages

auth: harmonize *xfr log messages

23 months agoadd a few links; collection of small nits
Peter van Dijk [Wed, 9 Aug 2023 17:15:04 +0000 (19:15 +0200)] 
add a few links; collection of small nits

23 months agoformatting: one sentence per line. added ## to two things that looked like headings
Peter van Dijk [Wed, 9 Aug 2023 15:27:07 +0000 (17:27 +0200)] 
formatting: one sentence per line. added ## to two things that looked like headings

23 months agoMerge pull request #12949 from rgacogne/auth-channel
Peter van Dijk [Wed, 9 Aug 2023 14:59:40 +0000 (16:59 +0200)] 
Merge pull request #12949 from rgacogne/auth-channel

auth: Refactor the MultiThreadDistributor using pdns::channel

23 months agoMake clang-tidy happy 13106/head
Otto Moerbeek [Wed, 9 Aug 2023 11:45:12 +0000 (13:45 +0200)] 
Make clang-tidy happy

23 months agoremove redundant assignment 13105/head
Otto Moerbeek [Wed, 9 Aug 2023 08:09:36 +0000 (10:09 +0200)] 
remove redundant assignment

23 months agoMerge pull request #13108 from fredmorcos/auth-fix-bind-backend-warnings
Peter van Dijk [Wed, 9 Aug 2023 07:26:35 +0000 (09:26 +0200)] 
Merge pull request #13108 from fredmorcos/auth-fix-bind-backend-warnings

Auth: Fix warnings in bind backend

23 months agoMerge pull request #13098 from omoerbeek/rec-docs-upgrade-stack
Otto Moerbeek [Wed, 9 Aug 2023 06:26:05 +0000 (08:26 +0200)] 
Merge pull request #13098 from omoerbeek/rec-docs-upgrade-stack

rec: Expand the note on max-recursion-depth in the upgrade notes

23 months agoAuth: Fix warnings in bind backend 13108/head
Fred Morcos [Tue, 8 Aug 2023 21:11:47 +0000 (23:11 +0200)] 
Auth: Fix warnings in bind backend

23 months agoMerge pull request #13107 from paddg/max-packetcache-entries-doc-patch-1
Otto Moerbeek [Tue, 8 Aug 2023 19:02:32 +0000 (21:02 +0200)] 
Merge pull request #13107 from paddg/max-packetcache-entries-doc-patch-1

Update max-packetcache-entries setting doc

23 months agoIXFR client: handle partial reads of the TCP chunk length header, plus:
Peter van Dijk [Mon, 7 Aug 2023 17:13:36 +0000 (19:13 +0200)] 
IXFR client: handle partial reads of the TCP chunk length header, plus:
* add primarySOACount to exception text
* add indicator of current state to exception text
* a test

23 months agoUpdate max-packetcache-entries setting doc 13107/head
Winfried Angele [Tue, 8 Aug 2023 14:32:27 +0000 (16:32 +0200)] 
Update max-packetcache-entries setting doc

Since 4.9.0, the packet cache is sharded and shared by all threads.

23 months agorec: replace data in the aggressive cache if it becomes available
Otto Moerbeek [Tue, 8 Aug 2023 10:15:00 +0000 (12:15 +0200)] 
rec: replace data in the aggressive cache if it becomes available

Currently, new data does not get recorded into the aggressive cache
if there's an existing entry that matches. Together with the fact
that in some cases pruning can be unfair (it scans the zones
always in the same order and stops clearing when it has reached the
goal) and/or not very active (when the recursor is lighlty loaded)
this has the consequence that old expired records can remain in
the cache that prevent new data to be recorded and used.

23 months agotypo fix
Peter van Dijk [Mon, 7 Aug 2023 17:13:11 +0000 (19:13 +0200)] 
typo fix

23 months agorec: Do not assume the records are in a particular order when determining if an answer is 13102/head
Otto Moerbeek [Fri, 4 Aug 2023 11:07:59 +0000 (13:07 +0200)] 
rec: Do not assume the records are in a particular order when determining if an answer is
NODATA.

2 years agoMerge pull request #13096 from Habbie/lmdb-do-reset-index-timestamp
Peter van Dijk [Thu, 3 Aug 2023 09:42:33 +0000 (11:42 +0200)] 
Merge pull request #13096 from Habbie/lmdb-do-reset-index-timestamp

auth lmdb: when broadcasting indexes, -do- rewrite them even if they are unchanged

2 years agoMerge pull request #13089 from Habbie/auth-docs-metadata-dnssec
Peter van Dijk [Thu, 3 Aug 2023 09:22:37 +0000 (11:22 +0200)] 
Merge pull request #13089 from Habbie/auth-docs-metadata-dnssec

auth docs: remove domainmetadata/DNSSEC warning, has not been true for years

2 years agoExpand the note on max-recursion-depth 13098/head
Otto Moerbeek [Thu, 3 Aug 2023 09:12:11 +0000 (11:12 +0200)] 
Expand the note on max-recursion-depth

2 years agoauth lmdb: when broadcasting indexes, -do- rewrite them even if they are unchanged 13096/head
Peter van Dijk [Wed, 2 Aug 2023 12:35:32 +0000 (14:35 +0200)] 
auth lmdb: when broadcasting indexes, -do- rewrite them even if they are unchanged

2 years agoMerge pull request #13087 from Habbie/rm-init.d
Peter van Dijk [Wed, 2 Aug 2023 10:02:58 +0000 (12:02 +0200)] 
Merge pull request #13087 from Habbie/rm-init.d

remove unused sysv init files

2 years agoremove unused sysv init files - we don't ship them, and non-systemd downstream packag... 13087/head
Peter van Dijk [Mon, 31 Jul 2023 10:53:34 +0000 (12:53 +0200)] 
remove unused sysv init files - we don't ship them, and non-systemd downstream packages all have their own

2 years agoixfrdist: Delint ixfrdist.cc a bit more
Remi Gacogne [Tue, 1 Aug 2023 15:50:57 +0000 (17:50 +0200)] 
ixfrdist: Delint ixfrdist.cc a bit more

2 years agoAdd a coding guidelines document to the public repository
Remi Gacogne [Tue, 1 Aug 2023 15:26:04 +0000 (17:26 +0200)] 
Add a coding guidelines document to the public repository

We have had an internal version of this document for a while now,
but there is no reason not to make it available to external
contributors as well.

2 years agoMerge pull request #13092 from rgacogne/rec-coverity
Remi Gacogne [Tue, 1 Aug 2023 14:25:08 +0000 (16:25 +0200)] 
Merge pull request #13092 from rgacogne/rec-coverity

rec: Fixes a few performance issues reported by Coverity

2 years agoMerge pull request #13091 from rgacogne/auth-coverity-2
Remi Gacogne [Tue, 1 Aug 2023 14:22:35 +0000 (16:22 +0200)] 
Merge pull request #13091 from rgacogne/auth-coverity-2

auth: Fixes a few issues reported by Coverity

2 years agoixfrdist: Reduce the complexity of the main function
Remi Gacogne [Tue, 1 Aug 2023 14:20:50 +0000 (16:20 +0200)] 
ixfrdist: Reduce the complexity of the main function

2 years agoixfrdist: Fix the validation of 'max-soa-refresh' 13093/head
Remi Gacogne [Tue, 1 Aug 2023 14:17:49 +0000 (16:17 +0200)] 
ixfrdist: Fix the validation of 'max-soa-refresh'

2 years agorec: Prevent a copy when distributing UDP queries to workers 13092/head
Remi Gacogne [Tue, 1 Aug 2023 13:09:59 +0000 (15:09 +0200)] 
rec: Prevent a copy when distributing UDP queries to workers

Reported by Coverity as CID 1509301.