aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/service/firewall/helpers.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-05-03 17:11:05 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-05-03 17:11:40 +0200
commit2036279cbc62a2ae64e854b44caf641a68b62b6c (patch)
tree65d7e4b6bf1ec597b8e17a441cfbae7d47663a08 /service/firewall/helpers.go
parentservice: wire up firewall (diff)
downloadwireguard-windows-2036279cbc62a2ae64e854b44caf641a68b62b6c.tar.xz
wireguard-windows-2036279cbc62a2ae64e854b44caf641a68b62b6c.zip
firewall: wrap errors because there are lots of syscalls
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'service/firewall/helpers.go')
-rw-r--r--service/firewall/helpers.go24
1 files changed, 19 insertions, 5 deletions
diff --git a/service/firewall/helpers.go b/service/firewall/helpers.go
index 642080cc..4aea0a19 100644
--- a/service/firewall/helpers.go
+++ b/service/firewall/helpers.go
@@ -7,6 +7,8 @@ package firewall
import (
"fmt"
+ "runtime"
+ "syscall"
"unsafe"
"golang.org/x/sys/windows"
@@ -148,19 +150,19 @@ func (dt wtFwpDataType) String() string {
func runTransaction(session uintptr, operation wfpObjectInstaller) error {
err := fwpmTransactionBegin0(session, 0)
if err != nil {
- return err
+ return wrapErr(err)
}
err = operation(session)
if err != nil {
fwpmTransactionAbort0(session)
- return err
+ return wrapErr(err)
}
err = fwpmTransactionCommit0(session)
if err != nil {
fwpmTransactionAbort0(session)
- return err
+ return wrapErr(err)
}
return nil
@@ -169,12 +171,12 @@ func runTransaction(session uintptr, operation wfpObjectInstaller) error {
func createWtFwpmDisplayData0(name, description string) (*wtFwpmDisplayData0, error) {
namePtr, err := windows.UTF16PtrFromString(name)
if err != nil {
- return nil, err
+ return nil, wrapErr(err)
}
descriptionPtr, err := windows.UTF16PtrFromString(description)
if err != nil {
- return nil, err
+ return nil, wrapErr(err)
}
return &wtFwpmDisplayData0{
@@ -196,3 +198,15 @@ func filterWeightMin() wtFwpValue0 {
value: 0,
}
}
+
+func wrapErr(err error) error {
+ if _, ok := err.(syscall.Errno); !ok {
+ return err
+ }
+ _, file, line, ok := runtime.Caller(1)
+ if !ok {
+ return fmt.Errorf("Firewall error at unknown location: %v", err)
+ } else {
+ return fmt.Errorf("Firewall error at %s:%d: %v", file, line, err)
+ }
+}