Mercurial > prosody-hg
comparison net/resolvers/basic.lua @ 10436:0d702ec77f0c 0.11
net.resolvers.basic: Move IP literal check to constructor
This is to prepare for fixing #1459. An IPv6 literal in [ ] brackets
does not pass IDNA and resolving it fails there.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 24 Nov 2019 04:23:51 +0100 |
| parents | 4c2d789a106b |
| children | fcfc8f4d14a8 |
comparison
equal
deleted
inserted
replaced
| 10433:7777f25d5266 | 10436:0d702ec77f0c |
|---|---|
| 31 if n > 0 then return; end | 31 if n > 0 then return; end |
| 32 self.targets = targets; | 32 self.targets = targets; |
| 33 self:next(cb); | 33 self:next(cb); |
| 34 end | 34 end |
| 35 | 35 |
| 36 local is_ip = inet_pton(self.hostname); | |
| 37 if is_ip then | |
| 38 if #is_ip == 16 then | |
| 39 cb(self.conn_type.."6", self.hostname, self.port, self.extra); | |
| 40 elseif #is_ip == 4 then | |
| 41 cb(self.conn_type.."4", self.hostname, self.port, self.extra); | |
| 42 end | |
| 43 return; | |
| 44 end | |
| 45 | |
| 46 -- Resolve DNS to target list | 36 -- Resolve DNS to target list |
| 47 local dns_resolver = adns.resolver(); | 37 local dns_resolver = adns.resolver(); |
| 48 dns_resolver:lookup(function (answer) | 38 dns_resolver:lookup(function (answer) |
| 49 if answer then | 39 if answer then |
| 50 for _, record in ipairs(answer) do | 40 for _, record in ipairs(answer) do |
| 63 ready(); | 53 ready(); |
| 64 end, self.hostname, "AAAA", "IN"); | 54 end, self.hostname, "AAAA", "IN"); |
| 65 end | 55 end |
| 66 | 56 |
| 67 local function new(hostname, port, conn_type, extra) | 57 local function new(hostname, port, conn_type, extra) |
| 58 local ascii_host = idna_to_ascii(hostname); | |
| 59 local targets = nil; | |
| 60 | |
| 61 local is_ip = inet_pton(hostname); | |
| 62 if is_ip then | |
| 63 if #is_ip == 16 then | |
| 64 targets = { { conn_type.."6", hostname, port, extra } }; | |
| 65 elseif #is_ip == 4 then | |
| 66 targets = { { conn_type.."4", hostname, port, extra } }; | |
| 67 end | |
| 68 end | |
| 69 | |
| 68 return setmetatable({ | 70 return setmetatable({ |
| 69 hostname = idna_to_ascii(hostname); | 71 hostname = ascii_host; |
| 70 port = port; | 72 port = port; |
| 71 conn_type = conn_type or "tcp"; | 73 conn_type = conn_type or "tcp"; |
| 72 extra = extra; | 74 extra = extra; |
| 75 targets = targets; | |
| 73 }, resolver_mt); | 76 }, resolver_mt); |
| 74 end | 77 end |
| 75 | 78 |
| 76 return { | 79 return { |
| 77 new = new; | 80 new = new; |
