aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/manager/service.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-11-25 22:29:13 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-11-27 12:50:53 +0100
commitea8a6b076ef2359426687467d7465e4c092f6447 (patch)
treea474c3dd789e62a97fee033c9d9899b6beef4069 /manager/service.go
parentdocs: fix /0 -> /1 in netquirk (diff)
downloadwireguard-windows-ea8a6b076ef2359426687467d7465e4c092f6447.tar.xz
wireguard-windows-ea8a6b076ef2359426687467d7465e4c092f6447.zip
conf: do exponential back off for sharing violation in hotfolder
Windows gives us notifications about writes to files in a directory, but it does not give us notifications on when file handles are closed and when we can expect to be able to grab a handle to it; this would be racey at best. So, there always exists a race between the writer's last call to WriteFile() and its eventual CloseHandle(). Work around this by implementing a basic exponential back off of retrying the open call. While we're at it, clean up the "file already exists" logic to remove a basic toctou situation, and switch to using random temp file names in order to handle better the case of saving a new file from two different administrators at once. Reported-by: Jim Salter <jim@jrs-s.net> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--manager/service.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/manager/service.go b/manager/service.go
index b671f79e..5ae8c9df 100644
--- a/manager/service.go
+++ b/manager/service.go
@@ -83,7 +83,7 @@ func (service *managerService) Execute(args []string, r <-chan svc.ChangeRequest
return
}
- conf.RegisterStoreChangeCallback(func() { conf.MigrateUnencryptedConfigs() }) // Ignore return value for now, but could be useful later.
+ conf.RegisterStoreChangeCallback(func() { conf.MigrateUnencryptedConfigs(3) })
conf.RegisterStoreChangeCallback(IPCServerNotifyTunnelsChange)
procs := make(map[uint32]*os.Process)