aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ringlogger/dump.go
diff options
context:
space:
mode:
Diffstat (limited to 'ringlogger/dump.go')
-rw-r--r--ringlogger/dump.go62
1 files changed, 27 insertions, 35 deletions
diff --git a/ringlogger/dump.go b/ringlogger/dump.go
index 05a9b27f..3c089751 100644
--- a/ringlogger/dump.go
+++ b/ringlogger/dump.go
@@ -1,53 +1,28 @@
/* SPDX-License-Identifier: MIT
*
- * Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
+ * Copyright (C) 2019-2022 WireGuard LLC. All Rights Reserved.
*/
package ringlogger
import (
+ "errors"
+ "fmt"
"io"
"os"
- "path/filepath"
+ "time"
"golang.org/x/sys/windows"
- "golang.org/x/sys/windows/registry"
-
- "golang.zx2c4.com/wireguard/windows/conf"
)
-func DumpTo(out io.Writer, localSystem bool) error {
- var path string
- if !localSystem {
- root, err := conf.RootDirectory()
- if err != nil {
- return err
- }
- path = filepath.Join(root, "log.bin")
- } else {
- k, err := registry.OpenKey(registry.LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\S-1-5-18", registry.QUERY_VALUE)
- if err != nil {
- return err
- }
- defer k.Close()
-
- systemprofile, _, err := k.GetStringValue("ProfileImagePath")
- if err != nil {
- return err
- }
- systemprofile, err = registry.ExpandString(systemprofile)
- if err != nil {
- return err
- }
- path = filepath.Join(systemprofile, "AppData", "Local", "WireGuard", "log.bin")
- }
- file, err := os.Open(path)
+func DumpTo(inPath string, out io.Writer, continuous bool) error {
+ file, err := os.Open(inPath)
if err != nil {
return err
}
defer file.Close()
mapping, err := windows.CreateFileMapping(windows.Handle(file.Fd()), nil, windows.PAGE_READONLY, 0, 0, nil)
- if err != nil {
+ if err != nil && err != windows.ERROR_ALREADY_EXISTS {
return err
}
rl, err := newRingloggerFromMappingHandle(mapping, "DMP", windows.FILE_MAP_READ)
@@ -56,9 +31,26 @@ func DumpTo(out io.Writer, localSystem bool) error {
return err
}
defer rl.Close()
- _, err = rl.WriteTo(out)
- if err != nil {
- return err
+ if !continuous {
+ _, err = rl.WriteTo(out)
+ if err != nil {
+ return err
+ }
+ } else {
+ cursor := CursorAll
+ for {
+ var items []FollowLine
+ items, cursor = rl.FollowFromCursor(cursor)
+ for _, item := range items {
+ _, err = fmt.Fprintf(out, "%s: %s\n", item.Stamp.Format("2006-01-02 15:04:05.000000"), item.Line)
+ if errors.Is(err, io.EOF) {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ }
+ time.Sleep(time.Millisecond * 100)
+ }
}
return nil
}