aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/service
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-03-05 02:29:41 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2019-03-05 05:36:21 +0100
commitd539b335e8a7a87dda3da259958bb52183fb760e (patch)
tree55d388c2c0b3bfb6164f564740a8b8881ebdc315 /service
parentbuild: musl.cc now offers zips (diff)
downloadwireguard-windows-d539b335e8a7a87dda3da259958bb52183fb760e.tar.xz
wireguard-windows-d539b335e8a7a87dda3da259958bb52183fb760e.zip
conf: validate tunnel name
Diffstat (limited to 'service')
-rw-r--r--service/install.go16
-rw-r--r--service/ipc_server.go18
-rw-r--r--service/names.go25
-rw-r--r--service/service_manager.go1
-rw-r--r--service/tunneltracker.go5
5 files changed, 57 insertions, 8 deletions
diff --git a/service/install.go b/service/install.go
index bb2fb046..4203d066 100644
--- a/service/install.go
+++ b/service/install.go
@@ -122,7 +122,10 @@ func InstallTunnel(configPath string) error {
return err
}
- serviceName := "WireGuard Tunnel: " + name
+ serviceName, err := ServiceNameOfTunnel(name)
+ if err != nil {
+ return err
+ }
service, err := m.OpenService(serviceName)
if err == nil {
status, err := service.Query()
@@ -169,7 +172,10 @@ func UninstallTunnel(name string) error {
if err != nil {
return err
}
- serviceName := "WireGuard Tunnel: " + name
+ serviceName, err := ServiceNameOfTunnel(name)
+ if err != nil {
+ return err
+ }
service, err := m.OpenService(serviceName)
if err != nil {
return err
@@ -188,5 +194,9 @@ func RunTunnel(confPath string) error {
if err != nil {
return err
}
- return svc.Run("WireGuard Tunnel: "+name, &tunnelService{confPath})
+ serviceName, err := ServiceNameOfTunnel(name)
+ if err != nil {
+ return err
+ }
+ return svc.Run(serviceName, &tunnelService{confPath})
}
diff --git a/service/ipc_server.go b/service/ipc_server.go
index ed239d85..5f16eab9 100644
--- a/service/ipc_server.go
+++ b/service/ipc_server.go
@@ -43,14 +43,20 @@ func (s *ManagerService) RuntimeConfig(tunnelName string, config *conf.Config) e
if err != nil {
return err
}
- pipe, err := winio.DialPipe("\\\\.\\pipe\\wireguard\\"+storedConfig.Name, nil)
+ pipePath, err := PipePathOfTunnel(storedConfig.Name)
if err != nil {
return err
}
+ pipe, err := winio.DialPipe(pipePath, nil)
+ if err != nil {
+ return err
+ }
+ pipe.SetWriteDeadline(time.Now().Add(time.Second * 2))
_, err = pipe.Write([]byte("get=1\n\n"))
if err != nil {
return err
}
+ pipe.SetReadDeadline(time.Now().Add(time.Second * 2))
resp, err := ioutil.ReadAll(pipe)
if err != nil {
return err
@@ -88,7 +94,10 @@ func (s *ManagerService) Stop(tunnelName string, unused *uintptr) error {
}
func (s *ManagerService) WaitForStop(tunnelName string, unused *uintptr) error {
- serviceName := "WireGuard Tunnel: " + tunnelName
+ serviceName, err := ServiceNameOfTunnel(tunnelName)
+ if err != nil {
+ return err
+ }
m, err := serviceManager()
if err != nil {
return err
@@ -113,7 +122,10 @@ func (s *ManagerService) Delete(tunnelName string, unused *uintptr) error {
}
func (s *ManagerService) State(tunnelName string, state *TunnelState) error {
- serviceName := "WireGuard Tunnel: " + tunnelName
+ serviceName, err := ServiceNameOfTunnel(tunnelName)
+ if err != nil {
+ return err
+ }
m, err := serviceManager()
if err != nil {
return err
diff --git a/service/names.go b/service/names.go
new file mode 100644
index 00000000..45f590a3
--- /dev/null
+++ b/service/names.go
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
+ */
+
+package service
+
+import (
+ "errors"
+ "golang.zx2c4.com/wireguard/windows/conf"
+)
+
+func ServiceNameOfTunnel(tunnelName string) (string, error) {
+ if !conf.TunnelNameIsValid(tunnelName) {
+ return "", errors.New("Tunnel name is not valid")
+ }
+ return "WireGuard Tunnel: " + tunnelName, nil
+}
+
+func PipePathOfTunnel(tunnelName string) (string, error) {
+ if !conf.TunnelNameIsValid(tunnelName) {
+ return "", errors.New("Tunnel name is not valid")
+ }
+ return "\\\\.\\pipe\\wireguard\\" + tunnelName, nil
+}
diff --git a/service/service_manager.go b/service/service_manager.go
index 1f31521b..9b227592 100644
--- a/service/service_manager.go
+++ b/service/service_manager.go
@@ -266,7 +266,6 @@ loop:
case svc.Interrogate:
changes <- c.CurrentStatus
case svc.SessionChange:
- //TODO: All the logic here depends on https://go-review.googlesource.com/c/sys/+/158698 being merged
if c.EventType != wtsSessionLogon && c.EventType != wtsSessionLogoff {
continue
}
diff --git a/service/tunneltracker.go b/service/tunneltracker.go
index 2545930d..96d0f6e3 100644
--- a/service/tunneltracker.go
+++ b/service/tunneltracker.go
@@ -69,7 +69,10 @@ func trackExistingTunnels() error {
return err
}
for _, name := range names {
- serviceName := "WireGuard Tunnel: " + name
+ serviceName, err := ServiceNameOfTunnel(name)
+ if err != nil {
+ continue
+ }
service, err := m.OpenService(serviceName)
if err != nil {
continue