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

Function parseRejectDirective

internal/msgpipeline/config.go:318–357  ·  view source on GitHub ↗
(node config.Node)

Source from the content-addressed store, hash-verified

316}
317
318func parseRejectDirective(node config.Node) (*exterrors.SMTPError, error) {
319 code := 554
320 enchCode := exterrors.EnhancedCode{5, 7, 0}
321 msg := "Message rejected due to a local policy"
322 var err error
323 switch len(node.Args) {
324 case 3:
325 msg = node.Args[2]
326 if msg == "" {
327 return nil, config.NodeErr(node, "message can't be empty")
328 }
329 fallthrough
330 case 2:
331 enchCode, err = parseEnhancedCode(node.Args[1])
332 if err != nil {
333 return nil, config.NodeErr(node, "%v", err)
334 }
335 if enchCode[0] != 4 && enchCode[0] != 5 {
336 return nil, config.NodeErr(node, "enhanced code should use either 4 or 5 as a first number")
337 }
338 fallthrough
339 case 1:
340 code, err = strconv.Atoi(node.Args[0])
341 if err != nil {
342 return nil, config.NodeErr(node, "invalid error code integer: %v", err)
343 }
344 if (code/100) != 4 && (code/100) != 5 {
345 return nil, config.NodeErr(node, "error code should start with either 4 or 5")
346 }
347 case 0:
348 default:
349 return nil, config.NodeErr(node, "invalid count of arguments")
350 }
351 return &exterrors.SMTPError{
352 Code: code,
353 EnhancedCode: enchCode,
354 Message: msg,
355 Reason: "reject directive used",
356 }, nil
357}
358
359func parseEnhancedCode(s string) (exterrors.EnhancedCode, error) {
360 parts := strings.Split(s, ".")

Callers 1

parseMsgPipelineRcptCfgFunction · 0.85

Calls 2

NodeErrFunction · 0.92
parseEnhancedCodeFunction · 0.70

Tested by

no test coverage detected