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 "syscall"
9 "testing"
10)
11
12// A umask 077 operator shell must not leave the guard directories closed to
13// the non-root units that exec the guard binary through them.
14func TestMkdirAllExactIgnoresUmask(t *testing.T) {
15 old := syscall.Umask(0o077)
16 defer syscall.Umask(old)
17 root := t.TempDir()
18 if err := os.Chmod(root, 0o700); err != nil {
19 t.Fatal(err)
20 }
21 dir := filepath.Join(root, "system", "guard", "identities")
22 if err := mkdirAllExact(dir, 0o755); err != nil {
23 t.Fatal(err)
24 }
25 for _, p := range []string{filepath.Join(root, "system"), filepath.Join(root, "system", "guard"), dir} {
26 st, err := os.Stat(p)
27 if err != nil {
28 t.Fatal(err)
29 }
30 if st.Mode().Perm() != 0o755 {
31 t.Fatalf("%s is %o, want 755", p, st.Mode().Perm())
32 }
33 }
34 if st, _ := os.Stat(root); st.Mode().Perm() != 0o700 {
35 t.Fatalf("an existing parent's mode changed: %o", st.Mode().Perm())
36 }
37 // A directory left 0700 by an earlier run is repaired.
38 if err := os.Chmod(dir, 0o700); err != nil {
39 t.Fatal(err)
40 }
41 if err := mkdirAllExact(dir, 0o755); err != nil {
42 t.Fatal(err)
43 }
44 if st, _ := os.Stat(dir); st.Mode().Perm() != 0o755 {
45 t.Fatalf("existing dir not repaired: %o", st.Mode().Perm())
46 }
47}
48
49// guard-arm makes its lock directory before the guard directories, under the
50// same <opt>/system parent: neither step may leave that parent closed, and a
51// parent an earlier run left 0700 is repaired.
52func TestGuardArmDirsIgnoreUmaskInOrder(t *testing.T) {
53 old := syscall.Umask(0o077)
54 defer syscall.Umask(old)
55 for _, preexisting := range []bool{false, true} {
56 opt := t.TempDir()
57 if preexisting {
58 if err := os.MkdirAll(filepath.Join(opt, "system"), 0o700); err != nil {
59 t.Fatal(err)
60 }
61 }
62 if err := prepareGuardArmLockDir(opt, systemRootDir(opt)); err != nil {
63 t.Fatal(err)
64 }
65 guard := systemGuardDir(opt)
66 for _, dir := range []string{guard, filepath.Join(guard, "identities")} {
67 if err := mkdirAllExact(dir, 0o755); err != nil {
68 t.Fatal(err)
69 }
70 }
71 for _, p := range []string{filepath.Join(opt, "system"), systemRootDir(opt), guard, filepath.Join(guard, "identities")} {
72 st, err := os.Stat(p)
73 if err != nil {
74 t.Fatal(err)
75 }
76 if st.Mode().Perm() != 0o755 {
77 t.Fatalf("preexisting=%v: %s is %o, want 755", preexisting, p, st.Mode().Perm())
78 }
79 }
80 }
81}
82