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

Method run

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

Source from the content-addressed store, hash-verified

159}
160
161func (c *Check) run(cmdName string, args []string, stdin io.Reader) (string, []string, error) {
162 c.log.Debugln("running", cmdName, args)
163
164 cmd := exec.Command(cmdName, args...)
165 cmd.Stdin = stdin
166 stdout, err := cmd.StdoutPipe()
167 if err != nil {
168 return "", nil, err
169 }
170
171 if err := cmd.Start(); err != nil {
172 return "", nil, err
173 }
174
175 scnr := bufio.NewScanner(stdout)
176 var (
177 folder string
178 flags []string
179 )
180 if scnr.Scan() {
181 folder = scnr.Text()
182 }
183 for scnr.Scan() {
184 flags = append(flags, scnr.Text())
185 }
186 if err := scnr.Err(); err != nil {
187 return "", nil, err
188 }
189
190 err = cmd.Wait()
191 if err != nil {
192 if _, ok := err.(*exec.ExitError); !ok {
193 // If that's not ExitError, the process may still be running. We do
194 // not want this.
195 if err := cmd.Process.Signal(os.Interrupt); err != nil {
196 c.log.Error("failed to kill process", err)
197 }
198 }
199 return "", nil, err
200 }
201
202 c.log.Debugf("folder: %s, extra flags: %v", folder, flags)
203
204 return folder, flags, nil
205}
206
207func init() {
208 modules.Register(modName, New)

Callers 1

IMAPFilterMethod · 0.95

Implementers 10

Checkinternal/testutils/check.go
Checkinternal/check/skeleton.go
statelessCheckinternal/check/stateless_check.go
Checkinternal/check/spf/spf.go
DNSBLinternal/check/dnsbl/dnsbl.go
Checkinternal/check/rspamd/rspamd.go
Checkinternal/check/command/command.go
Checkinternal/check/dkim/dkim.go
Checkinternal/check/milter/milter.go
Checkinternal/check/authorize_sender/author

Calls 5

DebuglnMethod · 0.80
ErrMethod · 0.80
DebugfMethod · 0.80
StartMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected