From e99d7affb0c128fa82722f9b3d79c99b5e5918cd Mon Sep 17 00:00:00 2001 From: Ophestra Date: Mon, 11 Aug 2025 02:52:32 +0900 Subject: container: use absolute for pathname This is simultaneously more efficient and less error-prone. This change caused minor API changes in multiple other packages. Signed-off-by: Ophestra --- container/container.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'container/container.go') diff --git a/container/container.go b/container/container.go index 54cee25f..3d6caa66 100644 --- a/container/container.go +++ b/container/container.go @@ -9,7 +9,6 @@ import ( "io" "os" "os/exec" - "path" "strconv" . "syscall" "time" @@ -53,11 +52,11 @@ type ( // Params holds container configuration and is safe to serialise. Params struct { // Working directory in the container. - Dir string + Dir *Absolute // Initial process environment. Env []string - // Absolute path of initial process in the container. Overrides name. - Path string + // Pathname of initial process in the container. + Path *Absolute // Initial process argv. Args []string // Deliver SIGINT to the initial process on context cancellation. @@ -188,14 +187,16 @@ func (p *Container) Serve() error { setup := p.setup p.setup = nil - if !path.IsAbs(p.Path) { + if p.Path == nil { p.cancel() - return msg.WrapErr(EINVAL, - fmt.Sprintf("invalid executable path %q", p.Path)) + return msg.WrapErr(EINVAL, "invalid executable pathname") } + // do not transmit nil + if p.Dir == nil { + p.Dir = AbsFHSRoot + } if p.SeccompRules == nil { - // do not transmit nil p.SeccompRules = make([]seccomp.NativeRule, 0) } @@ -232,11 +233,11 @@ func (p *Container) ProcessState() *os.ProcessState { // New returns the address to a new instance of [Container] that requires further initialisation before use. func New(ctx context.Context) *Container { - return &Container{ctx: ctx, Params: Params{Dir: FHSRoot, Ops: new(Ops)}} + return &Container{ctx: ctx, Params: Params{Ops: new(Ops)}} } // NewCommand calls [New] and initialises the [Params.Path] and [Params.Args] fields. -func NewCommand(ctx context.Context, pathname, name string, args ...string) *Container { +func NewCommand(ctx context.Context, pathname *Absolute, name string, args ...string) *Container { z := New(ctx) z.Path = pathname z.Args = append([]string{name}, args...) -- cgit v1.3.1