Files
kandev/apps/backend/internal/launcher/data_dir.go
T
2026-06-20 19:40:15 +01:00

42 lines
816 B
Go

package launcher
import (
"fmt"
"os"
"path/filepath"
)
func ensureDataDir() error {
dir := resolveDataDir()
if err := rejectSymlinkComponents(dir); err != nil {
return err
}
if err := os.MkdirAll(dir, 0o700); err != nil {
return err
}
if err := os.Chmod(dir, 0o700); err != nil {
return err
}
return nil
}
func rejectSymlinkComponents(target string) error {
abs, err := filepath.Abs(target)
if err != nil {
return err
}
for current := abs; ; current = filepath.Dir(current) {
info, err := os.Lstat(current)
if err == nil && info.Mode()&os.ModeSymlink != 0 {
return fmt.Errorf("refusing to use symlinked data path component: %s", current)
}
if err != nil && !os.IsNotExist(err) {
return err
}
parent := filepath.Dir(current)
if parent == current {
return nil
}
}
}