diff options
| author | Ophestra Umiker <cat@ophivana.moe> | 2024-09-04 01:20:12 +0900 |
|---|---|---|
| committer | Ophestra Umiker <cat@ophivana.moe> | 2024-09-04 01:20:12 +0900 |
| commit | d8f76f3b2594db4687c0203c4f2be8d3e4ef7740 (patch) | |
| tree | b1d8bfb5250d71094e397f8afa87710de1f1ca2f /internal/util | |
| parent | 7e6eb82195c650bc34829e5cca2d2296e78c0707 (diff) | |
rename to fortify and restructure
More sandbox features will be added and this will no longer track ego's features and behaviour.
Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'internal/util')
| -rw-r--r-- | internal/util/simple.go | 39 | ||||
| -rw-r--r-- | internal/util/std.go | 75 |
2 files changed, 114 insertions, 0 deletions
diff --git a/internal/util/simple.go b/internal/util/simple.go new file mode 100644 index 00000000..08ce23f6 --- /dev/null +++ b/internal/util/simple.go @@ -0,0 +1,39 @@ +package util + +import ( + "io" + "os" + "os/exec" +) + +func Which(file string) (string, bool) { + p, err := exec.LookPath(file) + return p, err == nil +} + +func CopyFile(dst, src string) error { + srcD, err := os.Open(src) + if err != nil { + return err + } + defer func() { + if srcD.Close() != nil { + // unreachable + panic("src file closed prematurely") + } + }() + + dstD, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) + if err != nil { + return err + } + defer func() { + if dstD.Close() != nil { + // unreachable + panic("dst file closed prematurely") + } + }() + + _, err = io.Copy(dstD, srcD) + return err +} diff --git a/internal/util/std.go b/internal/util/std.go new file mode 100644 index 00000000..5c37a0d7 --- /dev/null +++ b/internal/util/std.go @@ -0,0 +1,75 @@ +package util + +import ( + "errors" + "fmt" + "io/fs" + "os" + "path" + + "git.ophivana.moe/cat/fortify/internal/state" + "git.ophivana.moe/cat/fortify/internal/system" +) + +const ( + systemdCheckPath = "/run/systemd/system" + + home = "HOME" + xdgConfigHome = "XDG_CONFIG_HOME" + + PulseServer = "PULSE_SERVER" + PulseCookie = "PULSE_COOKIE" +) + +// SdBooted implements https://www.freedesktop.org/software/systemd/man/sd_booted.html +func SdBooted() bool { + _, err := os.Stat(systemdCheckPath) + if err != nil { + if system.V.Verbose { + if errors.Is(err, fs.ErrNotExist) { + fmt.Println("System not booted through systemd") + } else { + fmt.Println("Error accessing", systemdCheckPath+":", err.Error()) + } + } + return false + } + return true +} + +// DiscoverPulseCookie try various standard methods to discover the current user's PulseAudio authentication cookie +func DiscoverPulseCookie() string { + if p, ok := os.LookupEnv(PulseCookie); ok { + return p + } + + if p, ok := os.LookupEnv(home); ok { + p = path.Join(p, ".pulse-cookie") + if s, err := os.Stat(p); err != nil { + if !errors.Is(err, fs.ErrNotExist) { + state.Fatal("Error accessing PulseAudio cookie:", err) + // unreachable + return p + } + } else if !s.IsDir() { + return p + } + } + + if p, ok := os.LookupEnv(xdgConfigHome); ok { + p = path.Join(p, "pulse", "cookie") + if s, err := os.Stat(p); err != nil { + if !errors.Is(err, fs.ErrNotExist) { + state.Fatal("Error accessing PulseAudio cookie:", err) + // unreachable + return p + } + } else if !s.IsDir() { + return p + } + } + + state.Fatal(fmt.Sprintf("Cannot locate PulseAudio cookie (tried $%s, $%s/pulse/cookie, $%s/.pulse-cookie)", + PulseCookie, xdgConfigHome, home)) + return "" +} |
