diff options
Diffstat (limited to 'internal/proc/priv/init')
| -rw-r--r-- | internal/proc/priv/init/early.go | 18 | ||||
| -rw-r--r-- | internal/proc/priv/init/main.go | 9 |
2 files changed, 18 insertions, 9 deletions
diff --git a/internal/proc/priv/init/early.go b/internal/proc/priv/init/early.go new file mode 100644 index 00000000..cc1c2f7e --- /dev/null +++ b/internal/proc/priv/init/early.go @@ -0,0 +1,18 @@ +package init0 + +import ( + "os" + "path" + + "git.gensokyo.uk/security/fortify/internal/fmsg" +) + +// used by the parent process + +// TryArgv0 calls [Main] if argv0 indicates the process is started from a file named "init". +func TryArgv0() { + if len(os.Args) > 0 && path.Base(os.Args[0]) == "init" { + Main() + fmsg.Exit(0) + } +} diff --git a/internal/proc/priv/init/main.go b/internal/proc/priv/init/main.go index f32fada7..d9f57b3e 100644 --- a/internal/proc/priv/init/main.go +++ b/internal/proc/priv/init/main.go @@ -5,7 +5,6 @@ import ( "os" "os/exec" "os/signal" - "path" "syscall" "time" @@ -38,14 +37,6 @@ func Main() { panic("unreachable") } - // re-exec - if len(os.Args) > 0 && (os.Args[0] != "fortify" || os.Args[1] != "init" || len(os.Args) != 2) && path.IsAbs(os.Args[0]) { - if err := syscall.Exec(os.Args[0], []string{"fortify", "init"}, os.Environ()); err != nil { - fmsg.Println("cannot re-exec self:", err) - // continue anyway - } - } - // receive setup payload var ( payload Payload |
