diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-11-25 22:29:13 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-11-27 12:50:53 +0100 |
commit | ea8a6b076ef2359426687467d7465e4c092f6447 (patch) | |
tree | a474c3dd789e62a97fee033c9d9899b6beef4069 /manager | |
parent | docs: fix /0 -> /1 in netquirk (diff) | |
download | wireguard-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 'manager')
-rw-r--r-- | manager/service.go | 2 |
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) |