Expose the gossh.ServerConfig rather than specific values

This commit is contained in:
Kaleb Elwert 2018-11-02 17:22:07 -07:00
parent cd0f9291c6
commit 4703ad4dc1

@ -33,18 +33,11 @@ type Server struct {
IdleTimeout time.Duration // connection timeout when no activity, none if empty
MaxTimeout time.Duration // absolute connection timeout, none if empty
// The allowed key exchanges algorithms. If unspecified then a
// default set of algorithms is used. Most users should not need to set
// this.
KeyExchanges []string
// The allowed cipher algorithms. If unspecified then a sensible
// default is used. Most users should not need to set this.
Ciphers []string
// The allowed MAC algorithms. If unspecified then a sensible default
// is used. Most users should not need to set this.
MACs []string
// Internal x/crypto/ssh config. Note that a number of values in this struct
// are overwritten every time a connection starts, so only use this if you
// know what you're doing and absolutely need to change the internal config
// values.
BaseConfig *gossh.ServerConfig
channelHandlers map[string]channelHandler
@ -71,19 +64,13 @@ func (srv *Server) ensureHostSigner() error {
}
func (srv *Server) config(ctx Context) *gossh.ServerConfig {
config := &gossh.ServerConfig{}
if len(srv.KeyExchanges) > 0 {
config.KeyExchanges = make([]string, len(srv.KeyExchanges))
copy(srv.KeyExchanges, config.KeyExchanges)
}
if len(srv.Ciphers) > 0 {
config.Ciphers = make([]string, len(srv.Ciphers))
copy(srv.Ciphers, config.Ciphers)
}
if len(srv.MACs) > 0 {
config.MACs = make([]string, len(srv.MACs))
copy(srv.MACs, config.MACs)
// Use the provided base config if set, otherwise default to an empty
// config.
config := srv.BaseConfig
if config == nil {
config = &gossh.ServerConfig{}
}
for _, signer := range srv.HostSigners {
config.AddHostKey(signer)
}
@ -112,6 +99,7 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig {
return ctx.Permissions().Permissions, nil
}
}
return config
}