@@ -32,6 +32,14 @@ var DefaultChannelHandlers = map[string]ChannelHandler{
3232
3333var permissionsPublicKeyExt = "gliderlabs/ssh.PublicKey"
3434
35+ func ensureNoPKInPermissions (ctx Context ) error {
36+ if _ , ok := ctx .Permissions ().Permissions .Extensions [permissionsPublicKeyExt ]; ok {
37+ return errors .New ("misconfigured server: public key incorrectly set" )
38+ }
39+
40+ return nil
41+ }
42+
3543// Server defines parameters for running an SSH server. The zero value for
3644// Server is a valid configuration. When both PasswordHandler and
3745// PublicKeyHandler are nil, no client authentication is performed.
@@ -152,7 +160,12 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig {
152160 config .PasswordCallback = func (conn gossh.ConnMetadata , password []byte ) (* gossh.Permissions , error ) {
153161 resetPermissions (ctx )
154162 applyConnMetadata (ctx , conn )
155- if ok := srv .PasswordHandler (ctx , string (password )); ! ok {
163+ err := ensureNoPKInPermissions (ctx )
164+ if err != nil {
165+ return ctx .Permissions ().Permissions , err
166+ }
167+ ok := srv .PasswordHandler (ctx , string (password ))
168+ if ! ok {
156169 return ctx .Permissions ().Permissions , fmt .Errorf ("permission denied" )
157170 }
158171 return ctx .Permissions ().Permissions , nil
@@ -162,7 +175,12 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig {
162175 config .PublicKeyCallback = func (conn gossh.ConnMetadata , key gossh.PublicKey ) (* gossh.Permissions , error ) {
163176 resetPermissions (ctx )
164177 applyConnMetadata (ctx , conn )
165- if ok := srv .PublicKeyHandler (ctx , key ); ! ok {
178+ err := ensureNoPKInPermissions (ctx )
179+ if err != nil {
180+ return ctx .Permissions ().Permissions , err
181+ }
182+ ok := srv .PublicKeyHandler (ctx , key )
183+ if ! ok {
166184 return ctx .Permissions ().Permissions , fmt .Errorf ("permission denied" )
167185 }
168186
0 commit comments