(inlineArgs []string, cfg *config.Map)
| 132 | } |
| 133 | |
| 134 | func (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) |
nothing calls this directly
no test coverage detected