app: ensure extra paths
The primary use case for extra perms is app-specific state directories, which may or may not exist (first run of any app). Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
parent
66ec0d882f
commit
b9e2003d5b
@ -81,6 +81,7 @@ type SandboxConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ExtraPermConfig struct {
|
type ExtraPermConfig struct {
|
||||||
|
Ensure bool `json:"ensure,omitempty"`
|
||||||
Path string `json:"path"`
|
Path string `json:"path"`
|
||||||
Read bool `json:"r,omitempty"`
|
Read bool `json:"r,omitempty"`
|
||||||
Write bool `json:"w,omitempty"`
|
Write bool `json:"w,omitempty"`
|
||||||
@ -88,8 +89,12 @@ type ExtraPermConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (e *ExtraPermConfig) String() string {
|
func (e *ExtraPermConfig) String() string {
|
||||||
buf := make([]byte, 0, 4+len(e.Path))
|
buf := make([]byte, 0, 5+len(e.Path))
|
||||||
buf = append(buf, '-', '-', '-', ':')
|
buf = append(buf, '-', '-', '-')
|
||||||
|
if e.Ensure {
|
||||||
|
buf = append(buf, '+')
|
||||||
|
}
|
||||||
|
buf = append(buf, ':')
|
||||||
buf = append(buf, []byte(e.Path)...)
|
buf = append(buf, []byte(e.Path)...)
|
||||||
if e.Read {
|
if e.Read {
|
||||||
buf[0] = 'r'
|
buf[0] = 'r'
|
||||||
|
@ -63,8 +63,9 @@ type appSeal struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type sealedExtraPerm struct {
|
type sealedExtraPerm struct {
|
||||||
name string
|
name string
|
||||||
perms acl.Perms
|
perms acl.Perms
|
||||||
|
ensure bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Seal seals the app launch context
|
// Seal seals the app launch context
|
||||||
@ -169,6 +170,7 @@ func (a *app) Seal(config *fst.Config) error {
|
|||||||
if p.Execute {
|
if p.Execute {
|
||||||
seal.extraPerms[i].perms = append(seal.extraPerms[i].perms, acl.Execute)
|
seal.extraPerms[i].perms = append(seal.extraPerms[i].perms, acl.Execute)
|
||||||
}
|
}
|
||||||
|
seal.extraPerms[i].ensure = p.Ensure
|
||||||
}
|
}
|
||||||
|
|
||||||
// map sandbox config to bwrap
|
// map sandbox config to bwrap
|
||||||
|
@ -297,6 +297,9 @@ func (seal *appSeal) setupShares(bus [2]*dbus.Config, os linux.System) error {
|
|||||||
if p == nil {
|
if p == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if p.ensure {
|
||||||
|
seal.sys.Ensure(p.name, 0700)
|
||||||
|
}
|
||||||
seal.sys.UpdatePermType(system.User, p.name, p.perms...)
|
seal.sys.UpdatePermType(system.User, p.name, p.perms...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user