Software /
code /
prosody
Comparison
core/s2smanager.lua @ 4422:c25dee24623f
s2smanager, net.dns: Fix handling for NXNAME and SRV target of "."
author | Florian Zeitz <florob@babelmonkeys.de> |
---|---|
date | Wed, 26 Oct 2011 02:03:33 +0200 |
parent | 4421:971a66627f7a |
child | 4431:bbede0141f7e |
comparison
equal
deleted
inserted
replaced
4421:971a66627f7a | 4422:c25dee24623f |
---|---|
244 local srv_hosts = {}; | 244 local srv_hosts = {}; |
245 host_session.srv_hosts = srv_hosts; | 245 host_session.srv_hosts = srv_hosts; |
246 for _, record in ipairs(answer) do | 246 for _, record in ipairs(answer) do |
247 t_insert(srv_hosts, record.srv); | 247 t_insert(srv_hosts, record.srv); |
248 end | 248 end |
249 if #srv_hosts == 1 and srv_hosts[1].target == "." then | |
250 log("debug", to_host.." does not provide a XMPP service"); | |
251 destroy_session(host_session, err); -- Nothing to see here | |
252 return; | |
253 end | |
249 t_sort(srv_hosts, compare_srv_priorities); | 254 t_sort(srv_hosts, compare_srv_priorities); |
250 | 255 |
251 local srv_choice = srv_hosts[1]; | 256 local srv_choice = srv_hosts[1]; |
252 host_session.srv_choice = 1; | 257 host_session.srv_choice = 1; |
253 if srv_choice then | 258 if srv_choice then |
345 IPs[#IPs+1] = new_ip(ip.a, "IPv4"); | 350 IPs[#IPs+1] = new_ip(ip.a, "IPv4"); |
346 end | 351 end |
347 end | 352 end |
348 | 353 |
349 if has_other then | 354 if has_other then |
350 rfc3484_dest(host_session.ip_hosts, sources); | 355 if #IPs > 0 then |
351 host_session.ip_choice = 0; | 356 rfc3484_dest(host_session.ip_hosts, sources); |
352 try_next_ip(host_session, connect_port); | 357 host_session.ip_choice = 0; |
358 try_next_ip(host_session, connect_port); | |
359 else | |
360 log("debug", "DNS lookup failed to get a response for %s", connect_host); | |
361 host_session.ip_hosts = nil; | |
362 if not attempt_connection(host_session, "name resolution failed") then -- Retry if we can | |
363 log("debug", "No other records to try for %s - destroying", host_session.to_host); | |
364 err = err and (": "..err) or ""; | |
365 destroy_session(host_session, "DNS resolution failed"..err); -- End of the line, we can't | |
366 end | |
367 end | |
353 else | 368 else |
354 has_other = true; | 369 has_other = true; |
355 end | 370 end |
356 end, connect_host, "A", "IN"); | 371 end, connect_host, "A", "IN"); |
357 | 372 |
364 IPs[#IPs+1] = new_ip(ip.aaaa, "IPv6"); | 379 IPs[#IPs+1] = new_ip(ip.aaaa, "IPv6"); |
365 end | 380 end |
366 end | 381 end |
367 | 382 |
368 if has_other then | 383 if has_other then |
369 rfc3484_dest(host_session.ip_hosts, sources); | 384 if #IPs > 0 then |
370 host_session.ip_choice = 0; | 385 rfc3484_dest(host_session.ip_hosts, sources); |
371 try_next_ip(host_session, connect_port); | 386 host_session.ip_choice = 0; |
387 try_next_ip(host_session, connect_port); | |
388 else | |
389 log("debug", "DNS lookup failed to get a response for %s", connect_host); | |
390 host_session.ip_hosts = nil; | |
391 if not attempt_connection(host_session, "name resolution failed") then -- Retry if we can | |
392 log("debug", "No other records to try for %s - destroying", host_session.to_host); | |
393 err = err and (": "..err) or ""; | |
394 destroy_session(host_session, "DNS resolution failed"..err); -- End of the line, we can't | |
395 end | |
396 end | |
372 else | 397 else |
373 has_other = true; | 398 has_other = true; |
374 end | 399 end |
375 end, connect_host, "AAAA", "IN"); | 400 end, connect_host, "AAAA", "IN"); |
376 | 401 |