aboutsummaryrefslogtreecommitdiffstats
path: root/net/dns.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2015-04-26 00:07:36 +0200
committerKim Alvefur <zash@zash.se>2015-04-26 00:07:36 +0200
commit43702241ec9a8bf74a23c63b5ee2fd6edd49cbe3 (patch)
treeb003c23950a3bb53f56cc0eedaca77b2aaf4bbe0 /net/dns.lua
parent1be7952fe226feefa784e1975d23e950323877e3 (diff)
parent3e6b35b5d49b5f6ec06cb301ba7b4cbce0a75000 (diff)
downloadprosody-43702241ec9a8bf74a23c63b5ee2fd6edd49cbe3.tar.gz
prosody-43702241ec9a8bf74a23c63b5ee2fd6edd49cbe3.zip
Merge 0.10->trunk
Diffstat (limited to 'net/dns.lua')
-rw-r--r--net/dns.lua11
1 files changed, 8 insertions, 3 deletions
diff --git a/net/dns.lua b/net/dns.lua
index 2cb677f6..2128fb1a 100644
--- a/net/dns.lua
+++ b/net/dns.lua
@@ -701,15 +701,20 @@ local function comp_mx(a, b) -- - - - - - - - - - - - - - - - - - - comp_mx
end
-function resolver:peek (qname, qtype, qclass) -- - - - - - - - - - - - peek
+function resolver:peek (qname, qtype, qclass, n) -- - - - - - - - - - - - peek
qname, qtype, qclass = standardize(qname, qtype, qclass);
local rrs = get(self.cache, qclass, qtype, qname);
- if not rrs then return nil; end
+ if not rrs then
+ if n then if n <= 0 then return end else n = 3 end
+ rrs = get(self.cache, qclass, "CNAME", qname);
+ if not (rrs and rrs[1]) then return end
+ return self:peek(rrs[1].cname, qtype, qclass, n - 1);
+ end
if prune(rrs, socket.gettime()) and qtype == '*' or not next(rrs) then
set(self.cache, qclass, qtype, qname, nil);
return nil;
end
- if self.unsorted[rrs] then table.sort (rrs, comp_mx); end
+ if self.unsorted[rrs] then table.sort (rrs, comp_mx); self.unsorted[rrs] = nil; end
return rrs;
end