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

Function parseResponseRule

internal/check/dnsbl/dnsbl.go:197–233  ·  view source on GitHub ↗
(node config.Node)

Source from the content-addressed store, hash-verified

195}
196
197func parseResponseRule(node config.Node) (ResponseRule, error) {
198 var rule ResponseRule
199
200 if len(node.Args) == 0 {
201 return rule, config.NodeErr(node, "response block requires at least one IP address or CIDR as argument")
202 }
203
204 // Parse IP addresses/CIDRs from arguments
205 for _, arg := range node.Args {
206 // If there is no / - it is a plain IP address, append '/32' or '/128'
207 resp := arg
208 if !strings.Contains(resp, "/") {
209 // Check if it's IPv6 to determine the mask
210 if strings.Contains(resp, ":") {
211 resp += "/128"
212 } else {
213 resp += "/32"
214 }
215 }
216
217 _, ipNet, err := net.ParseCIDR(resp)
218 if err != nil {
219 return rule, config.NodeErr(node, "invalid IP address or CIDR: %s: %v", arg, err)
220 }
221 rule.Networks = append(rule.Networks, *ipNet)
222 }
223
224 // Parse directives within the response block
225 cfg := config.NewMap(nil, node)
226 cfg.Int("score", false, true, 0, &rule.Score)
227 cfg.String("message", false, false, "", &rule.Message)
228 if _, err := cfg.Process(); err != nil {
229 return rule, err
230 }
231
232 return rule, nil
233}
234
235func (bl *DNSBL) testList(listCfg List) {
236 // Check RFC 5782 Section 5 requirements.

Callers 1

readListCfgMethod · 0.85

Calls 5

IntMethod · 0.95
StringMethod · 0.95
ProcessMethod · 0.95
NodeErrFunction · 0.92
NewMapFunction · 0.92

Tested by

no test coverage detected