diff options
Diffstat (limited to 'internal/state/track.go')
| -rw-r--r-- | internal/state/track.go | 57 |
1 files changed, 44 insertions, 13 deletions
diff --git a/internal/state/track.go b/internal/state/track.go index 913d684d..96e9353d 100644 --- a/internal/state/track.go +++ b/internal/state/track.go @@ -10,6 +10,8 @@ import ( "os/exec" "path" "strconv" + "strings" + "text/tabwriter" "git.ophivana.moe/cat/fortify/internal/system" ) @@ -22,13 +24,15 @@ var ( statePath string cleanupCandidate []string xcbActionComplete bool + enablements *Enablements ) type launcherState struct { - PID int - Launcher string - Argv []string - Command []string + PID int + Launcher string + Argv []string + Command []string + Capability Enablements } func init() { @@ -40,15 +44,41 @@ func Early() { return } - launchers, err := readLaunchers() + launchers, err := readLaunchers(u.Uid) if err != nil { fmt.Println("Error reading launchers:", err) os.Exit(1) } - fmt.Println("\tPID\tLauncher") + stdout := tabwriter.NewWriter(os.Stdout, 0, 1, 4, ' ', 0) + if !system.V.Verbose { + _, _ = fmt.Fprintln(stdout, "\tPID\tEnablements\tLauncher\tCommand") + } else { + _, _ = fmt.Fprintln(stdout, "\tPID\tArgv") + } + for _, state := range launchers { - fmt.Printf("\t%d\t%s\nCommand: %s\nArgv: %s\n", state.PID, state.Launcher, state.Command, state.Argv) + enablementsDescription := strings.Builder{} + for i := Enablement(0); i < enableLength; i++ { + if state.Capability.Has(i) { + enablementsDescription.WriteString(", " + i.String()) + } + } + if enablementsDescription.Len() == 0 { + enablementsDescription.WriteString("none") + } + + if !system.V.Verbose { + _, _ = fmt.Fprintf(stdout, "\t%d\t%s\t%s\t%s\n", + state.PID, strings.TrimPrefix(enablementsDescription.String(), ", "), state.Launcher, + state.Command) + } else { + _, _ = fmt.Fprintf(stdout, "\t%d\t%s\n", + state.PID, state.Argv) + } + } + if err = stdout.Flush(); err != nil { + fmt.Println("warn: error formatting output:", err) } os.Exit(0) @@ -58,10 +88,11 @@ func Early() { func SaveProcess(uid string, cmd *exec.Cmd) error { statePath = path.Join(system.V.RunDir, uid, strconv.Itoa(cmd.Process.Pid)) state := launcherState{ - PID: cmd.Process.Pid, - Launcher: cmd.Path, - Argv: cmd.Args, - Command: command, + PID: cmd.Process.Pid, + Launcher: cmd.Path, + Argv: cmd.Args, + Command: command, + Capability: *enablements, } if err := os.Mkdir(path.Join(system.V.RunDir, uid), 0700); err != nil && !errors.Is(err, fs.ErrExist) { @@ -81,10 +112,10 @@ func SaveProcess(uid string, cmd *exec.Cmd) error { } } -func readLaunchers() ([]*launcherState, error) { +func readLaunchers(uid string) ([]*launcherState, error) { var f *os.File var r []*launcherState - launcherPrefix := path.Join(system.V.RunDir, u.Uid) + launcherPrefix := path.Join(system.V.RunDir, uid) if pl, err := os.ReadDir(launcherPrefix); err != nil { return nil, err |
