-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
//go:build openbsd
package main
import (
"fmt"
"golang.org/x/sys/unix"
)
func (a filesystemAccess) mode() string {
m := ""
if a.read {
m = m + "r"
}
if a.write {
m = m + "w"
}
if a.execute {
m = m + "x"
}
return m
}
func restrictFileAccessTo(allowList ...filesystemAccess) error {
for _, a := range allowList {
if err := unix.Unveil(a.path, a.mode()); err != nil {
return fmt.Errorf("Unveil error (%s:%s): %w", a.path, a.mode(), err)
}
}
if err := unix.UnveilBlock(); err != nil {
return fmt.Errorf("Unveil block error: %w", err)
}
return nil
}