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 --- hst/config.go | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'hst/config.go') diff --git a/hst/config.go b/hst/config.go index 8c883c9a..73fb21b8 100644 --- a/hst/config.go +++ b/hst/config.go @@ -2,12 +2,15 @@ package hst import ( + "hakurei.app/container" "hakurei.app/system" "hakurei.app/system/dbus" ) const Tmp = "/.hakurei" +var AbsTmp = container.MustAbs(Tmp) + // Config is used to seal an app implementation. type Config struct { // reverse-DNS style arbitrary identifier string from config; @@ -16,7 +19,7 @@ type Config struct { ID string `json:"id"` // absolute path to executable file - Path string `json:"path,omitempty"` + Path *container.Absolute `json:"path,omitempty"` // final args passed to container init Args []string `json:"args"` @@ -35,12 +38,12 @@ type Config struct { // passwd username in container, defaults to passwd name of target uid or chronos Username string `json:"username,omitempty"` - // absolute path to shell, empty for host shell - Shell string `json:"shell,omitempty"` + // absolute path to shell + Shell *container.Absolute `json:"shell"` // absolute path to home directory in the init mount namespace - Data string `json:"data"` - // directory to enter and use as home in the container mount namespace, empty for Data - Dir string `json:"dir"` + Data *container.Absolute `json:"data"` + // directory to enter and use as home in the container mount namespace, nil for Data + Dir *container.Absolute `json:"dir,omitempty"` // extra acl ops, dispatches before container init ExtraPerms []*ExtraPermConfig `json:"extra_perms,omitempty"` @@ -55,21 +58,24 @@ type Config struct { // ExtraPermConfig describes an acl update op. type ExtraPermConfig struct { - Ensure bool `json:"ensure,omitempty"` - Path string `json:"path"` - Read bool `json:"r,omitempty"` - Write bool `json:"w,omitempty"` - Execute bool `json:"x,omitempty"` + Ensure bool `json:"ensure,omitempty"` + Path *container.Absolute `json:"path"` + Read bool `json:"r,omitempty"` + Write bool `json:"w,omitempty"` + Execute bool `json:"x,omitempty"` } func (e *ExtraPermConfig) String() string { - buf := make([]byte, 0, 5+len(e.Path)) + if e.Path == nil { + return "" + } + buf := make([]byte, 0, 5+len(e.Path.String())) buf = append(buf, '-', '-', '-') if e.Ensure { buf = append(buf, '+') } buf = append(buf, ':') - buf = append(buf, []byte(e.Path)...) + buf = append(buf, []byte(e.Path.String())...) if e.Read { buf[0] = 'r' } -- cgit v1.3.1