From d11bf4a73b2865b667233a7d62767118fd799d2b Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 1 Jul 2024 13:12:13 +0200 Subject: [PATCH] Stricter alignment --- .../java/eu/faircode/email/ActivityEML.java | 2 +- app/src/main/java/eu/faircode/email/Core.java | 48 ++----------------- .../java/eu/faircode/email/MessageHelper.java | 13 ++++- 3 files changed, 16 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityEML.java b/app/src/main/java/eu/faircode/email/ActivityEML.java index 89669546ad..b17738d164 100644 --- a/app/src/main/java/eu/faircode/email/ActivityEML.java +++ b/app/src/main/java/eu/faircode/email/ActivityEML.java @@ -359,7 +359,7 @@ public class ActivityEML extends ActivityBase { List signers = helper.verifyDKIM(context); boolean aligned = helper.isAligned(context, signers, - helper.getReturnPath(), helper.getMailFrom(authentication), helper.getFrom()); + helper.getReturnPath(), helper.getMailFrom(authentication), helper.getFrom(), helper.getSPF()); ssb.append("TLS: ").append(tls == null ? "-" : (tls ? "✓" : "✗")).append('\n'); ssb.append("DKIM: ").append(dkim == null ? "-" : (dkim ? "✓" : "✗")).append('\n'); diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 048f176c4a..132c813570 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -3514,28 +3514,8 @@ class Core { List signers = helper.verifyDKIM(context); message.dkim = !signers.isEmpty(); message.signedby = (signers.isEmpty() ? null : TextUtils.join(",", signers)); - if (message.dkim) { - boolean aligned = helper.isAligned(context, signers, message.return_path, message.smtp_from, message.from); - if (aligned) - message.dmarc = true; - else if (message.dmarc != null) { - boolean found = false; - if (!strict_alignment) { - String asigner = helper.getSigner(authentication); - String adomain = UriHelper.getRootDomain(context, asigner); - if (adomain != null) - for (String signer : signers) { - String sdomain = UriHelper.getRootDomain(context, signer); - if (adomain.equalsIgnoreCase(sdomain)) { - found = true; - break; - } - } - } - if (!found) - message.dmarc = false; - } - } + message.dmarc = helper.isAligned(context, signers, + message.return_path, message.smtp_from, message.from, helper.getSPF()); } if (message.size == null && message.total != null) @@ -4721,28 +4701,8 @@ class Core { List signers = helper.verifyDKIM(context); message.dkim = !signers.isEmpty(); message.signedby = (signers.isEmpty() ? null : TextUtils.join(",", signers)); - if (message.dkim) { - boolean aligned = helper.isAligned(context, signers, message.return_path, message.smtp_from, message.from); - if (aligned) - message.dmarc = true; - else if (message.dmarc != null) { - boolean found = false; - if (!strict_alignment) { - String asigner = helper.getSigner(authentication); - String adomain = UriHelper.getRootDomain(context, asigner); - if (adomain != null) - for (String signer : signers) { - String sdomain = UriHelper.getRootDomain(context, signer); - if (adomain.equalsIgnoreCase(sdomain)) { - found = true; - break; - } - } - } - if (!found) - message.dmarc = false; - } - } + message.dmarc = helper.isAligned(context, signers, + message.return_path, message.smtp_from, message.from, helper.getSPF()); } // Borrow reply name from sender name diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 03d993c3b6..b82e16f6ae 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -2718,13 +2718,18 @@ public class MessageHelper { return true; } - boolean isAligned(Context context, List signers, Address[] return_path, Address[] smtp_from, Address[] from) { + boolean isAligned(Context context, List signers, + Address[] return_path, Address[] smtp_from, Address[] from, + Boolean spf) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean strict_alignment = prefs.getBoolean("strict_alignment", false); + List
envelop = new ArrayList<>(); if (return_path != null) envelop.addAll(Arrays.asList(return_path)); if (from != null) envelop.addAll(Arrays.asList(from)); - if (smtp_from != null) + if (smtp_from != null && !strict_alignment) envelop.addAll(Arrays.asList(smtp_from)); for (String signer : signers) { String sdomain = UriHelper.getRootDomain(context, signer); @@ -2736,6 +2741,10 @@ public class MessageHelper { return true; } } + + if (Boolean.TRUE.equals(spf) && !strict_alignment) + return true; + return false; }