//go:build linux package release import ( "golang.org/x/sys/unix" "os" "path/filepath" "testing" "github.com/carlosframework/platform/internal/rootstate" ) func TestPlan14P3GenerationLegacyPinBootBoundary(t *testing.T) { path := filepath.Join(t.TempDir(), "app") if err := os.WriteFile(path, []byte("app"), 0600); err != nil { t.Fatal(err) } f, err := os.Open(path) if err != nil { t.Fatal(err) } defer f.Close() id, err := rootstate.Identity(f) if err != nil { t.Fatal(err) } current, err := rootstate.ObjectIdentity(f) if err != nil { t.Fatal(err) } if err := generationFileIdentity(path, id, rootstate.FileIdentity{}, current.Boot); err != nil { t.Fatal(err) } for _, boot := range []string{"", "old-boot"} { if err := generationFileIdentity(path, id, rootstate.FileIdentity{}, boot); err == nil { t.Fatal("legacy identity accepted across boot") } } } func TestPlan14GenerationPinsPrivateMount(t *testing.T) { const path = "/usr/bin/true" for _, p := range []string{"/", "/usr", "/usr/bin", path} { var st unix.Stat_t if err := unix.Lstat(p, &st); err != nil { t.Fatal(err) } if st.Uid != 0 { t.Skipf("root-owned fixture unavailable: %s uid=%d", p, st.Uid) } } f, err := rootstate.OpenAuthorityFile(path) if os.IsNotExist(err) { t.Skip("system executable unavailable") } if err != nil { t.Fatal(err) } defer f.Close() id, err := rootstate.Identity(f) if err != nil { t.Fatal(err) } proof, err := rootstate.PersistentIdentity(f) if err != nil { t.Fatal(err) } proof.MountRoot, proof.MountPoint = "/usr/bin", "/usr/bin" if err = generationFileIdentity(path, id, proof, proof.Boot); err != nil { t.Fatal("private mount proof refused by pins", err) } proof.MountRoot = "/substituted" if err = generationFileIdentity(path, id, proof, proof.Boot); err == nil { t.Fatal("substituted source accepted") } }