diff options
Diffstat (limited to 'internal')
25 files changed, 138 insertions, 113 deletions
diff --git a/internal/clients/baseclient.go b/internal/clients/baseclient.go index 3025f72..013f2f2 100644 --- a/internal/clients/baseclient.go +++ b/internal/clients/baseclient.go @@ -20,8 +20,6 @@ type baseClient struct { config.Args // To display client side stats stats *stats - // List of remote servers to connect to. - servers []string // We have one connection per remote server. connections []connectors.Connector // SSH auth methods to use to connect to the remote servers. diff --git a/internal/clients/connectors/serverconnection.go b/internal/clients/connectors/serverconnection.go index aeb2a41..5c3d455 100644 --- a/internal/clients/connectors/serverconnection.go +++ b/internal/clients/connectors/serverconnection.go @@ -172,25 +172,31 @@ func (c *ServerConnection) handle(ctx context.Context, cancel context.CancelFunc } go func() { - io.Copy(stdinPipe, c.handler) - cancel() + defer cancel() + if _, err := io.Copy(stdinPipe, c.handler); err != nil { + dlog.Client.Trace(err) + } }() go func() { - io.Copy(c.handler, stdoutPipe) - cancel() + defer cancel() + if _, err := io.Copy(c.handler, stdoutPipe); err != nil { + dlog.Client.Trace(err) + } }() go func() { + defer cancel() select { case <-c.handler.Done(): case <-ctx.Done(): } - cancel() }() // Send all commands to client. for _, command := range c.commands { dlog.Client.Debug(command) - c.handler.SendMessage(command) + if err := c.handler.SendMessage(command); err != nil { + dlog.Client.Debug(err) + } } if !c.throttlingDone { diff --git a/internal/clients/connectors/serverless.go b/internal/clients/connectors/serverless.go index 431247a..631186a 100644 --- a/internal/clients/connectors/serverless.go +++ b/internal/clients/connectors/serverless.go @@ -83,29 +83,35 @@ func (s *Serverless) handle(ctx context.Context, cancel context.CancelFunc) erro } go func() { - io.Copy(serverHandler, s.handler) + defer terminate() + if _, err := io.Copy(serverHandler, s.handler); err != nil { + dlog.Client.Trace(err) + } dlog.Client.Trace("io.Copy(serverHandler, s.handler) => done") - terminate() }() go func() { - io.Copy(s.handler, serverHandler) + defer terminate() + if _, err := io.Copy(s.handler, serverHandler); err != nil { + dlog.Client.Trace(err) + } dlog.Client.Trace("io.Copy(s.handler, serverHandler) => done") - terminate() }() go func() { + defer terminate() select { case <-s.handler.Done(): dlog.Client.Trace("<-s.handler.Done()") case <-ctx.Done(): dlog.Client.Trace("<-ctx.Done()") } - terminate() }() // Send all commands to client. for _, command := range s.commands { dlog.Client.Debug("Sending command to serverless server", command) - s.handler.SendMessage(command) + if err := s.handler.SendMessage(command); err != nil { + dlog.Client.Debug(err) + } } <-ctx.Done() diff --git a/internal/clients/maprclient.go b/internal/clients/maprclient.go index 6362028..2bc66a4 100644 --- a/internal/clients/maprclient.go +++ b/internal/clients/maprclient.go @@ -82,7 +82,7 @@ func NewMaprClient(args config.Args, maprClientMode MaprClientMode) (*MaprClient case "", ".": c.RegexStr = "." case "*": - c.RegexStr = fmt.Sprintf("\\|MAPREDUCE:\\|") + c.RegexStr = "\\|MAPREDUCE:\\|" default: c.RegexStr = fmt.Sprintf("\\|MAPREDUCE:%s\\|", c.query.Table) } diff --git a/internal/clients/stats.go b/internal/clients/stats.go index 2da3cf7..7a6643b 100644 --- a/internal/clients/stats.go +++ b/internal/clients/stats.go @@ -89,7 +89,7 @@ func (s *stats) printStatsDueInterrupt(messages []string) { )) continue } - fmt.Println(fmt.Sprintf(" %s", message)) + fmt.Printf(" %s\n", message) } time.Sleep(time.Second * time.Duration(config.InterruptTimeoutS)) dlog.Client.Resume() @@ -128,12 +128,6 @@ func (s *stats) statsLine(connected, newConnections int, throttle int) string { return sb.String() } -func (s *stats) numConnected() int { - s.mutex.Lock() - defer s.mutex.Unlock() - return s.connected -} - func percentOf(total float64, value float64) float64 { if total == 0 || total == value { return 100 diff --git a/internal/config/initializer.go b/internal/config/initializer.go index 9724902..9c3bf64 100644 --- a/internal/config/initializer.go +++ b/internal/config/initializer.go @@ -4,7 +4,7 @@ import ( "encoding/json" "flag" "fmt" - "io/ioutil" + "io" "os" "strings" @@ -34,8 +34,11 @@ func (in *initializer) parseConfig(args *Args) error { paths = append(paths, fmt.Sprintf("%s/.config/dtail/dtail.conf", homeDir)) paths = append(paths, fmt.Sprintf("%s/.dtail.conf", homeDir)) for _, configPath := range paths { - if _, err := os.Stat(configPath); !os.IsNotExist(err) { - in.parseSpecificConfig(configPath) + if _, err := os.Stat(configPath); os.IsNotExist(err) { + continue + } + if err := in.parseSpecificConfig(configPath); err != nil { + return err } } } @@ -46,17 +49,17 @@ func (in *initializer) parseConfig(args *Args) error { func (in *initializer) parseSpecificConfig(configFile string) error { fd, err := os.Open(configFile) if err != nil { - return fmt.Errorf("Unable to read config file: %v", err) + return fmt.Errorf("Unable to read config file: %w", err) } defer fd.Close() - cfgBytes, err := ioutil.ReadAll(fd) + cfgBytes, err := io.ReadAll(fd) if err != nil { - return fmt.Errorf("Unable to read config file %s: %v", configFile, err) + return fmt.Errorf("Unable to read config file %s: %w", configFile, err) } if err := json.Unmarshal([]byte(cfgBytes), in); err != nil { - return fmt.Errorf("Unable to parse config file %s: %v", configFile, err) + return fmt.Errorf("Unable to parse config file %s: %w", configFile, err) } return nil @@ -116,7 +119,9 @@ func (in *initializer) setupConfig(sourceCb transformCb, args *Args, } setupLogDirectory(in) - sourceCb(in, args, additionalArgs) + if err := sourceCb(in, args, additionalArgs); err != nil { + return err + } if args.Plain { setupPlainMode(in, args) } diff --git a/internal/io/dlog/dlog.go b/internal/io/dlog/dlog.go index c5ab8f8..258fb68 100644 --- a/internal/io/dlog/dlog.go +++ b/internal/io/dlog/dlog.go @@ -3,7 +3,6 @@ package dlog import ( "context" "fmt" - "io/ioutil" "os" "path/filepath" "runtime" @@ -225,14 +224,14 @@ func (d *DLog) Mapreduce(table string, data map[string]interface{}) string { // level|date-time|process|caller|cpus|goroutines|cgocalls|loadavg|uptime|MAPREDUCE:TABLE|key=value|... var loadAvg string - if loadAvgBytes, err := ioutil.ReadFile("/proc/loadavg"); err == nil { + if loadAvgBytes, err := os.ReadFile("/proc/loadavg"); err == nil { tmp := string(loadAvgBytes) s := strings.SplitN(tmp, " ", 2) loadAvg = s[0] } var uptime string - if uptimeBytes, err := ioutil.ReadFile("/proc/uptime"); err == nil { + if uptimeBytes, err := os.ReadFile("/proc/uptime"); err == nil { tmp := string(uptimeBytes) s := strings.SplitN(tmp, ".", 2) i, _ := strconv.ParseInt(s[0], 10, 64) diff --git a/internal/io/dlog/loggers/file.go b/internal/io/dlog/loggers/file.go index 6a09353..8e567bc 100644 --- a/internal/io/dlog/loggers/file.go +++ b/internal/io/dlog/loggers/file.go @@ -12,8 +12,6 @@ import ( "github.com/mimecast/dtail/internal/config" ) -type fileWriter struct{} - type fileMessageBuf struct { now time.Time message string @@ -124,9 +122,10 @@ func (f *file) write(m *fileMessageBuf) { writer = f.getWriter(f.strategy.FileBase) } - writer.WriteString(m.message) + // Don't report any error, we won't be able to log it anyway! + _, _ = writer.WriteString(m.message) if m.nl { - writer.WriteByte('\n') + _ = writer.WriteByte('\n') } } diff --git a/internal/io/dlog/loggers/stdout.go b/internal/io/dlog/loggers/stdout.go index ef30855..b024243 100644 --- a/internal/io/dlog/loggers/stdout.go +++ b/internal/io/dlog/loggers/stdout.go @@ -69,4 +69,4 @@ func (s *stdout) Rotate() { // This is empty because it isn't doing anything but has to satisfy the interface. } -func (stdout) SupportsColors() bool { return true } +func (*stdout) SupportsColors() bool { return true } diff --git a/internal/io/fs/readfile.go b/internal/io/fs/readfile.go index 669f99f..dc1d8ea 100644 --- a/internal/io/fs/readfile.go +++ b/internal/io/fs/readfile.go @@ -116,23 +116,19 @@ func (f *readFile) makeReader() (*bufio.Reader, *os.File, error) { return f.makeFileReader() } -func (f *readFile) makeFileReader() (*bufio.Reader, *os.File, error) { - var reader *bufio.Reader - fd, err := os.Open(f.filePath) - if err != nil { - return reader, fd, err +func (f *readFile) makeFileReader() (reader *bufio.Reader, fd *os.File, err error) { + if fd, err = os.Open(f.filePath); err != nil { + return } if f.seekEOF { - fd.Seek(0, io.SeekEnd) + if _, err = fd.Seek(0, io.SeekEnd); err != nil { + return + } } reader, err = f.makeCompressedFileReader(fd) - if err != nil { - return reader, fd, err - } - - return reader, fd, nil + return } func (f *readFile) makePipeReader() (*bufio.Reader, *os.File, error) { @@ -249,7 +245,7 @@ func (f *readFile) truncated(fd *os.File) (bool, error) { dlog.Common.Debug(f.filePath, "File truncation check") // Can not seek currently open FD. - currentPosition, err := fd.Seek(0, os.SEEK_CUR) + currentPosition, err := fd.Seek(0, io.SeekCurrent) if err != nil { return true, err } diff --git a/internal/io/fs/readfilelcontext.go b/internal/io/fs/readfilelcontext.go index 44ce17d..87d59d6 100644 --- a/internal/io/fs/readfilelcontext.go +++ b/internal/io/fs/readfilelcontext.go @@ -31,22 +31,17 @@ type ltxState struct { func (f *readFile) filterWithoutLContext(ctx context.Context, rawLines <-chan *bytes.Buffer, lines chan<- *line.Line, re regex.Regex) { - for { - select { - case rawLine, ok := <-rawLines: - f.updatePosition() - if !ok { + for rawLine := range rawLines { + f.updatePosition() + if newLine, ok := f.transmittable(rawLine, len(lines), cap(lines), re); ok { + select { + case lines <- newLine: + case <-ctx.Done(): return } - if newLine, ok := f.transmittable(rawLine, len(lines), cap(lines), re); ok { - select { - case lines <- newLine: - case <-ctx.Done(): - return - } - } } } + f.updatePosition() } // Filter log lines matching a given regular expression, however with local grep context. diff --git a/internal/mapr/client/aggregate.go b/internal/mapr/client/aggregate.go index 1704d43..2e9b61a 100644 --- a/internal/mapr/client/aggregate.go +++ b/internal/mapr/client/aggregate.go @@ -44,7 +44,7 @@ func (a *Aggregate) Aggregate(message string) error { groupKey := parts[0] samples, err := strconv.Atoi(parts[1]) if err != nil { - return fmt.Errorf("unable to parse sample count '%s': %v", parts[1], err) + return fmt.Errorf("unable to parse sample count '%s': %w", parts[1], err) } fields := a.makeFields(parts[2:]) diff --git a/internal/mapr/fieldtypes.go b/internal/mapr/fieldtypes.go index a64efd1..4242407 100644 --- a/internal/mapr/fieldtypes.go +++ b/internal/mapr/fieldtypes.go @@ -1,7 +1,5 @@ package mapr -import "fmt" - type fieldType int // The possible field types. @@ -16,14 +14,14 @@ const ( func (w fieldType) String() string { switch w { case Field: - return fmt.Sprintf("Field") + return "Field" case String: - return fmt.Sprintf("String") + return "String" case Float: - return fmt.Sprintf("Float") + return "Float" case FunctionStack: - return fmt.Sprintf("FunctionStack") + return "FunctionStack" default: - return fmt.Sprintf("UndefFieldType") + return "UndefFieldType" } } diff --git a/internal/mapr/groupsetresult.go b/internal/mapr/groupsetresult.go index d01a3c9..58663b8 100644 --- a/internal/mapr/groupsetresult.go +++ b/internal/mapr/groupsetresult.go @@ -169,9 +169,10 @@ func (*GroupSet) writeQueryFile(query *Query) error { } defer fd.Close() - fd.WriteString(query.RawQuery) - os.Rename(tmpQueryFile, queryFile) - return nil + if _, err := fd.WriteString(query.RawQuery); err != nil { + return err + } + return os.Rename(tmpQueryFile, queryFile) } // WriteResult writes the result to an CSV outfile. @@ -221,7 +222,9 @@ func (g *GroupSet) resultWriteUnformatted(query *Query, rows []result, fd *os.Fi lastColumn := len(query.Select) - 1 if writeHeader { - g.resultWriteUnformattedHeader(query, fd, lastColumn) + if err := g.resultWriteUnformattedHeader(query, fd, lastColumn); err != nil { + return err + } } // And now write the data @@ -230,13 +233,19 @@ func (g *GroupSet) resultWriteUnformatted(query *Query, rows []result, fd *os.Fi break } for j, value := range r.values { - fd.WriteString(value) + if _, err := fd.WriteString(value); err != nil { + return err + } if j == lastColumn { continue } - fd.WriteString(protocol.CSVDelimiter) + if _, err := fd.WriteString(protocol.CSVDelimiter); err != nil { + return err + } + } + if _, err := fd.WriteString("\n"); err != nil { + return err } - fd.WriteString("\n") } if !query.Outfile.AppendMode { @@ -250,13 +259,18 @@ func (g *GroupSet) resultWriteUnformatted(query *Query, rows []result, fd *os.Fi return nil } -func (g *GroupSet) resultWriteUnformattedHeader(query *Query, fd *os.File, lastColumn int) { +func (g *GroupSet) resultWriteUnformattedHeader(query *Query, fd *os.File, lastColumn int) (err error) { for i, sc := range query.Select { - fd.WriteString(sc.FieldStorage) + if _, err = fd.WriteString(sc.FieldStorage); err != nil { + return + } if i == lastColumn { continue } - fd.WriteString(protocol.CSVDelimiter) + if _, err = fd.WriteString(protocol.CSVDelimiter); err != nil { + return + } } - fd.WriteString("\n") + _, err = fd.WriteString("\n") + return } diff --git a/internal/mapr/query.go b/internal/mapr/query.go index ddcbc90..139f04c 100644 --- a/internal/mapr/query.go +++ b/internal/mapr/query.go @@ -133,7 +133,7 @@ func (q *Query) parseTokens(tokens []token) ([]token, error) { var err error var found []token - for tokens != nil && len(tokens) > 0 { + for len(tokens) > 0 { switch strings.ToLower(tokens[0].str) { case "select": tokens, found = tokensConsume(tokens[1:]) diff --git a/internal/mapr/token.go b/internal/mapr/token.go index 48d1192..77362f7 100644 --- a/internal/mapr/token.go +++ b/internal/mapr/token.go @@ -99,7 +99,8 @@ func tokensConsumeOptional(tokens []token, optional string) []token { if len(tokens) < 1 { return tokens } - if strings.ToLower(tokens[0].str) == strings.ToLower(optional) { + //if strings.ToLower(tokens[0].str) == strings.ToLower(optional) { + if strings.EqualFold(tokens[0].str, optional) { return tokens[1:] } return tokens diff --git a/internal/server/handlers/basehandler.go b/internal/server/handlers/basehandler.go index 7daf071..f6ab3db 100644 --- a/internal/server/handlers/basehandler.go +++ b/internal/server/handlers/basehandler.go @@ -130,7 +130,7 @@ func (h *baseHandler) Write(p []byte) (n int, err error) { for _, b := range p { switch b { case ';': - h.handleCommand(string(h.writeBuf.Bytes())) + h.handleCommand(h.writeBuf.String()) h.writeBuf.Reset() default: h.writeBuf.WriteByte(b) @@ -252,15 +252,15 @@ func (h *baseHandler) handleOptions(options map[string]string) { // We can read the options only once, will cause a data race otherwise if // changed multiple times for multiple incoming commands. h.once.Do(func() { - if quiet, _ := options["quiet"]; quiet == "true" { + if quiet := options["quiet"]; quiet == "true" { dlog.Server.Debug(h.user, "Enabling quiet mode") h.quiet = true } - if plain, _ := options["plain"]; plain == "true" { + if plain := options["plain"]; plain == "true" { dlog.Server.Debug(h.user, "Enabling plain mode") h.plain = true } - if serverless, _ := options["serverless"]; serverless == "true" { + if serverless := options["serverless"]; serverless == "true" { dlog.Server.Debug(h.user, "Enabling serverless mode") h.serverless = true } diff --git a/internal/server/server.go b/internal/server/server.go index 761880d..8b581b1 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -130,7 +130,9 @@ func (s *Server) handleChannel(ctx context.Context, sshConn gossh.Conn, user, err := user.New(sshConn.User(), sshConn.RemoteAddr().String()) if err != nil { dlog.Server.Error(user, err) - newChannel.Reject(gossh.Prohibited, err.Error()) + if err := newChannel.Reject(gossh.Prohibited, err.Error()); err != nil { + dlog.Server.Debug(err) + } return } @@ -138,7 +140,9 @@ func (s *Server) handleChannel(ctx context.Context, sshConn gossh.Conn, if newChannel.ChannelType() != "session" { err := errors.New("Don'w allow other channel types than session") dlog.Server.Error(user, err) - newChannel.Reject(gossh.Prohibited, err.Error()) + if err := newChannel.Reject(gossh.Prohibited, err.Error()); err != nil { + dlog.Server.Debug(err) + } return } @@ -160,7 +164,9 @@ func (s *Server) handleRequests(ctx context.Context, sshConn gossh.Conn, dlog.Server.Info(user, "Invoking request handler") for req := range in { var payload = struct{ Value string }{} - gossh.Unmarshal(req.Payload, &payload) + if err := gossh.Unmarshal(req.Payload, &payload); err != nil { + dlog.Server.Error(user, err) + } switch req.Type { case "shell": @@ -177,14 +183,18 @@ func (s *Server) handleRequests(ctx context.Context, sshConn gossh.Conn, } go func() { + defer terminate() // Broken pipe, cancel - io.Copy(channel, handler) - terminate() + if _, err := io.Copy(channel, handler); err != nil { + dlog.Server.Trace(user, fmt.Errorf("channel->handler: %w", err)) + } }() go func() { + defer terminate() // Broken pipe, cancel - io.Copy(handler, channel) - terminate() + if _, err := io.Copy(handler, channel); err != nil { + dlog.Server.Trace(user, fmt.Errorf("handler->channel: %w", err)) + } }() go func() { select { @@ -203,9 +213,13 @@ func (s *Server) handleRequests(ctx context.Context, sshConn gossh.Conn, }() // Only serving shell type - req.Reply(true, nil) + if err := req.Reply(true, nil); err != nil { + dlog.Server.Trace(user, fmt.Errorf("reply(true): %w", err)) + } default: - req.Reply(false, nil) + if err := req.Reply(false, nil); err != nil { + dlog.Server.Trace(user, fmt.Errorf("reply(false): %w", err)) + } return fmt.Errorf("Closing SSH connection as unknown request received|%s|%v", req.Type, payload.Value) } diff --git a/internal/ssh/client/clientkeypair.go b/internal/ssh/client/clientkeypair.go index b35b25d..20cdc88 100644 --- a/internal/ssh/client/clientkeypair.go +++ b/internal/ssh/client/clientkeypair.go @@ -6,7 +6,6 @@ import ( "crypto/x509" "encoding/pem" "fmt" - "io/ioutil" "os" "github.com/mimecast/dtail/internal/io/dlog" @@ -83,7 +82,7 @@ func generatePublicKey(privatekey *rsa.PublicKey) ([]byte, error) { } func writeKey(keyBytes []byte, saveFileTo string) error { - err := ioutil.WriteFile(saveFileTo, keyBytes, 0600) + err := os.WriteFile(saveFileTo, keyBytes, 0600) if err != nil { return err } diff --git a/internal/ssh/client/knownhostscallback.go b/internal/ssh/client/knownhostscallback.go index 393c4c7..fe3543c 100644 --- a/internal/ssh/client/knownhostscallback.go +++ b/internal/ssh/client/knownhostscallback.go @@ -232,8 +232,12 @@ func (c KnownHostsCallback) trustHosts(hosts []unknownHost) { // And once as [IP]:PORT addresses[knownhosts.Normalize(unknown.remote.String())] = struct{}{} - newFd.WriteString(fmt.Sprintf("%s\n", unknown.hostLine)) - newFd.WriteString(fmt.Sprintf("%s\n", unknown.ipLine)) + if _, err := newFd.WriteString(fmt.Sprintf("%s\n", unknown.hostLine)); err != nil { + panic(err) + } + if _, err := newFd.WriteString(fmt.Sprintf("%s\n", unknown.ipLine)); err != nil { + panic(err) + } } // Read old known hosts file, to see which are old and new entries diff --git a/internal/ssh/server/hostkey.go b/internal/ssh/server/hostkey.go index be23d85..b2d4569 100644 --- a/internal/ssh/server/hostkey.go +++ b/internal/ssh/server/hostkey.go @@ -1,7 +1,6 @@ package server import ( - "io/ioutil" "os" "github.com/mimecast/dtail/internal/config" @@ -26,7 +25,7 @@ func PrivateHostKey() []byte { } pem := ssh.EncodePrivateKeyToPEM(privateKey) - if err := ioutil.WriteFile(hostKeyFile, pem, 0600); err != nil { + if err := os.WriteFile(hostKeyFile, pem, 0600); err != nil { dlog.Server.Error("Unable to write private server RSA host key to file", hostKeyFile, err) } @@ -34,7 +33,7 @@ func PrivateHostKey() []byte { } dlog.Server.Info("Reading private server RSA host key from file", hostKeyFile) - pem, err := ioutil.ReadFile(hostKeyFile) + pem, err := os.ReadFile(hostKeyFile) if err != nil { dlog.Server.FatalPanic("Failed to load private server RSA host key", err) } diff --git a/internal/ssh/server/publickeycallback.go b/internal/ssh/server/publickeycallback.go index f7655b4..bcc9004 100644 --- a/internal/ssh/server/publickeycallback.go +++ b/internal/ssh/server/publickeycallback.go @@ -2,7 +2,6 @@ package server import ( "fmt" - "io/ioutil" "os" goUser "os/user" @@ -30,7 +29,7 @@ func PublicKeyCallback(c gossh.ConnMetadata, } dlog.Server.Info(user, "Reading", authorizedKeysFile) - authorizedKeysBytes, err := ioutil.ReadFile(authorizedKeysFile) + authorizedKeysBytes, err := os.ReadFile(authorizedKeysFile) if err != nil { return nil, fmt.Errorf("Unable to read authorized keys file|%s|%s|%s", authorizedKeysFile, user, err.Error()) diff --git a/internal/ssh/ssh.go b/internal/ssh/ssh.go index db5aaf1..9c2dcb8 100644 --- a/internal/ssh/ssh.go +++ b/internal/ssh/ssh.go @@ -6,7 +6,6 @@ import ( "crypto/x509" "encoding/pem" "fmt" - "io/ioutil" "net" "os" "syscall" @@ -15,7 +14,7 @@ import ( gossh "golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh/agent" - "golang.org/x/crypto/ssh/terminal" + "golang.org/x/term" ) // GeneratePrivateRSAKey is used by the server to generate its key. @@ -63,7 +62,7 @@ func Agent() (gossh.AuthMethod, error) { // EnterKeyPhrase is required to read phrase protected private keys. func EnterKeyPhrase(keyFile string) []byte { fmt.Printf("Enter phrase for key %s: ", keyFile) - phrase, err := terminal.ReadPassword(int(syscall.Stdin)) + phrase, err := term.ReadPassword(int(syscall.Stdin)) if err != nil { panic(err) } @@ -73,7 +72,7 @@ func EnterKeyPhrase(keyFile string) []byte { // KeyFile returns the key as a SSH auth method. func KeyFile(keyFile string) (gossh.AuthMethod, error) { - buffer, err := ioutil.ReadFile(keyFile) + buffer, err := os.ReadFile(keyFile) if err != nil { return nil, err } diff --git a/internal/user/server/user.go b/internal/user/server/user.go index abf74f3..d391672 100644 --- a/internal/user/server/user.go +++ b/internal/user/server/user.go @@ -81,7 +81,7 @@ func (u *User) HasFilePermission(filePath, permissionType string) (hasPermission func (u *User) hasFilePermission(cleanPath, permissionType string) (bool, error) { // First check file system Linux/UNIX permission. if _, err := permissions.ToRead(u.Name, cleanPath); err != nil { - return false, fmt.Errorf("User without OS file system permissions to read path: '%v'", err) + return false, fmt.Errorf("User without OS file system permissions to read path: %w", err) } dlog.Server.Info(u, cleanPath, permissionType, "User with OS file system permissions to path") @@ -89,7 +89,7 @@ func (u *User) hasFilePermission(cleanPath, permissionType string) (bool, error) // Only allow to follow regular files or symlinks. info, err := os.Lstat(cleanPath) if err != nil { - return false, fmt.Errorf("Unable to determine file type: '%v'", err) + return false, fmt.Errorf("Unable to determine file type: %w", err) } if !info.Mode().IsRegular() { return false, fmt.Errorf("Can only open regular files or follow symlinks") @@ -130,7 +130,7 @@ func (u *User) iteratePaths(cleanPath, permissionType string) (bool, error) { re, err := regexp.Compile(regexStr) if err != nil { return false, fmt.Errorf("Permission test failed, can't compile regex "+ - "'%s': '%v'", regexStr, err) + "'%s': %w", regexStr, err) } if negate && re.MatchString(cleanPath) { dlog.Server.Info(u, cleanPath, "Permission test failed partially, "+ diff --git a/internal/version/version.go b/internal/version/version.go index 15ea50f..c8ad394 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -13,7 +13,7 @@ const ( // Name of DTail. Name string = "DTail" // Version of DTail. - Version string = "4.3.0" + Version string = "4.3.2" // Additional information for DTail Additional string = "Have a lot of fun!" ) |
