package rootstate import ( "os" "path/filepath" "testing" ) func TestPlan14TrustedLiveLink(t *testing.T) { path := t.TempDir() if err := os.Chmod(path, 0700); err != nil { t.Fatal(err) } parent, err := os.Open(path) if err != nil { t.Fatal(err) } defer parent.Close() d := &directory{file: parent, owner: uint32(os.Geteuid())} if err := os.Symlink("/opt/carlos/versions/v1/app", filepath.Join(path, "live")); err != nil { t.Fatal(err) } if got, err := d.readLink("live"); err != nil || got != "/opt/carlos/versions/v1/app" { t.Fatalf("link: %q %v", got, err) } for _, name := range []string{"../live", "missing"} { if _, err := d.readLink(name); err == nil { t.Fatalf("accepted %s", name) } } if err := os.WriteFile(filepath.Join(path, "file"), []byte("target"), 0600); err != nil { t.Fatal(err) } if _, err := d.readLink("file"); err == nil { t.Fatal("accepted regular file") } d.owner++ if _, err := d.readLink("live"); err == nil { t.Fatal("accepted wrong owner") } }