From 911bc57483bf5df4b367cda53d3a1a2551366d9f Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Mon, 23 Jan 2017 11:35:18 -0800 Subject: [PATCH] Update go-runc to abd8eada6a98acdf415d47a8d372dc314494c07f Signed-off-by: Michael Crosby --- .../crosbymichael/go-runc/console.go | 99 +++++++++++++++++++ .../github.com/crosbymichael/go-runc/runc.go | 12 +-- 2 files changed, 105 insertions(+), 6 deletions(-) create mode 100644 vendor/github.com/crosbymichael/go-runc/console.go diff --git a/vendor/github.com/crosbymichael/go-runc/console.go b/vendor/github.com/crosbymichael/go-runc/console.go new file mode 100644 index 0000000..63a7771 --- /dev/null +++ b/vendor/github.com/crosbymichael/go-runc/console.go @@ -0,0 +1,99 @@ +package runc + +import ( + "fmt" + "net" + "os" + + "github.com/docker/docker/pkg/term" + "github.com/opencontainers/runc/libcontainer/utils" +) + +// NewConsoleSocket creates a new unix socket at the provided path to accept a +// pty master created by runc for use by the container +func NewConsoleSocket(path string) (*ConsoleSocket, error) { + l, err := net.Listen("unix", path) + if err != nil { + return nil, err + } + return &ConsoleSocket{ + l: l, + path: path, + }, nil +} + +// ConsoleSocket is a unix socket that accepts the pty master created by runc +type ConsoleSocket struct { + path string + l net.Listener +} + +// Path returns the path to the unix socket on disk +func (c *ConsoleSocket) Path() string { + return c.path +} + +// ReceiveMaster blocks until the socket receives the pty master +func (c *ConsoleSocket) ReceiveMaster() (*Console, error) { + conn, err := c.l.Accept() + if err != nil { + return nil, err + } + defer conn.Close() + unix, ok := conn.(*net.UnixConn) + if !ok { + return nil, fmt.Errorf("received connection which was not a unix socket") + } + sock, err := unix.File() + if err != nil { + return nil, err + } + f, err := utils.RecvFd(sock) + if err != nil { + return nil, err + } + return &Console{ + master: f, + }, nil +} + +// Close closes the unix socket +func (c *ConsoleSocket) Close() error { + return c.l.Close() +} + +// WinSize specifies the console size +type WinSize struct { + // Width of the console + Width uint16 + // Height of the console + Height uint16 +} + +// Console is a pty master +type Console struct { + master *os.File +} + +// Read from the console +func (c *Console) Read(b []byte) (int, error) { + return c.master.Read(b) +} + +// Write writes to the console +func (c *Console) Write(b []byte) (int, error) { + return c.master.Write(b) +} + +// Resize the console +func (c *Console) Resize(ws WinSize) error { + return term.SetWinsize(c.master.Fd(), &term.Winsize{ + Width: ws.Width, + Height: ws.Height, + }) +} + +// Close the console +func (c *Console) Close() error { + return c.master.Close() +} diff --git a/vendor/github.com/crosbymichael/go-runc/runc.go b/vendor/github.com/crosbymichael/go-runc/runc.go index 5e23ab0..bb551f4 100644 --- a/vendor/github.com/crosbymichael/go-runc/runc.go +++ b/vendor/github.com/crosbymichael/go-runc/runc.go @@ -67,7 +67,7 @@ type CreateOpts struct { IO // PidFile is a path to where a pid file should be created PidFile string - ConsoleSocket string + ConsoleSocket *ConsoleSocket Detach bool NoPivot bool NoNewKeyring bool @@ -107,8 +107,8 @@ func (o *CreateOpts) args() (out []string) { if o.PidFile != "" { out = append(out, "--pid-file", o.PidFile) } - if o.ConsoleSocket != "" { - out = append(out, "--console-socket", o.ConsoleSocket) + if o.ConsoleSocket != nil { + out = append(out, "--console-socket", o.ConsoleSocket.Path()) } if o.NoPivot { out = append(out, "--no-pivot") @@ -147,7 +147,7 @@ type ExecOpts struct { Gid int Cwd string Tty bool - ConsoleSocket string + ConsoleSocket *ConsoleSocket Detach bool } @@ -156,8 +156,8 @@ func (o *ExecOpts) args() (out []string) { if o.Tty { out = append(out, "--tty") } - if o.ConsoleSocket != "" { - out = append(out, "--console-socket", o.ConsoleSocket) + if o.ConsoleSocket != nil { + out = append(out, "--console-socket", o.ConsoleSocket.Path()) } if o.Cwd != "" { out = append(out, "--cwd", o.Cwd)