diff --git a/app/src/main/java/eu/faircode/email/ActivityDMARC.java b/app/src/main/java/eu/faircode/email/ActivityDMARC.java index 981988b938..2411b04055 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDMARC.java +++ b/app/src/main/java/eu/faircode/email/ActivityDMARC.java @@ -600,17 +600,16 @@ public class ActivityDMARC extends ActivityBase { List> result = new ArrayList<>(); try { - DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, domain, "txt"); + DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, domain, "txt:v=spf1 "); ssb.append(domain).append('=').append(Integer.toString(records.length)).append('\n'); - for (DnsHelper.DnsRecord r : records) - if (r.response.contains("spf")) { - result.add(new Pair<>(domain, r)); - for (String part : r.response.split("\\s+")) - if (part.toLowerCase(Locale.ROOT).startsWith("include:")) { - String sub = part.substring("include:".length()); - result.addAll(lookupSpf(context, sub, ssb)); - } - } + for (DnsHelper.DnsRecord r : records) { + result.add(new Pair<>(domain, r)); + for (String part : r.response.split("\\s+")) + if (part.toLowerCase(Locale.ROOT).startsWith("include:")) { + String sub = part.substring("include:".length()); + result.addAll(lookupSpf(context, sub, ssb)); + } + } } catch (Throwable ex) { Log.w(ex); ssb.append(ex.toString()).append('\n'); diff --git a/app/src/main/java/eu/faircode/email/DnsHelper.java b/app/src/main/java/eu/faircode/email/DnsHelper.java index a1a9d2a189..fb3bc3e215 100644 --- a/app/src/main/java/eu/faircode/email/DnsHelper.java +++ b/app/src/main/java/eu/faircode/email/DnsHelper.java @@ -48,6 +48,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.concurrent.Executor; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; @@ -81,6 +82,13 @@ public class DnsHelper { @NonNull static DnsRecord[] lookup(Context context, String name, String type, int timeout) throws UnknownHostException { + String filter = null; + int colon = type.indexOf(':'); + if (colon > 0) { + filter = type.substring(colon + 1); + type = type.substring(0, colon); + } + int rtype; switch (type) { case "ns": @@ -214,6 +222,9 @@ public class DnsHelper { TXTRecord txt = (TXTRecord) record; for (Object content : txt.getStrings()) { String text = content.toString(); + if (filter != null && + (TextUtils.isEmpty(text) || !text.toLowerCase(Locale.ROOT).startsWith(filter))) + continue; int i = 0; int slash = text.indexOf('\\', i); while (slash >= 0 && slash + 4 < text.length()) {