# HG changeset patch # User Kim Alvefur # Date 1429999604 -7200 # Node ID 855085439f7fd7ca9f0dbb0a05f4788909cf448a # Parent 6735e2d735d61ad911781a26f3f8197ff6d4b66f# Parent 45222bfb206f043d58a45219a2fe3a1d85434cfe Merge 0.9->0.10 diff -r 6735e2d735d6 -r 855085439f7f net/dns.lua --- a/net/dns.lua Sun Apr 26 00:06:11 2015 +0200 +++ b/net/dns.lua Sun Apr 26 00:06:44 2015 +0200 @@ -701,15 +701,20 @@ 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 diff -r 6735e2d735d6 -r 855085439f7f plugins/mod_s2s/s2sout.lib.lua --- a/plugins/mod_s2s/s2sout.lib.lua Sun Apr 26 00:06:11 2015 +0200 +++ b/plugins/mod_s2s/s2sout.lib.lua Sun Apr 26 00:06:44 2015 +0200 @@ -169,18 +169,6 @@ handle4 = adns.lookup(function (reply, err) handle4 = nil; - -- COMPAT: This is a compromise for all you CNAME-(ab)users :) - if not (reply and reply[#reply] and reply[#reply].a) then - local count = max_dns_depth; - reply = dns.peek(connect_host, "CNAME", "IN"); - while count > 0 and reply and reply[#reply] and not reply[#reply].a and reply[#reply].cname do - log("debug", "Looking up %s (DNS depth is %d)", tostring(reply[#reply].cname), count); - reply = dns.peek(reply[#reply].cname, "A", "IN") or dns.peek(reply[#reply].cname, "CNAME", "IN"); - count = count - 1; - end - end - -- end of CNAME resolving - if reply and reply[#reply] and reply[#reply].a then for _, ip in ipairs(reply) do log("debug", "DNS reply for %s gives us %s", connect_host, ip.a);