Ignore unrecoverable DNS errors

pull/178/head 1.1108
M66B 4 years ago
parent 6dfec7a202
commit dc19b2c8f6

@ -106,28 +106,26 @@ public class DnsHelper {
Log.i("Lookup name=" + name + " @" + resolver.getAddress() + " type=" + rtype);
Record[] records = lookup.run();
if (lookup.getResult() != Lookup.SUCCESSFUL)
if (lookup.getResult() == Lookup.HOST_NOT_FOUND ||
lookup.getResult() == Lookup.TYPE_NOT_FOUND)
throw new UnknownHostException(name);
else
throw new UnknownHostException(lookup.getErrorString());
if (records.length == 0)
if (lookup.getResult() == Lookup.HOST_NOT_FOUND ||
lookup.getResult() == Lookup.TYPE_NOT_FOUND)
throw new UnknownHostException(name);
else if (lookup.getResult() != Lookup.SUCCESSFUL)
Log.w("DNS error=" + lookup.getErrorString());
List<DnsRecord> result = new ArrayList<>();
for (Record record : records) {
Log.i("Found record=" + record);
if (record instanceof MXRecord) {
MXRecord mx = (MXRecord) record;
result.add(new DnsRecord(mx.getTarget().toString(true)));
} else if (record instanceof SRVRecord) {
SRVRecord srv = (SRVRecord) record;
result.add(new DnsRecord(srv.getTarget().toString(true), srv.getPort()));
} else
throw new IllegalArgumentException(record.getClass().getName());
}
if (records != null)
for (Record record : records) {
Log.i("Found record=" + record);
if (record instanceof MXRecord) {
MXRecord mx = (MXRecord) record;
result.add(new DnsRecord(mx.getTarget().toString(true)));
} else if (record instanceof SRVRecord) {
SRVRecord srv = (SRVRecord) record;
result.add(new DnsRecord(srv.getTarget().toString(true), srv.getPort()));
} else
throw new IllegalArgumentException(record.getClass().getName());
}
return result.toArray(new DnsRecord[0]);
} catch (TextParseException ex) {
@ -198,6 +196,8 @@ public class DnsHelper {
checkMx(context, new Address[]{Log.myAddress()});
InetAddress iaddr = lookupMx(context, domain);
DnsRecord[] records = DnsHelper.lookup(context, "_imaps._tcp." + domain, "srv");
if (records.length == 0)
throw new UnknownHostException(domain);
Log.i("DNS iaddr=" + iaddr + " srv=" + records[0].name + ":" + records[0].port);
} catch (Throwable ex) {
Log.e("DNS", ex);

@ -501,6 +501,8 @@ public class EmailProvider {
try {
// Identifies an IMAP server where TLS is initiated directly upon connection to the IMAP server.
DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, "_imaps._tcp." + domain, "srv");
if (records.length == 0)
throw new UnknownHostException(domain);
// ... service is not supported at all at a particular domain by setting the target of an SRV RR to "."
provider.imap.host = records[0].name;
provider.imap.port = records[0].port;
@ -508,6 +510,8 @@ public class EmailProvider {
} catch (UnknownHostException ex) {
// Identifies an IMAP server that MAY ... require the MUA to use the "STARTTLS" command
DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, "_imap._tcp." + domain, "srv");
if (records.length == 0)
throw new UnknownHostException(domain);
provider.imap.host = records[0].name;
provider.imap.port = records[0].port;
provider.imap.starttls = (provider.imap.port == 143);
@ -517,6 +521,8 @@ public class EmailProvider {
if (discover == Discover.ALL || discover == Discover.SMTP) {
// Note that this covers connections both with and without Transport Layer Security (TLS)
DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, "_submission._tcp." + domain, "srv");
if (records.length == 0)
throw new UnknownHostException(domain);
provider.smtp.host = records[0].name;
provider.smtp.port = records[0].port;
provider.smtp.starttls = (provider.smtp.port == 587);

Loading…
Cancel
Save