]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ovsdb-rbac.at
tests: Improve logging for async message control test.
[mirror_ovs.git] / tests / ovsdb-rbac.at
CommitLineData
d6db7b3c
LR
1AT_BANNER([OVSDB -- ovsdb-server rbac])
2
3AT_SETUP([ovsdb-server/rbac 2])
4AT_KEYWORDS([ovsdb server rbac])
5AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
6
7RBAC_PKIDIR="$(pwd)"
8RBAC_PKI="sh $abs_top_srcdir/utilities/ovs-pki.in --dir=$RBAC_PKIDIR/pki --log=$RBAC_PKIDIR/rbac-pki.log"
3391136c
TR
9$RBAC_PKI init
10$RBAC_PKI req+sign ovsdb-server switch
11$RBAC_PKI -u req+sign client-1 switch
12$RBAC_PKI -u req+sign client-2 switch
d6db7b3c
LR
13
14AT_DATA([schema],
15 [[{"name": "mydb",
16 "tables": {
17 "Root": {
18 "columns": {
19 "connections": {
20 "type": {
21 "key": {"type": "uuid", "refTable": "Connection"},
22 "min": 0,
23 "max": "unlimited"}}},
24 "isRoot": true},
25 "Connection": {
26 "columns": {
27 "target": {
28 "type": "string"},
29 "role": {
30 "type": "string"}}},
31 "RBAC_Role": {
32 "columns": {
33 "name": {"type": "string"},
34 "permissions": {
35 "type": {"key": {"type": "string"},
36 "value": {"type": "uuid",
37 "refTable": "RBAC_Permission",
38 "refType": "weak"},
39 "min": 0, "max": "unlimited"}}},
40 "isRoot": true},
41 "RBAC_Permission": {
42 "columns": {
43 "table": {"type": "string"},
44 "authorization": {"type": {"key": "string",
45 "min": 0,
46 "max": "unlimited"}},
47 "insert_delete": {"type": "boolean"},
48 "update" : {"type": {"key": "string",
49 "min": 0,
50 "max": "unlimited"}}},
51 "isRoot": true},
52 "fixed_colors": {
53 "columns": {
54 "name": {"type": "string"}, "value": {"type": "integer"}},
55 "indexes": [["name"]],
56 "isRoot": true},
57 "user_colors": {
58 "columns": {
59 "creator": {"type": "string"},
60 "name": {"type": "string"},
61 "value": {"type": "integer"}},
62 "indexes": [["name"]],
63 "isRoot": true},
64 "other_colors": {
65 "columns": {
66 "creator": {
67 "type": {"key": {"type": "string"},
68 "value": {"type": "string"},
69 "min": 0, "max": "unlimited"}},
70 "name": {"type": "string"},
71 "value": {"type": "integer"}},
72 "indexes": [["name"]],
73 "isRoot": true}
74 },
75 "version": "5.1.3",
76 "cksum": "12345678 9"
77}
78]])
79
80AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore])
81AT_CHECK(
82 [[ovsdb-tool transact db \
83 '["mydb",
84 {"op": "insert",
85 "table": "Root",
86 "row": {
87 "connections": ["set", [["named-uuid", "x"]]]}},
88 {"op": "insert",
89 "table": "Connection",
90 "uuid-name": "x",
91 "row": {"target": "pssl:0:127.0.0.1",
92 "role": "testrole"}},
93 {"op": "insert",
94 "table": "fixed_colors",
95 "row": {"name": "red",
96 "value": '16711680'}},
97 {"op": "insert",
98 "table": "RBAC_Role",
99 "row": {"name": "testrole",
100 "permissions": ["map", [["user_colors", ["named-uuid", "y"]],
101 ["other_colors", ["named-uuid", "z"]]]]}},
102 {"op": "insert",
103 "table": "RBAC_Permission",
104 "uuid-name": "y",
105 "row": {"authorization": "creator",
106 "insert_delete": true,
107 "table": "user_colors",
108 "update": ["set", ["name", "value"]]}},
109 {"op": "insert",
110 "table": "RBAC_Permission",
111 "uuid-name": "z",
112 "row": {"authorization": "creator:chassis",
113 "insert_delete": true,
114 "table": "user_colors",
115 "update": ["set", ["name", "value"]]}}
116]']], [0], [ignore], [ignore])
117
118AT_CHECK([ovsdb-server --log-file --detach --no-chdir --pidfile --remote=db:mydb,Root,connections \
119 --private-key=$RBAC_PKIDIR/ovsdb-server-privkey.pem \
120 --certificate=$RBAC_PKIDIR/ovsdb-server-cert.pem \
121 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
122 db], [0], [ignore], [ignore])
123PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT])
124
125# Test 1:
126# Attempt to insert a row into the "fixed_colors" table. This should
127# fail as there are no permissions for role "testrole" for this table.
128AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
129 --private-key=$RBAC_PKIDIR/client-1-privkey.pem \
130 --certificate=$RBAC_PKIDIR/client-1-cert.pem \
131 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
132 ['["mydb",
133 {"op": "insert",
134 "table": "fixed_colors",
135 "row": {"name": "chartreuse", "value": '8388352'}}
136 ]']], [0], [stdout], [ignore])
137cat stdout >> output
c724bd67 138AT_CHECK([uuidfilt stdout], [0], [[[{"details":"RBAC rules for client \"client-1\" role \"testrole\" prohibit row insertion into table \"fixed_colors\".","error":"permission error"}]]
d6db7b3c
LR
139], [ignore])
140
141# Test 2:
142# Attempt to insert a row into the "user_colors" table with a client ID that
143# does not match the value in the column used for authorization. This should
144# fail the authorization check for insertion.
145AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
146 --private-key=$RBAC_PKIDIR/client-1-privkey.pem \
147 --certificate=$RBAC_PKIDIR/client-1-cert.pem \
148 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
149 ['["mydb",
150 {"op": "insert",
151 "table": "user_colors",
152 "row": {"creator": "client-2", "name": "chartreuse", "value": '8388352'}}
153 ]']], [0], [stdout], [ignore])
154cat stdout >> output
c724bd67 155AT_CHECK([uuidfilt stdout], [0], [[[{"details":"RBAC rules for client \"client-1\" role \"testrole\" prohibit row insertion into table \"user_colors\".","error":"permission error"}]]
d6db7b3c
LR
156], [ignore])
157
158# Test 3:
159# Attempt to insert a row into the "user_colors" table. This should
160# succeed since role "testrole" has permissions for this table that
161# allow row insertion.
162AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
163 --private-key=$RBAC_PKIDIR/client-1-privkey.pem \
164 --certificate=$RBAC_PKIDIR/client-1-cert.pem \
165 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
166 ['["mydb",
167 {"op": "insert",
168 "table": "user_colors",
169 "row": {"creator": "client-1", "name": "chartreuse", "value": '8388352'}}
170 ]']], [0], [stdout], [ignore])
171cat stdout >> output
c724bd67 172AT_CHECK([uuidfilt stdout], [0], [[[{"uuid":["uuid","<0>"]}]]
d6db7b3c
LR
173], [ignore])
174
175# Test 4:
176# Attempt to update a column in the "user_colors" table. This should
177# succeed since role "testrole" has permissions for this table that
178# allow update of the "value" column when ID is equal to the value in
179# the "creator" column.
180AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
181 --private-key=$RBAC_PKIDIR/client-1-privkey.pem \
182 --certificate=$RBAC_PKIDIR/client-1-cert.pem \
183 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
184 ['["mydb",
185 {"op": "update",
186 "table": "user_colors",
187 "where": [["name", "==", "chartreuse"]],
188 "row": {"value": '8388353'}}
189 ]']], [0], [stdout], [ignore])
190cat stdout >> output
c724bd67 191AT_CHECK([uuidfilt stdout], [0], [[[{"count":1}]]
d6db7b3c
LR
192], [ignore])
193
194# Test 5:
195# Attempt to update a column in the "user_colors" table. Same as
196# previous test, but with a different client ID. This should fail
197# the RBAC authorization test because "client-2" does not match the
198# "creator" column for this row.
199AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
200 --private-key=$RBAC_PKIDIR/client-2-privkey.pem \
201 --certificate=$RBAC_PKIDIR/client-2-cert.pem \
202 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
203 ['["mydb",
204 {"op": "update",
205 "table": "user_colors",
206 "where": [["name", "==", "chartreuse"]],
207 "row": {"value": '8388354'}}
208 ]']], [0], [stdout], [ignore])
209cat stdout >> output
c724bd67 210AT_CHECK([uuidfilt stdout], [0], [[[{"details":"RBAC rules for client \"client-2\" role \"testrole\" prohibit modification of table \"user_colors\".","error":"permission error"}]]
d6db7b3c
LR
211], [ignore])
212
213# Test 6:
214# Attempt to mutate a column in the "user_colors" table. This should
215# succeed since role "testrole" has permissions for this table that
216# allow update of the "value" column when ID is equal to the value in
217# the "creator" column.
218AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
219 --private-key=$RBAC_PKIDIR/client-1-privkey.pem \
220 --certificate=$RBAC_PKIDIR/client-1-cert.pem \
221 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
222 ['["mydb",
223 {"op": "mutate",
224 "table": "user_colors",
225 "where": [["name", "==", "chartreuse"]],
226 "mutations": [["value", "+=", '10']]}
227 ]']], [0], [stdout], [ignore])
228cat stdout >> output
c724bd67 229AT_CHECK([uuidfilt stdout], [0], [[[{"count":1}]]
d6db7b3c
LR
230], [ignore])
231
232# Test 7:
233# Attempt to mutate a column in the "user_colors" table. Same as
234# previous test, but with a different client ID. This should fail
235# the RBAC authorization test because "client-2" does not match the
236# "creator" column for this row.
237AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
238 --private-key=$RBAC_PKIDIR/client-2-privkey.pem \
239 --certificate=$RBAC_PKIDIR/client-2-cert.pem \
240 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
241 ['["mydb",
242 {"op": "mutate",
243 "table": "user_colors",
244 "where": [["name", "==", "chartreuse"]],
245 "mutations": [["value", "+=", '10']]}
246 ]']], [0], [stdout], [ignore])
247cat stdout >> output
c724bd67 248AT_CHECK([uuidfilt stdout], [0], [[[{"details":"RBAC rules for client \"client-2\" role \"testrole\" prohibit mutate operation on table \"user_colors\".","error":"permission error"}]]
d6db7b3c
LR
249], [ignore])
250
251# Test 8:
252# Attempt to delete a row from the "user_colors" table. This should fail
253# the RBAC authorization test because "client-2" does not match the
254# "creator" column for this row.
255AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
256 --private-key=$RBAC_PKIDIR/client-2-privkey.pem \
257 --certificate=$RBAC_PKIDIR/client-2-cert.pem \
258 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
259 ['["mydb",
260 {"op": "delete",
261 "table": "user_colors",
262 "where": [["name", "==", "chartreuse"]]}
263 ]']], [0], [stdout], [ignore])
264cat stdout >> output
c724bd67 265AT_CHECK([uuidfilt stdout], [0], [[[{"details":"RBAC rules for client \"client-2\" role \"testrole\" prohibit row deletion from table \"user_colors\".","error":"permission error"}]]
d6db7b3c
LR
266], [ignore])
267
268# Test 9:
269# Attempt to delete a row from the "user_colors" table. This should pass
270# the RBAC authorization test because "client-1" does matches the
271# "creator" column for this row.
272AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
273 --private-key=$RBAC_PKIDIR/client-1-privkey.pem \
274 --certificate=$RBAC_PKIDIR/client-1-cert.pem \
275 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
276 ['["mydb",
277 {"op": "delete",
278 "table": "user_colors",
279 "where": [["name", "==", "chartreuse"]]}
280 ]']], [0], [stdout], [ignore])
281cat stdout >> output
c724bd67 282AT_CHECK([uuidfilt stdout], [0], [[[{"count":1}]]
d6db7b3c
LR
283], [ignore])
284
285# Test 10:
286# Attempt to insert a row into the "other_colors" table. This should
287# succeed since role "testrole" has permissions for this table that
288# allow row insertion.
289AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
290 --private-key=$RBAC_PKIDIR/client-1-privkey.pem \
291 --certificate=$RBAC_PKIDIR/client-1-cert.pem \
292 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
293 ['["mydb",
294 {"op": "insert",
295 "table": "other_colors",
296 "row": {"creator": ["map",[["chassis", "client-1"]]], "name": "seafoam", "value": '7466680'}}
297 ]']], [0], [stdout], [ignore])
298cat stdout >> output
c724bd67 299AT_CHECK([uuidfilt stdout], [0], [[[{"uuid":["uuid","<0>"]}]]
d6db7b3c
LR
300], [ignore])
301
302# Test 11:
303# Attempt to update a column in the "user_colors" table. This should
304# succeed since role "testrole" has permissions for this table that
305# allow update of the "value" column when ID is equal to the value in
306# the "creator" column.
307AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
308 --private-key=$RBAC_PKIDIR/client-1-privkey.pem \
309 --certificate=$RBAC_PKIDIR/client-1-cert.pem \
310 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
311 ['["mydb",
312 {"op": "update",
313 "table": "other_colors",
314 "where": [["name", "==", "seafoam"]],
315 "row": {"value": '8388353'}}
316 ]']], [0], [stdout], [ignore])
317cat stdout >> output
c724bd67 318AT_CHECK([uuidfilt stdout], [0], [[[{"count":1}]]
d6db7b3c
LR
319], [ignore])
320
321# Test 12:
322# Attempt to update a column in the "other_colors" table. Same as
323# previous test, but with a different client ID. This should fail
324# the RBAC authorization test because "client-2" does not match the
325# "creator" column for this row.
326AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
327 --private-key=$RBAC_PKIDIR/client-2-privkey.pem \
328 --certificate=$RBAC_PKIDIR/client-2-cert.pem \
329 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
330 ['["mydb",
331 {"op": "update",
332 "table": "other_colors",
333 "where": [["name", "==", "seafoam"]],
334 "row": {"value": '8388354'}}
335 ]']], [0], [stdout], [ignore])
336cat stdout >> output
c724bd67 337AT_CHECK([uuidfilt stdout], [0], [[[{"details":"RBAC rules for client \"client-2\" role \"testrole\" prohibit modification of table \"other_colors\".","error":"permission error"}]]
d6db7b3c
LR
338], [ignore])
339
340# Test 13:
341# Attempt to delete a row from the "other_colors" table. This should fail
342# the RBAC authorization test because "client-2" does not match the
343# "creator" column for this row.
344AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
345 --private-key=$RBAC_PKIDIR/client-2-privkey.pem \
346 --certificate=$RBAC_PKIDIR/client-2-cert.pem \
347 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
348 ['["mydb",
349 {"op": "delete",
350 "table": "other_colors",
351 "where": [["name", "==", "seafoam"]]}
352 ]']], [0], [stdout], [ignore])
353cat stdout >> output
c724bd67 354AT_CHECK([uuidfilt stdout], [0], [[[{"details":"RBAC rules for client \"client-2\" role \"testrole\" prohibit row deletion from table \"other_colors\".","error":"permission error"}]]
d6db7b3c
LR
355], [ignore])
356
357# Test 14:
358# Attempt to delete a row from the "other_colors" table. This should pass
359# the RBAC authorization test because "client-1" does matches the
360# "creator" column for this row.
361AT_CHECK([ovsdb-client transact ssl:127.0.0.1:$SSL_PORT \
362 --private-key=$RBAC_PKIDIR/client-1-privkey.pem \
363 --certificate=$RBAC_PKIDIR/client-1-cert.pem \
364 --ca-cert=$RBAC_PKIDIR/pki/switchca/cacert.pem \
365 ['["mydb",
366 {"op": "delete",
367 "table": "other_colors",
368 "where": [["name", "==", "seafoam"]]}
369 ]']], [0], [stdout], [ignore])
370cat stdout >> output
c724bd67 371AT_CHECK([uuidfilt stdout], [0], [[[{"count":1}]]
d6db7b3c
LR
372], [ignore])
373
374OVSDB_SERVER_SHUTDOWN
375AT_CLEANUP