1. 14 Jan, 2018 1 commit
  2. 07 Jan, 2018 1 commit
    • Simon Kelley's avatar
      Handle duplicate RRs in DNSSEC validation. · e5412459
      Simon Kelley authored
      RFC 4034 says:
        [RFC2181] specifies that an RRset is not allowed to contain duplicate
        records (multiple RRs with the same owner name, class, type, and
        RDATA).  Therefore, if an implementation detects duplicate RRs when
        putting the RRset in canonical form, it MUST treat this as a protocol
        error.  If the implementation chooses to handle this protocol error
        in the spirit of the robustness principle (being liberal in what it
        accepts), it MUST remove all but one of the duplicate RR(s) for the
        purposes of calculating the canonical form of the RRset.
      
      We chose to handle this robustly, having found at least one recursive
      server in the wild which returns duplicate NSEC records in the AUTHORITY
      section of an answer generated from a wildcard record. sort_rrset() is
      therefore modified to delete duplicate RRs which are detected almost
      for free during the bubble-sort process.
      
      Thanks to Toralf Förster for helping to diagnose this problem.
      e5412459
  3. 03 Jan, 2018 1 commit
  4. 02 Jan, 2018 1 commit
  5. 15 Dec, 2017 3 commits
  6. 06 Dec, 2017 2 commits
    • Simon Kelley's avatar
      Fix infinite retries in strict-order mode. · ef3d137a
      Simon Kelley authored
       If all configured dns servers return refused in
       response to a query; dnsmasq will end up in an infinite loop
       retransmitting the dns query resulting into high CPU load.
       Problem is caused by the dns refuse retransmission logic which does
       not check for the end of a dns server list iteration in strict mode.
       Having one configured dns server returning a refused reply easily
       triggers this problem in strict order mode. This was introduced in
       9396752c
      
       Thanks to Hans Dedecker <dedeckeh@gmail.com> for spotting this
       and the initial patch.
      ef3d137a
    • Simon Kelley's avatar
      Make 373e9173 compile without DNSSEC. · 8c707e1e
      Simon Kelley authored
      8c707e1e
  7. 02 Dec, 2017 2 commits
  8. 01 Dec, 2017 1 commit
  9. 16 Nov, 2017 1 commit
  10. 08 Nov, 2017 2 commits
  11. 06 Nov, 2017 1 commit
    • Petr Menšík's avatar
      Open inotify socket only when used. · 075366ad
      Petr Menšík authored
      Some of our Openstack users run quite large number of dnsmasq instances
      on single host. They started hitting default limit of inotify socket
      number on single system after upgrade to more recent version. System
      defaults of sysctl fs.inotify.max_user_instances is 128. They reached
      limit of 116 dnsmasq instances, then more instances failed to start.
      
      I was surprised they have any use case for such high number of
      instances. They use one dnsmasq for one virtual network.
      
      I found simple way to avoid hitting low system limit. They do not use
      resolv.conf for name server configuration or any dhcp hosts or options
      directory. Created inotify socket is never used in that case. Simple
      patch attached.
      
      I know we can raise inotify system limit. I think better is to not waste
      resources that are left unused.
      075366ad
  12. 31 Oct, 2017 2 commits
  13. 30 Oct, 2017 1 commit
  14. 28 Oct, 2017 5 commits
  15. 26 Oct, 2017 1 commit
    • Simon Kelley's avatar
      Fix caching logic for validated answers. · a6004d7f
      Simon Kelley authored
      The current logic is naive in the case that there is more than
      one RRset in an answer (Typically, when a non-CNAME query is answered
      by one or more CNAME RRs, and then then an answer RRset.)
      
      If all the RRsets validate, then they are cached and marked as validated,
      but if any RRset doesn't validate, then the AD flag is not set (good) and
      ALL the RRsets are cached marked as not validated.
      
      This breaks when, eg, the answer contains a validated CNAME, pointing
      to a non-validated answer. A subsequent query for the CNAME without do
      will get an answer with the AD flag wrongly reset, and worse, the same
      query with do will get a cached answer without RRSIGS, rather than
      being forwarded.
      
      The code now records the validation of individual RRsets and that
      is used to correctly set the "validated" bits in the cache entries.
      a6004d7f
  16. 14 Oct, 2017 4 commits
    • Simon Kelley's avatar
      Tidy up add_resource_record() buffer size checks. · c366717e
      Simon Kelley authored
      Mainly code-size and readability fixes.
      
      Also return NULL from do_rfc1035_name() when limit exceeded, so
      that truncated bit gets set in answer.
      c366717e
    • Simon Kelley's avatar
      Log DNS server max packet size reduction. · 22dee512
      Simon Kelley authored
      22dee512
    • Simon Kelley's avatar
      Fix logic on EDNS0 headers. · 6fd5d79e
      Simon Kelley authored
      The logic to determine is an EDNS0 header was added was wrong. It compared
      the packet length before and after the operations on the EDNS0 header,
      but these can include adding options to an existing EDNS0 header. So
      a query may have an existing EDNS0 header, which is extended, and logic
      thinks that it had a header added de-novo.
      
      Replace this with a simpler system. Check if the packet has an EDSN0 header,
      do the updates/additions, and then check again. If it didn't have one
      initially, but it has one laterly, that's the correct condition
      to strip the header from a reply, and to assume that the client
      cannot handle packets larger than 512 bytes.
      6fd5d79e
    • Simon Kelley's avatar
      Use IP[V6]_UNICAST_IF socket option instead of SO_BINDTODEVICE for DNS. · 9d6918d3
      Simon Kelley authored
      dnsmasq allows to specify a interface for each name server passed with
      the -S option or pushed through D-Bus; when an interface is set,
      queries to the server will be forced via that interface.
      
      Currently dnsmasq uses SO_BINDTODEVICE to enforce that traffic goes
      through the given interface; SO_BINDTODEVICE also guarantees that any
      response coming from other interfaces is ignored.
      
      This can cause problems in some scenarios: consider the case where
      eth0 and eth1 are in the same subnet and eth0 has a name server ns0
      associated.  There is no guarantee that the response to a query sent
      via eth0 to ns0 will be received on eth0 because the local router may
      have in the ARP table the MAC address of eth1 for the IP of eth0. This
      can happen because Linux sends ARP responses for all the IPs of the
      machine through all interfaces. The response packet on the wrong
      interface will be dropped because of SO_BINDTODEVICE and the
      resolution will fail.
      
      To avoid this situation, dnsmasq should only restrict queries, but not
      responses, to the given interface. A way to do this on Linux is with
      the IP_UNICAST_IF and IPV6_UNICAST_IF socket options which were added
      in kernel 3.4 and, respectively, glibc versions 2.16 and 2.26.
      Reported-by: default avatarHector Martin <marcan@marcan.st>
      Signed-off-by: default avatarBeniamino Galvani <bgalvani@redhat.com>
      9d6918d3
  17. 11 Oct, 2017 1 commit
  18. 10 Oct, 2017 1 commit
  19. 02 Oct, 2017 1 commit
  20. 30 Sep, 2017 1 commit
  21. 27 Sep, 2017 2 commits
  22. 26 Sep, 2017 5 commits