mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
fix: Fix sandbox policy generator for MacOS min permissions
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var tmpdirPatternRegex = regexp.MustCompile(`^/(private/)?var/folders/[^/]{2}/[^/]+/T/?$`)
|
||||
|
||||
// GetTmpdirParent returns the parent directory of TMPDIR if it matches the macOS pattern.
|
||||
// On macOS, TMPDIR is typically /var/folders/XX/YYY/T/ where XX and YYY are random.
|
||||
//
|
||||
// Returns both /var/ and /private/var/ versions since /var is a symlink to /private/var.
|
||||
// This is needed because package managers may reference either path.
|
||||
//
|
||||
// Returns empty slice if TMPDIR doesn't match the expected macOS pattern.
|
||||
func GetTmpdirParent() []string {
|
||||
tmpdir := os.Getenv("TMPDIR")
|
||||
if tmpdir == "" {
|
||||
return []string{}
|
||||
}
|
||||
|
||||
// macOS TMPDIR pattern: /var/folders/XX/YYY/T/ or /private/var/folders/XX/YYY/T/
|
||||
// where XX is 2 chars and YYY is random string
|
||||
pattern := tmpdirPatternRegex
|
||||
if !pattern.MatchString(tmpdir) {
|
||||
return []string{}
|
||||
}
|
||||
|
||||
// Remove trailing /T or /T/
|
||||
parent := strings.TrimSuffix(tmpdir, "/")
|
||||
parent = strings.TrimSuffix(parent, "/T")
|
||||
|
||||
// Return both /var/ and /private/var/ versions
|
||||
if strings.HasPrefix(parent, "/private/var/") {
|
||||
// Already has /private prefix
|
||||
withoutPrivate := strings.Replace(parent, "/private", "", 1)
|
||||
return []string{parent, withoutPrivate}
|
||||
} else if strings.HasPrefix(parent, "/var/") {
|
||||
// Missing /private prefix
|
||||
withPrivate := "/private" + parent
|
||||
return []string{parent, withPrivate}
|
||||
}
|
||||
|
||||
return []string{parent}
|
||||
}
|
||||
Reference in New Issue
Block a user