1. 02 Dec, 2017 2 commits
  2. 01 Dec, 2017 1 commit
  3. 16 Nov, 2017 1 commit
  4. 08 Nov, 2017 2 commits
  5. 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
  6. 31 Oct, 2017 2 commits
  7. 30 Oct, 2017 1 commit
  8. 28 Oct, 2017 5 commits
  9. 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
  10. 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
  11. 11 Oct, 2017 1 commit
  12. 10 Oct, 2017 1 commit
  13. 02 Oct, 2017 1 commit
  14. 30 Sep, 2017 1 commit
  15. 27 Sep, 2017 2 commits
  16. 26 Sep, 2017 10 commits
  17. 25 Sep, 2017 1 commit
  18. 08 Sep, 2017 1 commit
  19. 07 Sep, 2017 1 commit
  20. 09 Jul, 2017 1 commit
    • Simon Kelley's avatar
      Fix loss of undercores in domain names when using libidn2. · 69a815aa
      Simon Kelley authored
      libidn2 strips underscores from international domain names
      when encoding them. Indeed, it strips underscores even if
      no encoding is necessary, which breaks SRV records.
      
      Don't submit domain names to IDN encoding if they contain
      one or more underscores to fix this.
      69a815aa