sender check: the reply names no other domain (L8); which key signs, tested (stage 2)
L8: a From: line naming another sender of the server was refused with
"it names another sender of this server, <domain>" - a confirmation, to
whoever tries names, that the domain is hosted here. The reason now stops
before the domain; the line as written stays in the reply (the client's own
text) and on the refused message's page (header_from). Unit test: the reason
of every refusal names none of the server's other domains; e2e: the reason
of each sender-check refusal does not contain other.e2e.test.
Which key OpenDKIM signs with (owner, 2026-10-13): the check and OpenDKIM
read From: with two parsers, and their agreement was argued, never run.
internal/milter/testdata/from-lines-passed.txt holds the lines the check
passes for an application - bare and bracketed, quoted names with a comma,
escaped quotes and an address inside, an extension, three encoded charsets,
two folded lines, comments (nested too), a stranger's address in the name -
as Go-quoted strings with {domain}. The unit test wants each passed; the new
e2e case passed_from_lines_signed_for_their_domain_only sends each as app1
and wants every DKIM signature at the sink to be for the sender domain,
with one valid. All fifteen were. "(the shop) a@domain" - a comment before
the address, valid RFC 5322 - is refused by the check ("it must be one
address"); strict, not a hole, so it is not in the file. Groups are refused
too.
Audit plan lines ticked (two) with what was found, CHANGELOG [Unreleased],
roadmap 21/62.
Evidence on the test server for this tree (with a618ffb): go vet clean, go
test ./... 23 packages ok, make e2e exit 0 - the new case passed in 4 s.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+22
@@ -0,0 +1,22 @@
|
||||
# From: lines the sender check lets through for an application of {domain}
|
||||
# (audit 2026-10-12, stage 2: which key OpenDKIM signs with, seen and not
|
||||
# reasoned). One Go-quoted string per line; {domain} is the application's
|
||||
# domain. Two tests read this file: the check's unit test
|
||||
# (internal/milter/sender_test.go) wants each line passed, and the e2e
|
||||
# (test/e2e/dkim_from_test.go) sends each one and wants the message signed
|
||||
# for {domain} and nothing else. A line added here is run by both.
|
||||
"a@{domain}"
|
||||
"<a@{domain}>"
|
||||
"\"The Shop\" <Orders@{domain}>"
|
||||
"orders+48213@{domain}"
|
||||
"\"shop@{domain}\" <a@{domain}>"
|
||||
"\"Orders, returns\" <a@{domain}>"
|
||||
"\"The \\\"Shop\\\"\" <a@{domain}>"
|
||||
"\"someone@gmail.example\" <a@{domain}>"
|
||||
"=?utf-8?b?0JzQsNCz0LDQt9C40L0=?= <a@{domain}>"
|
||||
"=?windows-1251?B?zODj4Ofo7Q==?= <a@{domain}>"
|
||||
"=?koi8-r?Q?=ED=C1=C7=C1=DA=C9=CE?= <a@{domain}>"
|
||||
"\"A very long display name of the shop\"\r\n <a@{domain}>"
|
||||
"=?utf-8?b?0JzQsNCz0LDQt9C40L0=?=\r\n\t<a@{domain}>"
|
||||
"a@{domain} (the shop)"
|
||||
"a@{domain} (the (nested) shop)"
|
||||
Reference in New Issue
Block a user