]> source.dussan.org Git - gitea.git/commitdiff
Stop logging EOFs and exit(1)s in ssh handler (#20476) (#20529)
authorzeripath <art27@cantab.net>
Fri, 29 Jul 2022 00:10:42 +0000 (01:10 +0100)
committerGitHub <noreply@github.com>
Fri, 29 Jul 2022 00:10:42 +0000 (02:10 +0200)
Backport #20476

The code in modules/ssh/ssh.go:sessionHandler() currently cause an error to be
logged if `gitea serv` exits with a exit(1). This logging is useless because the
accompanying stderr is not provided and in any case the exit(1) is most likely due
to permissions errors.

Further it then causes the EOF to be logged - even though this is not helpful.

This PR simply checks the errors returned and stops logging them.

In the case of misconfigurations causing `gitea serv` to fail with exit(1)
the current logging is not helpful at determining this and users should simply
review the message passed over the ssh connection.

Fix #20473

Signed-off-by: Andrew Thornton <art27@cantab.net>
modules/ssh/ssh.go

index 2affeb781a998d13190d975da79cac4082d0ea37..bffe29f4c385beb2bc7f2cda7f82087a40da56e0 100644 (file)
@@ -11,6 +11,7 @@ import (
        "crypto/rsa"
        "crypto/x509"
        "encoding/pem"
+       "errors"
        "fmt"
        "io"
        "net"
@@ -142,10 +143,14 @@ func sessionHandler(session ssh.Session) {
        // Wait for the command to exit and log any errors we get
        err = cmd.Wait()
        if err != nil {
-               log.Error("SSH: Wait: %v", err)
+               // Cannot use errors.Is here because ExitError doesn't implement Is
+               // Thus errors.Is will do equality test NOT type comparison
+               if _, ok := err.(*exec.ExitError); !ok {
+                       log.Error("SSH: Wait: %v", err)
+               }
        }
 
-       if err := session.Exit(getExitStatusFromError(err)); err != nil {
+       if err := session.Exit(getExitStatusFromError(err)); err != nil && !errors.Is(err, io.EOF) {
                log.Error("Session failed to exit. %s", err)
        }
 }