Merge 0.9->0.10
authorKim Alvefur <zash@zash.se>
Sun, 3 May 2015 16:38:39 +0000 (18:38 +0200)
committerKim Alvefur <zash@zash.se>
Sun, 3 May 2015 16:38:39 +0000 (18:38 +0200)
1  2 
net/dns.lua

diff --combined net/dns.lua
index 2128fb1a0b86e320b071a6cdf40e002ef8d8534b,763ee9ec644a6b230f78b325fa2768874f4e6e5b..037f3ec666c202e9bb644b9221eddc75117dcf99
@@@ -14,7 -14,6 +14,7 @@@
  
  local socket = require "socket";
  local timer = require "util.timer";
 +local new_ip = require "util.ip".new_ip;
  
  local _, windows = pcall(require, "util.windows");
  local is_windows = (_ and windows) or os.getenv("WINDIR");
@@@ -226,7 -225,7 +226,7 @@@ en
  
  
  function dns.random(...)    -- - - - - - - - - - - - - - - - - - -  dns.random
-       math.randomseed(math.floor(10000*socket.gettime()) % 0x100000000);
+       math.randomseed(math.floor(10000*socket.gettime()) % 0x80000000);
        dns.random = math.random;
        return dns.random(...);
  end
@@@ -600,12 -599,11 +600,12 @@@ function resolver:adddefaultnameservers
                if resolv_conf then
                        for line in resolv_conf:lines() do
                                line = line:gsub("#.*$", "")
 -                                      :match('^%s*nameserver%s+(.*)%s*$');
 +                                      :match('^%s*nameserver%s+([%x:%.]*)%s*$');
                                if line then
 -                                      line:gsub("%f[%d.](%d+%.%d+%.%d+%.%d+)%f[^%d.]", function (address)
 -                                              self:addnameserver(address)
 -                                      end);
 +                                      local ip = new_ip(line);
 +                                      if ip then
 +                                              self:addnameserver(ip.addr);
 +                                      end
                                end
                        end
                end
@@@ -625,12 -623,7 +625,12 @@@ function resolver:getsocket(servernum
        if sock then return sock; end
  
        local ok, err;
 -      sock, err = socket.udp();
 +      local peer = self.server[servernum];
 +      if peer:find(":") then
 +              sock, err = socket.udp6();
 +      else
 +              sock, err = socket.udp();
 +      end
        if sock and self.socket_wrapper then sock, err = self.socket_wrapper(sock, self); end
        if not sock then
                return nil, err;
        -- if so, try the next server
        ok, err = sock:setsockname('*', 0);
        if not ok then return self:servfail(sock, err); end
 -      ok, err = sock:setpeername(self.server[servernum], 53);
 +      ok, err = sock:setpeername(peer, 53);
        if not ok then return self:servfail(sock, err); end
        return sock;
  end
@@@ -773,7 -766,7 +773,7 @@@ function resolver:query(qname, qtype, q
                return nil, err;
        end
        conn:send (o.packet)
 -      
 +
        if timer and self.timeout then
                local num_servers = #self.server;
                local i = 1;
@@@ -870,7 -863,7 +870,7 @@@ function resolver:receive(rset)    -- 
                                        -- retire the query
                                        local queries = self.active[response.header.id];
                                        queries[response.question.raw] = nil;
 -                                      
 +
                                        if not next(queries) then self.active[response.header.id] = nil; end
                                        if not next(self.active) then self:closeall(); end
  
                                                set(self.wanted, q.class, q.type, q.name, nil);
                                        end
                                end
 -                              
 +
                        end
                end
        end