milter, postfix, app, domain: cite the source of what they rely on (assumptions part B)
Comments only, no behaviour changed. go-milter v0.4.1 (session.go: one session per connection, replaced after a non-continue reply; macros per stage), Postfix 3.7.11 (milter8.c, smtpd_check.c reject_auth_sender_login_mismatch(), mail_addr_find.c, showq_compat.c, mail_conf_time.c, mail_params.h), Cyrus SASL 2.1.28 (saslpasswd.c, plugins/sasldb.c: deleting a missing login is not an error), OpenDKIM 2.11.0~beta2 (opendkim-db.c, opendkim-genkey), Berkeley DB 5.3 db_dump, rspamd 3.11.0. Comments that claimed what the source denies are corrected (sasldb keeps the password as given, not hashed; an embedded newline is kept, not truncated; rspamd sorts symbols by absolute weight); fixtures say seen or composed. The sender check's From: parsing gets no citations: it is replaced by the port of OpenDKIM's dkim_mail_parse next. Contradictions left for their own commits: B-G5 cleanAddress, B-PS1 first key wins, B-PQ1 the forced-expire flag, B-PQ10/PQ11 Postfix's time units. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -59,6 +59,9 @@ type Binding struct {
|
||||
// architecture.md § Mail path) — their logins are merged onto a single line as
|
||||
// a comma-separated list, which is how Postfix expects multiple owners of one
|
||||
// sender.
|
||||
//
|
||||
// Postfix 3.7.11, src/smtpd/smtpd_check.c, reject_auth_sender_login_mismatch():
|
||||
// the value is split into owners with mystrtok(&cp, CHARS_COMMA_SP).
|
||||
func (p *Postfix) RebuildSenderLoginMaps(bindings []Binding) error {
|
||||
content, err := renderSenderLoginMaps(bindings)
|
||||
if err != nil {
|
||||
@@ -128,6 +131,12 @@ func appendUnique(list []string, v string) []string {
|
||||
// end it, the comma that separates values, the colon a lookup key cannot carry,
|
||||
// and the backslash. A login additionally may not carry "@" — that would make it
|
||||
// look like an address.
|
||||
//
|
||||
// Postfix 3.7.11, src/util/dict_thash.c, dict_thash_open(): the key ends at
|
||||
// the first blank outside quotes, a backslash escapes the next character;
|
||||
// src/util/readlline.c: a newline ends the line (one that starts with a blank
|
||||
// continues the one before); the owners split on comma and blank (see
|
||||
// RebuildSenderLoginMaps).
|
||||
const (
|
||||
senderMapAddressForbidden = " \t\r\n,:\\"
|
||||
senderMapLoginForbidden = " \t\r\n,:@\\"
|
||||
@@ -161,6 +170,15 @@ func assertMapSafe(address, login string) error {
|
||||
//
|
||||
// Arguments are fixed literals — no user input is interpolated into the command,
|
||||
// and it never goes through a shell (security.md).
|
||||
//
|
||||
// Postfix 3.7.11, conf/postfix-script, start-fg: a process that is not PID 1
|
||||
// runs "$daemon_directory/master -s" as its child, and src/master/master.c
|
||||
// puts that master in a session of its own (setsid()). "reload" sends the
|
||||
// master SIGHUP; src/master/master.c calls master_refresh(), and
|
||||
// master_conf.c, master_config(), lets the running children "commit suicide
|
||||
// whenever it is convenient" while new ones get the new configuration; a
|
||||
// texthash table is read into memory once per process
|
||||
// (README_FILES/DATABASE_README).
|
||||
func reloadViaSupervisor() error {
|
||||
return supervisor.Start("postfix-reload")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user