package app import ( "encoding/gob" "hakurei.app/container/bits" "hakurei.app/container/check" "hakurei.app/container/fhs" "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 { 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 { // mount inner /tmp from share so it shares persistence and storage behaviour of host /tmp _, tmpdirInst := s.commonPaths(state.outcomeState) state.params.Bind(tmpdirInst, fhs.AbsTmp, bits.BindWritable) 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 }