all: use Go 1.26 things, run most gofix modernizers
I omitted a lot of the min/max modernizers because they didn't result in more clear code. Some of it's older "for x := range 123". Also: errors.AsType, any, fmt.Appendf, etc. Updates #18682 Change-Id: I83a451577f33877f962766a5b65ce86f7696471c Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
4453cc5f53
commit
bd2a2d53d3
@@ -158,8 +158,7 @@ func (ss *sshSession) newIncubatorCommand(logf logger.Logf) (cmd *exec.Cmd, err
|
||||
cmd.Dir = "/"
|
||||
case errors.Is(err, fs.ErrPermission) || errors.Is(err, fs.ErrNotExist):
|
||||
// Ensure that cmd.Dir is the source of the error.
|
||||
var pathErr *fs.PathError
|
||||
if errors.As(err, &pathErr) && pathErr.Path == cmd.Dir {
|
||||
if pathErr, ok := errors.AsType[*fs.PathError](err); ok && pathErr.Path == cmd.Dir {
|
||||
// If we cannot run loginShell in localUser.HomeDir,
|
||||
// we will try to run this command in the root directory.
|
||||
cmd.Dir = "/"
|
||||
@@ -312,7 +311,7 @@ func parseIncubatorArgs(args []string) (incubatorArgs, error) {
|
||||
flags.StringVar(&ia.encodedEnv, "encoded-env", "", "JSON encoded array of environment variables in '['key=value']' format")
|
||||
flags.Parse(args)
|
||||
|
||||
for _, g := range strings.Split(groups, ",") {
|
||||
for g := range strings.SplitSeq(groups, ",") {
|
||||
gid, err := strconv.Atoi(g)
|
||||
if err != nil {
|
||||
return ia, fmt.Errorf("unable to parse group id %q: %w", g, err)
|
||||
|
||||
@@ -262,12 +262,10 @@ func maybeValidUID(id int) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
var u1 user.UnknownUserIdError
|
||||
if errors.As(err, &u1) {
|
||||
if _, ok := errors.AsType[user.UnknownUserIdError](err); ok {
|
||||
return false
|
||||
}
|
||||
var u2 user.UnknownUserError
|
||||
if errors.As(err, &u2) {
|
||||
if _, ok := errors.AsType[user.UnknownUserError](err); ok {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -281,12 +279,10 @@ func maybeValidGID(id int) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
var u1 user.UnknownGroupIdError
|
||||
if errors.As(err, &u1) {
|
||||
if _, ok := errors.AsType[user.UnknownGroupIdError](err); ok {
|
||||
return false
|
||||
}
|
||||
var u2 user.UnknownGroupError
|
||||
if errors.As(err, &u2) {
|
||||
if _, ok := errors.AsType[user.UnknownGroupError](err); ok {
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
+6
-13
@@ -14,6 +14,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"maps"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/netip"
|
||||
@@ -500,15 +501,9 @@ func (srv *server) newConn() (*conn, error) {
|
||||
},
|
||||
}
|
||||
ss := c.Server
|
||||
for k, v := range ssh.DefaultRequestHandlers {
|
||||
ss.RequestHandlers[k] = v
|
||||
}
|
||||
for k, v := range ssh.DefaultChannelHandlers {
|
||||
ss.ChannelHandlers[k] = v
|
||||
}
|
||||
for k, v := range ssh.DefaultSubsystemHandlers {
|
||||
ss.SubsystemHandlers[k] = v
|
||||
}
|
||||
maps.Copy(ss.RequestHandlers, ssh.DefaultRequestHandlers)
|
||||
maps.Copy(ss.ChannelHandlers, ssh.DefaultChannelHandlers)
|
||||
maps.Copy(ss.SubsystemHandlers, ssh.DefaultSubsystemHandlers)
|
||||
keys, err := srv.lb.GetSSH_HostKeys()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -964,8 +959,7 @@ func (ss *sshSession) run() {
|
||||
var err error
|
||||
rec, err = ss.startNewRecording()
|
||||
if err != nil {
|
||||
var uve userVisibleError
|
||||
if errors.As(err, &uve) {
|
||||
if uve, ok := errors.AsType[userVisibleError](err); ok {
|
||||
fmt.Fprintf(ss, "%s\r\n", uve.SSHTerminationMessage())
|
||||
} else {
|
||||
fmt.Fprintf(ss, "can't start new recording\r\n")
|
||||
@@ -986,8 +980,7 @@ func (ss *sshSession) run() {
|
||||
logf("start failed: %v", err.Error())
|
||||
if errors.Is(err, context.Canceled) {
|
||||
err := context.Cause(ss.ctx)
|
||||
var uve userVisibleError
|
||||
if errors.As(err, &uve) {
|
||||
if uve, ok := errors.AsType[userVisibleError](err); ok {
|
||||
fmt.Fprintf(ss, "%s\r\n", uve)
|
||||
}
|
||||
}
|
||||
|
||||
+10
-18
@@ -571,9 +571,7 @@ func TestSSHRecordingCancelsSessionsOnUploadFailure(t *testing.T) {
|
||||
tstest.Replace(t, &handler, tt.handler)
|
||||
sc, dc := memnet.NewTCPConn(src, dst, 1024)
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
wg.Go(func() {
|
||||
c, chans, reqs, err := testssh.NewClientConn(sc, sc.RemoteAddr().String(), cfg)
|
||||
if err != nil {
|
||||
t.Errorf("client: %v", err)
|
||||
@@ -603,7 +601,7 @@ func TestSSHRecordingCancelsSessionsOnUploadFailure(t *testing.T) {
|
||||
t.Errorf("client output must not contain %q", x)
|
||||
}
|
||||
}
|
||||
}()
|
||||
})
|
||||
if err := s.HandleSSHConn(dc); err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
@@ -666,9 +664,7 @@ func TestMultipleRecorders(t *testing.T) {
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
wg.Go(func() {
|
||||
c, chans, reqs, err := testssh.NewClientConn(sc, sc.RemoteAddr().String(), cfg)
|
||||
if err != nil {
|
||||
t.Errorf("client: %v", err)
|
||||
@@ -690,7 +686,7 @@ func TestMultipleRecorders(t *testing.T) {
|
||||
if string(out) != "Ran echo!\n" {
|
||||
t.Errorf("client: unexpected output: %q", out)
|
||||
}
|
||||
}()
|
||||
})
|
||||
if err := s.HandleSSHConn(dc); err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
@@ -757,9 +753,7 @@ func TestSSHRecordingNonInteractive(t *testing.T) {
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
wg.Go(func() {
|
||||
c, chans, reqs, err := testssh.NewClientConn(sc, sc.RemoteAddr().String(), cfg)
|
||||
if err != nil {
|
||||
t.Errorf("client: %v", err)
|
||||
@@ -778,7 +772,7 @@ func TestSSHRecordingNonInteractive(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("client: %v", err)
|
||||
}
|
||||
}()
|
||||
})
|
||||
if err := s.HandleSSHConn(dc); err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
@@ -988,9 +982,7 @@ func TestSSHAuthFlow(t *testing.T) {
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
wg.Go(func() {
|
||||
c, chans, reqs, err := testssh.NewClientConn(sc, sc.RemoteAddr().String(), cfg)
|
||||
if err != nil {
|
||||
if !tc.authErr {
|
||||
@@ -1014,7 +1006,7 @@ func TestSSHAuthFlow(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("client: %v", err)
|
||||
}
|
||||
}()
|
||||
})
|
||||
if err := s.HandleSSHConn(dc); err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
@@ -1228,8 +1220,8 @@ func TestSSH(t *testing.T) {
|
||||
func parseEnv(out []byte) map[string]string {
|
||||
e := map[string]string{}
|
||||
for line := range lineiter.Bytes(out) {
|
||||
if i := bytes.IndexByte(line, '='); i != -1 {
|
||||
e[string(line[:i])] = string(line[i+1:])
|
||||
if before, after, ok := bytes.Cut(line, []byte{'='}); ok {
|
||||
e[string(before)] = string(after)
|
||||
}
|
||||
}
|
||||
return e
|
||||
|
||||
Reference in New Issue
Block a user