aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--fst/info.go5
-rw-r--r--main.go27
-rw-r--r--print.go33
3 files changed, 44 insertions, 21 deletions
diff --git a/fst/info.go b/fst/info.go
new file mode 100644
index 00000000..8f7fbdb7
--- /dev/null
+++ b/fst/info.go
@@ -0,0 +1,5 @@
+package fst
+
+type Info struct {
+ User int `json:"user"`
+}
diff --git a/main.go b/main.go
index 15215864..2449b681 100644
--- a/main.go
+++ b/main.go
@@ -16,7 +16,6 @@ import (
"git.gensokyo.uk/security/fortify/internal/app"
"git.gensokyo.uk/security/fortify/internal/fmsg"
"git.gensokyo.uk/security/fortify/internal/linux"
- "git.gensokyo.uk/security/fortify/internal/state"
"git.gensokyo.uk/security/fortify/internal/system"
)
@@ -128,24 +127,20 @@ func main() {
// Ignore errors; set is set for ExitOnError.
_ = set.Parse(args[1:])
- var (
- config *fst.Config
- instance *state.State
- name string
- )
-
- if len(set.Args()) != 1 {
+ switch len(set.Args()) {
+ case 0: // system
+ printShowSystem(short)
+ case 1: // instance
+ name := set.Args()[0]
+ config, instance := tryShort(name)
+ if config == nil {
+ config = tryPath(name)
+ }
+ printShowInstance(instance, config, short)
+ default:
fmsg.Fatal("show requires 1 argument")
- } else {
- name = set.Args()[0]
- config, instance = tryShort(name)
- }
-
- if config == nil {
- config = tryPath(name)
}
- printShow(instance, config, short)
fmsg.Exit(0)
case "app": // launch app from configuration file
if len(args) < 2 {
diff --git a/print.go b/print.go
index 702f35ea..e78861fa 100644
--- a/print.go
+++ b/print.go
@@ -16,14 +16,37 @@ import (
"git.gensokyo.uk/security/fortify/internal/state"
)
-func printShow(instance *state.State, config *fst.Config, short bool) {
+func printShowSystem(short bool) {
+ info := new(fst.Info)
+
+ // get fid by querying uid of aid 0
+ if uid, err := os.Uid(0); err != nil {
+ fmsg.Fatalf("cannot obtain uid from fsu: %v", err)
+ } else {
+ info.User = (uid / 10000) - 100
+ }
+
+ if flagJSON {
+ printJSON(info)
+ return
+ }
+
+ w := tabwriter.NewWriter(direct.Stdout, 0, 1, 4, ' ', 0)
+
+ fmt.Fprintf(w, "User:\t%d\n", info.User)
+
+ if err := w.Flush(); err != nil {
+ fmsg.Fatalf("cannot flush tabwriter: %v", err)
+ }
+}
+
+func printShowInstance(instance *state.State, config *fst.Config, short bool) {
if flagJSON {
- v := any(config)
if instance != nil {
- v = instance
+ printJSON(instance)
+ } else {
+ printJSON(config)
}
-
- printJSON(v)
return
}