diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a20595ef0..64a81e7b5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ For support you can use [the contact form](https://contact.faircode.eu/?product= * Added [Certificate transparency](https://github.com/appmattus/certificatetransparency/blob/main/docs/what-is-certificate-transparency.md) * Small improvements and minor bug fixes -* Updated libraries (Apache Compress, Bugsnag, Bouncy Castle, Jsoup) +* Updated libraries (Apache Compress, Bugsnag, Bouncy Castle, dnsjava, Jsoup) * Updated [translations](https://crowdin.com/project/open-source-email) ### 1.2145 - 2023-12-30 diff --git a/app/build.gradle b/app/build.gradle index 18c1ec1c2c..be20266bcd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -548,7 +548,7 @@ dependencies { def jsonpath_version = "2.8.0" def css_version = "0.9.30" def jax_version = "2.3.0-jaxb-1.0.6" - def dnsjava_version = "2.1.9" + def dnsjava_version = "3.5.3" def openpgp_version = "12.0" def badge_version = "1.1.22" def bugsnag_version = "6.1.0" diff --git a/app/src/main/assets/CHANGELOG.md b/app/src/main/assets/CHANGELOG.md index 6a20595ef0..64a81e7b5a 100644 --- a/app/src/main/assets/CHANGELOG.md +++ b/app/src/main/assets/CHANGELOG.md @@ -10,7 +10,7 @@ For support you can use [the contact form](https://contact.faircode.eu/?product= * Added [Certificate transparency](https://github.com/appmattus/certificatetransparency/blob/main/docs/what-is-certificate-transparency.md) * Small improvements and minor bug fixes -* Updated libraries (Apache Compress, Bugsnag, Bouncy Castle, Jsoup) +* Updated libraries (Apache Compress, Bugsnag, Bouncy Castle, dnsjava, Jsoup) * Updated [translations](https://crowdin.com/project/open-source-email) ### 1.2145 - 2023-12-30 diff --git a/app/src/main/java/eu/faircode/email/DnsHelper.java b/app/src/main/java/eu/faircode/email/DnsHelper.java index fb3bc3e215..5766e93f79 100644 --- a/app/src/main/java/eu/faircode/email/DnsHelper.java +++ b/app/src/main/java/eu/faircode/email/DnsHelper.java @@ -37,7 +37,6 @@ import org.xbill.DNS.MXRecord; import org.xbill.DNS.Message; import org.xbill.DNS.NSRecord; import org.xbill.DNS.Record; -import org.xbill.DNS.SOARecord; import org.xbill.DNS.SRVRecord; import org.xbill.DNS.SimpleResolver; import org.xbill.DNS.TXTRecord; @@ -46,6 +45,7 @@ import org.xbill.DNS.Type; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; +import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -97,9 +97,6 @@ public class DnsHelper { case "mx": rtype = Type.MX; break; - case "soa": - rtype = Type.SOA; - break; case "srv": rtype = Type.SRV; break; @@ -189,7 +186,7 @@ public class DnsHelper { } } }; - resolver.setTimeout(timeout); + resolver.setTimeout(Duration.ofSeconds(timeout)); Lookup lookup = new Lookup(name, rtype); lookup.setResolver(resolver); Log.i("Lookup name=" + name + " @" + resolver.getAddress() + " type=" + rtype); @@ -208,16 +205,13 @@ public class DnsHelper { Log.i("Found record=" + record); if (record instanceof NSRecord) { NSRecord ns = (NSRecord) record; - result.add(new DnsRecord(ns.getTarget().toString(true))); + result.add(new DnsRecord(type, ns.getTarget().toString(true))); } else if (record instanceof MXRecord) { MXRecord mx = (MXRecord) record; - result.add(new DnsRecord(mx.getTarget().toString(true))); - } else if (record instanceof SOARecord) { - SOARecord soa = (SOARecord) record; - result.add(new DnsRecord(soa.getHost().toString(true))); + result.add(new DnsRecord(type, mx.getTarget().toString(true))); } else if (record instanceof SRVRecord) { SRVRecord srv = (SRVRecord) record; - result.add(new DnsRecord(srv.getTarget().toString(true), srv.getPort(), srv.getPriority(), srv.getWeight())); + result.add(new DnsRecord(type, srv.getTarget().toString(true), srv.getPort(), srv.getPriority(), srv.getWeight())); } else if (record instanceof TXTRecord) { TXTRecord txt = (TXTRecord) record; for (Object content : txt.getStrings()) { @@ -239,14 +233,14 @@ public class DnsHelper { if (result.size() > 0) result.get(0).response += text; else - result.add(new DnsRecord(text, 0)); + result.add(new DnsRecord(type, text, 0)); } } else if (record instanceof ARecord) { ARecord a = (ARecord) record; - result.add(new DnsRecord(a.getAddress().getHostAddress())); + result.add(new DnsRecord(type, a.getAddress().getHostAddress())); } else if (record instanceof AAAARecord) { AAAARecord aaaa = (AAAARecord) record; - result.add(new DnsRecord(aaaa.getAddress().getHostAddress())); + result.add(new DnsRecord(type, aaaa.getAddress().getHostAddress())); } else throw new IllegalArgumentException(record.getClass().getName()); } @@ -297,23 +291,41 @@ public class DnsHelper { return dns.get(0).getHostAddress(); } + static void test(Context context) throws UnknownHostException { + log(lookup(context, "gmail.com", "ns")); + log(lookup(context, "gmail.com", "mx")); + log(lookup(context, "_imaps._tcp.gmail.com", "srv")); + log(lookup(context, "gmail.com", "txt")); + log(lookup(context, "gmail.com", "a")); + log(lookup(context, "gmail.com", "aaaa")); + } + + static void log(DnsRecord[] records) { + for (DnsRecord record : records) + Log.w("DNS " + record); + } + static class DnsRecord { + String type; String query; String response; Integer port; Integer priority; Integer weight; - DnsRecord(String response) { + DnsRecord(String type, String response) { + this.type = type; this.response = response; } - DnsRecord(String response, int port) { + DnsRecord(String type, String response, int port) { + this.type = type; this.response = response; this.port = port; } - DnsRecord(String response, int port, int priority, int weight) { + DnsRecord(String type, String response, int port, int priority, int weight) { + this.type = type; this.response = response; this.port = port; this.priority = priority; @@ -323,7 +335,7 @@ public class DnsHelper { @NonNull @Override public String toString() { - return query + "=" + response + ":" + port + " " + priority + "/" + weight; + return type + " " + query + "=" + response + ":" + port + " " + priority + "/" + weight; } } } diff --git a/metadata/en-US/changelogs/2145.txt b/metadata/en-US/changelogs/2145.txt index d0501f527b..ab6665d3ed 100644 --- a/metadata/en-US/changelogs/2145.txt +++ b/metadata/en-US/changelogs/2145.txt @@ -10,7 +10,7 @@ Next version * Added Certificate transparency * Small improvements and minor bug fixes -* Updated libraries (Apache Compress, Bugsnag, Bouncy Castle, Jsoup) +* Updated libraries (Apache Compress, Bugsnag, Bouncy Castle, dnsjava, Jsoup) * Updated translations 1.2145 - 2023-12-30