@ -69,7 +69,7 @@ type server struct {
}
}
func ( srv * server ) now ( ) time . Time {
func ( srv * server ) now ( ) time . Time {
if srv . timeNow != nil {
if srv != nil && srv . timeNow != nil {
return srv . timeNow ( )
return srv . timeNow ( )
}
}
return time . Now ( )
return time . Now ( )
@ -152,10 +152,6 @@ type conn struct {
insecureSkipTailscaleAuth bool // used by tests.
insecureSkipTailscaleAuth bool // used by tests.
// now is the time to consider the present moment for the
// purposes of rule evaluation.
now time . Time
connID string // ID that's shared with control
connID string // ID that's shared with control
action0 * tailcfg . SSHAction // first matching action
action0 * tailcfg . SSHAction // first matching action
srv * server
srv * server
@ -278,8 +274,9 @@ func (srv *server) newConn() (*conn, error) {
return nil , gossh . ErrDenied
return nil , gossh . ErrDenied
}
}
srv . mu . Unlock ( )
srv . mu . Unlock ( )
c := & conn { srv : srv , now : srv . now ( ) }
c := & conn { srv : srv }
c . connID = fmt . Sprintf ( "conn-%s-%02x" , c . now . UTC ( ) . Format ( "20060102T150405" ) , randBytes ( 5 ) )
now := srv . now ( )
c . connID = fmt . Sprintf ( "conn-%s-%02x" , now . UTC ( ) . Format ( "20060102T150405" ) , randBytes ( 5 ) )
c . Server = & ssh . Server {
c . Server = & ssh . Server {
Version : "Tailscale" ,
Version : "Tailscale" ,
Handler : c . handleSessionPostSSHAuth ,
Handler : c . handleSessionPostSSHAuth ,
@ -751,7 +748,7 @@ func (ss *sshSession) vlogf(format string, args ...interface{}) {
}
}
func ( c * conn ) newSSHSession ( s ssh . Session ) * sshSession {
func ( c * conn ) newSSHSession ( s ssh . Session ) * sshSession {
sharedID := fmt . Sprintf ( "sess-%s-%02x" , c . now. UTC ( ) . Format ( "20060102T150405" ) , randBytes ( 5 ) )
sharedID := fmt . Sprintf ( "sess-%s-%02x" , c . srv. now( ) . UTC ( ) . Format ( "20060102T150405" ) , randBytes ( 5 ) )
c . logf ( "starting session: %v" , sharedID )
c . logf ( "starting session: %v" , sharedID )
return & sshSession {
return & sshSession {
Session : s ,
Session : s ,
@ -1087,7 +1084,7 @@ func (c *conn) ruleExpired(r *tailcfg.SSHRule) bool {
if r . RuleExpires == nil {
if r . RuleExpires == nil {
return false
return false
}
}
return r . RuleExpires . Before ( c . now)
return r . RuleExpires . Before ( c . srv. now( ) )
}
}
func ( c * conn ) evalSSHPolicy ( pol * tailcfg . SSHPolicy , pubKey gossh . PublicKey ) ( a * tailcfg . SSHAction , localUser string , ok bool ) {
func ( c * conn ) evalSSHPolicy ( pol * tailcfg . SSHPolicy , pubKey gossh . PublicKey ) ( a * tailcfg . SSHAction , localUser string , ok bool ) {