aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2024-12-28 14:39:01 +0900
committerOphestra <cat@gensokyo.uk>2024-12-28 14:39:01 +0900
commit9b206072faa0511eea65f243d36226248c0a098f (patch)
tree0abe20c637ba826344da099a0dc92704dd3b581e
parentb9e2003d5b078a0704ee751aec80cfe8b4434646 (diff)
cmd/fshim: ensure data directory
Ensuring home directory in shim causes the directory to be owned by the target user. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--cmd/fshim/ipc/payload.go2
-rw-r--r--cmd/fshim/main.go15
-rw-r--r--internal/app/start.go1
3 files changed, 18 insertions, 0 deletions
diff --git a/cmd/fshim/ipc/payload.go b/cmd/fshim/ipc/payload.go
index 3ef2dac1..92e51e8c 100644
--- a/cmd/fshim/ipc/payload.go
+++ b/cmd/fshim/ipc/payload.go
@@ -13,6 +13,8 @@ type Payload struct {
Exec [2]string
// bwrap config
Bwrap *bwrap.Config
+ // path to outer home directory
+ Home string
// sync fd
Sync *uintptr
diff --git a/cmd/fshim/main.go b/cmd/fshim/main.go
index 6b271227..5aece38f 100644
--- a/cmd/fshim/main.go
+++ b/cmd/fshim/main.go
@@ -81,6 +81,21 @@ func main() {
// not fatal
}
+ // ensure home directory as target user
+ if s, err := os.Stat(payload.Home); err != nil {
+ if os.IsNotExist(err) {
+ if err = os.Mkdir(payload.Home, 0700); err != nil {
+ fmsg.Fatalf("cannot create home directory: %v", err)
+ }
+ } else {
+ fmsg.Fatalf("cannot access home directory: %v", err)
+ }
+
+ // home directory is created, proceed
+ } else if !s.IsDir() {
+ fmsg.Fatalf("data path %q is not a directory", payload.Home)
+ }
+
var ic init0.Payload
// resolve argv0
diff --git a/internal/app/start.go b/internal/app/start.go
index 3736abdf..cc131817 100644
--- a/internal/app/start.go
+++ b/internal/app/start.go
@@ -49,6 +49,7 @@ func (a *app) Start() error {
Argv: a.seal.command,
Exec: shimExec,
Bwrap: a.seal.sys.bwrap,
+ Home: a.seal.sys.user.data,
Verbose: fmsg.Verbose(),
},