@ -1118,11 +1118,22 @@ func (ss *sshSession) run() {
return
return
}
}
// recorders returns the list of recorders to use for this session.
// If the final action has a non-empty list of recorders, that list is
// returned. Otherwise, the list of recorders from the initial action
// is returned.
func ( ss * sshSession ) recorders ( ) [ ] netip . AddrPort {
if len ( ss . conn . finalAction . Recorders ) > 0 {
return ss . conn . finalAction . Recorders
}
return ss . conn . action0 . Recorders
}
func ( ss * sshSession ) shouldRecord ( ) bool {
func ( ss * sshSession ) shouldRecord ( ) bool {
// for now only record pty sessions
// for now only record pty sessions
// TODO(bradfitz,maisem): support recording non-pty stuff too.
// TODO(bradfitz,maisem): support recording non-pty stuff too.
_ , _ , isPtyReq := ss . Pty ( )
_ , _ , isPtyReq := ss . Pty ( )
return isPtyReq && len ( ss . conn . finalAction . Recorders ) > 0
return isPtyReq && len ( ss . recorders ( ) ) > 0
}
}
type sshConnInfo struct {
type sshConnInfo struct {
@ -1306,11 +1317,12 @@ func randBytes(n int) []byte {
// startNewRecording starts a new SSH session recording.
// startNewRecording starts a new SSH session recording.
func ( ss * sshSession ) startNewRecording ( ) ( _ * recording , err error ) {
func ( ss * sshSession ) startNewRecording ( ) ( _ * recording , err error ) {
if len ( ss . conn . finalAction . Recorders ) == 0 {
recorders := ss . recorders ( )
if len ( recorders ) == 0 {
return nil , errors . New ( "no recorders configured" )
return nil , errors . New ( "no recorders configured" )
}
}
recorder := ss. conn . finalAction . R ecorders[ 0 ]
recorder := r ecorders[ 0 ]
if len ( ss. conn . finalAction . R ecorders) > 1 {
if len ( r ecorders) > 1 {
ss . logf ( "warning: multiple recorders configured, using first one: %v" , recorder )
ss . logf ( "warning: multiple recorders configured, using first one: %v" , recorder )
}
}