Mercurial > prosody-hg
comparison net/resolvers/basic.lua @ 11901:26406ce35e20
net.connect: Propagate last error message from resolvers
Previously it would only say "unable to resolve server" for all DNS
problems. While "NoError in A lookup" might not make much sense to
users, it should help in debugging more than the previous generic error.
Friendlier errors will be future work.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 12 Nov 2021 16:52:55 +0100 |
| parents | 5ef729c355f3 |
| children | 6ed7fd28f5e3 |
comparison
equal
deleted
inserted
replaced
| 11900:60676b607b6d | 11901:26406ce35e20 |
|---|---|
| 50 | 50 |
| 51 -- Resolve DNS to target list | 51 -- Resolve DNS to target list |
| 52 local dns_resolver = adns.resolver(); | 52 local dns_resolver = adns.resolver(); |
| 53 | 53 |
| 54 if not self.extra or self.extra.use_ipv4 ~= false then | 54 if not self.extra or self.extra.use_ipv4 ~= false then |
| 55 dns_resolver:lookup(function (answer) | 55 dns_resolver:lookup(function (answer, err) |
| 56 if answer then | 56 if answer then |
| 57 secure = secure and answer.secure; | 57 secure = secure and answer.secure; |
| 58 for _, record in ipairs(answer) do | 58 for _, record in ipairs(answer) do |
| 59 table.insert(targets, { self.conn_type.."4", record.a, self.port, self.extra }); | 59 table.insert(targets, { self.conn_type.."4", record.a, self.port, self.extra }); |
| 60 end | 60 end |
| 61 if answer.status then | |
| 62 self.last_error = answer.status .. " in A lookup"; | |
| 63 end | |
| 64 else | |
| 65 self.last_error = err; | |
| 61 end | 66 end |
| 62 ready(); | 67 ready(); |
| 63 end, self.hostname, "A", "IN"); | 68 end, self.hostname, "A", "IN"); |
| 64 else | 69 else |
| 65 ready(); | 70 ready(); |
| 66 end | 71 end |
| 67 | 72 |
| 68 if not self.extra or self.extra.use_ipv6 ~= false then | 73 if not self.extra or self.extra.use_ipv6 ~= false then |
| 69 dns_resolver:lookup(function (answer) | 74 dns_resolver:lookup(function (answer, err) |
| 70 if answer then | 75 if answer then |
| 71 secure = secure and answer.secure; | 76 secure = secure and answer.secure; |
| 72 for _, record in ipairs(answer) do | 77 for _, record in ipairs(answer) do |
| 73 table.insert(targets, { self.conn_type.."6", record.aaaa, self.port, self.extra }); | 78 table.insert(targets, { self.conn_type.."6", record.aaaa, self.port, self.extra }); |
| 74 end | 79 end |
| 80 if answer.status then | |
| 81 self.last_error = answer.status .. " in AAAA lookup"; | |
| 82 end | |
| 83 else | |
| 84 self.last_error = err; | |
| 75 end | 85 end |
| 76 ready(); | 86 ready(); |
| 77 end, self.hostname, "AAAA", "IN"); | 87 end, self.hostname, "AAAA", "IN"); |
| 78 else | 88 else |
| 79 ready(); | 89 ready(); |
| 80 end | 90 end |
| 81 | 91 |
| 82 if self.extra and self.extra.use_dane == true then | 92 if self.extra and self.extra.use_dane == true then |
| 83 dns_resolver:lookup(function (answer) | 93 dns_resolver:lookup(function (answer, err) |
| 84 if answer then | 94 if answer then |
| 85 secure = secure and answer.secure; | 95 secure = secure and answer.secure; |
| 86 for _, record in ipairs(answer) do | 96 for _, record in ipairs(answer) do |
| 87 table.insert(tlsa, record.tlsa); | 97 table.insert(tlsa, record.tlsa); |
| 88 end | 98 end |
| 99 if answer.status then | |
| 100 self.last_error = answer.status .. " in TLSA lookup"; | |
| 101 end | |
| 102 else | |
| 103 self.last_error = err; | |
| 89 end | 104 end |
| 90 ready(); | 105 ready(); |
| 91 end, ("_%d._tcp.%s"):format(self.port, self.hostname), "TLSA", "IN"); | 106 end, ("_%d._tcp.%s"):format(self.port, self.hostname), "TLSA", "IN"); |
| 92 else | 107 else |
| 93 ready(); | 108 ready(); |
