From d4cf276a923345c90b8193a6c4cd5a6f751c74b7 Mon Sep 17 00:00:00 2001 From: "Justin Terry (VM)" Date: Fri, 17 Aug 2018 12:48:56 -0700 Subject: [PATCH 1/2] Break apart NewPipeIO to windows/unix Moves NewPipeIO to GOOS specific to avoid setting the unix.Fchown flags that dont apply on windows. Signed-off-by: Justin Terry (VM) --- io.go | 48 ----------------------------------- io_unix.go | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++ io_windows.go | 55 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 48 deletions(-) create mode 100644 io_unix.go create mode 100644 io_windows.go diff --git a/io.go b/io.go index 1b59a7e..23c8f81 100644 --- a/io.go +++ b/io.go @@ -20,9 +20,6 @@ import ( "io" "os" "os/exec" - - "github.com/pkg/errors" - "golang.org/x/sys/unix" ) type IO interface { @@ -37,51 +34,6 @@ type StartCloser interface { CloseAfterStart() error } -// NewPipeIO creates pipe pairs to be used with runc -func NewPipeIO(uid, gid int) (i IO, err error) { - var pipes []*pipe - // cleanup in case of an error - defer func() { - if err != nil { - for _, p := range pipes { - p.Close() - } - } - }() - stdin, err := newPipe() - if err != nil { - return nil, err - } - pipes = append(pipes, stdin) - if err = unix.Fchown(int(stdin.r.Fd()), uid, gid); err != nil { - return nil, errors.Wrap(err, "failed to chown stdin") - } - - stdout, err := newPipe() - if err != nil { - return nil, err - } - pipes = append(pipes, stdout) - if err = unix.Fchown(int(stdout.w.Fd()), uid, gid); err != nil { - return nil, errors.Wrap(err, "failed to chown stdout") - } - - stderr, err := newPipe() - if err != nil { - return nil, err - } - pipes = append(pipes, stderr) - if err = unix.Fchown(int(stderr.w.Fd()), uid, gid); err != nil { - return nil, errors.Wrap(err, "failed to chown stderr") - } - - return &pipeIO{ - in: stdin, - out: stdout, - err: stderr, - }, nil -} - func newPipe() (*pipe, error) { r, w, err := os.Pipe() if err != nil { diff --git a/io_unix.go b/io_unix.go new file mode 100644 index 0000000..e0420ea --- /dev/null +++ b/io_unix.go @@ -0,0 +1,69 @@ +// +build !windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package runc + +import ( + "github.com/pkg/errors" + "golang.org/x/sys/unix" +) + +// NewPipeIO creates pipe pairs to be used with runc +func NewPipeIO(uid, gid int) (i IO, err error) { + var pipes []*pipe + // cleanup in case of an error + defer func() { + if err != nil { + for _, p := range pipes { + p.Close() + } + } + }() + stdin, err := newPipe() + if err != nil { + return nil, err + } + pipes = append(pipes, stdin) + if err = unix.Fchown(int(stdin.r.Fd()), uid, gid); err != nil { + return nil, errors.Wrap(err, "failed to chown stdin") + } + + stdout, err := newPipe() + if err != nil { + return nil, err + } + pipes = append(pipes, stdout) + if err = unix.Fchown(int(stdout.w.Fd()), uid, gid); err != nil { + return nil, errors.Wrap(err, "failed to chown stdout") + } + + stderr, err := newPipe() + if err != nil { + return nil, err + } + pipes = append(pipes, stderr) + if err = unix.Fchown(int(stderr.w.Fd()), uid, gid); err != nil { + return nil, errors.Wrap(err, "failed to chown stderr") + } + + return &pipeIO{ + in: stdin, + out: stdout, + err: stderr, + }, nil +} diff --git a/io_windows.go b/io_windows.go new file mode 100644 index 0000000..4ac557e --- /dev/null +++ b/io_windows.go @@ -0,0 +1,55 @@ +// +build windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package runc + +// NewPipeIO creates pipe pairs to be used with runc +func NewPipeIO() (i IO, err error) { + var pipes []*pipe + // cleanup in case of an error + defer func() { + if err != nil { + for _, p := range pipes { + p.Close() + } + } + }() + stdin, err := newPipe() + if err != nil { + return nil, err + } + pipes = append(pipes, stdin) + + stdout, err := newPipe() + if err != nil { + return nil, err + } + pipes = append(pipes, stdout) + + stderr, err := newPipe() + if err != nil { + return nil, err + } + pipes = append(pipes, stderr) + + return &pipeIO{ + in: stdin, + out: stdout, + err: stderr, + }, nil +} From cc5515fbf73bca48de5b6763bbc77f227e6084a3 Mon Sep 17 00:00:00 2001 From: "Justin Terry (VM)" Date: Fri, 17 Aug 2018 13:08:26 -0700 Subject: [PATCH 2/2] Make console.go +build !windows Signed-off-by: Justin Terry (VM) --- console.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/console.go b/console.go index 09973e9..ff223e4 100644 --- a/console.go +++ b/console.go @@ -1,3 +1,5 @@ +// +build !windows + /* Copyright The containerd Authors.