aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/outcome/spcontainer.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-06-20 02:42:35 +0900
committerOphestra <cat@gensokyo.uk>2026-06-20 02:42:35 +0900
commit58ce1347188b94743ea05a1492c53d53d0e4fa91 (patch)
tree6b5e93b7620096dc6ae1a96bcbaf2a58ca66fb50 /internal/outcome/spcontainer.go
parent2066093343c34a7b05d7fb0f1082ce513f2b4c0f (diff)
internal/outcome: attempt nscd path-hiding if present
This avoids creating the mount point on musl setups which accomplishes nothing and can run into permission problems. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/outcome/spcontainer.go')
-rw-r--r--internal/outcome/spcontainer.go23
1 files changed, 14 insertions, 9 deletions
diff --git a/internal/outcome/spcontainer.go b/internal/outcome/spcontainer.go
index 97d98dd1..bfa5dbdc 100644
--- a/internal/outcome/spcontainer.go
+++ b/internal/outcome/spcontainer.go
@@ -18,13 +18,12 @@ import (
"hakurei.app/hst"
"hakurei.app/internal/acl"
"hakurei.app/internal/dbus"
+ "hakurei.app/internal/env"
"hakurei.app/internal/system"
"hakurei.app/internal/validate"
"hakurei.app/message"
)
-const varRunNscd = fhs.Var + "run/nscd"
-
func init() { gob.Register(new(spParamsOp)) }
// spParamsOp initialises unordered fields of [container.Params] and the
@@ -136,17 +135,23 @@ type spFilesystemOp struct {
}
func (s *spFilesystemOp) toSystem(state *outcomeStateSys) error {
- /* retrieve paths and hide them if they're made available in the sandbox;
-
- this feature tries to improve user experience of permissive defaults, and
- to warn about issues in custom configuration; it is NOT a security feature
- and should not be treated as such, ALWAYS be careful with what you bind */
+ // retrieve paths and hide them if they're made available in the sandbox
+ //
+ // this feature tries to improve user experience of permissive defaults, and
+ // to warn about issues in custom configuration; it is NOT a security feature
+ // and should not be treated as such, ALWAYS be careful with what you bind
hidePaths := []string{
state.sc.RuntimePath.String(),
state.sc.SharePath.String(),
+ }
- // this causes emulated passwd database to be bypassed on some /etc/ setups
- varRunNscd,
+ if state.Paths == nil || state.HasNscd {
+ hidePaths = append(hidePaths,
+ // this causes emulated passwd database to be bypassed on some /etc/
+ // setups, made optional to avoid needlessly creating it on
+ // non-glibc systems when invoking permissive defaults
+ env.VarRunNscd,
+ )
}
// dbus.Address does not go through syscallDispatcher