forked from wrenn/wrenn
Fix runtime env leaking into templates, add hostname to /etc/hosts
- Filter out user-specific env vars (HOME, USER, LOGNAME, SHELL, etc.) from template default_env so they don't override envd's per-user resolution. Fixes bash sourcing /root/.bashrc as wrenn-user. - Keep WRENN_SANDBOX (legitimate runtime flag), only filter per-sandbox IDs (WRENN_SANDBOX_ID, WRENN_TEMPLATE_ID). - Add "127.0.0.1 sandbox" to /etc/hosts in wrenn-init.sh so sudo can resolve the hostname. Fixes "unable to resolve host sandbox" error. - Move capsule lifecycle buttons (Pause/Resume/Snapshot/Destroy) to the same row as Stats/Files/Terminal tabs. - Show vCPU/Memory for all template types with Required/Recommended tooltips on the user templates page.
This commit is contained in:
@ -420,8 +420,10 @@ func (s *BuildService) executeBuild(ctx context.Context, buildIDStr string) {
|
||||
}
|
||||
|
||||
// Capture the final user and env vars as template defaults.
|
||||
// Filter out user-specific and runtime vars that should be resolved at
|
||||
// sandbox creation time, not baked in from the build environment.
|
||||
templateDefaultUser := bctx.User
|
||||
templateDefaultEnv := bctx.EnvVars
|
||||
templateDefaultEnv := filterBuildEnv(bctx.EnvVars)
|
||||
|
||||
// Phase 3: Post-build (as root) — cleanup.
|
||||
bctx.User = "root"
|
||||
@ -739,3 +741,27 @@ func (s *BuildService) uploadAndExtractArchive(
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// runtimeEnvVars lists env vars that are user- or session-specific and should
|
||||
// not be persisted into template defaults. These are resolved at runtime by
|
||||
// envd based on the actual user and sandbox context.
|
||||
var runtimeEnvVars = map[string]bool{
|
||||
"HOME": true, "USER": true, "LOGNAME": true, "SHELL": true,
|
||||
"PWD": true, "OLDPWD": true, "HOSTNAME": true, "TERM": true,
|
||||
"SHLVL": true, "_": true,
|
||||
// Per-sandbox identifiers set by envd at boot via MMDS.
|
||||
"WRENN_SANDBOX_ID": true, "WRENN_TEMPLATE_ID": true,
|
||||
}
|
||||
|
||||
// filterBuildEnv returns a copy of envVars with runtime/user-specific
|
||||
// variables removed so they don't override envd's per-user resolution.
|
||||
func filterBuildEnv(envVars map[string]string) map[string]string {
|
||||
filtered := make(map[string]string, len(envVars))
|
||||
for k, v := range envVars {
|
||||
if runtimeEnvVars[k] {
|
||||
continue
|
||||
}
|
||||
filtered[k] = v
|
||||
}
|
||||
return filtered
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user