diff options
-rw-r--r-- | adminregistry.md | 4 | ||||
-rw-r--r-- | tunnel/scriptrunner.go | 3 |
2 files changed, 4 insertions, 3 deletions
diff --git a/adminregistry.md b/adminregistry.md index 8d7bc105..513c1c48 100644 --- a/adminregistry.md +++ b/adminregistry.md @@ -25,7 +25,9 @@ specified in the `PreUp`, `PostUp`, `PreDown`, and `PostDown` options of a tunnel configuration. Note that this execution is done as the Local System user, which runs with the highest permissions on the operating system, and is therefore a real target of malware. Therefore, you should enable this option only with the -utmost trepidation. +utmost trepidation. Rather than use `%i`, WireGuard for Windows instead sets the +environment variable `WIREGUARD_TUNNEL_NAME` to the name of the tunnel when +executing these scripts. #### `HKLM\Software\WireGuard\MultipleSimultaneousTunnels` diff --git a/tunnel/scriptrunner.go b/tunnel/scriptrunner.go index ba6aec9b..670bb2a1 100644 --- a/tunnel/scriptrunner.go +++ b/tunnel/scriptrunner.go @@ -11,7 +11,6 @@ import ( "log" "os" "path/filepath" - "strings" "syscall" "golang.org/x/sys/windows" @@ -27,7 +26,6 @@ func runScriptCommand(command, interfaceName string) error { log.Printf("Skipping execution of script, because dangerous script execution is safely disabled: %#q", command) return nil } - command = strings.ReplaceAll(command, "%i", interfaceName) log.Printf("Executing: %#q", command) comspec, _ := os.LookupEnv("COMSPEC") if len(comspec) == 0 { @@ -49,6 +47,7 @@ func runScriptCommand(command, interfaceName string) error { } process, err := os.StartProcess(comspec, nil /* CmdLine below */, &os.ProcAttr{ Files: []*os.File{devNull, writer, writer}, + Env: append(os.Environ(), "WIREGUARD_TUNNEL_NAME="+interfaceName), Sys: &syscall.SysProcAttr{ HideWindow: true, CmdLine: fmt.Sprintf("cmd /c %s", command), |