//go:build linux package hostbox import ( "path/filepath" "strings" "github.com/carlosframework/platform/internal/rootstate" ) func censusVendorUnitLink(root, path string) bool { rel, err := filepath.Rel(root, path) if err != nil || !filepath.IsLocal(rel) { return false } parts := strings.Split(rel, string(filepath.Separator)) if len(parts) > 2 || (len(parts) == 2 && !strings.HasSuffix(parts[0], ".wants") && !strings.HasSuffix(parts[0], ".requires")) { return false } for _, part := range parts { if strings.HasPrefix(part, "carlos") { return false } } target, err := rootstate.ReadTrustedLink(path) if err != nil { return false } if !filepath.IsAbs(target) { target = filepath.Join(filepath.Dir(path), target) } target = filepath.Clean(target) if filepath.Dir(target) != "/usr/lib/systemd/system" && filepath.Dir(target) != "/lib/systemd/system" { return false } if strings.HasPrefix(filepath.Base(target), "carlos") { return false } resolved, err := filepath.EvalSymlinks(target) if err != nil || filepath.Dir(resolved) != "/usr/lib/systemd/system" && filepath.Dir(resolved) != "/lib/systemd/system" { return false } f, err := rootstate.OpenTrustedFile(resolved) if err != nil { return false } return f.Close() == nil }