carlos / platform Public

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

Plain git — no account needed to clone.

Download

Download this file

1//go:build linux
2
3package host
4
5import (
6 "os"
7 "path/filepath"
8 "testing"
9)
10
11func TestClaimMaskFilesystemCreateRefusesSymlinkParent(t *testing.T) {
12 var calls []string
13 plan9Fix2Systemctl(t, "enabled", &calls)
14 plan9Fix2MaskOwner(t)
15 root := t.TempDir()
16 victim := filepath.Join(root, "victim")
17 if err := os.Mkdir(victim, 0700); err != nil {
18 t.Fatal(err)
19 }
20 link := filepath.Join(root, "link")
21 if err := os.Symlink(victim, link); err != nil {
22 t.Fatal(err)
23 }
24 claimEdgeRuntimeMask = filepath.Join(link, "carlos-edge.service")
25 if _, err := createClaimEdgeMask(t.Context(), plan9Fix2Boot(t)); err == nil {
26 t.Error("created mask through symlink parent")
27 }
28 entries, err := os.ReadDir(victim)
29 if err != nil || len(entries) != 0 {
30 t.Fatalf("changed victim directory: %v, %v", entries, err)
31 }
32}
33
34func TestClaimMaskFilesystemDiscardRefusesSymlinkParent(t *testing.T) {
35 old := claimEdgeMaskOwner
36 t.Cleanup(func() { claimEdgeMaskOwner = old })
37 root := t.TempDir()
38 victim := filepath.Join(root, "victim")
39 if err := os.Mkdir(victim, 0700); err != nil {
40 t.Fatal(err)
41 }
42 path := filepath.Join(victim, "edge-mask")
43 if err := os.WriteFile(path, []byte("victim"), 0600); err != nil {
44 t.Fatal(err)
45 }
46 link := filepath.Join(root, "link")
47 if err := os.Symlink(victim, link); err != nil {
48 t.Fatal(err)
49 }
50 claimEdgeMaskOwner = filepath.Join(link, "edge-mask")
51 if err := discardClaimEdgeMaskRecord(claimEdgeMaskRecord{}, false); err == nil {
52 t.Error("discard accepted symlink parent")
53 }
54 raw, err := os.ReadFile(path)
55 if err != nil || string(raw) != "victim" {
56 t.Fatalf("changed victim record: %q, %v", raw, err)
57 }
58}
59