diff --git a/api/client/client.go b/api/client/client.go index 38f02fa2eae00..4c94b7b4c267b 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -824,7 +824,7 @@ func (c *Client) GetAccessRequests(ctx context.Context, filter types.AccessReque var reqs []types.AccessRequest for { req, err := stream.Recv() - if err == io.EOF { + if errors.Is(err, io.EOF) { break } @@ -2802,7 +2802,7 @@ func (c *Client) GetActiveSessionTrackers(ctx context.Context) ([]types.SessionT for { session, err := stream.Recv() if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { break } @@ -2826,7 +2826,7 @@ func (c *Client) GetActiveSessionTrackersWithFilter(ctx context.Context, filter for { session, err := stream.Recv() if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { break } diff --git a/api/utils/sshutils/ssh.go b/api/utils/sshutils/ssh.go index 83fe646ab3cfc..89b488deecb55 100644 --- a/api/utils/sshutils/ssh.go +++ b/api/utils/sshutils/ssh.go @@ -21,6 +21,7 @@ package sshutils import ( "crypto" "crypto/subtle" + "errors" "io" "net" "regexp" @@ -73,7 +74,7 @@ func ParseKnownHosts(knownHosts [][]byte) ([]ssh.PublicKey, error) { for _, line := range knownHosts { for { _, _, publicKey, _, bytes, err := ssh.ParseKnownHosts(line) - if err == io.EOF { + if errors.Is(err, io.EOF) { break } else if err != nil { return nil, trace.Wrap(err, "failed parsing known hosts: %v; raw line: %q", err, line) diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index 6e84bae01bfb6..2a501e61ba2e4 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -19,6 +19,7 @@ package auth import ( "context" "crypto/tls" + "errors" "fmt" "io" "net" @@ -160,7 +161,7 @@ func (g *GRPCServer) SendKeepAlives(stream proto.AuthService_SendKeepAlivesServe return trace.Wrap(err) } keepAlive, err := stream.Recv() - if err == io.EOF { + if errors.Is(err, io.EOF) { g.Debugf("Connection closed.") return nil } @@ -218,7 +219,7 @@ func (g *GRPCServer) CreateAuditStream(stream proto.AuthService_CreateAuditStrea for { request, err := stream.Recv() - if err == io.EOF { + if errors.Is(err, io.EOF) { return nil } if err != nil { @@ -2070,7 +2071,7 @@ func (g *GRPCServer) MaintainSessionPresence(stream proto.AuthService_MaintainSe for { req, err := stream.Recv() - if err == io.EOF { + if errors.Is(err, io.EOF) { return nil } diff --git a/lib/client/session.go b/lib/client/session.go index 63936b0ea9a7d..522cae58dbec6 100644 --- a/lib/client/session.go +++ b/lib/client/session.go @@ -18,6 +18,7 @@ package client import ( "context" + "errors" "fmt" "io" "net" @@ -643,7 +644,7 @@ func handleNonPeerControls(mode types.SessionParticipantMode, term *terminal.Ter for { buf := make([]byte, 1) _, err := term.Stdin().Read(buf) - if err == io.EOF { + if errors.Is(err, io.EOF) { return } diff --git a/lib/config/configuration.go b/lib/config/configuration.go index a4634941e9df9..8764cae8ccd41 100644 --- a/lib/config/configuration.go +++ b/lib/config/configuration.go @@ -23,6 +23,7 @@ package config import ( "bufio" "crypto/x509" + "errors" "io" stdlog "log" "net" @@ -192,7 +193,7 @@ func ReadResources(filePath string) ([]types.Resource, error) { var raw services.UnknownResource err := decoder.Decode(&raw) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { break } return nil, trace.Wrap(err) diff --git a/lib/events/auditlog.go b/lib/events/auditlog.go index 0b6a18ca44bdd..8063530e425c7 100644 --- a/lib/events/auditlog.go +++ b/lib/events/auditlog.go @@ -22,6 +22,7 @@ import ( "compress/gzip" "context" "encoding/json" + "errors" "fmt" "io" "os" @@ -613,7 +614,7 @@ func (l *AuditLog) GetSessionChunk(namespace string, sid session.ID, offsetBytes for { out, err := l.getSessionChunk(namespace, sid, offsetBytes, maxBytes) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { return data, nil } return nil, trace.Wrap(err) diff --git a/lib/events/filesessions/fileasync.go b/lib/events/filesessions/fileasync.go index e58bc2e2ee117..b94c4aa663754 100644 --- a/lib/events/filesessions/fileasync.go +++ b/lib/events/filesessions/fileasync.go @@ -506,7 +506,7 @@ func (u *Uploader) upload(ctx context.Context, up *upload) error { for { event, err := up.reader.Read(ctx) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { break } return sessionError{err: trace.Wrap(err)} diff --git a/lib/events/playback.go b/lib/events/playback.go index 89cb9231d08d1..8d9231324c563 100644 --- a/lib/events/playback.go +++ b/lib/events/playback.go @@ -22,6 +22,7 @@ import ( "compress/gzip" "context" "encoding/binary" + "errors" "fmt" "io" "os" @@ -96,7 +97,7 @@ func Export(ctx context.Context, rs io.ReadSeeker, w io.Writer, exportFormat str for { event, err := protoReader.Read(ctx) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { return nil } return trace.Wrap(err) @@ -159,7 +160,7 @@ func (w *SSHPlaybackWriter) SessionEvents() ([]EventFields, error) { var f EventFields err := utils.FastUnmarshal(scanner.Bytes(), &f) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { return sessionEvents, nil } return nil, trace.Wrap(err) @@ -250,7 +251,7 @@ func (w *SSHPlaybackWriter) Write(ctx context.Context) error { for { event, err := w.reader.Read(ctx) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { return nil } return trace.Wrap(err) diff --git a/lib/events/stream.go b/lib/events/stream.go index dc779f5d68965..ae998d06cc967 100644 --- a/lib/events/stream.go +++ b/lib/events/stream.go @@ -1011,7 +1011,7 @@ func (r *ProtoReader) Read(ctx context.Context) (apievents.AuditEvent, error) { _, err := io.ReadFull(r.reader, r.sizeBytes[:Int64Size]) if err != nil { // reached the end of the stream - if err == io.EOF { + if errors.Is(err, io.EOF) { r.state = protoReaderStateEOF return nil, err } @@ -1112,7 +1112,7 @@ func (r *ProtoReader) ReadAll(ctx context.Context) ([]apievents.AuditEvent, erro for { event, err := r.Read(ctx) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { return events, nil } return nil, trace.Wrap(err) diff --git a/lib/kube/proxy/testing/kube_server/kube_mock.go b/lib/kube/proxy/testing/kube_server/kube_mock.go index 06c91ad3b7ddb..490c672818ed9 100644 --- a/lib/kube/proxy/testing/kube_server/kube_mock.go +++ b/lib/kube/proxy/testing/kube_server/kube_mock.go @@ -21,6 +21,7 @@ import ( "context" "crypto/tls" "encoding/json" + "errors" "fmt" "io" "net" @@ -213,7 +214,7 @@ func (s *KubeMockServer) exec(w http.ResponseWriter, req *http.Request, p httpro for { buffer = buffer[:cap(buffer)] n, err := proxy.stdinStream.Read(buffer) - if err == io.EOF && n == 0 { + if errors.Is(err, io.EOF) && n == 0 { break } else if err != nil && n == 0 { s.log.WithError(err).Errorf("unable to receive from stdin") diff --git a/lib/proxy/peer/conn.go b/lib/proxy/peer/conn.go index 0e7bf1bfde5a4..8524262c6bc03 100644 --- a/lib/proxy/peer/conn.go +++ b/lib/proxy/peer/conn.go @@ -16,6 +16,7 @@ package peer import ( "context" + "errors" "io" "net" "sync" @@ -69,7 +70,7 @@ func (c *streamConn) Read(b []byte) (n int, err error) { if len(c.rBytes) == 0 { frame, err := c.stream.Recv() - if err == io.EOF { + if errors.Is(err, io.EOF) { return 0, io.EOF } if err != nil { diff --git a/lib/srv/ctx.go b/lib/srv/ctx.go index 0882fcd67e8a3..12ed439833853 100644 --- a/lib/srv/ctx.go +++ b/lib/srv/ctx.go @@ -19,6 +19,7 @@ package srv import ( "context" "encoding/json" + "errors" "fmt" "io" "net" @@ -873,7 +874,7 @@ func (c *ServerContext) x11Ready() (bool, error) { // Wait for child process to send signal (1 byte) // or EOF if signal was already received. _, err := io.ReadFull(c.x11rdyr, make([]byte, 1)) - if err == io.EOF { + if errors.Is(err, io.EOF) { return true, nil } else if err != nil { return false, trace.Wrap(err) diff --git a/lib/srv/exec.go b/lib/srv/exec.go index 75e4c3c94d459..571a0485dfa5f 100644 --- a/lib/srv/exec.go +++ b/lib/srv/exec.go @@ -19,6 +19,7 @@ package srv import ( "bufio" "context" + "errors" "fmt" "io" "os" @@ -270,7 +271,7 @@ func waitForContinue(contfd *os.File) error { // won't be closed until the parent has placed it in a cgroup. buf := make([]byte, 1) _, err := contfd.Read(buf) - if err == io.EOF { + if errors.Is(err, io.EOF) { err = nil } waitCh <- err diff --git a/lib/srv/reexec.go b/lib/srv/reexec.go index 72c3b521df312..f9050aec5a97f 100644 --- a/lib/srv/reexec.go +++ b/lib/srv/reexec.go @@ -441,7 +441,7 @@ func waitForShell(termiantefd *os.File, cmd *exec.Cmd) error { // Wait for the terminate file descriptor to be closed. The FD will be closed when Teleport // parent process wants to terminate the remote command and all childs. _, err := termiantefd.Read(buf) - if err == io.EOF { + if errors.Is(err, io.EOF) { // Kill the shell process err = trace.Errorf("shell process has been killed: %w", cmd.Process.Kill()) } else { diff --git a/lib/sshutils/scp/scp.go b/lib/sshutils/scp/scp.go index c63771b218ea4..5aa3329c11a58 100644 --- a/lib/sshutils/scp/scp.go +++ b/lib/sshutils/scp/scp.go @@ -24,6 +24,7 @@ package scp import ( "bufio" + "errors" "fmt" "io" "os" @@ -415,7 +416,7 @@ func (cmd *command) serveSink(ch io.ReadWriter) error { for { n, err := ch.Read(b[:]) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { return nil } return trace.Wrap(err) diff --git a/lib/utils/archive_test.go b/lib/utils/archive_test.go index ccc5cbe6505cc..bd9e30a65934e 100644 --- a/lib/utils/archive_test.go +++ b/lib/utils/archive_test.go @@ -19,6 +19,7 @@ package utils import ( "archive/tar" "compress/gzip" + "errors" "io" "io/fs" "testing" @@ -102,7 +103,7 @@ func TestCompressAsTarGzArchive(t *testing.T) { tarReader := tar.NewReader(gzipReader) for { header, err := tarReader.Next() - if err == io.EOF { + if errors.Is(err, io.EOF) { break } require.NoError(t, err) diff --git a/lib/utils/jsontools.go b/lib/utils/jsontools.go index 13cde27bc7d8e..065fdf8aa9bc1 100644 --- a/lib/utils/jsontools.go +++ b/lib/utils/jsontools.go @@ -19,6 +19,7 @@ package utils import ( "bytes" "encoding/json" + "errors" "io" "reflect" "unicode" @@ -213,7 +214,7 @@ func ReadYAML(reader io.Reader) (interface{}, error) { var val interface{} err := decoder.Decode(&val) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { if len(values) == 0 { return nil, trace.BadParameter("no resources found, empty input?") } diff --git a/lib/utils/unpack.go b/lib/utils/unpack.go index c48947d4b56df..351a8ecd691c3 100644 --- a/lib/utils/unpack.go +++ b/lib/utils/unpack.go @@ -18,6 +18,7 @@ package utils import ( "archive/tar" + "errors" "io" "os" "path/filepath" @@ -38,7 +39,7 @@ func Extract(r io.Reader, dir string) error { for { header, err := tarball.Next() - if err == io.EOF { + if errors.Is(err, io.EOF) { break } else if err != nil { return trace.Wrap(err) diff --git a/lib/web/apiserver_test.go b/lib/web/apiserver_test.go index 1f94b42a71b0d..72f2289284efe 100644 --- a/lib/web/apiserver_test.go +++ b/lib/web/apiserver_test.go @@ -2978,7 +2978,7 @@ func TestSignMTLS(t *testing.T) { tarContentFileNames := []string{} for { header, err := tarReader.Next() - if err == io.EOF { + if errors.Is(err, io.EOF) { break } require.NoError(t, err) diff --git a/lib/web/terminal.go b/lib/web/terminal.go index fb341bd71440b..bd9911d2d3158 100644 --- a/lib/web/terminal.go +++ b/lib/web/terminal.go @@ -1102,7 +1102,7 @@ func (t *TerminalStream) Read(out []byte) (n int, err error) { if err != nil { // if the connection has closed, we must return io.EOF in order to abort // the websocket copy loop - if err == io.EOF || errors.Is(err, net.ErrClosed) || + if errors.Is(err, io.EOF) || errors.Is(err, net.ErrClosed) || websocket.IsCloseError(err, websocket.CloseAbnormalClosure, websocket.CloseGoingAway, websocket.CloseNormalClosure) { return 0, io.EOF } diff --git a/tool/tctl/common/resource_command.go b/tool/tctl/common/resource_command.go index c9fddcb2eda3c..0c91d1ff2380d 100644 --- a/tool/tctl/common/resource_command.go +++ b/tool/tctl/common/resource_command.go @@ -18,6 +18,7 @@ package common import ( "context" + "errors" "fmt" "io" "os" @@ -266,7 +267,7 @@ func (rc *ResourceCommand) Create(ctx context.Context, client auth.ClientI) (err var raw services.UnknownResource err := decoder.Decode(&raw) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { if count == 0 { return trace.BadParameter("no resources found, empty input?") } diff --git a/tool/tctl/sso/tester/command.go b/tool/tctl/sso/tester/command.go index afcbad48b79c8..5508b99d3db9d 100644 --- a/tool/tctl/sso/tester/command.go +++ b/tool/tctl/sso/tester/command.go @@ -16,6 +16,7 @@ package tester import ( "context" + "errors" "fmt" "io" "os" @@ -110,7 +111,7 @@ func (cmd *SSOTestCommand) ssoTestCommand(ctx context.Context, c auth.ClientI) e var raw services.UnknownResource err := decoder.Decode(&raw) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { return nil } return trace.Wrap(err, "Unable to load resource. Make sure the file is in correct format.")