diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-10-29 04:32:43 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-10-29 04:33:13 +0900 |
| commit | a0b4e47acc228e48165966d8e139277b8f6f450e (patch) | |
| tree | d363a6781536ce946aa445271ca1d3df587e6031 /internal/outcome/sptmpdir.go | |
| parent | a52f7038e5a607dd0901244abb791c96deaf9c2d (diff) | |
internal/outcome: rename from app
This is less ambiguous, and more accurately describes the purpose of the package.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/outcome/sptmpdir.go')
| -rw-r--r-- | internal/outcome/sptmpdir.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/internal/outcome/sptmpdir.go b/internal/outcome/sptmpdir.go new file mode 100644 index 00000000..4776dad7 --- /dev/null +++ b/internal/outcome/sptmpdir.go @@ -0,0 +1,44 @@ +package outcome + +import ( + "encoding/gob" + + "hakurei.app/container/check" + "hakurei.app/container/comp" + "hakurei.app/container/fhs" + "hakurei.app/hst" + "hakurei.app/system" + "hakurei.app/system/acl" +) + +func init() { gob.Register(spTmpdirOp{}) } + +// spTmpdirOp sets up TMPDIR inside the container. +type spTmpdirOp struct{} + +func (s spTmpdirOp) toSystem(state *outcomeStateSys) error { + if state.Container.Flags&hst.FShareTmpdir != 0 { + tmpdir, tmpdirInst := s.commonPaths(state.outcomeState) + state.sys.Ensure(tmpdir, 0700) + state.sys.UpdatePermType(system.User, tmpdir, acl.Execute) + state.sys.Ensure(tmpdirInst, 01700) + state.sys.UpdatePermType(system.User, tmpdirInst, acl.Read, acl.Write, acl.Execute) + } + return nil +} + +func (s spTmpdirOp) toContainer(state *outcomeStateParams) error { + if state.Container.Flags&hst.FShareTmpdir != 0 { + _, tmpdirInst := s.commonPaths(state.outcomeState) + state.params.Bind(tmpdirInst, fhs.AbsTmp, comp.BindWritable) + } else { + state.params.Tmpfs(fhs.AbsTmp, 0, 01777) + } + return nil +} + +func (s spTmpdirOp) commonPaths(state *outcomeState) (tmpdir, tmpdirInst *check.Absolute) { + tmpdir = state.sc.SharePath.Append("tmpdir") + tmpdirInst = tmpdir.Append(state.identity.String()) + return +} |
