-
Notifications
You must be signed in to change notification settings - Fork 76
Expand file tree
/
Copy pathlabel_linux_test.go
More file actions
127 lines (114 loc) · 3.43 KB
/
Copy pathlabel_linux_test.go
File metadata and controls
127 lines (114 loc) · 3.43 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package label
import (
"errors"
"os"
"testing"
"github.com/opencontainers/selinux/internal/impl"
)
func needSELinux(t *testing.T) {
t.Helper()
if !impl.GetEnabled() {
t.Skip("SELinux not enabled, skipping.")
}
}
func TestInit(t *testing.T) {
needSELinux(t)
var testNull []string
_, _, err := InitLabels(testNull)
if err != nil {
t.Fatalf("InitLabels failed: %v:", err)
}
testDisabled := []string{"disable"}
plabel, mlabel, err := InitLabels(testDisabled)
if err != nil {
t.Fatalf("InitLabels(disabled) failed: %v", err)
}
if plabel != "" {
t.Fatalf("InitLabels(disabled): %q not empty", plabel)
}
if mlabel != "system_u:object_r:container_file_t:s0:c1022,c1023" {
t.Fatalf("InitLabels Disabled mlabel Failed, %s", mlabel)
}
testUser := []string{"user:user_u", "role:user_r", "type:user_t", "level:s0:c1,c15"}
plabel, mlabel, err = InitLabels(testUser)
if err != nil {
t.Fatalf("InitLabels(user) failed: %v", err)
}
if plabel != "user_u:user_r:user_t:s0:c1,c15" || (mlabel != "user_u:object_r:container_file_t:s0:c1,c15" && mlabel != "user_u:object_r:svirt_sandbox_file_t:s0:c1,c15") {
t.Fatalf("InitLabels(user) failed (plabel=%q, mlabel=%q)", plabel, mlabel)
}
testBadData := []string{"user", "role:user_r", "type:user_t", "level:s0:c1,c15"}
if _, _, err = InitLabels(testBadData); err == nil {
t.Fatal("InitLabels(bad): expected error, got nil")
}
}
func TestRelabel(t *testing.T) {
needSELinux(t)
testdir := t.TempDir()
label := "system_u:object_r:container_file_t:s0:c1,c2"
if err := Relabel(testdir, "", true); err != nil {
t.Fatalf("Relabel with no label failed: %v", err)
}
if err := Relabel(testdir, label, true); err != nil {
t.Fatalf("Relabel shared failed: %v", err)
}
if err := Relabel(testdir, label, false); err != nil {
t.Fatalf("Relabel unshared failed: %v", err)
}
if err := Relabel("/etc", label, false); err == nil {
t.Fatalf("Relabel /etc succeeded")
}
if err := Relabel("/", label, false); err == nil {
t.Fatalf("Relabel / succeeded")
}
if err := Relabel("/usr", label, false); err == nil {
t.Fatalf("Relabel /usr succeeded")
}
if err := Relabel("/usr/", label, false); err == nil {
t.Fatalf("Relabel /usr/ succeeded")
}
if err := Relabel("/etc/passwd", label, false); err == nil {
t.Fatalf("Relabel /etc/passwd succeeded")
}
if home := os.Getenv("HOME"); home != "" {
if err := Relabel(home, label, false); err == nil {
t.Fatalf("Relabel %s succeeded", home)
}
}
}
func TestValidate(t *testing.T) {
if err := Validate("zZ"); !errors.Is(err, ErrIncompatibleLabel) {
t.Fatalf("Expected incompatible error, got %v", err)
}
if err := Validate("Z"); err != nil {
t.Fatal(err)
}
if err := Validate("z"); err != nil {
t.Fatal(err)
}
if err := Validate(""); err != nil {
t.Fatal(err)
}
}
func TestIsShared(t *testing.T) {
if shared := IsShared("Z"); shared {
t.Fatalf("Expected label `Z` to not be shared, got %v", shared)
}
if shared := IsShared("z"); !shared {
t.Fatalf("Expected label `z` to be shared, got %v", shared)
}
if shared := IsShared("Zz"); !shared {
t.Fatalf("Expected label `Zz` to be shared, got %v", shared)
}
}
func TestFileLabel(t *testing.T) {
needSELinux(t)
testUser := []string{"filetype:test_file_t", "level:s0:c1,c15"}
_, mlabel, err := InitLabels(testUser)
if err != nil {
t.Fatalf("InitLabels(user) failed: %v", err)
}
if mlabel != "system_u:object_r:test_file_t:s0:c1,c15" {
t.Fatalf("InitLabels(filetype) failed: %v", err)
}
}