diff options
author | Matthew Heon <matthew.heon@pm.me> | 2020-07-10 16:17:34 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2020-07-22 14:41:17 -0400 |
commit | ce829a2a8436cc621c0a9ea66b5856df02473212 (patch) | |
tree | c4e5aa9e5aa3c9120b31afd7bc78d7ce47f7884f | |
parent | 0630d19b34c6cea674fc5f830fe308b8a1206259 (diff) | |
download | podman-ce829a2a8436cc621c0a9ea66b5856df02473212.tar.gz podman-ce829a2a8436cc621c0a9ea66b5856df02473212.tar.bz2 podman-ce829a2a8436cc621c0a9ea66b5856df02473212.zip |
Correctly print STDOUT on non-terminal remote exec
I confused STDIN and STDOUT's file descriptors (it's 0 and 1, I
thought they were 1 and 0). As such, we were looking at whether
we wanted to print STDIN when we looked to print STDOUT. This
bool was set when `-i` was set in at the `podman exec` command
line, which masked the problem when it was set.
Fixes #6890
Fixes #6891
Fixes #6892
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
-rw-r--r-- | pkg/bindings/containers/attach.go | 8 | ||||
-rw-r--r-- | test/e2e/exec_test.go | 1 |
2 files changed, 4 insertions, 5 deletions
diff --git a/pkg/bindings/containers/attach.go b/pkg/bindings/containers/attach.go index 077bb244f..297563688 100644 --- a/pkg/bindings/containers/attach.go +++ b/pkg/bindings/containers/attach.go @@ -457,15 +457,15 @@ func ExecStartAndAttach(ctx context.Context, sessionID string, streams *define.A switch { case fd == 0: - if streams.AttachOutput { + if streams.AttachInput { + // Write STDIN to STDOUT (echoing characters + // typed by another attach session) if _, err := streams.OutputStream.Write(frame[0:l]); err != nil { return err } } case fd == 1: - if streams.AttachInput { - // Write STDIN to STDOUT (echoing characters - // typed by another attach session) + if streams.AttachOutput { if _, err := streams.OutputStream.Write(frame[0:l]); err != nil { return err } diff --git a/test/e2e/exec_test.go b/test/e2e/exec_test.go index 5a519413e..736376207 100644 --- a/test/e2e/exec_test.go +++ b/test/e2e/exec_test.go @@ -98,7 +98,6 @@ var _ = Describe("Podman exec", func() { It("podman exec os.Setenv env", func() { // remote doesn't properly interpret os.Setenv - SkipIfRemote() setup := podmanTest.RunTopContainer("test1") setup.WaitWithDefaultTimeout() Expect(setup.ExitCode()).To(Equal(0)) |