DMARC lookup should follow RFC 7489 / RFC 9091 fallback behavior #98

Closed
opened 2026-05-18 05:29:35 +00:00 by nemunaire · 0 comments
Owner

Problem

The current DMARC validation logic only checks:

_dmarc.<exact-from-domain>

Example:

From: user@foo.bar.example.com

Current lookup:

_dmarc.foo.bar.example.com

If no record exists, the software stops the evaluation and reports that no DMARC policy is present.

This behavior is incorrect according to RFC 7489.


Expected behavior

DMARC lookup must fall back to the Organizational Domain when no DMARC record exists on the exact domain.

For:

foo.bar.example.com

the lookup flow should be:

_dmarc.foo.bar.example.com

if absent:

_dmarc.example.com

where example.com is the Organizational Domain determined using the Public Suffix List (PSL).

The lookup must NOT recursively test intermediate subdomains such as:

_dmarc.bar.example.com

RFC 9091 support (PSD DMARC)

Optionally, when implementing RFC 9091 support, an additional fallback may be performed to the Public Suffix Domain (PSD).

Example:

_dmarc.com

This lookup should only happen:

  • if RFC 9091 support is enabled
  • if the receiver implements PSD DMARC
  • and if the PSD record explicitly contains:
psd=y

Expected flow with RFC 9091:

_dmarc.foo.bar.example.com
↓
_dmarc.example.com
↓
_dmarc.com

References

  • RFC 7489: DMARC
  • RFC 9091: PSD DMARC Extension
  • Public Suffix List (PSL)
## Problem The current DMARC validation logic only checks: ```text _dmarc.<exact-from-domain> ``` Example: ```text From: user@foo.bar.example.com ``` Current lookup: ```text _dmarc.foo.bar.example.com ``` If no record exists, the software stops the evaluation and reports that no DMARC policy is present. This behavior is incorrect according to RFC 7489. --- ## Expected behavior DMARC lookup must fall back to the Organizational Domain when no DMARC record exists on the exact domain. For: ```text foo.bar.example.com ``` the lookup flow should be: ```text _dmarc.foo.bar.example.com ``` if absent: ```text _dmarc.example.com ``` where `example.com` is the Organizational Domain determined using the Public Suffix List (PSL). The lookup must NOT recursively test intermediate subdomains such as: ```text _dmarc.bar.example.com ``` --- ## RFC 9091 support (PSD DMARC) Optionally, when implementing RFC 9091 support, an additional fallback may be performed to the Public Suffix Domain (PSD). Example: ```text _dmarc.com ``` This lookup should only happen: * if RFC 9091 support is enabled * if the receiver implements PSD DMARC * and if the PSD record explicitly contains: ```text psd=y ``` Expected flow with RFC 9091: ```text _dmarc.foo.bar.example.com ↓ _dmarc.example.com ↓ _dmarc.com ``` --- ## References * RFC 7489: DMARC * RFC 9091: PSD DMARC Extension * Public Suffix List (PSL)
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
happyDomain/happyDeliver#98
No description provided.