Skip to content

feat: RFC 9990 generator/pass-disposition + RFC 9989 obsolete-tag cleanup#440

Merged
thegushi merged 1 commit into
trusteddomainproject:developfrom
thegushi:feat/rfc9990-aggregate-report-cleanup
Jul 23, 2026
Merged

feat: RFC 9990 generator/pass-disposition + RFC 9989 obsolete-tag cleanup#440
thegushi merged 1 commit into
trusteddomainproject:developfrom
thegushi:feat/rfc9990-aggregate-report-cleanup

Conversation

@thegushi

Copy link
Copy Markdown
Collaborator

Summary

  • report_metadata now includes , identifying the report-generating software, matching the string already used for --version output and the X-Mailer header.
  • opendmarc-reports strips the obsolete "!NNNk" RUA size-suffix (obs-dmarc-report-size) from destination addresses but no longer enforces it as a per-destination size cap, per RFC 9989's ABNF ("reporters should ignore" it).
  • Removed rf=/ri= parsing, the now-dead DMARC_POLICY_T fields, and the orphaned (never publicly declared) opendmarc_policy_fetch_rf() -- both tags were removed from the DMARC record format by RFC 9989.
  • ActionDispositionType now emits "pass" (RFC 9990 S3.1.1.9) alongside none/quarantine/reject: new DMARC_RESULT_PASS is set when alignment passed under an enforcing (reject/quarantine) policy, keyed off the unadjusted published p/sp so t=y step-down doesn't affect it, per the existing rule that t= doesn't affect report generation.

Test plan

  • Clean autoreconf && ./configure && make on quark (FreeBSD): no compiler warnings.
  • make check: libopendmarc test suite 10/10 pass, including test_dmarc_parse's negative rf=/ri= cases updated to expect DMARC_PARSE_OKAY now that they're unknown (ignored) tags rather than validated ones.
  • reports/opendmarc-reports syntax-checked clean with real Perl on quark.

…anup

- report_metadata now includes <generator>, identifying the
  report-generating software, matching the string already used for
  --version output and the X-Mailer header.
- opendmarc-reports strips the obsolete "!NNNk" RUA size-suffix
  (obs-dmarc-report-size) from destination addresses but no longer
  enforces it as a per-destination size cap, per RFC 9989's ABNF
  ("reporters should ignore" it).
- Removed rf=/ri= parsing, the now-dead DMARC_POLICY_T fields, and the
  orphaned (never publicly declared) opendmarc_policy_fetch_rf() --
  both tags were removed from the DMARC record format by RFC 9989.
- ActionDispositionType now emits "pass" (RFC 9990 S3.1.1.9) alongside
  none/quarantine/reject: new DMARC_RESULT_PASS is set when alignment
  passed under an enforcing (reject/quarantine) policy, keyed off the
  unadjusted published p/sp so t=y step-down doesn't affect it, per the
  existing rule that t= doesn't affect report generation.
@thegushi
thegushi merged commit 228594e into trusteddomainproject:develop Jul 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant