@@ -32,6 +32,14 @@ var DefaultChannelHandlers = map[string]ChannelHandler{
32
32
33
33
var permissionsPublicKeyExt = "gliderlabs/ssh.PublicKey"
34
34
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
+
35
43
// Server defines parameters for running an SSH server. The zero value for
36
44
// Server is a valid configuration. When both PasswordHandler and
37
45
// PublicKeyHandler are nil, no client authentication is performed.
@@ -152,7 +160,12 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig {
152
160
config .PasswordCallback = func (conn gossh.ConnMetadata , password []byte ) (* gossh.Permissions , error ) {
153
161
resetPermissions (ctx )
154
162
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 {
156
169
return ctx .Permissions ().Permissions , fmt .Errorf ("permission denied" )
157
170
}
158
171
return ctx .Permissions ().Permissions , nil
@@ -162,7 +175,12 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig {
162
175
config .PublicKeyCallback = func (conn gossh.ConnMetadata , key gossh.PublicKey ) (* gossh.Permissions , error ) {
163
176
resetPermissions (ctx )
164
177
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 {
166
184
return ctx .Permissions ().Permissions , fmt .Errorf ("permission denied" )
167
185
}
168
186
0 commit comments