From df7899759d3a23cbde4a66cdbd158facbecccf7f Mon Sep 17 00:00:00 2001 From: Aaron Klotz Date: Wed, 6 Oct 2021 09:41:34 -0600 Subject: [PATCH] cmd/tailscaled: set the correct flag for receiving Windows session change events This feature wasn't working until I realized that we also need to opt into the events. MSDN wasn't so generous as to make this easy to deduce. Updates #2956 Signed-off-by: Aaron Klotz --- cmd/tailscaled/tailscaled_windows.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cmd/tailscaled/tailscaled_windows.go b/cmd/tailscaled/tailscaled_windows.go index 5b94eb6c7..303581636 100644 --- a/cmd/tailscaled/tailscaled_windows.go +++ b/cmd/tailscaled/tailscaled_windows.go @@ -44,8 +44,6 @@ import ( const serviceName = "Tailscale" -var flushDNSOnSessionUnlock bool - func isWindowsService() bool { v, err := svc.IsWindowsService() if err != nil { @@ -66,7 +64,11 @@ type ipnService struct { func (service *ipnService) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (bool, uint32) { changes <- svc.Status{State: svc.StartPending} - flushDNSOnSessionUnlock = winutil.GetRegInteger("FlushDNSOnSessionUnlock", 0) != 0 + svcAccepts := svc.AcceptStop + if winutil.GetRegInteger("FlushDNSOnSessionUnlock", 0) != 0 { + svcAccepts |= svc.AcceptSessionChange + } + ctx, cancel := context.WithCancel(context.Background()) doneCh := make(chan struct{}) go func() { @@ -75,7 +77,7 @@ func (service *ipnService) Execute(args []string, r <-chan svc.ChangeRequest, ch ipnserver.BabysitProc(ctx, args, log.Printf) }() - changes <- svc.Status{State: svc.Running, Accepts: svc.AcceptStop} + changes <- svc.Status{State: svc.Running, Accepts: svcAccepts} for ctx.Err() == nil { select { @@ -272,8 +274,7 @@ func startIPNServer(ctx context.Context, logid string) error { } func handleSessionChange(chgRequest svc.ChangeRequest) { - if chgRequest.Cmd != svc.SessionChange || chgRequest.EventType != windows.WTS_SESSION_UNLOCK || - !flushDNSOnSessionUnlock { + if chgRequest.Cmd != svc.SessionChange || chgRequest.EventType != windows.WTS_SESSION_UNLOCK { return }