[dmarc-ietf] Re: A few implementation questions for RFC9989
John Levine <johnl@ietf.email> Sat, 20 June 2026 18:21 UTC
Return-Path: <johnl@iecc.com>
X-Original-To: dmarc@mail2.ietf.org
Delivered-To: dmarc@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 8FF831047B187 for <dmarc@mail2.ietf.org>; Sat, 20 Jun 2026 11:21:58 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1781979718; bh=Y5d0/B0xZjFeVoSRY8zh0wMi0s+UL1zgexrEz2tR/Os=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=pLWui3oY9XgjcAiXTBuBgglvYlC/0kPgfpBbhDcTDdtvuV8g63GesfSB/wbi2tq1i 8y40AqZdANuNlTJ5qmrSyfTZFL3IszUZekG2VqBqR2XsJfQ9srH/lEx74ajTyPbTO3 dsUDgHTmdnj0hiUm9htdxswfaGD0+STmOD54tAk8=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -4.4
X-Spam-Level:
X-Spam-Status: No, score=-4.4 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=iecc.com header.b="jIpZAcvP"; dkim=pass (2048-bit key) header.d=ietf.email header.b="cLWQIkRa"
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tCWyiWFfo77C for <dmarc@mail2.ietf.org>; Sat, 20 Jun 2026 11:21:57 -0700 (PDT)
Received: from gal.iecc.com (gal.iecc.com [IPv6:2001:470:1f07:1126:0:43:6f73:7461]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id D7A761047B180 for <dmarc@ietf.org>; Sat, 20 Jun 2026 11:21:57 -0700 (PDT)
Received: (qmail 41064 invoked from network); 20 Jun 2026 18:21:51 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=iecc.com; h=date:message-id:from:to:cc:subject:in-reply-to:references:mime-version:content-type:content-transfer-encoding:cleverness; s=a0666a36da3f.k2606; t=1781979701; x=1782325301; bh=Y5d0/B0xZjFeVoSRY8zh0wMi0s+UL1zgexrEz2tR/Os=; b=jIpZAcvPyrby84tMvm9RBo2n7fYt0NaIJQreI+DSOSTX026JKL+Ikaz76lrqPrDTbdtE9PoKKdXxslFutUcDyPW9Xq0ZF6+i0YB98XHX2RUtdtY43twlly58+56rdIWu63tr++b+3rSqJrpUijCUD2ERdX31GG6yEaSz8LjvUligyzvyVLNBvrFaWD8MUV3FrQ09REgZPyDshYy6Xg9SggYvJEkv/bQmpGlPpRYFSoZ7OMq25P1uNALCX6FOTv8prp4mAHVv3je8RJ+g596AU9swr4SBXOcjLyiy7jnpeZl2hy3ajcaUl4I/SY6xVENGDV5PIZeml1o6a2k1KFAKPQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=ietf.email; h=date:message-id:from:to:cc:subject:in-reply-to:references:mime-version:content-type:content-transfer-encoding:cleverness; s=a0666a36da3f.k2606; bh=Y5d0/B0xZjFeVoSRY8zh0wMi0s+UL1zgexrEz2tR/Os=; b=cLWQIkRahQn07TzbMhOSAToRQXgwFKzyT1Yj5M9w7wCY90N7u3u8SktqBIZ0dd9ezOL65EcomyA6cEkQe0Q5SeJyhdRF0gI/7FljSI98fCe1CKtih1BebFqAL9JraU9HhqBA4K/aIZ8enO3cxCR7X/+TESTNNJSdX8OfYwRoNGy9hVo34f+qYSuufFNOorWrX4G+kb2iyVVKws5rvtvPR3ki402DQu9m+dyjpq8k5Z6xiACeDQoDVURbJ/MubO99Q30WHlVKpX2vsLr89VzQqxl0cqJgrzWGb+3f6xKB7CgzY467scqQXVleGMzcOICaNnNdfzgPaSoE/DXcrsGobw==
Received: from ary.qy ([IPv6:2001:470:1f07:1126:0:78:696d:6170]) by imap.iecc.com ([IPv6:2001:470:1f07:1126:0:78:696d:6170]) with ESMTPS (TLS1.3 ECDHE-RSA CHACHA20-POLY1305 AEAD) via TCP6; 20 Jun 2026 18:21:50 -0000
Received: by ary.qy (Postfix, from userid 501) id 492D71111D599; Sat, 20 Jun 2026 14:21:49 -0400 (EDT)
Date: Sat, 20 Jun 2026 14:21:49 -0400
Message-Id: <20260620182150.492D71111D599@ary.qy>
From: John Levine <johnl@ietf.email>
To: dmarc@ietf.org
In-Reply-To: <4CA69972-A6EA-4370-83EA-60AFDCC7F25B@prime.gushi.org>
Organization: Taughannock Networks
References: <4CA69972-A6EA-4370-83EA-60AFDCC7F25B@prime.gushi.org>
X-Headerized: yes
Cleverness: minimal
Mime-Version: 1.0
Content-type: text/plain; charset="utf-8"
Content-transfer-encoding: 8bit
Message-ID-Hash: HXO4KFBUWF2M7TYIZ6HEARTVMPO5QGHL
X-Message-ID-Hash: HXO4KFBUWF2M7TYIZ6HEARTVMPO5QGHL
X-MailFrom: johnl@iecc.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-dmarc.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: danm@prime.gushi.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [dmarc-ietf] Re: A few implementation questions for RFC9989
List-Id: "Domain-based Message Authentication, Reporting, and Compliance (DMARC)" <dmarc.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/dmarc/L5jUKFAVYcUpwRlfTHcimfQBxEE>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dmarc>
List-Help: <mailto:dmarc-request@ietf.org?subject=help>
List-Owner: <mailto:dmarc-owner@ietf.org>
List-Post: <mailto:dmarc@ietf.org>
List-Subscribe: <mailto:dmarc-join@ietf.org>
List-Unsubscribe: <mailto:dmarc-leave@ietf.org>
We tried hard to make the tree walk produce the same result as the old PSL check
in nearly every case, because we did not want to introduce gratuitous
incompatibilities, and because we know that most people are not going to change
the DMARC records they've already published. So you know that most DMARC records
will not need to change and if you're usually getting different results from the
old PSL approach, you're reading the spec wrong.
It appears that Dan Mahoney <danm@prime.gushi.org> said:
>1. Walk exhaustion without psd= (S4.10.1)
>
>If the walk runs out of labels without ever finding a record with
>psd=n or psd=y, but it passed one or more valid DMARC Policy Records
>(no psd= tag) along the way, does that count as "the set produced by
>the DNS Tree Walk contains no DMARC Policy Record" (S4.10.1), or do
>those earlier records still count for something?
A DMARC policy record is defined in section 3.2.6. In section 4.7
you will find the description of the psd= flag, with the word OPTIONAL
in bold face capitals, and text telling you that the default value
is "u".
>Right now we're
>treating exhaustion-without-psd= the same as no-record-found at all,
That is completely wrong. See above. Every record without an explicit
psd value has an implicit psd=u, if you really really want to find psd
values everywhere.
>2. "might" in S4.10.2
>
>S4.10.2 says alignment-evaluation tree walks "might" start at the
>Author Domain, the SPF-Authenticated Identifier, or a DKIM-Authenticated
>Identifier. Since "might" isn't 2119 language, is it actually optional
>whether an implementation runs separate walks per identifier,
No. When looking for an organizational domain, the tree walk starts
at one of the places it looked for but did not find a strictly aligned
record. That point might be the author domain, or it might be the
SPF domain, or it might be the DKIM domain. But it's definitely one
of those three.
>3. "one label below" plus the 8-label shortcut (S4.10 step 4, S4.10.2 step 2)
>
>S4.10.2 step 2 says when psd=y shows up somewhere other than the
>walk's starting domain, the Organizational Domain is the domain one
>label below it in the DNS hierarchy. But if the walk got there via the
>8-label shortcut, it may never have actually queried that intermediate
>label.
That's OK. You do what it says. I would be very surprised if there were
any situtations where this particular thing happened other than contrived examples.
>4. What happens to the non-psd= records collected along the way (S4.10.2)
>
>The step 3 selection ("found at the name with the fewest number of
>labels") only makes sense if the walk is accumulating every valid
>record it sees, not just whatever it has when it stops
You're in luck. It's accumulating every valid record it sees, whether or
not they contain the optional psd= flag.
R's,
John
- [dmarc-ietf] A few implementation questions for R… Dan Mahoney
- [dmarc-ietf] Re: A few implementation questions f… John Levine