MCPcopy Index your code
hub / github.com/foxcpp/maddy / run

Method run

internal/check/command/command.go:213–283  ·  view source on GitHub ↗
(cmdName string, args []string, stdin io.Reader)

Source from the content-addressed store, hash-verified

211}
212
213func (s *state) run(cmdName string, args []string, stdin io.Reader) module.CheckResult {
214 cmd := exec.Command(cmdName, args...)
215 cmd.Stdin = stdin
216 stdout, err := cmd.StdoutPipe()
217 if err != nil {
218 return module.CheckResult{
219 Reason: &exterrors.SMTPError{
220 Code: 450,
221 Message: "Internal server error",
222 CheckName: "command",
223 Err: err,
224 Misc: map[string]interface{}{
225 "cmd": cmd.String(),
226 },
227 },
228 Reject: true,
229 }
230 }
231
232 if err := cmd.Start(); err != nil {
233 return module.CheckResult{
234 Reason: &exterrors.SMTPError{
235 Code: 450,
236 Message: "Internal server error",
237 CheckName: "command",
238 Err: err,
239 Misc: map[string]interface{}{
240 "cmd": cmd.String(),
241 },
242 },
243 Reject: true,
244 }
245 }
246
247 bufOut := bufio.NewReader(stdout)
248 hdr, err := textproto.ReadHeader(bufOut)
249 if err != nil && !errors.Is(err, io.EOF) {
250 if err := cmd.Process.Signal(os.Interrupt); err != nil {
251 s.log.Error("failed to kill process", err)
252 }
253
254 return module.CheckResult{
255 Reason: &exterrors.SMTPError{
256 Code: 450,
257 Message: "Internal server error",
258 CheckName: "command",
259 Err: err,
260 Misc: map[string]interface{}{
261 "cmd": cmd.String(),
262 },
263 },
264 Reject: true,
265 }
266 }
267
268 res := module.CheckResult{}
269 res.Header = hdr
270

Callers 5

CheckConnectionMethod · 0.95
CheckSenderMethod · 0.95
CheckRcptMethod · 0.95
CheckBodyMethod · 0.95
mainFunction · 0.45

Calls 4

errorResMethod · 0.95
StartMethod · 0.65
StringMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected