diff --git a/app/src/main/java/eu/faircode/email/ActivityDMARC.java b/app/src/main/java/eu/faircode/email/ActivityDMARC.java index 92c0bcfd3d..9983f097ae 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDMARC.java +++ b/app/src/main/java/eu/faircode/email/ActivityDMARC.java @@ -447,7 +447,7 @@ public class ActivityDMARC extends ActivityBase { Integer start = null; SpannableStringBuilder extra = new SpannableStringBuilderEx(); - spf = lookupSpf(context, lastDomain, extra); + spf = lookupSpf(context, lastDomain, 1, extra); for (Pair p : spf) { ssb.append(p.first).append(' ') .append(p.second.response).append("\n\n"); @@ -573,9 +573,14 @@ public class ActivityDMARC extends ActivityBase { } } - private static List> lookupSpf(Context context, String domain, SpannableStringBuilder ssb) { + private static List> lookupSpf(Context context, String domain, int depth, SpannableStringBuilder ssb) { List> result = new ArrayList<>(); + Log.i("Lookup SPF domain=" + domain + " depth=" + depth); + + if (depth > 5) + return result; + try { DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, domain, "txt:v=spf1 "); ssb.append(domain).append('=').append(Integer.toString(records.length)).append('\n'); @@ -584,7 +589,10 @@ public class ActivityDMARC extends ActivityBase { 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)); + result.addAll(lookupSpf(context, sub, depth + 1, ssb)); + } else if (part.toLowerCase(Locale.ROOT).startsWith("redirect=")) { + String redir = part.substring("redirect=".length()); + result.addAll(lookupSpf(context, redir, depth + 1, ssb)); } } } catch (Throwable ex) {