MCPcopy
hub / github.com/gliderlabs/ssh / config

Method config

server.go:118–177  ·  view source on GitHub ↗
(ctx Context)

Source from the content-addressed store, hash-verified

116}
117
118func (srv *Server) config(ctx Context) *gossh.ServerConfig {
119 srv.mu.RLock()
120 defer srv.mu.RUnlock()
121
122 var config *gossh.ServerConfig
123 if srv.ServerConfigCallback == nil {
124 config = &gossh.ServerConfig{}
125 } else {
126 config = srv.ServerConfigCallback(ctx)
127 }
128 for _, signer := range srv.HostSigners {
129 config.AddHostKey(signer)
130 }
131 if srv.PasswordHandler == nil && srv.PublicKeyHandler == nil && srv.KeyboardInteractiveHandler == nil {
132 config.NoClientAuth = true
133 }
134 if srv.Version != "" {
135 config.ServerVersion = "SSH-2.0-" + srv.Version
136 }
137 if srv.Banner != "" {
138 config.BannerCallback = func(_ gossh.ConnMetadata) string {
139 return srv.Banner
140 }
141 }
142 if srv.BannerHandler != nil {
143 config.BannerCallback = func(conn gossh.ConnMetadata) string {
144 applyConnMetadata(ctx, conn)
145 return srv.BannerHandler(ctx)
146 }
147 }
148 if srv.PasswordHandler != nil {
149 config.PasswordCallback = func(conn gossh.ConnMetadata, password []byte) (*gossh.Permissions, error) {
150 applyConnMetadata(ctx, conn)
151 if ok := srv.PasswordHandler(ctx, string(password)); !ok {
152 return ctx.Permissions().Permissions, fmt.Errorf("permission denied")
153 }
154 return ctx.Permissions().Permissions, nil
155 }
156 }
157 if srv.PublicKeyHandler != nil {
158 config.PublicKeyCallback = func(conn gossh.ConnMetadata, key gossh.PublicKey) (*gossh.Permissions, error) {
159 applyConnMetadata(ctx, conn)
160 if ok := srv.PublicKeyHandler(ctx, key); !ok {
161 return ctx.Permissions().Permissions, fmt.Errorf("permission denied")
162 }
163 ctx.SetValue(ContextKeyPublicKey, key)
164 return ctx.Permissions().Permissions, nil
165 }
166 }
167 if srv.KeyboardInteractiveHandler != nil {
168 config.KeyboardInteractiveCallback = func(conn gossh.ConnMetadata, challenger gossh.KeyboardInteractiveChallenge) (*gossh.Permissions, error) {
169 applyConnMetadata(ctx, conn)
170 if ok := srv.KeyboardInteractiveHandler(ctx, challenger); !ok {
171 return ctx.Permissions().Permissions, fmt.Errorf("permission denied")
172 }
173 return ctx.Permissions().Permissions, nil
174 }
175 }

Callers 1

HandleConnMethod · 0.95

Calls 4

applyConnMetadataFunction · 0.85
AddHostKeyMethod · 0.80
PermissionsMethod · 0.65
SetValueMethod · 0.65

Tested by

no test coverage detected