blob: a58666e350285bba5efefa6a7995bdeb619dc284 [file] [log] [blame]
vapierd13d74b2006-02-11 07:24:00 +00001/*
2 * Copyright (c) International Business Machines Corp., 2004
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12 * the GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
19/*
20 * TEST CASE : right.c
21 *
22 * VARIATIONS : 63
23 *
24 * API'S TESTED : dm_request_right
25 * dm_release_right
26 * dm_query_right
27 * dm_upgrade_right
28 * dm_downgrade_right
29 */
30#include <string.h>
31#include <stdio.h>
32#include <errno.h>
33#include <pthread.h>
34#include <unistd.h>
35#include <sys/stat.h>
36#include <sys/mount.h>
37#include <fcntl.h>
38#include "dm_test.h"
39
40pthread_t tid;
41dm_sessid_t sid;
42char dmMsgBuf[4096];
43char command[4096];
44char *mountPt;
45char *deviceNm;
46char DummyFile[FILENAME_MAX];
47char DummySubdir[FILENAME_MAX];
48int fd_f;
49int runTestOnCreate;
50
51void *Thread(void *);
52
53int main(int argc, char **argv)
54{
55
56 char *varstr;
57 int rc;
58 char *szSessionInfo = "dm_test session info";
59 dm_eventset_t events;
60
61 DMOPT_PARSE(argc, argv);
62 DMLOG_START();
63
64 DMEV_ZERO(events);
65 DMEV_SET(DM_EVENT_MOUNT, events);
subrata_modakbdbaec52009-02-26 12:14:51 +000066
vapierd13d74b2006-02-11 07:24:00 +000067 /* CANNOT DO ANYTHING WITHOUT SUCCESSFUL INITIALIZATION!!! */
68 if ((rc = dm_init_service(&varstr)) != 0) {
69 DMLOG_PRINT(DMLVL_ERR, "dm_init_service failed! (rc = %d, errno = %d)\n", rc, errno);
70 DM_EXIT();
71 } else if ((rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &sid)) == -1) {
72 DMLOG_PRINT(DMLVL_ERR, "dm_create_session failed! (rc = %d, errno = %d)\n", rc, errno);
73 DM_EXIT();
74 } else if ((rc = dm_set_disp(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, DM_NO_TOKEN, &events, DM_EVENT_MAX)) == -1) {
75 DMLOG_PRINT(DMLVL_ERR, "dm_set_disp failed! (rc = %d, errno = %d)\n", rc, errno);
76 dm_destroy_session(sid);
77 DM_EXIT();
78 } else if ((rc = pthread_create(&tid, NULL, Thread, NULL)) != 0) {
79 DMLOG_PRINT(DMLVL_ERR, "pthread_create failed! (rc = %d, errno = %d)\n", rc, errno);
80 dm_destroy_session(sid);
81 DM_EXIT();
82 } else if ((rc = dmimpl_mount(&mountPt, &deviceNm)) == -1) {
83 DMLOG_PRINT(DMLVL_ERR, "dmimpl_mount failed! (rc = %d, errno = %d)\n", rc, errno);
84 dm_destroy_session(sid);
85 DM_EXIT();
86 } else {
87 sprintf(DummyFile, "%s/%s", mountPt, DUMMY_FILE);
88 sprintf(DummySubdir, "%s/%s", mountPt, DUMMY_SUBDIR);
89
90 remove(DummyFile);
91 rmdir(DummySubdir);
92 }
93
subrata_modake753fd72008-07-11 10:56:34 +000094 fd_f = open(DummyFile, O_RDWR | O_CREAT, DUMMY_FILE_RW_MODE);
vapierd13d74b2006-02-11 07:24:00 +000095 if (fd_f == -1) {
96 DMLOG_PRINT(DMLVL_ERR, "open failed! (rc = %d, errno = %d)\n", rc, errno);
97 }
98
99 /* This is what kicks off the test case, variations done in thread */
100 runTestOnCreate = 1;
subrata_modake753fd72008-07-11 10:56:34 +0000101 rc = mkdir(DummySubdir, DUMMY_DIR_RW_MODE);
vapierd13d74b2006-02-11 07:24:00 +0000102 runTestOnCreate = 0;
103 if (rc == -1) {
104 DMLOG_PRINT(DMLVL_ERR, "mkdir failed! (rc = %d, errno = %d)\n", rc, errno);
105 }
106
107 rc = rmdir(DummySubdir);
108 if (rc == -1) {
109 DMLOG_PRINT(DMLVL_ERR, "rmdir failed! (rc = %d, errno = %d)\n", rc, errno);
110 }
111
112 rc = close(fd_f);
113 if (rc == -1) {
114 DMLOG_PRINT(DMLVL_ERR, "close failed! (rc = %d, errno = %d)\n", rc, errno);
115 }
116
117 rc = remove(DummyFile);
118 if (rc == -1) {
119 DMLOG_PRINT(DMLVL_ERR, "remove failed! (rc = %d, errno = %d)\n", rc, errno);
120 }
121
122 rc = umount(mountPt);
123 if (rc == -1) {
124 DMLOG_PRINT(DMLVL_ERR, "umount failed! (rc = %d, errno = %d)\n", rc, errno);
125 }
126
127 pthread_join(tid, NULL);
128
129 rc = dm_destroy_session(sid);
130 if (rc == -1) {
131 DMLOG_PRINT(DMLVL_ERR, "dm_destroy_session failed! (rc = %d, errno = %d)\n", rc, errno);
132 }
133
134 DMLOG_STOP();
Garrett Cooper2c282152010-12-16 00:55:50 -0800135
136 tst_exit();
vapierd13d74b2006-02-11 07:24:00 +0000137}
138
139void DoTest(dm_token_t token, void *hanp, size_t hlen)
140{
141
142 char *szFuncName;
143 int rc;
144
145 DMLOG_PRINT(DMLVL_DEBUG, "Starting DMAPI rights tests\n") ;
subrata_modakbdbaec52009-02-26 12:14:51 +0000146
vapierd13d74b2006-02-11 07:24:00 +0000147 szFuncName = "dm_request_right";
subrata_modakbdbaec52009-02-26 12:14:51 +0000148
vapierd13d74b2006-02-11 07:24:00 +0000149 /*
150 * TEST : dm_request_right - invalid sid
151 * EXPECTED: rc = -1, errno = EINVAL
152 */
153 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 1)) {
154
155 /* Variation set up */
156
157 /* Variation */
158 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName);
159 rc = dm_request_right(INVALID_ADDR, hanp, hlen, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000160 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000161
162 /* Variation clean up */
163 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000164
vapierd13d74b2006-02-11 07:24:00 +0000165 /*
166 * TEST : dm_request_right - invalid hanp
167 * EXPECTED: rc = -1, errno = EFAULT
168 */
169 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 2)) {
170
171 /* Variation set up */
172
173 /* Variation */
174 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n", szFuncName);
175 rc = dm_request_right(sid, (void *)INVALID_ADDR, hlen, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000176 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
vapierd13d74b2006-02-11 07:24:00 +0000177
178 /* Variation clean up */
179 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000180
vapierd13d74b2006-02-11 07:24:00 +0000181 /*
182 * TEST : dm_request_right - invalid hlen
183 * EXPECTED: rc = -1, errno = EBADF
184 */
185 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 3)) {
186
187 /* Variation set up */
188
189 /* Variation */
190 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n", szFuncName);
191 rc = dm_request_right(sid, hanp, INVALID_ADDR, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000192 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
vapierd13d74b2006-02-11 07:24:00 +0000193
194 /* Variation clean up */
195 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000196
vapierd13d74b2006-02-11 07:24:00 +0000197 /*
198 * TEST : dm_request_right - invalid token
199 * EXPECTED: rc = -1, errno = EINVAL
200 */
201 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 4)) {
202
203 /* Variation set up */
204
205 /* Variation */
206 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n", szFuncName);
207 rc = dm_request_right(sid, hanp, hlen, INVALID_ADDR, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000208 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000209
210 /* Variation clean up */
211 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000212
vapierd13d74b2006-02-11 07:24:00 +0000213 /*
214 * TEST : dm_request_right - invalid right
215 * EXPECTED: rc = -1, errno = EINVAL
216 *
217 * This variation uncovered XFS BUG #29 (0 returned instead of -1 and
218 * errno EINVAL)
219 */
220 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 5)) {
221
222 /* Variation set up */
223
224 /* Variation */
225 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid right)\n", szFuncName);
226 rc = dm_request_right(sid, hanp, hlen, token, 0, INVALID_ADDR);
subrata_modak4bb656a2009-02-26 12:02:09 +0000227 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000228
229 /* Variation clean up */
230 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000231
vapierd13d74b2006-02-11 07:24:00 +0000232 /*
233 * TEST : dm_request_right - DM_NO_TOKEN
234 * EXPECTED: rc = -1, errno = EINVAL
235 */
236 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 6)) {
237
238 /* Variation set up */
239
240 /* Variation */
241 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_TOKEN)\n", szFuncName);
242 rc = dm_request_right(sid, hanp, hlen, DM_NO_TOKEN, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000243 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000244
245 /* Variation clean up */
246 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000247
vapierd13d74b2006-02-11 07:24:00 +0000248 /*
249 * TEST : dm_request_right - DM_RIGHT_SHARED from DM_RIGHT_NULL
250 * EXPECTED: rc = 0
251 */
252 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 7)) {
253
254 /* Variation set up */
255
256 /* Variation */
257 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_NULL -> DM_RIGHT_SHARED)\n", szFuncName);
258 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000259 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
vapierd13d74b2006-02-11 07:24:00 +0000260
261 /* Variation clean up */
262 rc = dm_release_right(sid, hanp, hlen, token);
263 if (rc == -1) {
264 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
265 }
266 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000267
vapierd13d74b2006-02-11 07:24:00 +0000268 /*
269 * TEST : dm_request_right - DM_RIGHT_EXCL from DM_RIGHT_NULL
270 * EXPECTED: rc = 0
271 */
272 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 8)) {
273
274 /* Variation set up */
275
276 /* Variation */
277 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_NULL -> DM_RIGHT_EXCL)\n", szFuncName);
278 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_EXCL);
subrata_modak4bb656a2009-02-26 12:02:09 +0000279 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
vapierd13d74b2006-02-11 07:24:00 +0000280
281 /* Variation clean up */
282 rc = dm_release_right(sid, hanp, hlen, token);
283 if (rc == -1) {
284 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
285 }
286 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000287
vapierd13d74b2006-02-11 07:24:00 +0000288 /*
289 * TEST : dm_request_right - DM_RIGHT_SHARED from DM_RIGHT_SHARED
290 * EXPECTED: rc = 0
291 */
292 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 9)) {
293
294 /* Variation set up */
295 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
296 if (rc == -1) {
297 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
298 DMVAR_SKIP();
299 } else {
300 /* Variation */
301 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_SHARED -> DM_RIGHT_SHARED)\n", szFuncName);
302 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000303 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
subrata_modakbdbaec52009-02-26 12:14:51 +0000304
vapierd13d74b2006-02-11 07:24:00 +0000305 /* Variation clean up */
306 rc = dm_release_right(sid, hanp, hlen, token);
307 if (rc == -1) {
308 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
309 }
310 }
311 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000312
vapierd13d74b2006-02-11 07:24:00 +0000313 /*
314 * TEST : dm_request_right - DM_RIGHT_EXCL from DM_RIGHT_SHARED,
315 * DM_RR_WAIT clear
316 * EXPECTED: rc = 0
317 */
318 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 10)) {
319
320 /* Variation set up */
321 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
322 if (rc == -1) {
323 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
324 DMVAR_SKIP();
325 } else {
326 /* Variation */
327 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_SHARED -> DM_RIGHT_EXCL, DM_RR_WAIT clear)\n", szFuncName);
328 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_EXCL);
subrata_modak4bb656a2009-02-26 12:02:09 +0000329 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
subrata_modakbdbaec52009-02-26 12:14:51 +0000330
vapierd13d74b2006-02-11 07:24:00 +0000331 /* Variation clean up */
332 rc = dm_release_right(sid, hanp, hlen, token);
333 if (rc == -1) {
334 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
335 }
336 }
337 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000338
vapierd13d74b2006-02-11 07:24:00 +0000339 /*
340 * TEST : dm_request_right - DM_RIGHT_EXCL from DM_RIGHT_SHARED,
341 * DM_RR_WAIT set
342 * EXPECTED: rc = -1, errno = EACCES
343 *
344 * This variation uncovered XFS BUG #30 (0 returned instead of -1 and
345 * errno EACCES)
346 */
347 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 11)) {
348
349 /* Variation set up */
350 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
351 if (rc == -1) {
352 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
353 DMVAR_SKIP();
354 } else {
355 /* Variation */
356 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_SHARED -> DM_RIGHT_EXCL, DM_RR_WAIT set)\n", szFuncName);
357 rc = dm_request_right(sid, hanp, hlen, token, DM_RR_WAIT, DM_RIGHT_EXCL);
subrata_modak4bb656a2009-02-26 12:02:09 +0000358 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EACCES);
subrata_modakbdbaec52009-02-26 12:14:51 +0000359
vapierd13d74b2006-02-11 07:24:00 +0000360 /* Variation clean up */
361 rc = dm_release_right(sid, hanp, hlen, token);
362 if (rc == -1) {
363 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
364 }
365 }
366 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000367
vapierd13d74b2006-02-11 07:24:00 +0000368 /*
369 * TEST : dm_request_right - DM_RIGHT_EXCL from DM_RIGHT_EXCL
370 * EXPECTED: rc = 0
371 */
372 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 12)) {
373
374 /* Variation set up */
375 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_EXCL);
376 if (rc == -1) {
377 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
378 DMVAR_SKIP();
379 } else {
380 /* Variation */
381 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_EXCL -> DM_RIGHT_EXCL)\n", szFuncName);
382 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000383 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
subrata_modakbdbaec52009-02-26 12:14:51 +0000384
vapierd13d74b2006-02-11 07:24:00 +0000385 /* Variation clean up */
386 rc = dm_release_right(sid, hanp, hlen, token);
387 if (rc == -1) {
388 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
389 }
390 }
391 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000392
vapierd13d74b2006-02-11 07:24:00 +0000393 /*
394 * TEST : dm_request_right - DM_RIGHT_SHARED from DM_RIGHT_EXCL
395 * EXPECTED: rc = 0
396 */
397 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 13)) {
398
399 /* Variation set up */
400 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_EXCL);
401 if (rc == -1) {
402 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
403 DMVAR_SKIP();
404 } else {
405 /* Variation */
406 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_EXCL -> DM_RIGHT_SHARED)\n", szFuncName);
407 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000408 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
subrata_modakbdbaec52009-02-26 12:14:51 +0000409
vapierd13d74b2006-02-11 07:24:00 +0000410 /* Variation clean up */
411 rc = dm_release_right(sid, hanp, hlen, token);
412 if (rc == -1) {
413 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
414 }
415 }
416 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000417
vapierd13d74b2006-02-11 07:24:00 +0000418 /*
419 * TEST : dm_request_right - DM_NO_SESSION sid
420 * EXPECTED: rc = -1, errno = EINVAL
421 */
422 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 14)) {
423
424 /* Variation set up */
425
426 /* Variation */
427 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName);
428 rc = dm_request_right(DM_NO_SESSION, hanp, hlen, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000429 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000430
431 /* Variation clean up */
432 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000433
vapierd13d74b2006-02-11 07:24:00 +0000434 /*
435 * TEST : dm_request_right - global handle
436 * EXPECTED: rc = -1, errno = EBADF
437 */
438 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 15)) {
439
440 /* Variation set up */
441
442 /* Variation */
443 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
444 rc = dm_request_right(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000445 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
vapierd13d74b2006-02-11 07:24:00 +0000446
447 /* Variation clean up */
448 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000449
vapierd13d74b2006-02-11 07:24:00 +0000450 /*
451 * TEST : dm_request_right - file handle
452 * EXPECTED: rc = 0
453 */
454 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 16)) {
455 void *fhanp;
456 size_t fhlen;
457
458 /* Variation set up */
459 rc = dm_fd_to_handle(fd_f, &fhanp, &fhlen);
460 if (rc == -1) {
461 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
462 DMVAR_SKIP();
463 } else {
464 /* Variation */
465 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n", szFuncName);
466 rc = dm_request_right(sid, fhanp, fhlen, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000467 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
subrata_modakbdbaec52009-02-26 12:14:51 +0000468
vapierd13d74b2006-02-11 07:24:00 +0000469 /* Variation clean up */
470 rc = dm_release_right(sid, fhanp, fhlen, token);
471 if (rc == -1) {
472 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
473 }
474 dm_handle_free(fhanp, fhlen);
475 }
476 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000477
vapierd13d74b2006-02-11 07:24:00 +0000478 /*
479 * TEST : dm_request_right - fs handle
480 * EXPECTED: rc = 0
481 */
482 if (DMVAR_EXEC(REQUEST_RIGHT_BASE + 17)) {
483 void *fshanp;
484 size_t fshlen;
485
486 /* Variation set up */
487 rc = dm_path_to_fshandle(DummyFile, &fshanp, &fshlen);
488 if (rc == -1) {
489 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
490 DMVAR_SKIP();
491 } else {
492 /* Variation */
493 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
494 rc = dm_request_right(sid, fshanp, fshlen, token, 0, DM_RIGHT_SHARED);
subrata_modak4bb656a2009-02-26 12:02:09 +0000495 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
subrata_modakbdbaec52009-02-26 12:14:51 +0000496
vapierd13d74b2006-02-11 07:24:00 +0000497 /* Variation clean up */
498 rc = dm_release_right(sid, fshanp, fshlen, token);
499 if (rc == -1) {
500 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
501 }
502 dm_handle_free(fshanp, fshlen);
503 }
504 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000505
vapierd13d74b2006-02-11 07:24:00 +0000506 szFuncName = "dm_release_right";
subrata_modakbdbaec52009-02-26 12:14:51 +0000507
vapierd13d74b2006-02-11 07:24:00 +0000508 /*
509 * TEST : dm_release_right - invalid sid
510 * EXPECTED: rc = -1, errno = EINVAL
511 */
512 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 1)) {
513
514 /* Variation set up */
515
516 /* Variation */
517 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName);
518 rc = dm_release_right(INVALID_ADDR, hanp, hlen, token);
subrata_modak4bb656a2009-02-26 12:02:09 +0000519 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000520
521 /* Variation clean up */
522 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000523
vapierd13d74b2006-02-11 07:24:00 +0000524 /*
525 * TEST : dm_release_right - invalid hanp
526 * EXPECTED: rc = -1, errno = EFAULT
527 */
528 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 2)) {
529
530 /* Variation set up */
531
532 /* Variation */
533 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n", szFuncName);
534 rc = dm_release_right(sid, (void *)INVALID_ADDR, hlen, token);
subrata_modak4bb656a2009-02-26 12:02:09 +0000535 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
vapierd13d74b2006-02-11 07:24:00 +0000536
537 /* Variation clean up */
538 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000539
vapierd13d74b2006-02-11 07:24:00 +0000540 /*
541 * TEST : dm_release_right - invalid hlen
542 * EXPECTED: rc = -1, errno = EBADF
543 */
544 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 3)) {
545
546 /* Variation set up */
547
548 /* Variation */
549 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n", szFuncName);
550 rc = dm_release_right(sid, hanp, INVALID_ADDR, token);
subrata_modak4bb656a2009-02-26 12:02:09 +0000551 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
vapierd13d74b2006-02-11 07:24:00 +0000552
553 /* Variation clean up */
554 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000555
vapierd13d74b2006-02-11 07:24:00 +0000556 /*
557 * TEST : dm_release_right - invalid token
558 * EXPECTED: rc = -1, errno = EINVAL
559 */
560 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 4)) {
561
562 /* Variation set up */
563
564 /* Variation */
565 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n", szFuncName);
566 rc = dm_release_right(sid, hanp, hlen, INVALID_ADDR);
subrata_modak4bb656a2009-02-26 12:02:09 +0000567 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000568
569 /* Variation clean up */
570 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000571
vapierd13d74b2006-02-11 07:24:00 +0000572 /*
573 * TEST : dm_release_right - DM_NO_TOKEN
574 * EXPECTED: rc = -1, errno = EINVAL
575 */
576 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 5)) {
577
578 /* Variation set up */
579
580 /* Variation */
581 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_TOKEN)\n", szFuncName);
582 rc = dm_release_right(sid, hanp, hlen, DM_NO_TOKEN);
subrata_modak4bb656a2009-02-26 12:02:09 +0000583 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000584
585 /* Variation clean up */
586 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000587
vapierd13d74b2006-02-11 07:24:00 +0000588 /*
589 * TEST : dm_release_right - DM_RIGHT_NULL
590 * EXPECTED: rc = -1, errno = EACCES
591 */
592 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 6)) {
593
594 /* Variation set up */
595
596 /* Variation */
597 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_NULL)\n", szFuncName);
598 rc = dm_release_right(sid, hanp, hlen, token);
subrata_modak4bb656a2009-02-26 12:02:09 +0000599 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EACCES);
vapierd13d74b2006-02-11 07:24:00 +0000600
601 /* Variation clean up */
602 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000603
vapierd13d74b2006-02-11 07:24:00 +0000604 /*
605 * TEST : dm_release_right - DM_RIGHT_SHARED
606 * EXPECTED: rc = 0
607 */
608 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 7)) {
609
610 /* Variation set up */
611 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
612 if (rc == -1) {
613 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
614 DMVAR_SKIP();
615 } else {
616 /* Variation */
617 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_SHARED)\n", szFuncName);
618 rc = dm_release_right(sid, hanp, hlen, token);
subrata_modak4bb656a2009-02-26 12:02:09 +0000619 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
vapierd13d74b2006-02-11 07:24:00 +0000620
621 /* Variation clean up */
622 }
623 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000624
vapierd13d74b2006-02-11 07:24:00 +0000625 /*
626 * TEST : dm_release_right - DM_RIGHT_EXCL
627 * EXPECTED: rc = 0
628 */
629 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 8)) {
630
631 /* Variation set up */
632 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_EXCL);
633 if (rc == -1) {
634 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
635 DMVAR_SKIP();
636 } else {
637 /* Variation */
638 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_EXCL)\n", szFuncName);
639 rc = dm_release_right(sid, hanp, hlen, token);
subrata_modak4bb656a2009-02-26 12:02:09 +0000640 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
vapierd13d74b2006-02-11 07:24:00 +0000641
642 /* Variation clean up */
643 }
644 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000645
vapierd13d74b2006-02-11 07:24:00 +0000646 /*
647 * TEST : dm_release_right - DM_NO_SESSION sid
648 * EXPECTED: rc = -1, errno = EINVAL
649 */
650 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 9)) {
651
652 /* Variation set up */
653
654 /* Variation */
655 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName);
656 rc = dm_release_right(DM_NO_SESSION, hanp, hlen, token);
subrata_modak4bb656a2009-02-26 12:02:09 +0000657 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000658
659 /* Variation clean up */
660 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000661
vapierd13d74b2006-02-11 07:24:00 +0000662 /*
663 * TEST : dm_release_right - global handle
664 * EXPECTED: rc = -1, errno = EBADF
665 */
666 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 10)) {
667
668 /* Variation set up */
669
670 /* Variation */
671 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
672 rc = dm_release_right(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, token);
673 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
674
675 /* Variation clean up */
676 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000677
vapierd13d74b2006-02-11 07:24:00 +0000678 /*
679 * TEST : dm_release_right - file handle
680 * EXPECTED: rc = 0
681 */
682 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 11)) {
683 void *fhanp;
684 size_t fhlen;
685
686 /* Variation set up */
687 if ((rc == dm_fd_to_handle(fd_f, &fhanp, &fhlen)) == -1) {
688 /* No clean up */
689 } else if ((rc = dm_request_right(sid, fhanp, fhlen, token, 0, DM_RIGHT_SHARED)) == -1) {
690 dm_handle_free(fhanp, fhlen);
691 }
692 if (rc == -1) {
693 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
694 DMVAR_SKIP();
695 } else {
696 /* Variation */
697 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n", szFuncName);
698 rc = dm_release_right(sid, fhanp, fhlen, token);
subrata_modak4bb656a2009-02-26 12:02:09 +0000699 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
vapierd13d74b2006-02-11 07:24:00 +0000700
701 /* Variation clean up */
702 dm_handle_free(fhanp, fhlen);
703 }
704 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000705
vapierd13d74b2006-02-11 07:24:00 +0000706 /*
707 * TEST : dm_release_right - fs handle
708 * EXPECTED: rc = 0
709 */
710 if (DMVAR_EXEC(RELEASE_RIGHT_BASE + 12)) {
711 void *fshanp;
712 size_t fshlen;
713
714 /* Variation set up */
715 if ((rc == dm_path_to_fshandle(DummyFile, &fshanp, &fshlen)) == -1) {
716 /* No clean up */
717 } else if ((rc = dm_request_right(sid, fshanp, fshlen, token, 0, DM_RIGHT_SHARED)) == -1) {
718 dm_handle_free(fshanp, fshlen);
719 }
720 if (rc == -1) {
721 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
722 DMVAR_SKIP();
723 } else {
724 /* Variation */
725 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
726 rc = dm_release_right(sid, fshanp, fshlen, token);
subrata_modak4bb656a2009-02-26 12:02:09 +0000727 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
vapierd13d74b2006-02-11 07:24:00 +0000728
729 /* Variation clean up */
730 dm_handle_free(fshanp, fshlen);
731 }
732 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000733
vapierd13d74b2006-02-11 07:24:00 +0000734 szFuncName = "dm_query_right";
subrata_modakbdbaec52009-02-26 12:14:51 +0000735
vapierd13d74b2006-02-11 07:24:00 +0000736 /*
737 * TEST : dm_query_right - invalid sid
738 * EXPECTED: rc = -1, errno = EINVAL
739 */
740 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 1)) {
741 dm_right_t right;
742
743 /* Variation set up */
744
745 /* Variation */
746 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName);
747 rc = dm_query_right(INVALID_ADDR, hanp, hlen, token, &right);
subrata_modak4bb656a2009-02-26 12:02:09 +0000748 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000749
750 /* Variation clean up */
751 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000752
vapierd13d74b2006-02-11 07:24:00 +0000753 /*
754 * TEST : dm_query_right - invalid hanp
755 * EXPECTED: rc = -1, errno = EFAULT
756 */
757 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 2)) {
758 dm_right_t right;
759
760 /* Variation set up */
761
762 /* Variation */
763 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n", szFuncName);
764 rc = dm_query_right(sid, (void *)INVALID_ADDR, hlen, token, &right);
subrata_modak4bb656a2009-02-26 12:02:09 +0000765 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
vapierd13d74b2006-02-11 07:24:00 +0000766
767 /* Variation clean up */
768 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000769
vapierd13d74b2006-02-11 07:24:00 +0000770 /*
771 * TEST : dm_query_right - invalid hlen
772 * EXPECTED: rc = -1, errno = EBADF
773 */
774 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 3)) {
775 dm_right_t right;
776
777 /* Variation set up */
778
779 /* Variation */
780 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n", szFuncName);
781 rc = dm_query_right(sid, hanp, INVALID_ADDR, token, &right);
subrata_modak4bb656a2009-02-26 12:02:09 +0000782 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
vapierd13d74b2006-02-11 07:24:00 +0000783
784 /* Variation clean up */
785 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000786
vapierd13d74b2006-02-11 07:24:00 +0000787 /*
788 * TEST : dm_query_right - invalid token
789 * EXPECTED: rc = -1, errno = EINVAL
790 */
791 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 4)) {
792 dm_right_t right;
793
794 /* Variation set up */
795
796 /* Variation */
797 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n", szFuncName);
798 rc = dm_query_right(sid, hanp, hlen, INVALID_ADDR, &right);
subrata_modak4bb656a2009-02-26 12:02:09 +0000799 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000800
801 /* Variation clean up */
802 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000803
vapierd13d74b2006-02-11 07:24:00 +0000804 /*
805 * TEST : dm_query_right - invalid rightp
806 * EXPECTED: rc = -1, errno = EFAULT
807 */
808 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 5)) {
809
810 /* Variation set up */
811
812 /* Variation */
813 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid rightp)\n", szFuncName);
814 rc = dm_query_right(sid, hanp, hlen, token, (dm_right_t *)INVALID_ADDR);
815 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
816
817 /* Variation clean up */
818 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000819
vapierd13d74b2006-02-11 07:24:00 +0000820 /*
821 * TEST : dm_query_right - DM_NO_TOKEN
822 * EXPECTED: rc = -1, errno = EINVAL
823 */
subrata_modak4bb656a2009-02-26 12:02:09 +0000824 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 6)) {
vapierd13d74b2006-02-11 07:24:00 +0000825 dm_right_t right;
826
827 /* Variation set up */
828
829 /* Variation */
830 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_TOKEN)\n", szFuncName);
831 rc = dm_query_right(sid, hanp, hlen, DM_NO_TOKEN, &right);
subrata_modak4bb656a2009-02-26 12:02:09 +0000832 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000833
834 /* Variation clean up */
835 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000836
vapierd13d74b2006-02-11 07:24:00 +0000837 /*
838 * TEST : dm_query_right - DM_RIGHT_SHARED
839 * EXPECTED: rc = 0
840 */
subrata_modak4bb656a2009-02-26 12:02:09 +0000841 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 7)) {
vapierd13d74b2006-02-11 07:24:00 +0000842 dm_right_t right;
843
844 /* Variation set up */
845 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
846 if (rc == -1) {
847 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
848 DMVAR_SKIP();
849 } else {
850 /* Variation */
851 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_SHARED)\n", szFuncName);
852 rc = dm_query_right(sid, hanp, hlen, token, &right);
853 if (rc == 0) {
854 if (right == DM_RIGHT_SHARED) {
855 DMLOG_PRINT(DMLVL_DEBUG, "%s passed with expected rc = %d\n", szFuncName, 0);
856 DMVAR_PASS();
857 } else {
858 DMLOG_PRINT(DMLVL_ERR, "%s failed with expected rc = %d but unexpected right (%d vs %d)\n", szFuncName, 0, right, DM_RIGHT_SHARED);
859 DMVAR_FAIL();
860 }
861 } else {
862 DMLOG_PRINT(DMLVL_ERR, "%s failed with unexpected rc = %d (errno = %d)\n", szFuncName, rc, errno);
863 DMVAR_FAIL();
864 }
865
866 /* Variation clean up */
867 rc = dm_release_right(sid, hanp, hlen, token);
868 if (rc == -1) {
869 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
870 }
871 }
872 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000873
vapierd13d74b2006-02-11 07:24:00 +0000874 /*
875 * TEST : dm_query_right - DM_RIGHT_EXCL
876 * EXPECTED: rc = 0
877 */
subrata_modak4bb656a2009-02-26 12:02:09 +0000878 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 8)) {
vapierd13d74b2006-02-11 07:24:00 +0000879 dm_right_t right;
880
881 /* Variation set up */
882 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_EXCL);
883 if (rc == -1) {
884 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
885 DMVAR_SKIP();
886 } else {
887 /* Variation */
888 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_SHARED)\n", szFuncName);
889 rc = dm_query_right(sid, hanp, hlen, token, &right);
890 if (rc == 0) {
891 if (right == DM_RIGHT_EXCL) {
892 DMLOG_PRINT(DMLVL_DEBUG, "%s passed with expected rc = %d\n", szFuncName, 0);
893 DMVAR_PASS();
894 } else {
895 DMLOG_PRINT(DMLVL_ERR, "%s failed with expected rc = %d but unexpected right (%d vs %d)\n", szFuncName, 0, right, DM_RIGHT_EXCL);
896 DMVAR_FAIL();
897 }
898 } else {
899 DMLOG_PRINT(DMLVL_ERR, "%s failed with unexpected rc = %d (errno = %d)\n", szFuncName, rc, errno);
900 DMVAR_FAIL();
901 }
902
903 /* Variation clean up */
904 rc = dm_release_right(sid, hanp, hlen, token);
905 if (rc == -1) {
906 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
907 }
908 }
909 }
910
911 /*
912 * TEST : dm_query_right - DM_NO_SESSION sid
913 * EXPECTED: rc = -1, errno = EINVAL
914 */
915 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 9)) {
916 dm_right_t right;
917
918 /* Variation set up */
919
920 /* Variation */
921 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName);
922 rc = dm_query_right(DM_NO_SESSION, hanp, hlen, token, &right);
subrata_modak4bb656a2009-02-26 12:02:09 +0000923 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
vapierd13d74b2006-02-11 07:24:00 +0000924
925 /* Variation clean up */
926 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000927
vapierd13d74b2006-02-11 07:24:00 +0000928 /*
929 * TEST : dm_query_right - global handle
930 * EXPECTED: rc = -1, errno = EBADF
931 */
932 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 10)) {
933 dm_right_t right;
934
935 /* Variation set up */
936
937 /* Variation */
938 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
939 rc = dm_query_right(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, token, &right);
940 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
941
942 /* Variation clean up */
943 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000944
vapierd13d74b2006-02-11 07:24:00 +0000945 /*
946 * TEST : dm_query_right - file handle
947 * EXPECTED: rc = 0
948 */
subrata_modak4bb656a2009-02-26 12:02:09 +0000949 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 11)) {
vapierd13d74b2006-02-11 07:24:00 +0000950 void *fhanp;
951 size_t fhlen;
952 dm_right_t right;
953
954 /* Variation set up */
955 if ((rc = dm_fd_to_handle(fd_f, &fhanp, &fhlen)) == -1) {
956 /* No clean up */
957 } else if ((rc = dm_request_right(sid, fhanp, fhlen, token, 0, DM_RIGHT_SHARED)) == -1) {
958 dm_handle_free(fhanp, fhlen);
959 }
960 if (rc == -1) {
961 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
962 DMVAR_SKIP();
963 } else {
964 /* Variation */
965 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n", szFuncName);
966 rc = dm_query_right(sid, fhanp, fhlen, token, &right);
967 if (rc == 0) {
968 if (right == DM_RIGHT_SHARED) {
969 DMLOG_PRINT(DMLVL_DEBUG, "%s passed with expected rc = %d\n", szFuncName, 0);
970 DMVAR_PASS();
971 } else {
972 DMLOG_PRINT(DMLVL_ERR, "%s failed with expected rc = %d but unexpected right (%d vs %d)\n", szFuncName, 0, right, DM_RIGHT_SHARED);
973 DMVAR_FAIL();
974 }
975 } else {
976 DMLOG_PRINT(DMLVL_ERR, "%s failed with unexpected rc = %d (errno = %d)\n", szFuncName, rc, errno);
977 DMVAR_FAIL();
978 }
979
980 /* Variation clean up */
981 rc = dm_release_right(sid, fhanp, fhlen, token);
982 if (rc == -1) {
983 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
984 }
985 dm_handle_free(fhanp, fhlen);
986 }
987 }
subrata_modakbdbaec52009-02-26 12:14:51 +0000988
vapierd13d74b2006-02-11 07:24:00 +0000989 /*
990 * TEST : dm_query_right - fs handle
991 * EXPECTED: rc = 0
992 */
subrata_modak4bb656a2009-02-26 12:02:09 +0000993 if (DMVAR_EXEC(QUERY_RIGHT_BASE + 12)) {
vapierd13d74b2006-02-11 07:24:00 +0000994 void *fshanp;
995 size_t fshlen;
996 dm_right_t right;
997
998 /* Variation set up */
999 if ((rc = dm_path_to_fshandle(DummyFile, &fshanp, &fshlen)) == -1) {
1000 /* No clean up */
1001 } else if ((rc = dm_request_right(sid, fshanp, fshlen, token, 0, DM_RIGHT_SHARED)) == -1) {
1002 dm_handle_free(fshanp, fshlen);
1003 }
1004 if (rc == -1) {
1005 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1006 DMVAR_SKIP();
1007 } else {
1008 /* Variation */
1009 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
1010 rc = dm_query_right(sid, fshanp, fshlen, token, &right);
1011 if (rc == 0) {
1012 if (right == DM_RIGHT_SHARED) {
1013 DMLOG_PRINT(DMLVL_DEBUG, "%s passed with expected rc = %d\n", szFuncName, 0);
1014 DMVAR_PASS();
1015 } else {
1016 DMLOG_PRINT(DMLVL_ERR, "%s failed with expected rc = %d but unexpected right (%d vs %d)\n", szFuncName, 0, right, DM_RIGHT_SHARED);
1017 DMVAR_FAIL();
1018 }
1019 } else {
1020 DMLOG_PRINT(DMLVL_ERR, "%s failed with unexpected rc = %d (errno = %d)\n", szFuncName, rc, errno);
1021 DMVAR_FAIL();
1022 }
1023
1024 /* Variation clean up */
1025 rc = dm_release_right(sid, fshanp, fshlen, token);
1026 if (rc == -1) {
1027 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1028 }
1029 dm_handle_free(fshanp, fshlen);
1030 }
1031 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001032
vapierd13d74b2006-02-11 07:24:00 +00001033 szFuncName = "dm_upgrade_right";
1034
1035 /*
1036 * TEST : dm_upgrade_right - invalid sid
1037 * EXPECTED: rc = -1, errno = EINVAL
1038 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001039 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 1)) {
vapierd13d74b2006-02-11 07:24:00 +00001040
1041 /* Variation set up */
1042 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1043 if (rc == -1) {
1044 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1045 DMVAR_SKIP();
1046 } else {
1047 /* Variation */
1048 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName);
1049 rc = dm_upgrade_right(INVALID_ADDR, hanp, hlen, token);
1050 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1051
1052 /* Variation clean up */
1053 rc = dm_release_right(sid, hanp, hlen, token);
1054 if (rc == -1) {
1055 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1056 }
1057 }
1058 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001059
vapierd13d74b2006-02-11 07:24:00 +00001060 /*
1061 * TEST : dm_upgrade_right - invalid hanp
1062 * EXPECTED: rc = -1, errno = EFAULT
1063 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001064 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 2)) {
vapierd13d74b2006-02-11 07:24:00 +00001065
1066 /* Variation set up */
1067 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1068 if (rc == -1) {
1069 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1070 DMVAR_SKIP();
1071 } else {
1072 /* Variation */
1073 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n", szFuncName);
1074 rc = dm_upgrade_right(sid, (void *)INVALID_ADDR, hlen, token);
1075 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
1076
1077 /* Variation clean up */
1078 rc = dm_release_right(sid, hanp, hlen, token);
1079 if (rc == -1) {
1080 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1081 }
1082 }
1083 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001084
vapierd13d74b2006-02-11 07:24:00 +00001085 /*
1086 * TEST : dm_upgrade_right - invalid hlen
1087 * EXPECTED: rc = -1, errno = EBADF
1088 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001089 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 3)) {
vapierd13d74b2006-02-11 07:24:00 +00001090
1091 /* Variation set up */
1092 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1093 if (rc == -1) {
1094 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1095 DMVAR_SKIP();
1096 } else {
1097 /* Variation */
1098 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n", szFuncName);
1099 rc = dm_upgrade_right(sid, hanp, INVALID_ADDR, token);
1100 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
1101
1102 /* Variation clean up */
1103 rc = dm_release_right(sid, hanp, hlen, token);
1104 if (rc == -1) {
1105 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1106 }
1107 }
1108 }
1109
1110 /*
1111 * TEST : dm_upgrade_right - invalid token
1112 * EXPECTED: rc = -1, errno = EINVAL
1113 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001114 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 4)) {
vapierd13d74b2006-02-11 07:24:00 +00001115
1116 /* Variation set up */
1117 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1118 if (rc == -1) {
1119 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1120 DMVAR_SKIP();
1121 } else {
1122 /* Variation */
1123 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n", szFuncName);
1124 rc = dm_upgrade_right(sid, hanp, hlen, INVALID_ADDR);
1125 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1126
1127 /* Variation clean up */
1128 rc = dm_release_right(sid, hanp, hlen, token);
1129 if (rc == -1) {
1130 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1131 }
1132 }
1133 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001134
vapierd13d74b2006-02-11 07:24:00 +00001135 /*
1136 * TEST : dm_upgrade_right - DM_RIGHT_NULL
1137 * EXPECTED: rc = -1, errno = EPERM
1138 *
subrata_modak4bb656a2009-02-26 12:02:09 +00001139 * This variation uncovered XFS BUG #31 (EACCES returned instead of
vapierd13d74b2006-02-11 07:24:00 +00001140 * EPERM)
1141 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001142 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 5)) {
vapierd13d74b2006-02-11 07:24:00 +00001143
1144 /* Variation set up */
Garrett Cooper2c282152010-12-16 00:55:50 -08001145
vapierd13d74b2006-02-11 07:24:00 +00001146 /* Variation */
1147 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_NULL)\n", szFuncName);
1148 rc = dm_upgrade_right(sid, hanp, hlen, token);
1149 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EPERM);
1150
1151 /* Variation clean up */
1152 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001153
vapierd13d74b2006-02-11 07:24:00 +00001154 /*
1155 * TEST : dm_upgrade_right - DM_RIGHT_SHARED
1156 * EXPECTED: rc = 0
1157 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001158 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 6)) {
vapierd13d74b2006-02-11 07:24:00 +00001159
1160 /* Variation set up */
1161 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1162 if (rc == -1) {
1163 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1164 DMVAR_SKIP();
1165 } else {
1166 /* Variation */
1167 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_SHARED)\n", szFuncName);
1168 rc = dm_upgrade_right(sid, hanp, hlen, token);
1169 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
1170
1171 /* Variation clean up */
1172 rc = dm_release_right(sid, hanp, hlen, token);
1173 if (rc == -1) {
1174 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1175 }
1176 }
1177 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001178
vapierd13d74b2006-02-11 07:24:00 +00001179 /*
1180 * TEST : dm_upgrade_right - DM_RIGHT_EXCL
1181 * EXPECTED: rc = 0
1182 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001183 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 7)) {
vapierd13d74b2006-02-11 07:24:00 +00001184
1185 /* Variation set up */
1186 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_EXCL);
1187 if (rc == -1) {
1188 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1189 DMVAR_SKIP();
1190 } else {
1191 /* Variation */
1192 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_EXCL)\n", szFuncName);
1193 rc = dm_upgrade_right(sid, hanp, hlen, token);
1194 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
1195
1196 /* Variation clean up */
1197 rc = dm_release_right(sid, hanp, hlen, token);
1198 if (rc == -1) {
1199 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1200 }
1201 }
1202 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001203
vapierd13d74b2006-02-11 07:24:00 +00001204 /*
1205 * TEST : dm_upgrade_right - DM_NO_SESSION sid
1206 * EXPECTED: rc = -1, errno = EINVAL
1207 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001208 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 8)) {
vapierd13d74b2006-02-11 07:24:00 +00001209
1210 /* Variation set up */
1211 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1212 if (rc == -1) {
1213 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1214 DMVAR_SKIP();
1215 } else {
1216 /* Variation */
1217 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName);
1218 rc = dm_upgrade_right(DM_NO_SESSION, hanp, hlen, token);
1219 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1220
1221 /* Variation clean up */
1222 rc = dm_release_right(sid, hanp, hlen, token);
1223 if (rc == -1) {
1224 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1225 }
1226 }
1227 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001228
vapierd13d74b2006-02-11 07:24:00 +00001229 /*
1230 * TEST : dm_upgrade_right - global handle
1231 * EXPECTED: rc = -1, errno = EBADF
1232 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001233 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 9)) {
vapierd13d74b2006-02-11 07:24:00 +00001234
1235 /* Variation set up */
1236 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1237 if (rc == -1) {
1238 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1239 DMVAR_SKIP();
1240 } else {
1241 /* Variation */
1242 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
1243 rc = dm_upgrade_right(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, token);
1244 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
1245
1246 /* Variation clean up */
1247 rc = dm_release_right(sid, hanp, hlen, token);
1248 if (rc == -1) {
1249 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1250 }
1251 }
1252 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001253
vapierd13d74b2006-02-11 07:24:00 +00001254 /*
1255 * TEST : dm_upgrade_right - file handle
1256 * EXPECTED: rc = 0
1257 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001258 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 10)) {
vapierd13d74b2006-02-11 07:24:00 +00001259 void *fhanp;
1260 size_t fhlen;
1261
1262 /* Variation set up */
1263 if ((rc = dm_fd_to_handle(fd_f, &fhanp, &fhlen)) == -1) {
1264 /* No clean up */
1265 } else if ((rc = dm_request_right(sid, fhanp, fhlen, token, 0, DM_RIGHT_SHARED)) == -1) {
1266 dm_handle_free(fhanp, fhlen);
1267 }
1268 if (rc == -1) {
1269 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1270 DMVAR_SKIP();
1271 } else {
1272 /* Variation */
1273 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n", szFuncName);
1274 rc = dm_upgrade_right(sid, fhanp, fhlen, token);
1275 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
1276
1277 /* Variation clean up */
1278 rc = dm_release_right(sid, fhanp, fhlen, token);
1279 if (rc == -1) {
1280 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1281 }
1282 dm_handle_free(fhanp, fhlen);
1283 }
1284 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001285
vapierd13d74b2006-02-11 07:24:00 +00001286 /*
1287 * TEST : dm_upgrade_right - fs handle
1288 * EXPECTED: rc = 0
1289 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001290 if (DMVAR_EXEC(UPGRADE_RIGHT_BASE + 11)) {
vapierd13d74b2006-02-11 07:24:00 +00001291 void *fshanp;
1292 size_t fshlen;
1293
1294 /* Variation set up */
1295 if ((rc = dm_path_to_fshandle(DummyFile, &fshanp, &fshlen)) == -1) {
1296 /* No clean up */
1297 } else if ((rc = dm_request_right(sid, fshanp, fshlen, token, 0, DM_RIGHT_SHARED)) == -1) {
1298 dm_handle_free(fshanp, fshlen);
1299 }
1300 if (rc == -1) {
1301 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1302 DMVAR_SKIP();
1303 } else {
1304 /* Variation */
1305 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
1306 rc = dm_upgrade_right(sid, fshanp, fshlen, token);
1307 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
1308
1309 /* Variation clean up */
1310 rc = dm_release_right(sid, fshanp, fshlen, token);
1311 if (rc == -1) {
1312 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1313 }
1314 dm_handle_free(fshanp, fshlen);
1315 }
1316 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001317
vapierd13d74b2006-02-11 07:24:00 +00001318 szFuncName = "dm_downgrade_right";
1319
1320 /*
1321 * TEST : dm_downgrade_right - invalid sid
1322 * EXPECTED: rc = -1, errno = EINVAL
1323 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001324 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 1)) {
vapierd13d74b2006-02-11 07:24:00 +00001325
1326 /* Variation set up */
1327 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1328 if (rc == -1) {
1329 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1330 DMVAR_SKIP();
1331 } else {
1332 /* Variation */
1333 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName);
1334 rc = dm_downgrade_right(INVALID_ADDR, hanp, hlen, token);
1335 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1336
1337 /* Variation clean up */
1338 rc = dm_release_right(sid, hanp, hlen, token);
1339 if (rc == -1) {
1340 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1341 }
1342 }
1343 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001344
vapierd13d74b2006-02-11 07:24:00 +00001345 /*
1346 * TEST : dm_downgrade_right - invalid hanp
1347 * EXPECTED: rc = -1, errno = EFAULT
1348 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001349 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 2)) {
vapierd13d74b2006-02-11 07:24:00 +00001350
1351 /* Variation set up */
1352 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1353 if (rc == -1) {
1354 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1355 DMVAR_SKIP();
1356 } else {
1357 /* Variation */
1358 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n", szFuncName);
1359 rc = dm_downgrade_right(sid, (void *)INVALID_ADDR, hlen, token);
1360 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
1361
1362 /* Variation clean up */
1363 rc = dm_release_right(sid, hanp, hlen, token);
1364 if (rc == -1) {
1365 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1366 }
1367 }
1368 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001369
vapierd13d74b2006-02-11 07:24:00 +00001370 /*
1371 * TEST : dm_downgrade_right - invalid hlen
1372 * EXPECTED: rc = -1, errno = EBADF
1373 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001374 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 3)) {
vapierd13d74b2006-02-11 07:24:00 +00001375
1376 /* Variation set up */
1377 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1378 if (rc == -1) {
1379 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1380 DMVAR_SKIP();
1381 } else {
1382 /* Variation */
1383 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n", szFuncName);
1384 rc = dm_downgrade_right(sid, hanp, INVALID_ADDR, token);
1385 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
1386
1387 /* Variation clean up */
1388 rc = dm_release_right(sid, hanp, hlen, token);
1389 if (rc == -1) {
1390 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1391 }
1392 }
1393 }
1394
1395 /*
1396 * TEST : dm_downgrade_right - invalid token
1397 * EXPECTED: rc = -1, errno = EINVAL
1398 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001399 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 4)) {
vapierd13d74b2006-02-11 07:24:00 +00001400
1401 /* Variation set up */
1402 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1403 if (rc == -1) {
1404 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1405 DMVAR_SKIP();
1406 } else {
1407 /* Variation */
1408 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n", szFuncName);
1409 rc = dm_downgrade_right(sid, hanp, hlen, INVALID_ADDR);
1410 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1411
1412 /* Variation clean up */
1413 rc = dm_release_right(sid, hanp, hlen, token);
1414 if (rc == -1) {
1415 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1416 }
1417 }
1418 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001419
vapierd13d74b2006-02-11 07:24:00 +00001420 /*
1421 * TEST : dm_downgrade_right - DM_RIGHT_NULL
1422 * EXPECTED: rc = -1, errno = EPERM
1423 *
subrata_modak4bb656a2009-02-26 12:02:09 +00001424 * This variation uncovered XFS BUG #32 (EACCES returned instead of
vapierd13d74b2006-02-11 07:24:00 +00001425 * EPERM)
1426 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001427 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 5)) {
vapierd13d74b2006-02-11 07:24:00 +00001428
1429 /* Variation set up */
Garrett Cooper2c282152010-12-16 00:55:50 -08001430
vapierd13d74b2006-02-11 07:24:00 +00001431 /* Variation */
1432 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_NULL)\n", szFuncName);
1433 rc = dm_downgrade_right(sid, hanp, hlen, token);
1434 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EPERM);
1435
1436 /* Variation clean up */
1437 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001438
vapierd13d74b2006-02-11 07:24:00 +00001439 /*
1440 * TEST : dm_downgrade_right - DM_RIGHT_SHARED
1441 * EXPECTED: rc = -1, errno = EPERM
1442 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001443 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 6)) {
vapierd13d74b2006-02-11 07:24:00 +00001444
1445 /* Variation set up */
1446 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1447 if (rc == -1) {
1448 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1449 DMVAR_SKIP();
1450 } else {
1451 /* Variation */
1452 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_SHARED)\n", szFuncName);
1453 rc = dm_downgrade_right(sid, hanp, hlen, token);
1454 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EPERM);
1455
1456 /* Variation clean up */
1457 rc = dm_release_right(sid, hanp, hlen, token);
1458 if (rc == -1) {
1459 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1460 }
1461 }
1462 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001463
vapierd13d74b2006-02-11 07:24:00 +00001464 /*
1465 * TEST : dm_downgrade_right - DM_RIGHT_EXCL
1466 * EXPECTED: rc = 0
1467 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001468 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 7)) {
vapierd13d74b2006-02-11 07:24:00 +00001469
1470 /* Variation set up */
1471 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_EXCL);
1472 if (rc == -1) {
1473 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1474 DMVAR_SKIP();
1475 } else {
1476 /* Variation */
1477 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_RIGHT_EXCL)\n", szFuncName);
1478 rc = dm_downgrade_right(sid, hanp, hlen, token);
1479 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
1480
1481 /* Variation clean up */
1482 rc = dm_release_right(sid, hanp, hlen, token);
1483 if (rc == -1) {
1484 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1485 }
1486 }
1487 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001488
vapierd13d74b2006-02-11 07:24:00 +00001489 /*
1490 * TEST : dm_downgrade_right - DM_NO_SESSION sid
1491 * EXPECTED: rc = -1, errno = EINVAL
1492 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001493 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 8)) {
vapierd13d74b2006-02-11 07:24:00 +00001494
1495 /* Variation set up */
1496 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1497 if (rc == -1) {
1498 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1499 DMVAR_SKIP();
1500 } else {
1501 /* Variation */
1502 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName);
1503 rc = dm_downgrade_right(DM_NO_SESSION, hanp, hlen, token);
1504 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1505
1506 /* Variation clean up */
1507 rc = dm_release_right(sid, hanp, hlen, token);
1508 if (rc == -1) {
1509 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1510 }
1511 }
1512 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001513
vapierd13d74b2006-02-11 07:24:00 +00001514 /*
1515 * TEST : dm_downgrade_right - global handle
1516 * EXPECTED: rc = -1, errno = EBADF
1517 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001518 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 9)) {
vapierd13d74b2006-02-11 07:24:00 +00001519
1520 /* Variation set up */
1521 rc = dm_request_right(sid, hanp, hlen, token, 0, DM_RIGHT_SHARED);
1522 if (rc == -1) {
1523 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1524 DMVAR_SKIP();
1525 } else {
1526 /* Variation */
1527 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName);
1528 rc = dm_downgrade_right(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, token);
1529 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
1530
1531 /* Variation clean up */
1532 rc = dm_release_right(sid, hanp, hlen, token);
1533 if (rc == -1) {
1534 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1535 }
1536 }
1537 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001538
vapierd13d74b2006-02-11 07:24:00 +00001539 /*
1540 * TEST : dm_downgrade_right - file handle
1541 * EXPECTED: rc = 0
1542 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001543 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 10)) {
vapierd13d74b2006-02-11 07:24:00 +00001544 void *fhanp;
1545 size_t fhlen;
1546
1547 /* Variation set up */
1548 if ((rc = dm_fd_to_handle(fd_f, &fhanp, &fhlen)) == -1) {
1549 /* No clean up */
1550 } else if ((rc = dm_request_right(sid, fhanp, fhlen, token, 0, DM_RIGHT_EXCL)) == -1) {
1551 dm_handle_free(fhanp, fhlen);
1552 }
1553 if (rc == -1) {
1554 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1555 DMVAR_SKIP();
1556 } else {
1557 /* Variation */
1558 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n", szFuncName);
1559 rc = dm_downgrade_right(sid, fhanp, fhlen, token);
1560 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
1561
1562 /* Variation clean up */
1563 rc = dm_release_right(sid, fhanp, fhlen, token);
1564 if (rc == -1) {
1565 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1566 }
1567 dm_handle_free(fhanp, fhlen);
1568 }
1569 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001570
vapierd13d74b2006-02-11 07:24:00 +00001571 /*
1572 * TEST : dm_downgrade_right - fs handle
1573 * EXPECTED: rc = 0
1574 */
subrata_modak4bb656a2009-02-26 12:02:09 +00001575 if (DMVAR_EXEC(DOWNGRADE_RIGHT_BASE + 11)) {
vapierd13d74b2006-02-11 07:24:00 +00001576 void *fshanp;
1577 size_t fshlen;
1578
1579 /* Variation set up */
1580 if ((rc = dm_path_to_fshandle(DummyFile, &fshanp, &fshlen)) == -1) {
1581 /* No clean up */
1582 } else if ((rc = dm_request_right(sid, fshanp, fshlen, token, 0, DM_RIGHT_EXCL)) == -1) {
1583 dm_handle_free(fshanp, fshlen);
1584 }
1585 if (rc == -1) {
1586 DMLOG_PRINT(DMLVL_DEBUG, "Unable to set up variation! (errno = %d)\n", errno);
1587 DMVAR_SKIP();
1588 } else {
1589 /* Variation */
1590 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
1591 rc = dm_downgrade_right(sid, fshanp, fshlen, token);
1592 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
1593
1594 /* Variation clean up */
1595 rc = dm_release_right(sid, fshanp, fshlen, token);
1596 if (rc == -1) {
1597 DMLOG_PRINT(DMLVL_DEBUG, "Unable to clean up variation! (errno = %d)\n", errno);
1598 }
1599 dm_handle_free(fshanp, fshlen);
1600 }
1601 }
subrata_modakbdbaec52009-02-26 12:14:51 +00001602
vapierd13d74b2006-02-11 07:24:00 +00001603}
1604
1605void *Thread(void *parm)
1606{
1607 int rc;
1608 size_t dmMsgBufLen;
1609 dm_eventmsg_t *dmMsg;
1610 int bMounted = DM_FALSE;
1611 dm_eventtype_t type;
1612 dm_token_t token;
1613 dm_eventset_t events;
1614 dm_response_t response;
1615
1616 do {
1617 /* Loop until message received (wait could be interrupted) */
1618 do {
1619 DMLOG_PRINT(DMLVL_DEBUG, "Waiting for event...\n");
1620 dmMsgBufLen = 0;
1621
1622 rc = dm_get_events(sid, 1, DM_EV_WAIT, sizeof(dmMsgBuf), dmMsgBuf, &dmMsgBufLen);
1623 DMLOG_PRINT(DMLVL_DEBUG, "... dm_get_events returned %d (errno %d)\n", rc, errno);
1624 } while ((rc == -1) && (errno == EINTR) && (dmMsgBufLen == 0));
1625
1626 if (rc) {
1627 DMLOG_PRINT(DMLVL_ERR, "dm_get_events failed with rc = %d, errno = %d\n", rc, errno);
1628 dm_destroy_session(sid);
1629 DM_EXIT();
1630 } else {
1631 dmMsg = (dm_eventmsg_t *)dmMsgBuf;
1632 token = dmMsg->ev_token;
1633 type = dmMsg->ev_type;
1634
1635 DMLOG_PRINT(DMLVL_DEBUG, "Received message %d\n", type);
1636 }
1637
1638 if (type == DM_EVENT_MOUNT) {
1639 /* SPECIAL CASE: need to set disposition, events and response */
1640 dm_mount_event_t *me = DM_GET_VALUE(dmMsg, ev_data, dm_mount_event_t *);
1641 void *lhanp = DM_GET_VALUE(me, me_handle1, void *);
1642 size_t lhlen = DM_GET_LEN(me, me_handle1);
1643
1644 DMLOG_PRINT(DMLVL_DEBUG, "Message is DM_EVENT_MOUNT\n");
1645 DMLOG_PRINT(DMLVL_DEBUG, " Mode: %x\n", me->me_mode);
1646 DMLOG_PRINT(DMLVL_DEBUG, " File system handle: %p\n", lhanp);
1647 DMLOG_PRINT(DMLVL_DEBUG, " File system handle length: %d\n", lhlen);
1648 DMLOG_PRINT(DMLVL_DEBUG, " Mountpoint handle: %p\n", DM_GET_VALUE(me, me_handle2, void *));
1649 DMLOG_PRINT(DMLVL_DEBUG, " Mountpoint handle length: %d\n", DM_GET_LEN(me, me_handle2));
1650 DMLOG_PRINT(DMLVL_DEBUG, " Mountpoint path: %s\n", DM_GET_VALUE(me, me_name1, char *));
1651 DMLOG_PRINT(DMLVL_DEBUG, " Media designator: %s\n", DM_GET_VALUE(me, me_name2, char *));
1652 DMLOG_PRINT(DMLVL_DEBUG, " Root handle: %p\n", DM_GET_VALUE(me, me_roothandle, void *));
1653 DMLOG_PRINT(DMLVL_DEBUG, " Root handle length: %d\n", DM_GET_LEN(me, me_roothandle));
Garrett Cooper2c282152010-12-16 00:55:50 -08001654
vapierd13d74b2006-02-11 07:24:00 +00001655 bMounted = dm_handle_is_valid(lhanp, lhlen);
1656
1657 rc = dm_request_right(sid, lhanp, lhlen, token, DM_RR_WAIT, DM_RIGHT_EXCL);
1658 if (rc == -1) {
1659 DMLOG_PRINT(DMLVL_ERR, "dm_request_right failed! (rc = %d, errno = %d)\n", rc, errno);
1660 dm_destroy_session(sid);
1661 DM_EXIT();
1662 }
1663
1664 DMEV_ZERO(events);
1665 DMEV_SET(DM_EVENT_PREUNMOUNT, events);
1666 DMEV_SET(DM_EVENT_UNMOUNT, events);
1667 DMEV_SET(DM_EVENT_CREATE, events);
1668 rc = dm_set_disp(sid, lhanp, lhlen, token, &events, DM_EVENT_MAX);
1669 if (rc == -1) {
1670 DMLOG_PRINT(DMLVL_ERR, "dm_set_disp failed! (rc = %d, errno = %d)\n", rc, errno);
1671 dm_destroy_session(sid);
1672 DM_EXIT();
1673 }
1674
1675 rc = dm_set_eventlist(sid, lhanp, lhlen, token, &events, DM_EVENT_MAX);
1676 if (rc == -1) {
1677 DMLOG_PRINT(DMLVL_ERR, "dm_set_eventlist failed! (rc = %d, errno = %d)\n", rc, errno);
1678 dm_destroy_session(sid);
1679 DM_EXIT();
1680 }
1681
1682 rc = dm_release_right(sid, lhanp, lhlen, token);
1683 if (rc == -1) {
1684 DMLOG_PRINT(DMLVL_ERR, "dm_request_right failed! (rc = %d, errno = %d)\n", rc, errno);
1685 dm_destroy_session(sid);
1686 DM_EXIT();
1687 }
1688
1689 response = DM_RESP_CONTINUE;
1690 } else if (type == DM_EVENT_UNMOUNT) {
1691 dm_namesp_event_t *nse = DM_GET_VALUE(dmMsg, ev_data, dm_namesp_event_t *);
1692 if (nse->ne_retcode == 0) {
1693 bMounted = DM_FALSE;
1694 }
1695
1696 response = DM_RESP_CONTINUE;
1697 } else if (type == DM_EVENT_CREATE) {
1698 dm_namesp_event_t *nse = DM_GET_VALUE(dmMsg, ev_data, dm_namesp_event_t *);
1699 void *hanp = DM_GET_VALUE(nse, ne_handle1, void *);
1700 size_t hlen = DM_GET_LEN(nse, ne_handle1);
1701
1702 if (runTestOnCreate) {
1703 DoTest(token, hanp, hlen);
1704 }
1705
1706 response = DM_RESP_CONTINUE;
1707 } else {
1708 switch (type) {
1709 case DM_EVENT_PREUNMOUNT:
1710 response = DM_RESP_CONTINUE;
1711 break;
Garrett Cooper2c282152010-12-16 00:55:50 -08001712
vapierd13d74b2006-02-11 07:24:00 +00001713 default:
1714 {
1715 DMLOG_PRINT(DMLVL_ERR, "Message is unexpected!\n");
1716 response = DM_RESP_ABORT;
1717 break;
1718 }
1719 }
1720 }
1721
1722 if (response != DM_RESP_INVALID) {
1723 DMLOG_PRINT(DMLVL_DEBUG, "Responding to message %d with %d\n", type, response);
1724 rc = dm_respond_event(sid, token, response, response == DM_RESP_ABORT ? ABORT_ERRNO : 0, 0, NULL);
1725 }
1726 } while (bMounted);
1727
1728 pthread_exit(0);
Garrett Cooper2c282152010-12-16 00:55:50 -08001729}