diff --git a/app/src/main/java/eu/faircode/email/ActivityDMARC.java b/app/src/main/java/eu/faircode/email/ActivityDMARC.java index 93cc87cc83..51fc89a1eb 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDMARC.java +++ b/app/src/main/java/eu/faircode/email/ActivityDMARC.java @@ -565,7 +565,7 @@ public class ActivityDMARC extends ActivityBase { } try { - InetAddress addr = InetAddress.getByName(text); + InetAddress addr = DnsHelper.getByName(context, text); IPInfo info = IPInfo.getOrganization(addr, context); ssb.append('(').append(info.org).append(") "); } catch (Throwable ex) { diff --git a/app/src/main/java/eu/faircode/email/DnsBlockList.java b/app/src/main/java/eu/faircode/email/DnsBlockList.java index fe85f44110..9502cd5348 100644 --- a/app/src/main/java/eu/faircode/email/DnsBlockList.java +++ b/app/src/main/java/eu/faircode/email/DnsBlockList.java @@ -205,7 +205,7 @@ public class DnsBlockList { for (BlockList blocklist : blocklists) if (isEnabled(context, blocklist) && blocklist.numeric == numeric && - isJunk(host, blocklist)) { + isJunk(context, host, blocklist)) { blocked = true; break; } @@ -217,11 +217,11 @@ public class DnsBlockList { return blocked; } - private static boolean isJunk(String host, BlockList blocklist) { + private static boolean isJunk(Context context, String host, BlockList blocklist) { try { if (blocklist.numeric) { long start = new Date().getTime(); - InetAddress[] addresses = InetAddress.getAllByName(host); + InetAddress[] addresses = DnsHelper.getAllByName(context, host); long elapsed = new Date().getTime() - start; Log.i("isJunk resolved=" + host + " elapse=" + elapsed + " ms"); for (InetAddress addr : addresses) { @@ -249,7 +249,7 @@ public class DnsBlockList { lookup.append(blocklist.address); - if (isJunk(lookup.toString(), blocklist.responses)) + if (isJunk(context, lookup.toString(), blocklist.responses)) return true; } catch (Throwable ex) { Log.w(ex); @@ -258,7 +258,7 @@ public class DnsBlockList { } else { long start = new Date().getTime(); String lookup = host + "." + blocklist.address; - boolean junk = isJunk(lookup, blocklist.responses); + boolean junk = isJunk(context, lookup, blocklist.responses); long elapsed = new Date().getTime() - start; Log.i("isJunk" + " " + lookup + "=" + junk + " elapsed=" + elapsed); return junk; @@ -270,12 +270,12 @@ public class DnsBlockList { return false; } - private static boolean isJunk(String lookup, InetAddress[] responses) { + private static boolean isJunk(Context context, String lookup, InetAddress[] responses) { long start = new Date().getTime(); InetAddress result; try { // Possibly blocked - result = InetAddress.getByName(lookup); + result = DnsHelper.getByName(context, lookup); } catch (UnknownHostException ignored) { // Not blocked result = null; diff --git a/app/src/main/java/eu/faircode/email/DnsHelper.java b/app/src/main/java/eu/faircode/email/DnsHelper.java index 6b7641b5a9..305ab4dc68 100644 --- a/app/src/main/java/eu/faircode/email/DnsHelper.java +++ b/app/src/main/java/eu/faircode/email/DnsHelper.java @@ -351,6 +351,14 @@ public class DnsHelper { return result; } + static InetAddress getByName(Context context, String host) throws UnknownHostException { + return InetAddress.getByName(host); + } + + static InetAddress[] getAllByName(Context context, String host) throws UnknownHostException { + return InetAddress.getAllByName(host); + } + static void verifyDane(X509Certificate[] chain, String server, int port) throws CertificateException { Handler handler = new Handler() { @Override diff --git a/app/src/main/java/eu/faircode/email/EmailProvider.java b/app/src/main/java/eu/faircode/email/EmailProvider.java index 506031dceb..912ed6d468 100644 --- a/app/src/main/java/eu/faircode/email/EmailProvider.java +++ b/app/src/main/java/eu/faircode/email/EmailProvider.java @@ -436,7 +436,7 @@ public class EmailProvider implements Parcelable { if (false) // Unsafe: the password could be sent to an unrelated email server try { - InetAddress iaddr = InetAddress.getByName(domain.toLowerCase(Locale.ROOT)); + InetAddress iaddr = DnsHelper.getByName(context, domain.toLowerCase(Locale.ROOT)); List commonNames = ConnectionHelper.getCommonNames(context, domain.toLowerCase(Locale.ROOT), 443, SCAN_TIMEOUT); EntityLog.log(context, "Website common names=" + TextUtils.join(",", commonNames)); @@ -450,7 +450,7 @@ public class EmailProvider implements Parcelable { if (!altName.equalsIgnoreCase(domain)) try { - InetAddress ialt = InetAddress.getByName(altName); + InetAddress ialt = DnsHelper.getByName(context, altName); if (!ialt.equals(iaddr)) { EntityLog.log(context, "Using website common name=" + altName); candidates.addAll(_fromDomain(context, altName.toLowerCase(Locale.ROOT), email, discover, intf)); @@ -509,7 +509,7 @@ public class EmailProvider implements Parcelable { for (DnsHelper.DnsRecord record : records) try { String target = record.response.toLowerCase(Locale.ROOT); - InetAddress.getByName(target); + DnsHelper.getByName(context, target); EmailProvider mx1 = new EmailProvider(domain); mx1.imap.score = 0; @@ -1340,7 +1340,7 @@ public class EmailProvider implements Parcelable { @Override public Boolean call() { try { - for (InetAddress iaddr : InetAddress.getAllByName(host)) { + for (InetAddress iaddr : DnsHelper.getAllByName(context, host)) { InetSocketAddress address = new InetSocketAddress(iaddr, Server.this.port); SocketFactory factory = (starttls @@ -1380,7 +1380,7 @@ public class EmailProvider implements Parcelable { String similar = name; if (similar.startsWith("*.")) similar = similar.substring(2); - InetAddress isimilar = InetAddress.getByName(similar); + InetAddress isimilar = DnsHelper.getByName(context, similar); if (iaddr.equals(isimilar)) { score += 1; EntityLog.log(context, "Similar " + similar + " host=" + host); diff --git a/app/src/main/java/eu/faircode/email/EmailService.java b/app/src/main/java/eu/faircode/email/EmailService.java index 733e85fcc7..66a49866ab 100644 --- a/app/src/main/java/eu/faircode/email/EmailService.java +++ b/app/src/main/java/eu/faircode/email/EmailService.java @@ -623,7 +623,7 @@ public class EmailService implements AutoCloseable { String key = "dns." + host; try { - main = InetAddress.getByName(host); + main = DnsHelper.getByName(context, host); EntityLog.log(context, EntityLog.Type.Network, "Main address=" + main); prefs.edit().putString(key, main.getHostAddress()).apply(); } catch (UnknownHostException ex) { @@ -632,7 +632,7 @@ public class EmailService implements AutoCloseable { throw ex; else { EntityLog.log(context, EntityLog.Type.Network, "Using " + key + "=" + last); - main = InetAddress.getByName(last); + main = DnsHelper.getByName(context, last); } } @@ -641,7 +641,7 @@ public class EmailService implements AutoCloseable { boolean[] has46 = ConnectionHelper.has46(context); if (has46[0]) try { - for (InetAddress iaddr : InetAddress.getAllByName(host)) + for (InetAddress iaddr : DnsHelper.getAllByName(context, host)) if (iaddr instanceof Inet4Address) { main = iaddr; EntityLog.log(context, EntityLog.Type.Network, "Preferring=" + main); @@ -729,7 +729,7 @@ public class EmailService implements AutoCloseable { ex + "\n" + android.util.Log.getStackTraceString(ex)); try { // Some devices resolve IPv6 addresses while not having IPv6 connectivity - InetAddress[] iaddrs = InetAddress.getAllByName(host); + InetAddress[] iaddrs = DnsHelper.getAllByName(context, host); int ip4 = (main instanceof Inet4Address ? 1 : 0); int ip6 = (main instanceof Inet6Address ? 1 : 0); diff --git a/app/src/main/java/eu/faircode/email/IPInfo.java b/app/src/main/java/eu/faircode/email/IPInfo.java index 0679dd1d90..844af77615 100644 --- a/app/src/main/java/eu/faircode/email/IPInfo.java +++ b/app/src/main/java/eu/faircode/email/IPInfo.java @@ -61,7 +61,7 @@ public class IPInfo { Log.i(ex); } - InetAddress address = InetAddress.getByName(host); + InetAddress address = DnsHelper.getByName(context, host); return new Pair<>(address, getOrganization(address, context)); } diff --git a/app/src/main/java/eu/faircode/email/SSLHelper.java b/app/src/main/java/eu/faircode/email/SSLHelper.java index 6d9acbe6d0..bc668e5dc0 100644 --- a/app/src/main/java/eu/faircode/email/SSLHelper.java +++ b/app/src/main/java/eu/faircode/email/SSLHelper.java @@ -137,7 +137,7 @@ public class SSLHelper { // Fallback: check server/certificate IP address if (!cert_strict) try { - InetAddress ip = InetAddress.getByName(server); + InetAddress ip = DnsHelper.getByName(context, server); Log.i("Checking server ip=" + ip); for (String name : names) { if (name.startsWith("*.")) @@ -145,7 +145,7 @@ public class SSLHelper { Log.i("Checking cert name=" + name); try { - for (InetAddress addr : InetAddress.getAllByName(name)) + for (InetAddress addr : DnsHelper.getAllByName(context, name)) if (Arrays.equals(ip.getAddress(), addr.getAddress())) { Log.i("Accepted " + name + " for " + server); return;