diff --git a/server.go b/server.go index be4355e..f57fa43 100644 --- a/server.go +++ b/server.go @@ -3,7 +3,6 @@ package ssh import ( "context" "errors" - "fmt" "net" "sync" "time" @@ -29,6 +28,8 @@ var DefaultChannelHandlers = map[string]ChannelHandler{ "session": DefaultSessionHandler, } +var ErrPermissionDenied = errors.New("permission denied") + // Server defines parameters for running an SSH server. The zero value for // Server is a valid configuration. When both PasswordHandler and // PublicKeyHandler are nil, no client authentication is performed. @@ -136,7 +137,7 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig { config.PasswordCallback = func(conn gossh.ConnMetadata, password []byte) (*gossh.Permissions, error) { applyConnMetadata(ctx, conn) if ok := srv.PasswordHandler(ctx, string(password)); !ok { - return ctx.Permissions().Permissions, fmt.Errorf("permission denied") + return ctx.Permissions().Permissions, ErrPermissionDenied } return ctx.Permissions().Permissions, nil } @@ -145,7 +146,7 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig { config.PublicKeyCallback = func(conn gossh.ConnMetadata, key gossh.PublicKey) (*gossh.Permissions, error) { applyConnMetadata(ctx, conn) if ok := srv.PublicKeyHandler(ctx, key); !ok { - return ctx.Permissions().Permissions, fmt.Errorf("permission denied") + return ctx.Permissions().Permissions, ErrPermissionDenied } ctx.SetValue(ContextKeyPublicKey, key) return ctx.Permissions().Permissions, nil @@ -155,7 +156,7 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig { config.KeyboardInteractiveCallback = func(conn gossh.ConnMetadata, challenger gossh.KeyboardInteractiveChallenge) (*gossh.Permissions, error) { applyConnMetadata(ctx, conn) if ok := srv.KeyboardInteractiveHandler(ctx, challenger); !ok { - return ctx.Permissions().Permissions, fmt.Errorf("permission denied") + return ctx.Permissions().Permissions, ErrPermissionDenied } return ctx.Permissions().Permissions, nil }