Mercurial > prosody-modules
comparison mod_s2s_auth_dane/mod_s2s_auth_dane.lua @ 1943:7e04ca0aa757
mod_s2s_auth_dane: Support servers without SRV records by falling back to port 5269 and the bare hostname for TLSA lookups
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 05 Nov 2015 14:10:11 +0100 |
| parents | 7ba877e2d660 |
| children | 1950fa6aa0c0 |
comparison
equal
deleted
inserted
replaced
| 1942:ff95d983940c | 1943:7e04ca0aa757 |
|---|---|
| 96 return cb(host_session); | 96 return cb(host_session); |
| 97 end | 97 end |
| 98 | 98 |
| 99 local n = answer.n or #answer; | 99 local n = answer.n or #answer; |
| 100 if n == 0 then | 100 if n == 0 then |
| 101 -- No SRV records, we could proceed with the domainname and | 101 -- No SRV records, synthesize fallback host and port |
| 102 -- default port but that will currently not work properly since | 102 -- this may behave oddly for connections in the other direction if |
| 103 -- mod_s2s doesn't keep the answer around for that | 103 -- mod_s2s doesn't keep the answer around |
| 104 return cb(host_session); | 104 answer[1] = { srv = { target = name, port = 5269 } }; |
| 105 end | 105 n = 1; |
| 106 if n == 1 and answer[1].srv.target == '.' then | 106 elseif n == 1 and answer[1].srv.target == '.' then |
| 107 return cb(host_session); -- No service ... This shouldn't happen? | 107 return cb(host_session); -- No service ... This shouldn't happen? |
| 108 end | 108 end |
| 109 local srv_hosts = { answer = answer }; | 109 local srv_hosts = { answer = answer }; |
| 110 host_session.srv_hosts = srv_hosts; | 110 host_session.srv_hosts = srv_hosts; |
| 111 local dane; | 111 local dane; |
| 160 elseif host_session.direction == "outgoing" then | 160 elseif host_session.direction == "outgoing" then |
| 161 -- Prosody has already done SRV lookups for outgoing session, so check if those are secure | 161 -- Prosody has already done SRV lookups for outgoing session, so check if those are secure |
| 162 local srv_hosts = host_session.srv_hosts; | 162 local srv_hosts = host_session.srv_hosts; |
| 163 if not ( srv_hosts and srv_hosts.answer and srv_hosts.answer.secure ) then | 163 if not ( srv_hosts and srv_hosts.answer and srv_hosts.answer.secure ) then |
| 164 return; -- No secure SRV records, fall back to non-DANE mode | 164 return; -- No secure SRV records, fall back to non-DANE mode |
| 165 -- Empty response were not kept by older mod_s2s/s2sout | |
| 165 end | 166 end |
| 166 -- Do TLSA lookup for currently selected SRV record | 167 -- Do TLSA lookup for currently selected SRV record |
| 167 local srv_choice = srv_hosts[host_session.srv_choice]; | 168 local srv_choice = srv_hosts[host_session.srv_choice or 0] or { target = idna_to_ascii(host_session.to_host), port = 5269 }; |
| 168 host_session.dane = dns_lookup(function(answer) | 169 host_session.dane = dns_lookup(function(answer) |
| 169 if answer and ((answer.secure and #answer > 0) or answer.bogus) then | 170 if answer and ((answer.secure and #answer > 0) or answer.bogus) then |
| 170 srv_choice.dane = answer; | 171 srv_choice.dane = answer; |
| 171 else | 172 else |
| 172 srv_choice.dane = false; | 173 srv_choice.dane = false; |
