diff options
author | Kim Alvefur <zash@zash.se> | 2015-04-26 00:07:36 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2015-04-26 00:07:36 +0200 |
commit | 0c4b66c051b2d199703713c634477fd1a2d62789 (patch) | |
tree | b003c23950a3bb53f56cc0eedaca77b2aaf4bbe0 /net | |
parent | ca21267fc0f59065aabc0a84bedcc535ec344cf1 (diff) | |
parent | 71b2b7782e075e596d29ee790879940ed946bfda (diff) | |
download | prosody-0c4b66c051b2d199703713c634477fd1a2d62789.tar.gz prosody-0c4b66c051b2d199703713c634477fd1a2d62789.zip |
Merge 0.10->trunk
Diffstat (limited to 'net')
-rw-r--r-- | net/dns.lua | 11 |
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 |