diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-06-19 12:57:57 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-19 12:57:57 -0400 |
commit | ed91524ae43d2729d60834596b4bba4bb78e4d8d (patch) | |
tree | 424c94487edd43d69dede090a886f77c658a08a3 /pkg | |
parent | 1a2eb3e615fa05d77359295b870d7b3a0e4a5ed3 (diff) | |
parent | bda4a6982f66107b4ca15ac815e86f2c121f9003 (diff) | |
download | podman-ed91524ae43d2729d60834596b4bba4bb78e4d8d.tar.gz podman-ed91524ae43d2729d60834596b4bba4bb78e4d8d.tar.bz2 podman-ed91524ae43d2729d60834596b4bba4bb78e4d8d.zip |
Merge pull request #6637 from jwhonce/issues/6574
Correct logic for demux'ing channels
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/bindings/containers/attach.go | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/pkg/bindings/containers/attach.go b/pkg/bindings/containers/attach.go index 44c7f4002..22ab2d72d 100644 --- a/pkg/bindings/containers/attach.go +++ b/pkg/bindings/containers/attach.go @@ -178,25 +178,28 @@ func Attach(ctx context.Context, nameOrID string, detachKeys *string, logs, stre } switch { - case fd == 0 && isSet.stdout: - _, err := stdout.Write(frame[0:l]) - if err != nil { - return err + case fd == 0: + if isSet.stdout { + if _, err := stdout.Write(frame[0:l]); err != nil { + return err + } } - case fd == 1 && isSet.stdout: - _, err := stdout.Write(frame[0:l]) - if err != nil { - return err + case fd == 1: + if isSet.stdout { + if _, err := stdout.Write(frame[0:l]); err != nil { + return err + } } - case fd == 2 && isSet.stderr: - _, err := stderr.Write(frame[0:l]) - if err != nil { - return err + case fd == 2: + if isSet.stderr { + if _, err := stderr.Write(frame[0:l]); err != nil { + return err + } } case fd == 3: return fmt.Errorf("error from service from stream: %s", frame) default: - return fmt.Errorf("unrecognized channel in header: %d, 0-3 supported", fd) + return fmt.Errorf("unrecognized channel '%d' in header, 0-3 supported", fd) } } } @@ -453,27 +456,30 @@ func ExecStartAndAttach(ctx context.Context, sessionID string, streams *define.A } switch { - case fd == 0 && streams.AttachOutput: - _, err := streams.OutputStream.Write(frame[0:l]) - if err != nil { - return err + case fd == 0: + if streams.AttachOutput { + if _, err := streams.OutputStream.Write(frame[0:l]); err != nil { + return err + } } - case fd == 1 && streams.AttachInput: - // Write STDIN to STDOUT (echoing characters - // typed by another attach session) - _, err := streams.OutputStream.Write(frame[0:l]) - if err != nil { - return err + case fd == 1: + 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 == 2 && streams.AttachError: - _, err := streams.ErrorStream.Write(frame[0:l]) - if err != nil { - return err + case fd == 2: + if streams.AttachError { + if _, err := streams.ErrorStream.Write(frame[0:l]); err != nil { + return err + } } case fd == 3: return fmt.Errorf("error from service from stream: %s", frame) default: - return fmt.Errorf("unrecognized channel in header: %d, 0-3 supported", fd) + return fmt.Errorf("unrecognized channel '%d' in header, 0-3 supported", fd) } } } |