aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-03-15 03:04:27 +0900
committerOphestra <cat@gensokyo.uk>2025-03-15 03:04:27 +0900
commite64e7608ca47d25e81fb43d66838d9aa0ffd2e9a (patch)
treeac69e9e49380f95f0ea731c22116527a585c590f /internal
parent10a21ce3ef0566194d874b9da9b437971e968133 (diff)
sandbox: expose cancel behaviour
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal')
-rw-r--r--internal/sandbox/container.go10
-rw-r--r--internal/sandbox/container_test.go11
2 files changed, 21 insertions, 0 deletions
diff --git a/internal/sandbox/container.go b/internal/sandbox/container.go
index 97dd0ee0..5ee5a5b4 100644
--- a/internal/sandbox/container.go
+++ b/internal/sandbox/container.go
@@ -10,6 +10,7 @@ import (
"path"
"strconv"
"syscall"
+ "time"
"git.gensokyo.uk/security/fortify/helper/proc"
"git.gensokyo.uk/security/fortify/internal"
@@ -68,6 +69,9 @@ type (
Stdout io.Writer
Stderr io.Writer
+ Cancel func() error
+ WaitDelay time.Duration
+
cmd *exec.Cmd
ctx context.Context
}
@@ -130,6 +134,7 @@ func (p *Container) Start() error {
p.cmd = p.CommandContext(c)
p.cmd.Stdin, p.cmd.Stdout, p.cmd.Stderr = p.Stdin, p.Stdout, p.Stderr
+ p.cmd.Cancel, p.cmd.WaitDelay = p.Cancel, p.WaitDelay
p.cmd.Dir = "/"
p.cmd.SysProcAttr = &syscall.SysProcAttr{
Setsid: p.Flags&FAllowTTY == 0,
@@ -208,6 +213,11 @@ func (p *Container) Serve() error {
func (p *Container) Wait() error { defer p.cancel(); return p.cmd.Wait() }
+func (p *Container) String() string {
+ return fmt.Sprintf("argv: %q, flags: %#x, seccomp: %#x",
+ p.Args, p.Flags, int(p.Flags.seccomp(p.Seccomp)))
+}
+
func New(ctx context.Context, name string, args ...string) *Container {
return &Container{name: name, ctx: ctx,
InitParams: InitParams{Args: append([]string{name}, args...), Dir: "/", Ops: new(Ops)},
diff --git a/internal/sandbox/container_test.go b/internal/sandbox/container_test.go
index 6ef8cecd..566de75c 100644
--- a/internal/sandbox/container_test.go
+++ b/internal/sandbox/container_test.go
@@ -18,6 +18,7 @@ import (
"git.gensokyo.uk/security/fortify/internal/fmsg"
"git.gensokyo.uk/security/fortify/internal/sandbox"
"git.gensokyo.uk/security/fortify/ldd"
+ "git.gensokyo.uk/security/fortify/seccomp"
check "git.gensokyo.uk/security/fortify/test/sandbox"
)
@@ -146,6 +147,16 @@ func TestContainer(t *testing.T) {
}
}
+func TestContainerString(t *testing.T) {
+ container := sandbox.New(context.TODO(), "ldd", "/usr/bin/env")
+ container.Flags |= sandbox.FAllowDevel
+ container.Seccomp |= seccomp.FlagMultiarch
+ want := `argv: ["ldd" "/usr/bin/env"], flags: 0x2, seccomp: 0x2e`
+ if got := container.String(); got != want {
+ t.Errorf("String: %s, want %s", got, want)
+ }
+}
+
func TestHelperInit(t *testing.T) {
if len(os.Args) != 5 || os.Args[4] != "init" {
return