carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package rootstate
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7)
8
9func TestPlan14TrustedLiveLink(t *testing.T) {
10 path := t.TempDir()
11 if err := os.Chmod(path, 0700); err != nil {
12 t.Fatal(err)
13 }
14 parent, err := os.Open(path)
15 if err != nil {
16 t.Fatal(err)
17 }
18 defer parent.Close()
19 d := &directory{file: parent, owner: uint32(os.Geteuid())}
20 if err := os.Symlink("/opt/carlos/versions/v1/app", filepath.Join(path, "live")); err != nil {
21 t.Fatal(err)
22 }
23 if got, err := d.readLink("live"); err != nil || got != "/opt/carlos/versions/v1/app" {
24 t.Fatalf("link: %q %v", got, err)
25 }
26 for _, name := range []string{"../live", "missing"} {
27 if _, err := d.readLink(name); err == nil {
28 t.Fatalf("accepted %s", name)
29 }
30 }
31 if err := os.WriteFile(filepath.Join(path, "file"), []byte("target"), 0600); err != nil {
32 t.Fatal(err)
33 }
34 if _, err := d.readLink("file"); err == nil {
35 t.Fatal("accepted regular file")
36 }
37 d.owner++
38 if _, err := d.readLink("live"); err == nil {
39 t.Fatal("accepted wrong owner")
40 }
41}
42