Mercurial > prosody-hg
comparison net/dns.lua @ 6631:45222bfb206f
net.dns, mod_s2s: Add chasing of CNAMEs to net.dns and remove it from mod_s2s
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 24 Apr 2015 14:14:01 +0200 |
| parents | 7cb69eba3e95 |
| children | 855085439f7f 4f934cf03bc9 |
comparison
equal
deleted
inserted
replaced
| 6601:debd9a7be528 | 6631:45222bfb206f |
|---|---|
| 692 local function comp_mx(a, b) -- - - - - - - - - - - - - - - - - - - comp_mx | 692 local function comp_mx(a, b) -- - - - - - - - - - - - - - - - - - - comp_mx |
| 693 return (a.pref == b.pref) and (a.mx < b.mx) or (a.pref < b.pref); | 693 return (a.pref == b.pref) and (a.mx < b.mx) or (a.pref < b.pref); |
| 694 end | 694 end |
| 695 | 695 |
| 696 | 696 |
| 697 function resolver:peek (qname, qtype, qclass) -- - - - - - - - - - - - peek | 697 function resolver:peek (qname, qtype, qclass, n) -- - - - - - - - - - - - peek |
| 698 qname, qtype, qclass = standardize(qname, qtype, qclass); | 698 qname, qtype, qclass = standardize(qname, qtype, qclass); |
| 699 local rrs = get(self.cache, qclass, qtype, qname); | 699 local rrs = get(self.cache, qclass, qtype, qname); |
| 700 if not rrs then return nil; end | 700 if not rrs then |
| 701 if n then if n <= 0 then return end else n = 3 end | |
| 702 rrs = get(self.cache, qclass, "CNAME", qname); | |
| 703 if not (rrs and rrs[1]) then return end | |
| 704 return self:peek(rrs[1].cname, qtype, qclass, n - 1); | |
| 705 end | |
| 701 if prune(rrs, socket.gettime()) and qtype == '*' or not next(rrs) then | 706 if prune(rrs, socket.gettime()) and qtype == '*' or not next(rrs) then |
| 702 set(self.cache, qclass, qtype, qname, nil); | 707 set(self.cache, qclass, qtype, qname, nil); |
| 703 return nil; | 708 return nil; |
| 704 end | 709 end |
| 705 if self.unsorted[rrs] then table.sort (rrs, comp_mx); end | 710 if self.unsorted[rrs] then table.sort (rrs, comp_mx); self.unsorted[rrs] = nil; end |
| 706 return rrs; | 711 return rrs; |
| 707 end | 712 end |
| 708 | 713 |
| 709 | 714 |
| 710 function resolver:purge(soft) -- - - - - - - - - - - - - - - - - - - purge | 715 function resolver:purge(soft) -- - - - - - - - - - - - - - - - - - - purge |
