MCPcopy Create free account
hub / github.com/foxcpp/maddy / Configure

Method Configure

internal/modify/dkim/dkim.go:134–220  ·  view source on GitHub ↗
(inlineArgs []string, cfg *config.Map)

Source from the content-addressed store, hash-verified

132}
133
134func (m *Modifier) Configure(inlineArgs []string, cfg *config.Map) error {
135 if len(inlineArgs) != 0 {
136 if len(inlineArgs) == 1 {
137 return errors.New("modify.dkim: at least two arguments required")
138 }
139
140 m.domains = inlineArgs[0 : len(inlineArgs)-1]
141 m.selector = inlineArgs[len(inlineArgs)-1]
142 }
143
144 var (
145 hashName string
146 keyPathTemplate string
147 newKeyAlgo string
148 )
149
150 cfg.Bool("debug", true, false, &m.log.Debug)
151 cfg.StringList("domains", false, false, m.domains, &m.domains)
152 cfg.String("selector", false, false, m.selector, &m.selector)
153 cfg.String("key_path", false, false, "dkim_keys/{domain}_{selector}.key", &keyPathTemplate)
154 cfg.StringList("oversign_fields", false, false, oversignDefault, &m.oversignHeader)
155 cfg.StringList("sign_fields", false, false, signDefault, &m.signHeader)
156 cfg.Enum("header_canon", false, false,
157 []string{string(dkim.CanonicalizationRelaxed), string(dkim.CanonicalizationSimple)},
158 dkim.CanonicalizationRelaxed, (*string)(&m.headerCanon))
159 cfg.Enum("body_canon", false, false,
160 []string{string(dkim.CanonicalizationRelaxed), string(dkim.CanonicalizationSimple)},
161 dkim.CanonicalizationRelaxed, (*string)(&m.bodyCanon))
162 cfg.Duration("sig_expiry", false, false, 5*Day, &m.sigExpiry)
163 cfg.Enum("hash", false, false,
164 []string{"sha256"}, "sha256", &hashName)
165 cfg.Enum("newkey_algo", false, false,
166 []string{"rsa4096", "rsa2048", "ed25519"}, "rsa2048", &newKeyAlgo)
167 cfg.Bool("allow_multiple_from", false, false, &m.multipleFromOk)
168 cfg.Bool("sign_subdomains", false, false, &m.signSubdomains)
169
170 if _, err := cfg.Process(); err != nil {
171 return err
172 }
173
174 if len(m.domains) == 0 {
175 return errors.New("sign_domain: at least one domain is needed")
176 }
177 if m.selector == "" {
178 return errors.New("sign_domain: selector is not specified")
179 }
180 if m.signSubdomains && len(m.domains) > 1 {
181 return errors.New("sign_domain: only one domain is supported when sign_subdomains is enabled")
182 }
183
184 m.hash = hashFuncs[hashName]
185 if m.hash == 0 {
186 panic("modify.dkim.Init: Hash function allowed by config matcher but not present in hashFuncs")
187 }
188
189 for _, domain := range m.domains {
190 if _, err := idna.ToASCII(domain); err != nil {
191 m.log.Printf("warning: unable to convert domain %s to A-labels form, non-EAI messages will not be signed: %v", domain, err)

Callers

nothing calls this directly

Implementers 4

Modifierinternal/testutils/modifier.go
Groupinternal/modify/group.go
replaceAddrinternal/modify/replace_addr.go
Modifierinternal/modify/dkim/dkim.go

Calls 9

loadOrGenerateKeyMethod · 0.95
ForLookupFunction · 0.92
BoolMethod · 0.80
StringListMethod · 0.80
EnumMethod · 0.80
DurationMethod · 0.80
ProcessMethod · 0.80
StringMethod · 0.45
PrintfMethod · 0.45

Tested by

no test coverage detected