DMARC viewer: added SPF redirection

master
M66B 8 months ago
parent 20f1528694
commit 4928ad0121

@ -447,7 +447,7 @@ public class ActivityDMARC extends ActivityBase {
Integer start = null; Integer start = null;
SpannableStringBuilder extra = new SpannableStringBuilderEx(); SpannableStringBuilder extra = new SpannableStringBuilderEx();
spf = lookupSpf(context, lastDomain, extra); spf = lookupSpf(context, lastDomain, 1, extra);
for (Pair<String, DnsHelper.DnsRecord> p : spf) { for (Pair<String, DnsHelper.DnsRecord> p : spf) {
ssb.append(p.first).append(' ') ssb.append(p.first).append(' ')
.append(p.second.response).append("\n\n"); .append(p.second.response).append("\n\n");
@ -573,9 +573,14 @@ public class ActivityDMARC extends ActivityBase {
} }
} }
private static List<Pair<String, DnsHelper.DnsRecord>> lookupSpf(Context context, String domain, SpannableStringBuilder ssb) { private static List<Pair<String, DnsHelper.DnsRecord>> lookupSpf(Context context, String domain, int depth, SpannableStringBuilder ssb) {
List<Pair<String, DnsHelper.DnsRecord>> result = new ArrayList<>(); List<Pair<String, DnsHelper.DnsRecord>> result = new ArrayList<>();
Log.i("Lookup SPF domain=" + domain + " depth=" + depth);
if (depth > 5)
return result;
try { try {
DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, domain, "txt:v=spf1 "); DnsHelper.DnsRecord[] records = DnsHelper.lookup(context, domain, "txt:v=spf1 ");
ssb.append(domain).append('=').append(Integer.toString(records.length)).append('\n'); 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+")) for (String part : r.response.split("\\s+"))
if (part.toLowerCase(Locale.ROOT).startsWith("include:")) { if (part.toLowerCase(Locale.ROOT).startsWith("include:")) {
String sub = part.substring("include:".length()); 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) { } catch (Throwable ex) {

Loading…
Cancel
Save