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

Function parseMsgPipelineSrcCfg

internal/msgpipeline/config.go:160–256  ·  view source on GitHub ↗
(globals map[string]interface{}, nodes []config.Node)

Source from the content-addressed store, hash-verified

158}
159
160func parseMsgPipelineSrcCfg(globals map[string]interface{}, nodes []config.Node) (sourceBlock, error) {
161 src := sourceBlock{
162 perRcpt: map[string]*rcptBlock{},
163 }
164 var defaultRcptRaw []config.Node
165 var othersRaw []config.Node
166 for _, node := range nodes {
167 switch node.Name {
168 case "check":
169 checks, err := parseChecksGroup(globals, node)
170 if err != nil {
171 return sourceBlock{}, err
172 }
173
174 src.checks = append(src.checks, checks...)
175 case "modify":
176 modifiers, err := parseModifiersGroup(globals, node)
177 if err != nil {
178 return sourceBlock{}, err
179 }
180
181 src.modifiers.Modifiers = append(src.modifiers.Modifiers, modifiers.Modifiers...)
182 case "destination_in":
183 var tbl module.Table
184 if err := modconfig.ModuleFromNode("table", node.Args, config.Node{}, globals, &tbl); err != nil {
185 return sourceBlock{}, err
186 }
187 rcptBlock, err := parseMsgPipelineRcptCfg(globals, node.Children)
188 if err != nil {
189 return sourceBlock{}, err
190 }
191 src.rcptIn = append(src.rcptIn, rcptIn{
192 t: tbl,
193 block: rcptBlock,
194 })
195 case "destination":
196 rcptBlock, err := parseMsgPipelineRcptCfg(globals, node.Children)
197 if err != nil {
198 return sourceBlock{}, err
199 }
200
201 if len(node.Args) == 0 {
202 return sourceBlock{}, config.NodeErr(node, "expected at least one destination match rule")
203 }
204
205 for _, rule := range node.Args {
206 if strings.Contains(rule, "@") {
207 rule, err = address.ForLookup(rule)
208 } else {
209 rule, err = dns.ForLookup(rule)
210 }
211 if err != nil {
212 return sourceBlock{}, config.NodeErr(node, "invalid destination match rule: %v: %v", rule, err)
213 }
214
215 if !validMatchRule(rule) {
216 return sourceBlock{}, config.NodeErr(node, "invalid destination match rule: %v", rule)
217 }

Callers 1

parseMsgPipelineRootCfgFunction · 0.85

Calls 7

NodeErrFunction · 0.92
ForLookupFunction · 0.92
ForLookupFunction · 0.92
parseChecksGroupFunction · 0.85
parseModifiersGroupFunction · 0.85
parseMsgPipelineRcptCfgFunction · 0.85
validMatchRuleFunction · 0.85

Tested by

no test coverage detected