1. 09 Jan, 2019 2 commits
  2. 08 Jan, 2019 4 commits
    • Michał Kępień's avatar
      Fix cleanup upon an error before TCP socket creation · 13975b32
      Michał Kępień authored
      When a query times out after a socket is created and associated with a
      given dig_query_t structure, calling isc_socket_cancel() causes
      connect_done() to be run, which in turn takes care of all necessary
      cleanups.  However, certain errors (e.g. get_address() returning
      ISC_R_FAMILYNOSUPPORT) may prevent a TCP socket from being created in
      the first place.  Since force_timeout() may be used in code handling
      such errors, connect_timeout() needs to properly clean up a TCP query
      which is not associated with any socket.  Call clear_query() from
      connect_timeout() after attempting to send a TCP query to the next
      available server if the timed out query does not have a socket
      associated with it, in order to prevent dig from hanging indefinitely
      due to the dig_query_t structure not being detached from its parent
      dig_lookup_t structure.
      13975b32
    • Michał Kępień's avatar
      Refactor code sending a query to the next server upon a timeout · c108fc5c
      Michał Kępień authored
      When a query times out and another server is available for querying
      within the same lookup, the timeout handler - connect_timeout() - is
      responsible for sending the query to the next server.  Extract the
      relevant part of connect_timeout() to a separate function in order to
      improve code readability.
      c108fc5c
    • Michał Kępień's avatar
      Remove dead code handling address family mismatches for TCP sockets · ef1da873
      Michał Kępień authored
      Before commit c2ec022f, using the "-b"
      command line switch for dig did not disable use of the other address
      family than the one to which the address supplied to that option
      belonged to.  Thus, bind9_getaddresses() could e.g. prepare an
      isc_sockaddr_t structure for an IPv6 address when an IPv4 address has
      been passed to the "-b" command line option.  To avoid attempting the
      impossible (e.g. querying an IPv6 address from a socket bound to an IPv4
      address), a certain code block in send_tcp_connect() checked whether the
      address family of the server to be queried was the same as the address
      family of the socket set up for sending that query; if there was a
      mismatch, that particular server address was skipped.
      
      Commit c2ec022f made
      bind9_getaddresses() fail upon an address family mismatch between the
      address the hostname passed to it resolved to and the address supplied
      to the "-b" command line option.  Such failures were fatal to dig back
      then.
      
      Commit 7f658603 made
      bind9_getaddresses() failures non-fatal, but also ensured that a
      get_address() failure in send_tcp_connect() still causes the given query
      address to be skipped (and also made such failures trigger an early
      return from send_tcp_connect()).
      
      Summing up, the code block handling address family mismatches in
      send_tcp_connect() has been redundant since commit
      c2ec022f.  Remove it.
      ef1da873
    • Michał Kępień's avatar
      Track forwarder timeouts in fetch contexts · 33350626
      Michał Kępień authored
      Since following a delegation resets most fetch context state, address
      marks (FCTX_ADDRINFO_MARK) set inside lib/dns/resolver.c are not
      preserved when a delegation is followed.  This is fine for full
      recursive resolution but when named is configured with "forward first;"
      and one of the specified forwarders times out, triggering a fallback to
      full recursive resolution, that forwarder should no longer be consulted
      at each delegation point subsequently reached within a given fetch
      context.
      
      Add a new badnstype_t enum value, badns_forwarder, and use it to mark a
      forwarder as bad when it times out in a "forward first;" configuration.
      Since the bad server list is not cleaned when a fetch context follows a
      delegation, this prevents a forwarder from being queried again after
      falling back to full recursive resolution.  Yet, as each fetch context
      maintains its own list of bad servers, this change does not cause a
      forwarder timeout to prevent that forwarder from being used by other
      fetch contexts.
      33350626
  3. 01 Jan, 2019 2 commits
  4. 20 Dec, 2018 1 commit
  5. 19 Dec, 2018 6 commits
  6. 18 Dec, 2018 2 commits
  7. 17 Dec, 2018 1 commit
  8. 15 Dec, 2018 5 commits
  9. 14 Dec, 2018 2 commits
  10. 11 Dec, 2018 9 commits
  11. 10 Dec, 2018 6 commits