aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ringlogger
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-04-02 07:33:37 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-04-02 07:33:37 +0200
commitd28cd0100b89ef182c5c7b39ec1b6b90062647b7 (patch)
treeb8f29db3d80017d3d4b0199f1b0cfc312d69dd81 /ringlogger
parentui: remove spacer that was only needed in a container other than ScrollView (diff)
downloadwireguard-windows-d28cd0100b89ef182c5c7b39ec1b6b90062647b7.tar.xz
wireguard-windows-d28cd0100b89ef182c5c7b39ec1b6b90062647b7.zip
ringlogger: give unprivd access via inheritable mapping handle
Diffstat (limited to 'ringlogger')
-rw-r--r--ringlogger/ringlogger_windows.go34
1 files changed, 28 insertions, 6 deletions
diff --git a/ringlogger/ringlogger_windows.go b/ringlogger/ringlogger_windows.go
index 1a49570c..f0e7e50a 100644
--- a/ringlogger/ringlogger_windows.go
+++ b/ringlogger/ringlogger_windows.go
@@ -12,6 +12,7 @@ import (
"io"
"os"
"runtime"
+ "strconv"
"sync/atomic"
"time"
"unsafe"
@@ -54,12 +55,21 @@ func NewRinglogger(filename string, tag string) (*Ringlogger, error) {
if err != nil {
return nil, err
}
- view, err := windows.MapViewOfFile(mapping, windows.FILE_MAP_WRITE, 0, 0, 0)
+ rl, err := NewRingloggerFromMappingHandle(mapping, tag)
if err != nil {
return nil, err
}
+ rl.file = file
+ return rl, nil
+}
+
+func NewRingloggerFromMappingHandle(mappingHandle windows.Handle, tag string) (*Ringlogger, error) {
+ view, err := windows.MapViewOfFile(mappingHandle, windows.FILE_MAP_WRITE, 0, 0, 0)
if err != nil {
- windows.CloseHandle(mapping)
+ return nil, err
+ }
+ if err != nil {
+ windows.CloseHandle(mappingHandle)
return nil, err
}
log := (*logMem)(unsafe.Pointer(view))
@@ -74,14 +84,21 @@ func NewRinglogger(filename string, tag string) (*Ringlogger, error) {
rl := &Ringlogger{
tag: tag,
- file: file,
- mapping: mapping,
+ mapping: mappingHandle,
log: log,
}
runtime.SetFinalizer(rl, (*Ringlogger).Close)
return rl, nil
}
+func NewRingloggerFromInheritedMappingHandle(handleStr string, tag string) (*Ringlogger, error) {
+ handle, err := strconv.ParseUint(handleStr, 10, 64)
+ if err != nil {
+ return nil, err
+ }
+ return NewRingloggerFromMappingHandle(windows.Handle(handle), tag)
+}
+
func (rl *Ringlogger) Write(p []byte) (n int, err error) {
// Race: This isn't synchronized with the fetch_add below, so items might be slightly out of order.
ts := time.Now().UnixNano()
@@ -202,6 +219,11 @@ func (rl *Ringlogger) Close() error {
return nil
}
-func (rl *Ringlogger) Filename() string {
- return rl.file.Name()
+func (rl *Ringlogger) ExportInheritableMappingHandleStr() (str string, err error) {
+ err = windows.SetHandleInformation(rl.mapping, windows.HANDLE_FLAG_INHERIT, windows.HANDLE_FLAG_INHERIT)
+ if err != nil {
+ return
+ }
+ str = strconv.FormatUint(uint64(rl.mapping), 10)
+ return
}