diff --git a/app/src/main/java/eu/faircode/email/ActivityDmarc.java b/app/src/main/java/eu/faircode/email/ActivityDmarc.java index a8ed3e503b..967858a67d 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDmarc.java +++ b/app/src/main/java/eu/faircode/email/ActivityDmarc.java @@ -46,6 +46,7 @@ import java.io.FileNotFoundException; import java.io.InputStream; import java.io.StringReader; import java.net.InetAddress; +import java.net.UnknownHostException; import java.text.DateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -280,7 +281,30 @@ public class ActivityDmarc extends ActivityBase { valid = true; break; } - } + } else if ("mx".equals(ip)) + try { + DnsHelper.DnsRecord[] mxs = + DnsHelper.lookup(context, p.first, "mx"); + for (DnsHelper.DnsRecord mx : mxs) { + List as = new ArrayList<>(); + try { + as.addAll(Arrays.asList(DnsHelper.lookup(context, mx.name, "a"))); + } catch (UnknownHostException ignored) { + } + try { + as.addAll(Arrays.asList(DnsHelper.lookup(context, mx.name, "aaaa"))); + } catch (UnknownHostException ignored) { + } + for (DnsHelper.DnsRecord a : as) + if (text.equals(a.name)) { + valid = true; + break; + } + if (valid) + break; + } + } catch (UnknownHostException ignored) { + } } if (valid) break; @@ -419,10 +443,16 @@ public class ActivityDmarc extends ActivityBase { } List records = new ArrayList<>(); - records.addAll(Arrays.asList( - DnsHelper.lookup(context, "_dmarc." + lastDomain, "txt"))); - records.addAll(Arrays.asList( - DnsHelper.lookup(context, "default._bimi." + lastDomain, "txt"))); + try { + records.addAll(Arrays.asList( + DnsHelper.lookup(context, "_dmarc." + lastDomain, "txt"))); + } catch (UnknownHostException ignored) { + } + try { + records.addAll(Arrays.asList( + DnsHelper.lookup(context, "default._bimi." + lastDomain, "txt"))); + } catch (UnknownHostException ignored) { + } for (DnsHelper.DnsRecord r : records) ssb.append(r.name).append("\n"); ssb.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 669c2fe6af..54618202a3 100644 --- a/app/src/main/java/eu/faircode/email/DnsHelper.java +++ b/app/src/main/java/eu/faircode/email/DnsHelper.java @@ -29,6 +29,8 @@ import android.os.Build; import androidx.annotation.NonNull; +import org.xbill.DNS.AAAARecord; +import org.xbill.DNS.ARecord; import org.xbill.DNS.Lookup; import org.xbill.DNS.MXRecord; import org.xbill.DNS.Message; @@ -92,6 +94,12 @@ public class DnsHelper { case "txt": rtype = Type.TXT; break; + case "a": + rtype = Type.A; + break; + case "aaaa": + rtype = Type.AAAA; + break; default: throw new IllegalArgumentException(type); } @@ -203,6 +211,12 @@ public class DnsHelper { result.get(0).name += content.toString(); else result.add(new DnsRecord(content.toString(), 0)); + } else if (record instanceof ARecord) { + ARecord a = (ARecord) record; + result.add(new DnsRecord(a.getAddress().getHostAddress())); + } else if (record instanceof AAAARecord) { + AAAARecord aaaa = (AAAARecord) record; + result.add(new DnsRecord(aaaa.getAddress().getHostAddress())); } else throw new IllegalArgumentException(record.getClass().getName()); }