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:
Brad Fitzpatrick
2026-03-05 21:13:57 +00:00
committed by Brad Fitzpatrick
parent 4453cc5f53
commit bd2a2d53d3
168 changed files with 431 additions and 618 deletions
+2 -3
View File
@@ -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)
+4 -8
View File
@@ -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
View File
@@ -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
View File
@@ -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