aboutsummaryrefslogtreecommitdiffstats
path: root/net/dns.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2014-10-05 15:37:21 +0200
committerKim Alvefur <zash@zash.se>2014-10-05 15:37:21 +0200
commit3ae8a2ed6ef23c1e7cea54a93b05c624a321cf08 (patch)
tree4cd5bea0a5677816d73ac9557133d04d794e5acd /net/dns.lua
parent18a60e070856fdbeb862b600fc16f6a60de0fd40 (diff)
parent859dd738fbbe1c5f2b2ffa1c9ec2e7c3e1cea3be (diff)
downloadprosody-3ae8a2ed6ef23c1e7cea54a93b05c624a321cf08.tar.gz
prosody-3ae8a2ed6ef23c1e7cea54a93b05c624a321cf08.zip
Merge 0.9->0.10
Diffstat (limited to 'net/dns.lua')
-rw-r--r--net/dns.lua13
1 files changed, 9 insertions, 4 deletions
diff --git a/net/dns.lua b/net/dns.lua
index 42bbdb01..2b03caf6 100644
--- a/net/dns.lua
+++ b/net/dns.lua
@@ -135,17 +135,19 @@ end
local function prune(rrs, time, soft) -- - - - - - - - - - - - - - - prune
time = time or socket.gettime();
- for i,rr in pairs(rrs) do
+ for i,rr in ipairs(rrs) do
if rr.tod then
-- rr.tod = rr.tod - 50 -- accelerated decripitude
rr.ttl = math.floor(rr.tod - time);
if rr.ttl <= 0 then
+ rrs[rr[rr.type:lower()]] = nil;
table.remove(rrs, i);
return prune(rrs, time, soft); -- Re-iterate
end
elseif soft == 'soft' then -- What is this? I forget!
assert(rr.ttl == 0);
- rrs[i] = nil;
+ rrs[rr[rr.type:lower()]] = nil;
+ table.remove(rrs, i);
end
end
end
@@ -188,7 +190,7 @@ end
local rrs_metatable = {}; -- - - - - - - - - - - - - - - - - - rrs_metatable
function rrs_metatable.__tostring(rrs)
local t = {};
- for i,rr in pairs(rrs) do
+ for i,rr in ipairs(rrs) do
append(t, tostring(rr)..'\n');
end
return table.concat(t);
@@ -681,7 +683,10 @@ function resolver:remember(rr, type) -- - - - - - - - - - - - - - remember
self.cache = self.cache or setmetatable({}, cache_metatable);
local rrs = get(self.cache, qclass, type, qname) or
set(self.cache, qclass, type, qname, setmetatable({}, rrs_metatable));
- append(rrs, rr);
+ if not rrs[rr[qtype:lower()]] then
+ rrs[rr[qtype:lower()]] = true;
+ append(rrs, rr);
+ end
if type == 'MX' then self.unsorted[rrs] = true; end
end