aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2015-04-26 00:06:44 +0200
committerKim Alvefur <zash@zash.se>2015-04-26 00:06:44 +0200
commit3e6b35b5d49b5f6ec06cb301ba7b4cbce0a75000 (patch)
tree11f81ddc7bcc089676e965ba2b9171c2767911d5
parent48652fb9d3b1eeb4dc44460abf3ba2060cf5bb91 (diff)
parent7dff400ed5e217b3316b9b311b41c826d10e67f1 (diff)
downloadprosody-3e6b35b5d49b5f6ec06cb301ba7b4cbce0a75000.tar.gz
prosody-3e6b35b5d49b5f6ec06cb301ba7b4cbce0a75000.zip
Merge 0.9->0.10
-rw-r--r--net/dns.lua11
-rw-r--r--plugins/mod_s2s/s2sout.lib.lua12
2 files changed, 8 insertions, 15 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
diff --git a/plugins/mod_s2s/s2sout.lib.lua b/plugins/mod_s2s/s2sout.lib.lua
index 942a618d..5214f4cf 100644
--- a/plugins/mod_s2s/s2sout.lib.lua
+++ b/plugins/mod_s2s/s2sout.lib.lua
@@ -169,18 +169,6 @@ function s2sout.try_connect(host_session, connect_host, connect_port, err)
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);