diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-05-03 17:11:05 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-05-03 17:11:40 +0200 |
commit | 2036279cbc62a2ae64e854b44caf641a68b62b6c (patch) | |
tree | 65d7e4b6bf1ec597b8e17a441cfbae7d47663a08 /service/firewall/helpers.go | |
parent | service: wire up firewall (diff) | |
download | wireguard-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.go | 24 |
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) + } +} |