mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-11 13:18:53 +00:00
ssh/tailssh: add support for sending multiple banners
Signed-off-by: Maisem Ali <maisem@tailscale.com>
This commit is contained in:
@@ -55,6 +55,8 @@ var (
|
||||
// ContextKeyPublicKey is a context key for use with Contexts in this package.
|
||||
// The associated value will be of type PublicKey.
|
||||
ContextKeyPublicKey = &contextKey{"public-key"}
|
||||
|
||||
ContextKeySendAuthBanner = &contextKey{"send-auth-banner"}
|
||||
)
|
||||
|
||||
// Context is a package specific context interface. It exposes connection
|
||||
@@ -89,6 +91,8 @@ type Context interface {
|
||||
|
||||
// SetValue allows you to easily write new values into the underlying context.
|
||||
SetValue(key, value interface{})
|
||||
|
||||
SendAuthBanner(banner string) error
|
||||
}
|
||||
|
||||
type sshContext struct {
|
||||
@@ -117,6 +121,7 @@ func applyConnMetadata(ctx Context, conn gossh.ConnMetadata) {
|
||||
ctx.SetValue(ContextKeyUser, conn.User())
|
||||
ctx.SetValue(ContextKeyLocalAddr, conn.LocalAddr())
|
||||
ctx.SetValue(ContextKeyRemoteAddr, conn.RemoteAddr())
|
||||
ctx.SetValue(ContextKeySendAuthBanner, conn.SendAuthBanner)
|
||||
}
|
||||
|
||||
func (ctx *sshContext) SetValue(key, value interface{}) {
|
||||
@@ -153,3 +158,7 @@ func (ctx *sshContext) LocalAddr() net.Addr {
|
||||
func (ctx *sshContext) Permissions() *Permissions {
|
||||
return ctx.Value(ContextKeyPermissions).(*Permissions)
|
||||
}
|
||||
|
||||
func (ctx *sshContext) SendAuthBanner(msg string) error {
|
||||
return ctx.Value(ContextKeySendAuthBanner).(func(string) error)(msg)
|
||||
}
|
||||
|
@@ -38,8 +38,7 @@ type Server struct {
|
||||
HostSigners []Signer // private keys for the host key, must have at least one
|
||||
Version string // server version to be sent before the initial handshake
|
||||
|
||||
KeyboardInteractiveHandler KeyboardInteractiveHandler // keyboard-interactive authentication handler
|
||||
BannerHandler BannerHandler
|
||||
KeyboardInteractiveHandler KeyboardInteractiveHandler // keyboard-interactive authentication handler
|
||||
PasswordHandler PasswordHandler // password authentication handler
|
||||
PublicKeyHandler PublicKeyHandler // public key authentication handler
|
||||
NoClientAuthHandler NoClientAuthHandler // no client authentication handler
|
||||
@@ -171,12 +170,6 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig {
|
||||
return ctx.Permissions().Permissions, nil
|
||||
}
|
||||
}
|
||||
if srv.BannerHandler != nil {
|
||||
config.BannerCallback = func(conn gossh.ConnMetadata) string {
|
||||
applyConnMetadata(ctx, conn)
|
||||
return srv.BannerHandler(ctx)
|
||||
}
|
||||
}
|
||||
return config
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user