(cmdName string, args []string, stdin io.Reader)
| 211 | } |
| 212 | |
| 213 | func (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 |
no test coverage detected