sshpiper/libplugin/ioconn/cmd.go
2022-07-04 16:49:50 +00:00

48 lines
655 B
Go

package ioconn
import (
"io"
"net"
"os/exec"
)
type cmdconn struct {
conn
cmd *exec.Cmd
}
func (c *cmdconn) Close() error {
err := c.conn.Close()
if c.cmd.Process != nil {
return c.cmd.Process.Kill()
}
return err
}
func DialCmd(cmd *exec.Cmd) (net.Conn, io.ReadCloser, error) {
in, err := cmd.StdoutPipe()
if err != nil {
return nil, nil, err
}
out, err := cmd.StdinPipe()
if err != nil {
return nil, nil, err
}
stderr, err := cmd.StderrPipe()
if err != nil {
return nil, nil, err
}
if err := cmd.Start(); err != nil {
return nil, nil, err
}
return &cmdconn{
conn: *dial(in, out),
cmd: cmd,
}, stderr, nil
}