Added
Link Here
|
0 |
- |
1 |
#include <sys/capsicum.h> |
|
|
2 |
#include <sys/filio.h> |
3 |
#include <sys/socket.h> |
4 |
#include <sys/wait.h> |
5 |
#include <netinet/in.h> |
6 |
#include <stdio.h> |
7 |
#include <stdlib.h> |
8 |
#include <unistd.h> |
9 |
|
10 |
#include <atf-c.h> |
11 |
|
12 |
#include "freebsd_test_suite/macros.h" |
13 |
|
14 |
const static uint64_t idx0_rights[] = { |
15 |
CAP_READ, |
16 |
CAP_WRITE, |
17 |
CAP_SEEK_TELL, |
18 |
CAP_MMAP, |
19 |
CAP_CREATE, |
20 |
CAP_FEXECVE, |
21 |
CAP_FSYNC, |
22 |
CAP_FTRUNCATE, |
23 |
CAP_LOOKUP, |
24 |
CAP_FCHDIR, |
25 |
CAP_FCHFLAGS, |
26 |
CAP_FCHMOD, |
27 |
CAP_FCHOWN, |
28 |
CAP_FCNTL, |
29 |
CAP_FLOCK, |
30 |
CAP_FPATHCONF, |
31 |
CAP_FSCK, |
32 |
CAP_FSTAT, |
33 |
CAP_FSTATFS, |
34 |
CAP_FUTIMES, |
35 |
CAP_ACCEPT, |
36 |
CAP_BIND, |
37 |
CAP_CONNECT, |
38 |
CAP_GETPEERNAME, |
39 |
CAP_GETSOCKNAME, |
40 |
CAP_GETSOCKOPT, |
41 |
CAP_LISTEN, |
42 |
CAP_PEELOFF, |
43 |
CAP_SETSOCKOPT, |
44 |
CAP_SHUTDOWN, |
45 |
CAP_ALL0, |
46 |
// The "unused" rights will fail cap_rights_is_valid |
47 |
//CAP_UNUSED0_44, |
48 |
//CAP_UNUSED0_57, |
49 |
}; |
50 |
|
51 |
const static uint64_t idx1_rights[] = { |
52 |
CAP_MAC_GET, |
53 |
CAP_MAC_SET, |
54 |
CAP_SEM_GETVALUE, |
55 |
CAP_SEM_POST, |
56 |
CAP_SEM_WAIT, |
57 |
CAP_EVENT, |
58 |
CAP_KQUEUE_EVENT, |
59 |
CAP_IOCTL, |
60 |
CAP_TTYHOOK, |
61 |
CAP_PDGETPID, |
62 |
CAP_PDWAIT, |
63 |
CAP_PDKILL, |
64 |
CAP_EXTATTR_DELETE, |
65 |
CAP_EXTATTR_GET, |
66 |
CAP_EXTATTR_LIST, |
67 |
CAP_EXTATTR_SET, |
68 |
CAP_ACL_CHECK, |
69 |
CAP_ACL_DELETE, |
70 |
CAP_ACL_GET, |
71 |
CAP_ACL_SET, |
72 |
CAP_KQUEUE_CHANGE, |
73 |
CAP_ALL1, |
74 |
// The "unused" rights will fail cap_rights_is_valid |
75 |
//CAP_UNUSED1_22, |
76 |
//CAP_UNUSED1_57, |
77 |
}; |
78 |
|
79 |
// Verify that rights with index 0 can be ORed |
80 |
ATF_TC_WITHOUT_HEAD(orable_0); |
81 |
ATF_TC_BODY(orable_0, tc) |
82 |
{ |
83 |
cap_rights_t r1, r2; |
84 |
unsigned long i, j; |
85 |
|
86 |
for (i = 0; i < nitems(idx0_rights) - 1; i++) { |
87 |
for (j = i + 1; j < nitems(idx0_rights); j++) { |
88 |
fprintf(stderr, "%lu | %lu\n", i, j); |
89 |
bzero(&r1, sizeof(r1)); |
90 |
bzero(&r2, sizeof(r2)); |
91 |
|
92 |
cap_rights_init(&r1, idx0_rights[i] | idx0_rights[j]); |
93 |
ATF_CHECK(cap_rights_is_valid(&r1)); |
94 |
|
95 |
cap_rights_init(&r2, idx0_rights[i]); |
96 |
cap_rights_set(&r2, idx0_rights[j]); |
97 |
ATF_CHECK(cap_rights_is_valid(&r2)); |
98 |
|
99 |
ATF_CHECK_EQ(r1.cr_rights[0], r2.cr_rights[0]); |
100 |
ATF_CHECK_EQ(r1.cr_rights[1], r2.cr_rights[1]); |
101 |
} |
102 |
} |
103 |
} |
104 |
|
105 |
// Verify that rights with index 1 can be ORed |
106 |
ATF_TC_WITHOUT_HEAD(orable_1); |
107 |
ATF_TC_BODY(orable_1, tc) |
108 |
{ |
109 |
cap_rights_t r1, r2; |
110 |
unsigned long i, j; |
111 |
|
112 |
for (i = 0; i < nitems(idx1_rights) - 1; i++) { |
113 |
for (j = i + 1; j < nitems(idx1_rights); j++) { |
114 |
fprintf(stderr, "%lu | %lu\n", i, j); |
115 |
bzero(&r1, sizeof(r1)); |
116 |
bzero(&r2, sizeof(r2)); |
117 |
|
118 |
cap_rights_init(&r1, idx1_rights[i] | idx1_rights[j]); |
119 |
ATF_CHECK(cap_rights_is_valid(&r1)); |
120 |
|
121 |
cap_rights_init(&r2, idx1_rights[i]); |
122 |
cap_rights_set(&r2, idx1_rights[j]); |
123 |
ATF_CHECK(cap_rights_is_valid(&r2)); |
124 |
|
125 |
ATF_CHECK_EQ(r1.cr_rights[0], r2.cr_rights[0]); |
126 |
ATF_CHECK_EQ(r1.cr_rights[1], r2.cr_rights[1]); |
127 |
} |
128 |
} |
129 |
} |
130 |
|
131 |
// Verify that rights with index 0 can be ORed with rights with index 1 |
132 |
ATF_TC_WITHOUT_HEAD(orable_01); |
133 |
ATF_TC_BODY(orable_01, tc) |
134 |
{ |
135 |
cap_rights_t r1, r2; |
136 |
unsigned long i, j; |
137 |
|
138 |
for (i = 0; i < nitems(idx0_rights); i++) { |
139 |
for (j = 0; j < nitems(idx1_rights); j++) { |
140 |
fprintf(stderr, "%lu | %lu\n", i, j); |
141 |
bzero(&r1, sizeof(r1)); |
142 |
bzero(&r2, sizeof(r2)); |
143 |
|
144 |
cap_rights_init(&r1, idx0_rights[i] | idx1_rights[j]); |
145 |
ATF_CHECK(cap_rights_is_valid(&r1)); |
146 |
|
147 |
cap_rights_init(&r2, idx0_rights[i]); |
148 |
cap_rights_set(&r2, idx1_rights[j]); |
149 |
ATF_CHECK(cap_rights_is_valid(&r2)); |
150 |
|
151 |
ATF_CHECK_EQ(r1.cr_rights[0], r2.cr_rights[0]); |
152 |
ATF_CHECK_EQ(r1.cr_rights[1], r2.cr_rights[1]); |
153 |
} |
154 |
} |
155 |
} |
156 |
|
157 |
ATF_TP_ADD_TCS(tp) |
158 |
{ |
159 |
|
160 |
ATF_TP_ADD_TC(tp, orable_0); |
161 |
ATF_TP_ADD_TC(tp, orable_1); |
162 |
ATF_TP_ADD_TC(tp, orable_01); |
163 |
|
164 |
return (atf_no_error()); |
165 |
} |