Merge pull request from wking/sane-terminal-for-forwarding-only

libcontainer/console_linux.go: Make SaneTerminal public
This commit is contained in:
Mrunal Patel 2017-06-20 11:34:33 -07:00 committed by GitHub
commit 035b57895d
4 changed files with 10 additions and 5 deletions
contrib/cmd/recvtty
libcontainer
tty.go

View File

@ -24,6 +24,7 @@ import (
"os"
"strings"
"github.com/opencontainers/runc/libcontainer"
"github.com/opencontainers/runc/libcontainer/utils"
"github.com/urfave/cli"
)
@ -100,6 +101,9 @@ func handleSingle(path string) error {
if err != nil {
return err
}
if err = libcontainer.SaneTerminal(master); err != nil {
return err
}
// Copy from our stdio to the master fd.
quitChan := make(chan struct{})

View File

@ -21,9 +21,6 @@ func newConsole() (Console, error) {
if err != nil {
return nil, err
}
if err := saneTerminal(master); err != nil {
return nil, err
}
console, err := ptsname(master)
if err != nil {
return nil, err
@ -133,12 +130,12 @@ func ptsname(f *os.File) (string, error) {
return fmt.Sprintf("/dev/pts/%d", n), nil
}
// saneTerminal sets the necessary tty_ioctl(4)s to ensure that a pty pair
// SaneTerminal sets the necessary tty_ioctl(4)s to ensure that a pty pair
// created by us acts normally. In particular, a not-very-well-known default of
// Linux unix98 ptys is that they have +onlcr by default. While this isn't a
// problem for terminal emulators, because we relay data from the terminal we
// also relay that funky line discipline.
func saneTerminal(terminal *os.File) error {
func SaneTerminal(terminal *os.File) error {
// Go doesn't have a wrapper for any of the termios ioctls.
var termios unix.Termios

View File

@ -300,6 +300,7 @@ func TestExecInTTY(t *testing.T) {
err: err,
}
}
libcontainer.SaneTerminal(f)
dc <- &cdata{
c: libcontainer.ConsoleFromFile(f),
}

3
tty.go
View File

@ -74,6 +74,9 @@ func (t *tty) recvtty(process *libcontainer.Process, socket *os.File) error {
if err != nil {
return err
}
if err = libcontainer.SaneTerminal(f); err != nil {
return err
}
console := libcontainer.ConsoleFromFile(f)
go io.Copy(console, os.Stdin)
t.wg.Add(1)