1 /*
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19 /*
20 * TEST CASE : attr.c - DMAPI attributes
21 *
22 * VARIATIONS : 204
23 *
24 * API'S TESTED : dm_set_dmattr
25 * dm_get_dmattr
26 * dm_remove_dmattr
27 * dm_getall_dmattr
28 * dm_set_fileattr
29 * dm_get_fileattr
30 * dm_get_dirattrs
31 * dm_set_inherit
32 * dm_clear_inherit
33 * dm_getall_inherit
34 */
35 #include <string.h>
36 #include <stdio.h>
37 #include <stdlib.h>
38 #include <errno.h>
39 #include <unistd.h>
40 #include <fcntl.h>
41 #include <sys/stat.h>
42 #include <sys/xattr.h>
43 #include "dm_test.h"
44
45 #define TMP_FILELEN 1000
46 #define ATTR_NAME2 "DMAttr02"
47 #define NUM_ATTRS 15
48 #define ATTR_SMALLLEN (DWALIGN(sizeof(dm_stat_t)+1) + DWALIGN(sizeof(DUMMY_FILE)+1))
49 #define MIN_ENTRYLEN (DWALIGN(sizeof(dm_stat_t)+1) + DWALIGN(sizeof(CURRENT_DIR)+1))
50 #define DM_AT_ALL_DIRATTRS (DM_AT_DTIME|DM_AT_HANDLE|DM_AT_EMASK|DM_AT_PMANR|DM_AT_PATTR|DM_AT_STAT|DM_AT_CFLAG)
51 #define NON_DM_ATTR_NAME "user.non-dm.attr"
52 #define NON_DM_ATTR_VALUE "This is a non-DM attribute's value"
53
54 /*
55 * DIRENTS_FILES is very implementation-dependent, and is the number of files
56 * that will just fill up the buffer passed to jfs_get_dirents; NUM_FILES
57 * should be at least 3 times DIRENTS_FILES; ATTR_LISTLEN needs to be large
58 * enough to contain 3 files (., .. and dummy.txt) worth of information while
59 * ATTR_BIGLISTLEN needs to be large enough to contain NUM_FILES files worth
60 * of information
61 */
62 #define DIRENTS_FILES 5
63 #define NUM_FILES 15
64 #define ATTR_LISTLEN 1000
65 #define ATTR_BIGLISTLEN 10000
66
67 char command[4096];
68 char fullAttrName[32];
69 dm_sessid_t sid;
70 dm_size_t maxAttrSize;
71 dm_size_t persInheritAttr;
72
LogDmStat(dm_stat_t * statdm)73 void LogDmStat(dm_stat_t * statdm)
74 {
75
76 DMLOG_PRINT(DMLVL_DEBUG, " dt_dev %d\n", statdm->dt_dev);
77 DMLOG_PRINT(DMLVL_DEBUG, " dt_ino %d\n", statdm->dt_ino);
78 DMLOG_PRINT(DMLVL_DEBUG, " dt_mode 0x%x\n", statdm->dt_mode);
79 DMLOG_PRINT(DMLVL_DEBUG, " dt_nlink %d\n", statdm->dt_nlink);
80 DMLOG_PRINT(DMLVL_DEBUG, " dt_uid %d\n", statdm->dt_uid);
81 DMLOG_PRINT(DMLVL_DEBUG, " dt_gid %d\n", statdm->dt_gid);
82 DMLOG_PRINT(DMLVL_DEBUG, " dt_rdev %d\n", statdm->dt_rdev);
83 DMLOG_PRINT(DMLVL_DEBUG, " dt_size %lld\n", statdm->dt_size);
84 DMLOG_PRINT(DMLVL_DEBUG, " dt_blksize %d\n", statdm->dt_blksize);
85 DMLOG_PRINT(DMLVL_DEBUG, " dt_blocks %d\n", statdm->dt_blocks);
86 DMLOG_PRINT(DMLVL_DEBUG, " dt_atime %d\n", statdm->dt_atime);
87 DMLOG_PRINT(DMLVL_DEBUG, " dt_mtime %d\n", statdm->dt_mtime);
88 DMLOG_PRINT(DMLVL_DEBUG, " dt_ctime %d\n", statdm->dt_ctime);
89
90 }
91
LogDmAttrs(dm_attrlist_t * attrlist)92 void LogDmAttrs(dm_attrlist_t * attrlist)
93 {
94
95 int i = 0;
96 dm_attrlist_t *attr = attrlist;
97
98 while (attr != NULL) {
99 DMLOG_PRINT(DMLVL_DEBUG, " dmattr %d: name %.*s, value %.*s\n",
100 i++, DM_ATTR_NAME_SIZE, attr->al_name.an_chars,
101 DM_GET_LEN(attr, al_data), DM_GET_VALUE(attr,
102 al_data,
103 char *));
104 attr = DM_STEP_TO_NEXT(attr, dm_attrlist_t *);
105 }
106 }
107
LogDirAttrs(void * attrlist,u_int mask)108 void LogDirAttrs(void *attrlist, u_int mask)
109 {
110 int i = 0;
111 dm_stat_t *stat = (dm_stat_t *) attrlist;
112
113 while (stat != NULL) {
114 DMLOG_PRINT(DMLVL_DEBUG, " dirattr %d:\n", i++);
115 DMLOG_PRINT(DMLVL_DEBUG, " dt_compname: %s\n",
116 DM_GET_VALUE(stat, dt_compname, char *));
117 if (mask & DM_AT_HANDLE)
118 dm_LogHandle(DM_GET_VALUE(stat, dt_handle, void *),
119 DM_GET_LEN(stat, dt_handle));
120 if (mask & DM_AT_EMASK)
121 DMLOG_PRINT(DMLVL_DEBUG, " dt_emask: %x\n",
122 stat->dt_emask);
123 if (mask & DM_AT_PMANR)
124 DMLOG_PRINT(DMLVL_DEBUG, " dt_pmanreg: %s\n",
125 stat->dt_pmanreg ? "DM_TRUE" : "DM_FALSE");
126 if (mask & DM_AT_PATTR)
127 DMLOG_PRINT(DMLVL_DEBUG, " dt_pers: %s\n",
128 stat->dt_pers ? "DM_TRUE" : "DM_FALSE");
129 if (mask & DM_AT_DTIME)
130 DMLOG_PRINT(DMLVL_DEBUG, " dt_dtime: %d\n",
131 stat->dt_dtime);
132 if (mask & DM_AT_CFLAG)
133 DMLOG_PRINT(DMLVL_DEBUG, " dt_change: %d\n",
134 stat->dt_change);
135 if (mask & DM_AT_STAT)
136 LogDmStat(stat);
137
138 stat = DM_STEP_TO_NEXT(stat, dm_stat_t *);
139 }
140 }
141
GetDirEntry(void * attrlist,char * compname)142 dm_stat_t *GetDirEntry(void *attrlist, char *compname)
143 {
144
145 dm_stat_t *stat = (dm_stat_t *) attrlist;
146
147 while (stat != NULL) {
148 if (strcmp(DM_GET_VALUE(stat, dt_compname, char *), compname) ==
149 0)
150 return stat;
151 stat = DM_STEP_TO_NEXT(stat, dm_stat_t *);
152 }
153 return NULL;
154
155 }
156
GetLastDirEntry(void * attrlist)157 dm_stat_t *GetLastDirEntry(void *attrlist)
158 {
159
160 dm_stat_t *stat = (dm_stat_t *) attrlist;
161 dm_stat_t *laststat = NULL;
162
163 while (stat != NULL) {
164 laststat = stat;
165 stat = DM_STEP_TO_NEXT(stat, dm_stat_t *);
166 }
167 return laststat;
168
169 }
170
GetNumDirEntry(void * attrlist)171 int GetNumDirEntry(void *attrlist)
172 {
173
174 dm_stat_t *stat = (dm_stat_t *) attrlist;
175 int i = 0;
176
177 while (stat != NULL) {
178 i++;
179 stat = DM_STEP_TO_NEXT(stat, dm_stat_t *);
180 }
181 return i;
182
183 }
184
main(int argc,char ** argv)185 int main(int argc, char **argv)
186 {
187
188 char *szFuncName;
189 char *varstr;
190 int i;
191 int rc;
192 char *szSessionInfo = "dm_test session info";
193
194 DMOPT_PARSE(argc, argv);
195 DMLOG_START();
196
197 /* CANNOT DO ANYTHING WITHOUT SUCCESSFUL INITIALIZATION!!! */
198 if ((rc = dm_init_service(&varstr)) != 0) {
199 DMLOG_PRINT(DMLVL_ERR,
200 "dm_init_service failed! (rc = %d, errno = %d)\n",
201 rc, errno);
202 DM_EXIT();
203 } else if ((rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &sid))
204 != 0) {
205 DMLOG_PRINT(DMLVL_ERR,
206 "dm_create_session failed! (rc = %d, errno = %d)\n",
207 rc, errno);
208 DM_EXIT();
209 } else {
210 int fd;
211 void *fshanp;
212 size_t fshlen;
213
214 fd = open(DUMMY_TMP, O_RDWR | O_CREAT | O_TRUNC,
215 DUMMY_FILE_RW_MODE);
216 if (fd != -1) {
217 for (i = 0; i < (TMP_FILELEN / DUMMY_STRLEN); i++) {
218 if (write(fd, DUMMY_STRING, DUMMY_STRLEN) !=
219 DUMMY_STRLEN) {
220 rc = -1;
221 break;
222 }
223 }
224 } else {
225 rc = -1;
226 }
227 if (rc == 0) {
228 rc = close(fd);
229 }
230 if (rc == -1) {
231 DMLOG_PRINT(DMLVL_ERR,
232 "creating dummy file failed! (rc = %d, errno = %d)\n",
233 rc, errno);
234 dm_destroy_session(sid);
235 DM_EXIT();
236 }
237
238 rc = dm_path_to_fshandle(DUMMY_TMP, &fshanp, &fshlen);
239 if (rc == -1) {
240 DMLOG_PRINT(DMLVL_ERR,
241 "dm_path_to_fshandle! (rc = %d, errno = %d)\n",
242 rc, errno);
243 dm_destroy_session(sid);
244 DM_EXIT();
245 }
246
247 rc = dm_get_config(fshanp, fshlen, DM_CONFIG_MAX_ATTRIBUTE_SIZE,
248 &maxAttrSize);
249 if (rc == -1) {
250 DMLOG_PRINT(DMLVL_ERR,
251 "dm_get_config failed! (rc = %d, errno = %d)\n",
252 rc, errno);
253 dm_handle_free(fshanp, fshlen);
254 dm_destroy_session(sid);
255 DM_EXIT();
256 }
257
258 rc = dm_get_config(fshanp, fshlen,
259 DM_CONFIG_PERS_INHERIT_ATTRIBS,
260 &persInheritAttr);
261 if (rc == -1) {
262 DMLOG_PRINT(DMLVL_ERR,
263 "dm_get_config failed! (rc = %d, errno = %d)\n",
264 rc, errno);
265 dm_handle_free(fshanp, fshlen);
266 dm_destroy_session(sid);
267 DM_EXIT();
268 }
269
270 dm_handle_free(fshanp, fshlen);
271
272 sprintf(fullAttrName, "%s%s", DMAPI_ATTR_PREFIX, ATTR_NAME);
273
274 /* Clean up any possible leftovers that could get in the way */
275 remove(DUMMY_SUBDIR_FILE);
276 unlink(DUMMY_SUBDIR_LINK);
277 rmdir(DUMMY_SUBDIR_SUBDIR);
278 remove(DUMMY_FILE);
279 remove(DUMMY_FILE2);
280 unlink(DUMMY_LINK);
281 rmdir(DUMMY_SUBDIR);
282 }
283
284 DMLOG_PRINT(DMLVL_DEBUG, "Starting DMAPI attribute tests\n");
285
286 szFuncName = "dm_set_dmattr";
287
288 /*
289 * TEST : dm_set_dmattr - invalid sid
290 * EXPECTED: rc = -1, errno = EINVAL
291 */
292 if (DMVAR_EXEC(SET_DMATTR_BASE + 1)) {
293 int fd;
294 void *hanp;
295 size_t hlen;
296 dm_attrname_t attrname;
297 char buf[ATTR_VALUELEN];
298
299 /* Variation set up */
300 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
301 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
302 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
303 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
304 if ((rc = system(command)) == -1) {
305 /* No clean up */
306 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
307 remove(DUMMY_FILE);
308 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
309 close(fd);
310 remove(DUMMY_FILE);
311 }
312 if (fd == -1 || rc == -1) {
313 DMLOG_PRINT(DMLVL_DEBUG,
314 "Unable to set up variation! (errno = %d)\n",
315 errno);
316 DMVAR_SKIP();
317 } else {
318 /* Variation */
319 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
320 szFuncName);
321 rc = dm_set_dmattr(INVALID_ADDR, hanp, hlen,
322 DM_NO_TOKEN, &attrname, 0,
323 sizeof(buf), buf);
324 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
325
326 /* Variation clean up */
327 rc = close(fd);
328 rc |= remove(DUMMY_FILE);
329 if (rc == -1) {
330 DMLOG_PRINT(DMLVL_DEBUG,
331 "Unable to clean up variation! (errno = %d)\n",
332 errno);
333 }
334 dm_handle_free(hanp, hlen);
335 }
336 }
337
338 /*
339 * TEST : dm_set_dmattr - invalid hanp
340 * EXPECTED: rc = -1, errno = EFAULT
341 */
342 if (DMVAR_EXEC(SET_DMATTR_BASE + 2)) {
343 int fd;
344 void *hanp;
345 size_t hlen;
346 dm_attrname_t attrname;
347 char buf[ATTR_VALUELEN];
348
349 /* Variation set up */
350 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
351 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
352 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
353 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
354 if ((rc = system(command)) == -1) {
355 /* No clean up */
356 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
357 remove(DUMMY_FILE);
358 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
359 close(fd);
360 remove(DUMMY_FILE);
361 }
362 if (fd == -1 || rc == -1) {
363 DMLOG_PRINT(DMLVL_DEBUG,
364 "Unable to set up variation! (errno = %d)\n",
365 errno);
366 DMVAR_SKIP();
367 } else {
368 /* Variation */
369 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
370 szFuncName);
371 rc = dm_set_dmattr(sid, (void *)INVALID_ADDR, hlen,
372 DM_NO_TOKEN, &attrname, 0,
373 sizeof(buf), buf);
374 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
375
376 /* Variation clean up */
377 rc = close(fd);
378 rc |= remove(DUMMY_FILE);
379 if (rc == -1) {
380 DMLOG_PRINT(DMLVL_DEBUG,
381 "Unable to clean up variation! (errno = %d)\n",
382 errno);
383 }
384 dm_handle_free(hanp, hlen);
385 }
386 }
387
388 /*
389 * TEST : dm_set_dmattr - invalid hlen
390 * EXPECTED: rc = -1, errno = EBADF
391 */
392 if (DMVAR_EXEC(SET_DMATTR_BASE + 3)) {
393 int fd;
394 void *hanp;
395 size_t hlen;
396 dm_attrname_t attrname;
397 char buf[ATTR_VALUELEN];
398
399 /* Variation set up */
400 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
401 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
402 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
403 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
404 if ((rc = system(command)) == -1) {
405 /* No clean up */
406 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
407 remove(DUMMY_FILE);
408 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
409 close(fd);
410 remove(DUMMY_FILE);
411 }
412 if (fd == -1 || rc == -1) {
413 DMLOG_PRINT(DMLVL_DEBUG,
414 "Unable to set up variation! (errno = %d)\n",
415 errno);
416 DMVAR_SKIP();
417 } else {
418 /* Variation */
419 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
420 szFuncName);
421 rc = dm_set_dmattr(sid, hanp, INVALID_ADDR, DM_NO_TOKEN,
422 &attrname, 0, sizeof(buf), buf);
423 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
424
425 /* Variation clean up */
426 rc = close(fd);
427 rc |= remove(DUMMY_FILE);
428 if (rc == -1) {
429 DMLOG_PRINT(DMLVL_DEBUG,
430 "Unable to clean up variation! (errno = %d)\n",
431 errno);
432 }
433 dm_handle_free(hanp, hlen);
434 }
435 }
436
437 /*
438 * TEST : dm_set_dmattr - invalid token
439 * EXPECTED: rc = -1, errno = EINVAL
440 */
441 if (DMVAR_EXEC(SET_DMATTR_BASE + 4)) {
442 int fd;
443 void *hanp;
444 size_t hlen;
445 dm_attrname_t attrname;
446 char buf[ATTR_VALUELEN];
447
448 /* Variation set up */
449 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
450 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
451 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
452 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
453 if ((rc = system(command)) == -1) {
454 /* No clean up */
455 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
456 remove(DUMMY_FILE);
457 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
458 close(fd);
459 remove(DUMMY_FILE);
460 }
461 if (fd == -1 || rc == -1) {
462 DMLOG_PRINT(DMLVL_DEBUG,
463 "Unable to set up variation! (errno = %d)\n",
464 errno);
465 DMVAR_SKIP();
466 } else {
467 /* Variation */
468 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
469 szFuncName);
470 rc = dm_set_dmattr(sid, hanp, hlen, INVALID_ADDR,
471 &attrname, 0, sizeof(buf), buf);
472 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
473
474 /* Variation clean up */
475 rc = close(fd);
476 rc |= remove(DUMMY_FILE);
477 if (rc == -1) {
478 DMLOG_PRINT(DMLVL_DEBUG,
479 "Unable to clean up variation! (errno = %d)\n",
480 errno);
481 }
482 dm_handle_free(hanp, hlen);
483 }
484 }
485
486 /*
487 * TEST : dm_set_dmattr - invalid attrnamep
488 * EXPECTED: rc = -1, errno = EFAULT
489 *
490 * This variation uncovered XFS BUG #10 (0 return code from strnlen_user
491 * ignored, which indicated fault)
492 */
493 if (DMVAR_EXEC(SET_DMATTR_BASE + 5)) {
494 int fd;
495 void *hanp;
496 size_t hlen;
497 dm_attrname_t attrname;
498 char buf[ATTR_VALUELEN];
499
500 /* Variation set up */
501 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
502 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
503 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
504 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
505 if ((rc = system(command)) == -1) {
506 /* No clean up */
507 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
508 remove(DUMMY_FILE);
509 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
510 close(fd);
511 remove(DUMMY_FILE);
512 }
513 if (fd == -1 || rc == -1) {
514 DMLOG_PRINT(DMLVL_DEBUG,
515 "Unable to set up variation! (errno = %d)\n",
516 errno);
517 DMVAR_SKIP();
518 } else {
519 /* Variation */
520 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid attrnamep)\n",
521 szFuncName);
522 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
523 (dm_attrname_t *) INVALID_ADDR, 0,
524 sizeof(buf), buf);
525 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
526
527 /* Variation clean up */
528 rc = close(fd);
529 rc |= remove(DUMMY_FILE);
530 if (rc == -1) {
531 DMLOG_PRINT(DMLVL_DEBUG,
532 "Unable to clean up variation! (errno = %d)\n",
533 errno);
534 }
535 dm_handle_free(hanp, hlen);
536 }
537 }
538
539 /*
540 * TEST : dm_set_dmattr - invalid buflen
541 * EXPECTED: rc = -1, errno = E2BIG
542 */
543 if (DMVAR_EXEC(SET_DMATTR_BASE + 6)) {
544 int fd;
545 void *hanp;
546 size_t hlen;
547 dm_attrname_t attrname;
548 char buf[ATTR_VALUELEN];
549
550 /* Variation set up */
551 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
552 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
553 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
554 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
555 if ((rc = system(command)) == -1) {
556 /* No clean up */
557 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
558 remove(DUMMY_FILE);
559 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
560 close(fd);
561 remove(DUMMY_FILE);
562 }
563 if (fd == -1 || rc == -1) {
564 DMLOG_PRINT(DMLVL_DEBUG,
565 "Unable to set up variation! (errno = %d)\n",
566 errno);
567 DMVAR_SKIP();
568 } else {
569 /* Variation */
570 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid buflen)\n",
571 szFuncName);
572 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
573 &attrname, 0, INVALID_ADDR, buf);
574 DMVAR_ENDFAILEXP(szFuncName, -1, rc, E2BIG);
575
576 /* Variation clean up */
577 rc = close(fd);
578 rc |= remove(DUMMY_FILE);
579 if (rc == -1) {
580 DMLOG_PRINT(DMLVL_DEBUG,
581 "Unable to clean up variation! (errno = %d)\n",
582 errno);
583 }
584 dm_handle_free(hanp, hlen);
585 }
586 }
587
588 /*
589 * TEST : dm_set_dmattr - invalid bufp
590 * EXPECTED: rc = -1, errno = EFAULT
591 */
592 if (DMVAR_EXEC(SET_DMATTR_BASE + 7)) {
593 int fd;
594 void *hanp;
595 size_t hlen;
596 dm_attrname_t attrname;
597 char buf[ATTR_VALUELEN];
598
599 /* Variation set up */
600 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
601 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
602 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
603 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
604 if ((rc = system(command)) == -1) {
605 /* No clean up */
606 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
607 remove(DUMMY_FILE);
608 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
609 close(fd);
610 remove(DUMMY_FILE);
611 }
612 if (fd == -1 || rc == -1) {
613 DMLOG_PRINT(DMLVL_DEBUG,
614 "Unable to set up variation! (errno = %d)\n",
615 errno);
616 DMVAR_SKIP();
617 } else {
618 /* Variation */
619 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid bufp)\n",
620 szFuncName);
621 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
622 &attrname, 0, sizeof(buf),
623 (void *)INVALID_ADDR);
624 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
625
626 /* Variation clean up */
627 rc = close(fd);
628 rc |= remove(DUMMY_FILE);
629 if (rc == -1) {
630 DMLOG_PRINT(DMLVL_DEBUG,
631 "Unable to clean up variation! (errno = %d)\n",
632 errno);
633 }
634 dm_handle_free(hanp, hlen);
635 }
636 }
637
638 /*
639 * TEST : dm_set_dmattr - empty attrname
640 * EXPECTED: rc = -1, errno = EINVAL
641 */
642 if (DMVAR_EXEC(SET_DMATTR_BASE + 8)) {
643 int fd;
644 void *hanp;
645 size_t hlen;
646 dm_attrname_t attrname;
647 char buf[ATTR_VALUELEN];
648
649 /* Variation set up */
650 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
651 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
652 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
653 if ((rc = system(command)) == -1) {
654 /* No clean up */
655 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
656 remove(DUMMY_FILE);
657 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
658 close(fd);
659 remove(DUMMY_FILE);
660 }
661 if (fd == -1 || rc == -1) {
662 DMLOG_PRINT(DMLVL_DEBUG,
663 "Unable to set up variation! (errno = %d)\n",
664 errno);
665 DMVAR_SKIP();
666 } else {
667 /* Variation */
668 DMLOG_PRINT(DMLVL_DEBUG, "%s(empty attrname)\n",
669 szFuncName);
670 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
671 &attrname, 0, sizeof(buf), buf);
672 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
673
674 /* Variation clean up */
675 rc = close(fd);
676 rc |= remove(DUMMY_FILE);
677 if (rc == -1) {
678 DMLOG_PRINT(DMLVL_DEBUG,
679 "Unable to clean up variation! (errno = %d)\n",
680 errno);
681 }
682 dm_handle_free(hanp, hlen);
683 }
684 }
685
686 /*
687 * TEST : dm_set_dmattr - zero buflen
688 * EXPECTED: rc = 0
689 */
690 if (DMVAR_EXEC(SET_DMATTR_BASE + 9)) {
691 int fd;
692 void *hanp;
693 size_t hlen;
694 dm_attrname_t attrname;
695 char buf[ATTR_VALUELEN], value[ATTR_VALUELEN];
696
697 /* Variation set up */
698 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
699 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
700 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
701 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
702 if ((rc = system(command)) == -1) {
703 /* No clean up */
704 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
705 remove(DUMMY_FILE);
706 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
707 close(fd);
708 remove(DUMMY_FILE);
709 }
710 if (fd == -1 || rc == -1) {
711 DMLOG_PRINT(DMLVL_DEBUG,
712 "Unable to set up variation! (errno = %d)\n",
713 errno);
714 DMVAR_SKIP();
715 } else {
716 /* Variation */
717 DMLOG_PRINT(DMLVL_DEBUG, "%s(zero buflen)\n",
718 szFuncName);
719 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
720 &attrname, 0, 0, NULL);
721 if (rc == 0) {
722 if ((rc =
723 getxattr(DUMMY_FILE, fullAttrName, value,
724 sizeof(value))) == 0) {
725 DMLOG_PRINT(DMLVL_DEBUG,
726 "%s passed with expected rc = %d\n",
727 szFuncName, 0);
728 DMVAR_PASS();
729 } else {
730 DMLOG_PRINT(DMLVL_ERR,
731 "%s failed with expected rc = %d but unexpected attribute length (%d vs %d)\n",
732 szFuncName, 0, 0, rc);
733 DMVAR_FAIL();
734 }
735 } else {
736 DMLOG_PRINT(DMLVL_ERR,
737 "%s failed with unexpected rc = %d (errno = %d)\n",
738 szFuncName, rc, errno);
739 DMVAR_FAIL();
740 }
741
742 /* Variation clean up */
743 rc = close(fd);
744 rc |= remove(DUMMY_FILE);
745 if (rc == -1) {
746 DMLOG_PRINT(DMLVL_DEBUG,
747 "Unable to clean up variation! (errno = %d)\n",
748 errno);
749 }
750 dm_handle_free(hanp, hlen);
751 }
752 }
753
754 /*
755 * TEST : dm_set_dmattr - maximum buflen
756 * EXPECTED: rc = 0
757 */
758 if (DMVAR_EXEC(SET_DMATTR_BASE + 10)) {
759 int fd;
760 void *hanp;
761 size_t hlen;
762 dm_attrname_t attrname;
763 char *buf, *value;
764
765 /* Variation set up */
766 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
767 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
768 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
769 if ((buf = malloc(maxAttrSize)) == NULL) {
770 /* No clean up */
771 } else if ((memset(buf, '1', maxAttrSize) == NULL) ||
772 ((value = malloc(maxAttrSize)) == NULL)) {
773 free(buf);
774 } else if ((memset(value, 0, maxAttrSize) == NULL) ||
775 ((rc = system(command)) == -1)) {
776 free(value);
777 free(buf);
778 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
779 remove(DUMMY_FILE);
780 free(value);
781 free(buf);
782 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
783 close(fd);
784 remove(DUMMY_FILE);
785 free(value);
786 free(buf);
787 }
788 if (fd == -1 || rc == -1 || buf == NULL || value == NULL) {
789 DMLOG_PRINT(DMLVL_DEBUG,
790 "Unable to set up variation! (errno = %d)\n",
791 errno);
792 DMVAR_SKIP();
793 } else {
794 /* Variation */
795 DMLOG_PRINT(DMLVL_DEBUG, "%s(max buflen)\n",
796 szFuncName);
797 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
798 &attrname, 0, maxAttrSize, buf);
799 if (rc == 0) {
800 if ((rc =
801 getxattr(DUMMY_FILE, fullAttrName, value,
802 maxAttrSize)) == maxAttrSize) {
803 if (memcmp(buf, value, maxAttrSize) ==
804 0) {
805 DMLOG_PRINT(DMLVL_DEBUG,
806 "%s passed with expected rc = %d\n",
807 szFuncName, 0);
808 DMVAR_PASS();
809 } else {
810 DMLOG_PRINT(DMLVL_ERR,
811 "%s failed with expected rc = %d but unexpected attribute value (%s vs %s)\n",
812 szFuncName, 0, buf,
813 value);
814 DMVAR_FAIL();
815 }
816 } else {
817 DMLOG_PRINT(DMLVL_ERR,
818 "%s failed with expected rc = %d but unexpected attribute length (%d vs %d)\n",
819 szFuncName, 0, maxAttrSize,
820 rc);
821 DMVAR_FAIL();
822 }
823 } else {
824 DMLOG_PRINT(DMLVL_ERR,
825 "%s failed with unexpected rc = %d (errno = %d)\n",
826 szFuncName, rc, errno);
827 DMVAR_FAIL();
828 }
829
830 /* Variation clean up */
831 rc = close(fd);
832 rc |= remove(DUMMY_FILE);
833 if (rc == -1) {
834 DMLOG_PRINT(DMLVL_DEBUG,
835 "Unable to clean up variation! (errno = %d)\n",
836 errno);
837 }
838 free(buf);
839 free(value);
840 dm_handle_free(hanp, hlen);
841 }
842 }
843
844 /*
845 * TEST : dm_set_dmattr - buflen too big
846 * EXPECTED: rc = -1, errno = E2BIG
847 */
848 if (DMVAR_EXEC(SET_DMATTR_BASE + 11)) {
849 int fd;
850 void *hanp;
851 size_t hlen;
852 dm_attrname_t attrname;
853 char *buf;
854
855 /* Variation set up */
856 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
857 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
858 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
859 if ((buf = malloc(maxAttrSize + 1)) == NULL) {
860 /* No clean up */
861 } else if ((memset(buf, '2', maxAttrSize + 1) == NULL) ||
862 ((rc = system(command)) == -1)) {
863 free(buf);
864 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
865 remove(DUMMY_FILE);
866 free(buf);
867 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
868 close(fd);
869 remove(DUMMY_FILE);
870 free(buf);
871 }
872 if (fd == -1 || rc == -1 || buf == NULL) {
873 DMLOG_PRINT(DMLVL_DEBUG,
874 "Unable to set up variation! (errno = %d)\n",
875 errno);
876 DMVAR_SKIP();
877 } else {
878 /* Variation */
879 DMLOG_PRINT(DMLVL_DEBUG, "%s(buflen too big)\n",
880 szFuncName);
881 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
882 &attrname, 0, maxAttrSize + 1, buf);
883 DMVAR_ENDFAILEXP(szFuncName, -1, rc, E2BIG);
884
885 /* Variation clean up */
886 rc = close(fd);
887 rc |= remove(DUMMY_FILE);
888 if (rc == -1) {
889 DMLOG_PRINT(DMLVL_DEBUG,
890 "Unable to clean up variation! (errno = %d)\n",
891 errno);
892 }
893 free(buf);
894 dm_handle_free(hanp, hlen);
895 }
896 }
897
898 /*
899 * TEST : dm_set_dmattr - one file attribute, setdtime zero
900 * EXPECTED: rc = 0
901 */
902 if (DMVAR_EXEC(SET_DMATTR_BASE + 12)) {
903 int fd;
904 int rc2;
905 void *hanp;
906 size_t hlen;
907 dm_attrname_t attrname;
908 char buf[ATTR_VALUELEN];
909 struct stat statfs1, statfs2;
910
911 /* Variation set up */
912 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
913 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
914 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
915 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
916 if ((rc = system(command)) == -1) {
917 /* No clean up */
918 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
919 remove(DUMMY_FILE);
920 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
921 close(fd);
922 remove(DUMMY_FILE);
923 }
924 if (fd == -1 || rc == -1) {
925 DMLOG_PRINT(DMLVL_DEBUG,
926 "Unable to set up variation! (errno = %d)\n",
927 errno);
928 DMVAR_SKIP();
929 } else {
930 /* Variation */
931 rc2 = stat(DUMMY_FILE, &statfs1);
932 TIMESTAMP_DELAY;
933 DMLOG_PRINT(DMLVL_DEBUG,
934 "%s(one file attr, setdtime zero)\n",
935 szFuncName);
936 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
937 &attrname, 0, sizeof(buf), buf);
938 rc2 |= stat(DUMMY_FILE, &statfs2);
939 if (rc == 0) {
940 if ((rc2 == 0)
941 && (statfs1.st_ctime == statfs2.st_ctime)) {
942 DMLOG_PRINT(DMLVL_DEBUG,
943 "%s passed with expected rc = %d and dtime unmodified\n",
944 szFuncName, 0);
945 DMVAR_PASS();
946 } else {
947 DMLOG_PRINT(DMLVL_ERR,
948 "%s failed with expected rc = %d but dtime modified (%d vs %d)\n",
949 szFuncName, 0,
950 statfs1.st_ctime,
951 statfs2.st_ctime);
952 DMVAR_FAIL();
953 }
954 } else {
955 DMLOG_PRINT(DMLVL_ERR,
956 "%s failed with unexpected rc = %d (errno = %d)\n",
957 szFuncName, rc, errno);
958 DMVAR_FAIL();
959 }
960
961 /* Variation clean up */
962 rc = close(fd);
963 rc |= remove(DUMMY_FILE);
964 if (rc == -1) {
965 DMLOG_PRINT(DMLVL_DEBUG,
966 "Unable to clean up variation! (errno = %d)\n",
967 errno);
968 }
969 dm_handle_free(hanp, hlen);
970 }
971 }
972
973 /*
974 * TEST : dm_set_dmattr - one file attribute, setdtime non-zero
975 * EXPECTED: rc = 0
976 */
977 if (DMVAR_EXEC(SET_DMATTR_BASE + 13)) {
978 int fd;
979 int rc2;
980 void *hanp;
981 size_t hlen;
982 dm_attrname_t attrname;
983 char buf[ATTR_VALUELEN];
984 struct stat statfs1, statfs2;
985
986 /* Variation set up */
987 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
988 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
989 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
990 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
991 if ((rc = system(command)) == -1) {
992 /* No clean up */
993 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
994 remove(DUMMY_FILE);
995 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
996 close(fd);
997 remove(DUMMY_FILE);
998 }
999 if (fd == -1 || rc == -1) {
1000 DMLOG_PRINT(DMLVL_DEBUG,
1001 "Unable to set up variation! (errno = %d)\n",
1002 errno);
1003 DMVAR_SKIP();
1004 } else {
1005 /* Variation */
1006 rc2 = stat(DUMMY_FILE, &statfs1);
1007 TIMESTAMP_DELAY;
1008 DMLOG_PRINT(DMLVL_DEBUG,
1009 "%s(one file attr, setdtime non-zero)\n",
1010 szFuncName);
1011 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1012 &attrname, 1, sizeof(buf), buf);
1013 rc2 |= stat(DUMMY_FILE, &statfs2);
1014 if (rc == 0) {
1015 if ((rc2 == 0)
1016 && (statfs1.st_ctime != statfs2.st_ctime)) {
1017 DMLOG_PRINT(DMLVL_DEBUG,
1018 "%s passed with expected rc = %d and dtime modified\n",
1019 szFuncName, 0);
1020 DMVAR_PASS();
1021 } else {
1022 DMLOG_PRINT(DMLVL_ERR,
1023 "%s failed with expected rc = %d but dtime unmodified (%d vs %d)\n",
1024 szFuncName, 0,
1025 statfs1.st_ctime,
1026 statfs2.st_ctime);
1027 DMVAR_FAIL();
1028 }
1029 } else {
1030 DMLOG_PRINT(DMLVL_ERR,
1031 "%s failed with unexpected rc = %d (errno = %d)\n",
1032 szFuncName, rc, errno);
1033 DMVAR_FAIL();
1034 }
1035
1036 /* Variation clean up */
1037 rc = close(fd);
1038 rc |= remove(DUMMY_FILE);
1039 if (rc == -1) {
1040 DMLOG_PRINT(DMLVL_DEBUG,
1041 "Unable to clean up variation! (errno = %d)\n",
1042 errno);
1043 }
1044 dm_handle_free(hanp, hlen);
1045 }
1046 }
1047
1048 /*
1049 * TEST : dm_set_dmattr - two file attributes
1050 * EXPECTED: rc = 0
1051 */
1052 if (DMVAR_EXEC(SET_DMATTR_BASE + 14)) {
1053 int fd;
1054 void *hanp;
1055 size_t hlen;
1056 dm_attrname_t attrname;
1057 char buf[ATTR_VALUELEN];
1058 int buf2 = INVALID_ADDR;
1059
1060 /* Variation set up */
1061 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1062 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1063 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1064 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1065 if ((rc = system(command)) == -1) {
1066 /* No clean up */
1067 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1068 remove(DUMMY_FILE);
1069 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1070 close(fd);
1071 remove(DUMMY_FILE);
1072 }
1073 if (fd == -1 || rc == -1) {
1074 DMLOG_PRINT(DMLVL_DEBUG,
1075 "Unable to set up variation! (errno = %d)\n",
1076 errno);
1077 DMVAR_SKIP();
1078 } else {
1079 /* Variation */
1080 DMLOG_PRINT(DMLVL_DEBUG, "%s(two file attr)\n",
1081 szFuncName);
1082 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1083 &attrname, 0, sizeof(buf), buf);
1084 if (rc == 0) {
1085 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1086 memcpy(attrname.an_chars, ATTR_NAME2,
1087 DM_ATTR_NAME_SIZE);
1088 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1089 &attrname, 0, sizeof(buf2),
1090 (void *)&buf2);
1091 }
1092 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
1093
1094 /* Variation clean up */
1095 rc = close(fd);
1096 rc |= remove(DUMMY_FILE);
1097 if (rc == -1) {
1098 DMLOG_PRINT(DMLVL_DEBUG,
1099 "Unable to clean up variation! (errno = %d)\n",
1100 errno);
1101 }
1102 dm_handle_free(hanp, hlen);
1103 }
1104 }
1105
1106 /*
1107 * TEST : dm_set_dmattr - multiple file attributes
1108 * EXPECTED: rc = 0
1109 */
1110 if (DMVAR_EXEC(SET_DMATTR_BASE + 15)) {
1111 int fd;
1112 void *hanp;
1113 size_t hlen;
1114 dm_attrname_t attrname;
1115 char buf[ATTR_VALUELEN];
1116
1117 /* Variation set up */
1118 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1119 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1120 if ((rc = system(command)) == -1) {
1121 /* No clean up */
1122 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1123 remove(DUMMY_FILE);
1124 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1125 close(fd);
1126 remove(DUMMY_FILE);
1127 }
1128 if (fd == -1 || rc == -1) {
1129 DMLOG_PRINT(DMLVL_DEBUG,
1130 "Unable to set up variation! (errno = %d)\n",
1131 errno);
1132 DMVAR_SKIP();
1133 } else {
1134 /* Variation */
1135 DMLOG_PRINT(DMLVL_DEBUG, "%s(multiple file attr)\n",
1136 szFuncName);
1137 for (i = 1; (i <= NUM_ATTRS) && (rc == 0); i++) {
1138 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1139 memcpy(attrname.an_chars, ATTR_NAME,
1140 DM_ATTR_NAME_SIZE);
1141 attrname.an_chars[DM_ATTR_NAME_SIZE - 2] =
1142 '0' + (i / 10);
1143 attrname.an_chars[DM_ATTR_NAME_SIZE - 1] =
1144 '0' + (i % 10);
1145 DMLOG_PRINT(DMLVL_DEBUG, "%s(%.*s)\n",
1146 szFuncName, DM_ATTR_NAME_SIZE,
1147 attrname.an_chars);
1148 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1149 &attrname, 0, sizeof(buf),
1150 buf);
1151 }
1152 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
1153
1154 /* Variation clean up */
1155 rc = close(fd);
1156 rc |= remove(DUMMY_FILE);
1157 if (rc == -1) {
1158 DMLOG_PRINT(DMLVL_DEBUG,
1159 "Unable to clean up variation! (errno = %d)\n",
1160 errno);
1161 }
1162 dm_handle_free(hanp, hlen);
1163 }
1164 }
1165
1166 /*
1167 * TEST : dm_set_dmattr - replace file attribute
1168 * EXPECTED: rc = 0
1169 */
1170 if (DMVAR_EXEC(SET_DMATTR_BASE + 16)) {
1171 int fd;
1172 void *hanp;
1173 size_t hlen;
1174 dm_attrname_t attrname;
1175 char buf[ATTR_VALUELEN], value[ATTR_VALUELEN];
1176
1177 /* Variation set up */
1178 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1179 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1180 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1181 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1182 if ((rc = system(command)) == -1) {
1183 /* No clean up */
1184 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1185 remove(DUMMY_FILE);
1186 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1187 close(fd);
1188 remove(DUMMY_FILE);
1189 } else
1190 if (((rc =
1191 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
1192 0, sizeof(attrname), &attrname)) == -1)
1193 ||
1194 ((rc =
1195 (getxattr
1196 (DUMMY_FILE, fullAttrName, value,
1197 sizeof(value)) == sizeof(attrname)) ? 0 : -1) == -1)
1198 ||
1199 ((rc =
1200 (memcmp(&attrname, value, sizeof(attrname)) ==
1201 0) ? 0 : -1) == -1)) {
1202 dm_handle_free(hanp, hlen);
1203 close(fd);
1204 remove(DUMMY_FILE);
1205 }
1206 if (fd == -1 || rc == -1) {
1207 DMLOG_PRINT(DMLVL_DEBUG,
1208 "Unable to set up variation! (errno = %d)\n",
1209 errno);
1210 DMVAR_SKIP();
1211 } else {
1212 /* Variation */
1213 DMLOG_PRINT(DMLVL_DEBUG, "%s(replace file attr)\n",
1214 szFuncName);
1215 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1216 &attrname, 0, sizeof(buf), buf);
1217 if (rc == 0) {
1218 if ((rc =
1219 getxattr(DUMMY_FILE, fullAttrName, value,
1220 sizeof(value))) ==
1221 ATTR_VALUELEN) {
1222 if (memcmp(buf, value, sizeof(buf)) ==
1223 0) {
1224 DMLOG_PRINT(DMLVL_DEBUG,
1225 "%s passed with expected rc = %d\n",
1226 szFuncName, 0);
1227 DMVAR_PASS();
1228 } else {
1229 DMLOG_PRINT(DMLVL_ERR,
1230 "%s failed with expected rc = %d but unexpected attribute value (%s vs %s)\n",
1231 szFuncName, 0, buf,
1232 value);
1233 DMVAR_FAIL();
1234 }
1235 } else {
1236 DMLOG_PRINT(DMLVL_ERR,
1237 "%s failed with expected rc = %d but unexpected attribute length (%d vs %d)\n",
1238 szFuncName, 0,
1239 ATTR_VALUELEN, rc);
1240 DMVAR_FAIL();
1241 }
1242 } else {
1243 DMLOG_PRINT(DMLVL_ERR,
1244 "%s failed with unexpected rc = %d (errno = %d)\n",
1245 szFuncName, rc, errno);
1246 DMVAR_FAIL();
1247 }
1248
1249 /* Variation clean up */
1250 rc = close(fd);
1251 rc |= remove(DUMMY_FILE);
1252 if (rc == -1) {
1253 DMLOG_PRINT(DMLVL_DEBUG,
1254 "Unable to clean up variation! (errno = %d)\n",
1255 errno);
1256 }
1257 dm_handle_free(hanp, hlen);
1258 }
1259 }
1260
1261 /*
1262 * TEST : dm_set_dmattr - one directory attribute, setdtime zero
1263 * EXPECTED: rc = 0
1264 */
1265 if (DMVAR_EXEC(SET_DMATTR_BASE + 17)) {
1266 int rc2;
1267 void *hanp;
1268 size_t hlen;
1269 dm_attrname_t attrname;
1270 char buf[ATTR_VALUELEN];
1271 struct stat statfs1, statfs2;
1272
1273 /* Variation set up */
1274 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1275 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1276 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1277 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
1278 /* No clean up */
1279 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
1280 == -1) {
1281 rmdir(DUMMY_SUBDIR);
1282 }
1283 if (rc == -1) {
1284 DMLOG_PRINT(DMLVL_DEBUG,
1285 "Unable to set up variation! (errno = %d)\n",
1286 errno);
1287 rmdir(DUMMY_SUBDIR);
1288 DMVAR_SKIP();
1289 } else {
1290 /* Variation */
1291 rc2 = stat(DUMMY_SUBDIR, &statfs1);
1292 TIMESTAMP_DELAY;
1293 DMLOG_PRINT(DMLVL_DEBUG,
1294 "%s(one dir attr, setdtime zero)\n",
1295 szFuncName);
1296 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1297 &attrname, 0, sizeof(buf), buf);
1298 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
1299 if (rc == 0) {
1300 if ((rc2 == 0)
1301 && (statfs1.st_ctime == statfs2.st_ctime)) {
1302 DMLOG_PRINT(DMLVL_DEBUG,
1303 "%s passed with expected rc = %d and dtime unmodified\n",
1304 szFuncName, 0);
1305 DMVAR_PASS();
1306 } else {
1307 DMLOG_PRINT(DMLVL_ERR,
1308 "%s failed with expected rc = %d but dtime modified (%d vs %d)\n",
1309 szFuncName, 0,
1310 statfs1.st_ctime,
1311 statfs2.st_ctime);
1312 DMVAR_FAIL();
1313 }
1314 } else {
1315 DMLOG_PRINT(DMLVL_ERR,
1316 "%s failed with unexpected rc = %d (errno = %d)\n",
1317 szFuncName, rc, errno);
1318 DMVAR_FAIL();
1319 }
1320
1321 /* Variation clean up */
1322 rc = rmdir(DUMMY_SUBDIR);
1323 if (rc == -1) {
1324 DMLOG_PRINT(DMLVL_DEBUG,
1325 "Unable to clean up variation! (errno = %d)\n",
1326 errno);
1327 }
1328 dm_handle_free(hanp, hlen);
1329 }
1330 }
1331
1332 /*
1333 * TEST : dm_set_dmattr - one directory attribute, setdtime non-zero
1334 * EXPECTED: rc = 0
1335 */
1336 if (DMVAR_EXEC(SET_DMATTR_BASE + 18)) {
1337 int rc2;
1338 void *hanp;
1339 size_t hlen;
1340 dm_attrname_t attrname;
1341 char buf[ATTR_VALUELEN];
1342 struct stat statfs1, statfs2;
1343
1344 /* Variation set up */
1345 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1346 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1347 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1348 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
1349 /* No clean up */
1350 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
1351 == -1) {
1352 rmdir(DUMMY_SUBDIR);
1353 }
1354 if (rc == -1) {
1355 DMLOG_PRINT(DMLVL_DEBUG,
1356 "Unable to set up variation! (errno = %d)\n",
1357 errno);
1358 rmdir(DUMMY_SUBDIR);
1359 DMVAR_SKIP();
1360 } else {
1361 /* Variation */
1362 rc2 = stat(DUMMY_SUBDIR, &statfs1);
1363 TIMESTAMP_DELAY;
1364 DMLOG_PRINT(DMLVL_DEBUG,
1365 "%s(one dir attr, setdtime non-zero)\n",
1366 szFuncName);
1367 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1368 &attrname, 1, sizeof(buf), buf);
1369 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
1370 if (rc == 0) {
1371 if ((rc2 == 0)
1372 && (statfs1.st_ctime != statfs2.st_ctime)) {
1373 DMLOG_PRINT(DMLVL_DEBUG,
1374 "%s passed with expected rc = %d and dtime modified\n",
1375 szFuncName, 0);
1376 DMVAR_PASS();
1377 } else {
1378 DMLOG_PRINT(DMLVL_ERR,
1379 "%s failed with expected rc = %d but dtime unmodified (%d vs %d)\n",
1380 szFuncName, 0,
1381 statfs1.st_ctime,
1382 statfs2.st_ctime);
1383 DMVAR_FAIL();
1384 }
1385 } else {
1386 DMLOG_PRINT(DMLVL_ERR,
1387 "%s failed with unexpected rc = %d (errno = %d)\n",
1388 szFuncName, rc, errno);
1389 DMVAR_FAIL();
1390 }
1391
1392 /* Variation clean up */
1393 rc = rmdir(DUMMY_SUBDIR);
1394 if (rc == -1) {
1395 DMLOG_PRINT(DMLVL_DEBUG,
1396 "Unable to clean up variation! (errno = %d)\n",
1397 errno);
1398 }
1399 dm_handle_free(hanp, hlen);
1400 }
1401 }
1402
1403 /*
1404 * TEST : dm_set_dmattr - fs handle
1405 * EXPECTED: rc = -1, errno = EINVAL
1406 */
1407 if (DMVAR_EXEC(SET_DMATTR_BASE + 19)) {
1408 void *hanp;
1409 size_t hlen;
1410 dm_attrname_t attrname;
1411 char buf[ATTR_VALUELEN];
1412
1413 /* Variation set up */
1414 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1415 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1416 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1417 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1418 if ((rc = system(command)) == -1) {
1419 /* No clean up */
1420 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
1421 == -1) {
1422 remove(DUMMY_FILE);
1423 }
1424 if (rc == -1) {
1425 DMLOG_PRINT(DMLVL_DEBUG,
1426 "Unable to set up variation! (errno = %d)\n",
1427 errno);
1428 DMVAR_SKIP();
1429 } else {
1430 /* Variation */
1431 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
1432 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1433 &attrname, 0, sizeof(buf), buf);
1434 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1435
1436 /* Variation clean up */
1437 rc = remove(DUMMY_FILE);
1438 if (rc == -1) {
1439 DMLOG_PRINT(DMLVL_DEBUG,
1440 "Unable to clean up variation! (errno = %d)\n",
1441 errno);
1442 }
1443 dm_handle_free(hanp, hlen);
1444 }
1445 }
1446
1447 /*
1448 * TEST : dm_set_dmattr - DM_NO_SESSION sid
1449 * EXPECTED: rc = -1, errno = EINVAL
1450 */
1451 if (DMVAR_EXEC(SET_DMATTR_BASE + 20)) {
1452 int fd;
1453 void *hanp;
1454 size_t hlen;
1455 dm_attrname_t attrname;
1456 char buf[ATTR_VALUELEN];
1457
1458 /* Variation set up */
1459 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1460 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1461 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1462 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1463 if ((rc = system(command)) == -1) {
1464 /* No clean up */
1465 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1466 remove(DUMMY_FILE);
1467 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1468 close(fd);
1469 remove(DUMMY_FILE);
1470 }
1471 if (fd == -1 || rc == -1) {
1472 DMLOG_PRINT(DMLVL_DEBUG,
1473 "Unable to set up variation! (errno = %d)\n",
1474 errno);
1475 DMVAR_SKIP();
1476 } else {
1477 /* Variation */
1478 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
1479 szFuncName);
1480 rc = dm_set_dmattr(DM_NO_SESSION, hanp, hlen,
1481 DM_NO_TOKEN, &attrname, 0,
1482 sizeof(buf), buf);
1483 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1484
1485 /* Variation clean up */
1486 rc = close(fd);
1487 rc |= remove(DUMMY_FILE);
1488 if (rc == -1) {
1489 DMLOG_PRINT(DMLVL_DEBUG,
1490 "Unable to clean up variation! (errno = %d)\n",
1491 errno);
1492 }
1493 dm_handle_free(hanp, hlen);
1494 }
1495 }
1496
1497 /*
1498 * TEST : dm_set_dmattr - global handle
1499 * EXPECTED: rc = -1, errno = EBADF
1500 */
1501 if (DMVAR_EXEC(SET_DMATTR_BASE + 21)) {
1502 dm_attrname_t attrname;
1503 char buf[ATTR_VALUELEN];
1504
1505 /* Variation set up */
1506 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1507 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1508 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1509
1510 /* Variation */
1511 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
1512 rc = dm_set_dmattr(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
1513 DM_NO_TOKEN, &attrname, 0, sizeof(buf), buf);
1514 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
1515
1516 /* Variation clean up */
1517 }
1518
1519 /*
1520 * TEST : dm_set_dmattr - invalidated hanp
1521 * EXPECTED: rc = -1, errno = BADF
1522 */
1523 if (DMVAR_EXEC(SET_DMATTR_BASE + 22)) {
1524 int fd;
1525 void *hanp;
1526 size_t hlen;
1527 dm_attrname_t attrname;
1528 char buf[ATTR_VALUELEN];
1529
1530 /* Variation set up */
1531 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1532 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1533 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1534 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1535 if ((rc = system(command)) == -1) {
1536 /* No clean up */
1537 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1538 remove(DUMMY_FILE);
1539 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1540 close(fd);
1541 remove(DUMMY_FILE);
1542 } else if ((rc = close(fd)) == -1) {
1543 dm_handle_free(hanp, hlen);
1544 remove(DUMMY_FILE);
1545 } else if ((rc = remove(DUMMY_FILE)) == -1) {
1546 dm_handle_free(hanp, hlen);
1547 }
1548 if (fd == -1 || rc == -1) {
1549 DMLOG_PRINT(DMLVL_DEBUG,
1550 "Unable to set up variation! (errno = %d)\n",
1551 errno);
1552 DMVAR_SKIP();
1553 } else {
1554 /* Variation */
1555 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated hanp)\n",
1556 szFuncName);
1557 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1558 &attrname, 0, sizeof(buf), buf);
1559 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
1560
1561 /* Variation clean up */
1562 dm_handle_free(hanp, hlen);
1563 }
1564 }
1565
1566 szFuncName = "dm_get_dmattr";
1567
1568 /*
1569 * TEST : dm_get_dmattr - invalid sid
1570 * EXPECTED: rc = -1, errno = EINVAL
1571 */
1572 if (DMVAR_EXEC(GET_DMATTR_BASE + 1)) {
1573 int fd;
1574 void *hanp;
1575 size_t hlen;
1576 dm_attrname_t attrname;
1577 char buf[ATTR_VALUELEN];
1578 size_t rlen;
1579
1580 /* Variation set up */
1581 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1582 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1583 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1584 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1585 if ((rc = system(command)) == -1) {
1586 /* No clean up */
1587 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1588 remove(DUMMY_FILE);
1589 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1590 close(fd);
1591 remove(DUMMY_FILE);
1592 } else
1593 if ((rc =
1594 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
1595 0, sizeof(buf), buf)) == -1) {
1596 dm_handle_free(hanp, hlen);
1597 close(fd);
1598 remove(DUMMY_FILE);
1599 }
1600 if (fd == -1 || rc == -1) {
1601 DMLOG_PRINT(DMLVL_DEBUG,
1602 "Unable to set up variation! (errno = %d)\n",
1603 errno);
1604 DMVAR_SKIP();
1605 } else {
1606 /* Variation */
1607 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
1608 szFuncName);
1609 rc = dm_get_dmattr(INVALID_ADDR, hanp, hlen,
1610 DM_NO_TOKEN, &attrname, sizeof(buf),
1611 buf, &rlen);
1612 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1613
1614 /* Variation clean up */
1615 rc = close(fd);
1616 rc |= remove(DUMMY_FILE);
1617 if (rc == -1) {
1618 DMLOG_PRINT(DMLVL_DEBUG,
1619 "Unable to clean up variation! (errno = %d)\n",
1620 errno);
1621 }
1622 dm_handle_free(hanp, hlen);
1623 }
1624 }
1625
1626 /*
1627 * TEST : dm_get_dmattr - invalid hanp
1628 * EXPECTED: rc = -1, errno = EFAULT
1629 */
1630 if (DMVAR_EXEC(GET_DMATTR_BASE + 2)) {
1631 int fd;
1632 void *hanp;
1633 size_t hlen;
1634 dm_attrname_t attrname;
1635 char buf[ATTR_VALUELEN];
1636 size_t rlen;
1637
1638 /* Variation set up */
1639 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1640 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1641 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1642 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1643 if ((rc = system(command)) == -1) {
1644 /* No clean up */
1645 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1646 remove(DUMMY_FILE);
1647 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1648 close(fd);
1649 remove(DUMMY_FILE);
1650 } else
1651 if ((rc =
1652 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
1653 0, sizeof(buf), buf)) == -1) {
1654 dm_handle_free(hanp, hlen);
1655 close(fd);
1656 remove(DUMMY_FILE);
1657 }
1658 if (fd == -1 || rc == -1) {
1659 DMLOG_PRINT(DMLVL_DEBUG,
1660 "Unable to set up variation! (errno = %d)\n",
1661 errno);
1662 DMVAR_SKIP();
1663 } else {
1664 /* Variation */
1665 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
1666 szFuncName);
1667 rc = dm_get_dmattr(sid, (void *)INVALID_ADDR, hlen,
1668 DM_NO_TOKEN, &attrname, sizeof(buf),
1669 buf, &rlen);
1670 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
1671
1672 /* Variation clean up */
1673 rc = close(fd);
1674 rc |= remove(DUMMY_FILE);
1675 if (rc == -1) {
1676 DMLOG_PRINT(DMLVL_DEBUG,
1677 "Unable to clean up variation! (errno = %d)\n",
1678 errno);
1679 }
1680 dm_handle_free(hanp, hlen);
1681 }
1682 }
1683
1684 /*
1685 * TEST : dm_get_dmattr - invalid hlen
1686 * EXPECTED: rc = -1, errno = EBADF
1687 */
1688 if (DMVAR_EXEC(GET_DMATTR_BASE + 3)) {
1689 int fd;
1690 void *hanp;
1691 size_t hlen;
1692 dm_attrname_t attrname;
1693 char buf[ATTR_VALUELEN];
1694 size_t rlen;
1695
1696 /* Variation set up */
1697 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1698 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1699 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1700 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1701 if ((rc = system(command)) == -1) {
1702 /* No clean up */
1703 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1704 remove(DUMMY_FILE);
1705 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1706 close(fd);
1707 remove(DUMMY_FILE);
1708 } else
1709 if ((rc =
1710 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
1711 0, sizeof(buf), buf)) == -1) {
1712 dm_handle_free(hanp, hlen);
1713 close(fd);
1714 remove(DUMMY_FILE);
1715 }
1716 if (fd == -1 || rc == -1) {
1717 DMLOG_PRINT(DMLVL_DEBUG,
1718 "Unable to set up variation! (errno = %d)\n",
1719 errno);
1720 DMVAR_SKIP();
1721 } else {
1722 /* Variation */
1723 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
1724 szFuncName);
1725 rc = dm_get_dmattr(sid, hanp, INVALID_ADDR, DM_NO_TOKEN,
1726 &attrname, sizeof(buf), buf, &rlen);
1727 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
1728
1729 /* Variation clean up */
1730 rc = close(fd);
1731 rc |= remove(DUMMY_FILE);
1732 if (rc == -1) {
1733 DMLOG_PRINT(DMLVL_DEBUG,
1734 "Unable to clean up variation! (errno = %d)\n",
1735 errno);
1736 }
1737 dm_handle_free(hanp, hlen);
1738 }
1739 }
1740
1741 /*
1742 * TEST : dm_get_dmattr - invalid token
1743 * EXPECTED: rc = -1, errno = EINVAL
1744 */
1745 if (DMVAR_EXEC(GET_DMATTR_BASE + 4)) {
1746 int fd;
1747 void *hanp;
1748 size_t hlen;
1749 dm_attrname_t attrname;
1750 char buf[ATTR_VALUELEN];
1751 size_t rlen;
1752
1753 /* Variation set up */
1754 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1755 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1756 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1757 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1758 if ((rc = system(command)) == -1) {
1759 /* No clean up */
1760 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1761 remove(DUMMY_FILE);
1762 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1763 close(fd);
1764 remove(DUMMY_FILE);
1765 } else
1766 if ((rc =
1767 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
1768 0, sizeof(buf), buf)) == -1) {
1769 dm_handle_free(hanp, hlen);
1770 close(fd);
1771 remove(DUMMY_FILE);
1772 }
1773 if (fd == -1 || rc == -1) {
1774 DMLOG_PRINT(DMLVL_DEBUG,
1775 "Unable to set up variation! (errno = %d)\n",
1776 errno);
1777 DMVAR_SKIP();
1778 } else {
1779 /* Variation */
1780 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
1781 szFuncName);
1782 rc = dm_get_dmattr(sid, hanp, hlen, INVALID_ADDR,
1783 &attrname, sizeof(buf), buf, &rlen);
1784 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
1785
1786 /* Variation clean up */
1787 rc = close(fd);
1788 rc |= remove(DUMMY_FILE);
1789 if (rc == -1) {
1790 DMLOG_PRINT(DMLVL_DEBUG,
1791 "Unable to clean up variation! (errno = %d)\n",
1792 errno);
1793 }
1794 dm_handle_free(hanp, hlen);
1795 }
1796 }
1797
1798 /*
1799 * TEST : dm_get_dmattr - invalid attrnamep
1800 * EXPECTED: rc = -1, errno = EFAULT
1801 */
1802 if (DMVAR_EXEC(GET_DMATTR_BASE + 5)) {
1803 int fd;
1804 void *hanp;
1805 size_t hlen;
1806 dm_attrname_t attrname;
1807 char buf[ATTR_VALUELEN];
1808 size_t rlen;
1809
1810 /* Variation set up */
1811 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1812 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1813 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1814 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1815 if ((rc = system(command)) == -1) {
1816 /* No clean up */
1817 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1818 remove(DUMMY_FILE);
1819 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1820 close(fd);
1821 remove(DUMMY_FILE);
1822 } else
1823 if ((rc =
1824 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
1825 0, sizeof(buf), buf)) == -1) {
1826 dm_handle_free(hanp, hlen);
1827 close(fd);
1828 remove(DUMMY_FILE);
1829 }
1830 if (fd == -1 || rc == -1) {
1831 DMLOG_PRINT(DMLVL_DEBUG,
1832 "Unable to set up variation! (errno = %d)\n",
1833 errno);
1834 DMVAR_SKIP();
1835 } else {
1836 /* Variation */
1837 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid attrnamep)\n",
1838 szFuncName);
1839 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1840 (dm_attrname_t *) INVALID_ADDR,
1841 sizeof(buf), buf, &rlen);
1842 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
1843
1844 /* Variation clean up */
1845 rc = close(fd);
1846 rc |= remove(DUMMY_FILE);
1847 if (rc == -1) {
1848 DMLOG_PRINT(DMLVL_DEBUG,
1849 "Unable to clean up variation! (errno = %d)\n",
1850 errno);
1851 }
1852 dm_handle_free(hanp, hlen);
1853 }
1854 }
1855
1856 /*
1857 * TEST : dm_get_dmattr - invalid buflen
1858 * EXPECTED: rc = -1, errno = E2BIG
1859 */
1860 if (DMVAR_EXEC(GET_DMATTR_BASE + 6)) {
1861 int fd;
1862 void *hanp;
1863 size_t hlen;
1864 dm_attrname_t attrname;
1865 char buf[ATTR_VALUELEN];
1866 size_t rlen;
1867
1868 /* Variation set up */
1869 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1870 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1871 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1872 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1873 if ((rc = system(command)) == -1) {
1874 /* No clean up */
1875 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1876 remove(DUMMY_FILE);
1877 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1878 close(fd);
1879 remove(DUMMY_FILE);
1880 } else
1881 if ((rc =
1882 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
1883 0, sizeof(buf), buf)) == -1) {
1884 dm_handle_free(hanp, hlen);
1885 close(fd);
1886 remove(DUMMY_FILE);
1887 }
1888 if (fd == -1 || rc == -1) {
1889 DMLOG_PRINT(DMLVL_DEBUG,
1890 "Unable to set up variation! (errno = %d)\n",
1891 errno);
1892 DMVAR_SKIP();
1893 } else {
1894 /* Variation */
1895 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid buflen)\n",
1896 szFuncName);
1897 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1898 &attrname, 1, buf, &rlen);
1899 DMVAR_ENDFAILEXP(szFuncName, -1, rc, E2BIG);
1900 DMLOG_PRINT(DMLVL_DEBUG, "rlen %d\n");
1901
1902 /* Variation clean up */
1903 rc = close(fd);
1904 rc |= remove(DUMMY_FILE);
1905 if (rc == -1) {
1906 DMLOG_PRINT(DMLVL_DEBUG,
1907 "Unable to clean up variation! (errno = %d)\n",
1908 errno);
1909 }
1910 dm_handle_free(hanp, hlen);
1911 }
1912 }
1913
1914 /*
1915 * TEST : dm_get_dmattr - invalid bufp
1916 * EXPECTED: rc = -1, errno = EFAULT
1917 *
1918 * This variation uncovered XFS BUG #13 (attrname not null-terminated)
1919 */
1920 if (DMVAR_EXEC(GET_DMATTR_BASE + 7)) {
1921 int fd;
1922 void *hanp;
1923 size_t hlen;
1924 dm_attrname_t attrname;
1925 char buf[ATTR_VALUELEN];
1926 size_t rlen;
1927
1928 /* Variation set up */
1929 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1930 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1931 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1932 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1933 if ((rc = system(command)) == -1) {
1934 /* No clean up */
1935 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1936 remove(DUMMY_FILE);
1937 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1938 close(fd);
1939 remove(DUMMY_FILE);
1940 } else
1941 if ((rc =
1942 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
1943 0, sizeof(buf), buf)) == -1) {
1944 dm_handle_free(hanp, hlen);
1945 close(fd);
1946 remove(DUMMY_FILE);
1947 }
1948 if (fd == -1 || rc == -1) {
1949 DMLOG_PRINT(DMLVL_DEBUG,
1950 "Unable to set up variation! (errno = %d)\n",
1951 errno);
1952 DMVAR_SKIP();
1953 } else {
1954 /* Variation */
1955 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid bufp)\n",
1956 szFuncName);
1957 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
1958 &attrname, sizeof(buf),
1959 (void *)INVALID_ADDR, &rlen);
1960 DMLOG_PRINT(DMLVL_DEBUG, "rc = %d, %s", rc, &attrname);
1961 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
1962
1963 /* Variation clean up */
1964 rc = close(fd);
1965 rc |= remove(DUMMY_FILE);
1966 if (rc == -1) {
1967 DMLOG_PRINT(DMLVL_DEBUG,
1968 "Unable to clean up variation! (errno = %d)\n",
1969 errno);
1970 }
1971 dm_handle_free(hanp, hlen);
1972 }
1973 }
1974
1975 /*
1976 * TEST : dm_get_dmattr - invalid rlenp
1977 * EXPECTED: rc = -1, errno = EFAULT
1978 */
1979 if (DMVAR_EXEC(GET_DMATTR_BASE + 8)) {
1980 int fd;
1981 void *hanp;
1982 size_t hlen;
1983 dm_attrname_t attrname;
1984 char buf[ATTR_VALUELEN];
1985
1986 /* Variation set up */
1987 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
1988 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
1989 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
1990 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
1991 if ((rc = system(command)) == -1) {
1992 /* No clean up */
1993 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
1994 remove(DUMMY_FILE);
1995 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
1996 close(fd);
1997 remove(DUMMY_FILE);
1998 } else
1999 if ((rc =
2000 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
2001 0, sizeof(buf), buf)) == -1) {
2002 dm_handle_free(hanp, hlen);
2003 close(fd);
2004 remove(DUMMY_FILE);
2005 }
2006 if (fd == -1 || rc == -1) {
2007 DMLOG_PRINT(DMLVL_DEBUG,
2008 "Unable to set up variation! (errno = %d)\n",
2009 errno);
2010 DMVAR_SKIP();
2011 } else {
2012 /* Variation */
2013 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid rlenp)\n",
2014 szFuncName);
2015 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2016 &attrname, sizeof(buf), buf,
2017 (size_t *) INVALID_ADDR);
2018 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
2019
2020 /* Variation clean up */
2021 rc = close(fd);
2022 rc |= remove(DUMMY_FILE);
2023 if (rc == -1) {
2024 DMLOG_PRINT(DMLVL_DEBUG,
2025 "Unable to clean up variation! (errno = %d)\n",
2026 errno);
2027 }
2028 dm_handle_free(hanp, hlen);
2029 }
2030 }
2031
2032 /*
2033 * TEST : dm_get_dmattr - zero buflen, zero attribute length
2034 * EXPECTED: rc = 0
2035 */
2036 if (DMVAR_EXEC(GET_DMATTR_BASE + 9)) {
2037 int fd;
2038 void *hanp;
2039 size_t hlen;
2040 dm_attrname_t attrname;
2041 size_t rlen;
2042
2043 /* Variation set up */
2044 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2045 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2046 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2047 if ((rc = system(command)) == -1) {
2048 /* No clean up */
2049 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2050 remove(DUMMY_FILE);
2051 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2052 close(fd);
2053 remove(DUMMY_FILE);
2054 } else
2055 if ((rc =
2056 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
2057 0, 0, NULL)) == -1) {
2058 dm_handle_free(hanp, hlen);
2059 close(fd);
2060 remove(DUMMY_FILE);
2061 }
2062 if (fd == -1 || rc == -1) {
2063 DMLOG_PRINT(DMLVL_DEBUG,
2064 "Unable to set up variation! (errno = %d)\n",
2065 errno);
2066 DMVAR_SKIP();
2067 } else {
2068 /* Variation */
2069 DMLOG_PRINT(DMLVL_DEBUG,
2070 "%s(zero buflen, zero attr len)\n",
2071 szFuncName);
2072 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2073 &attrname, 0, NULL, &rlen);
2074 if (rc == 0) {
2075 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
2076 }
2077 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
2078
2079 /* Variation clean up */
2080 rc = close(fd);
2081 rc |= remove(DUMMY_FILE);
2082 if (rc == -1) {
2083 DMLOG_PRINT(DMLVL_DEBUG,
2084 "Unable to clean up variation! (errno = %d)\n",
2085 errno);
2086 }
2087 dm_handle_free(hanp, hlen);
2088 }
2089 }
2090
2091 /*
2092 * TEST : dm_get_dmattr - zero buflen, non-zero attribute length
2093 * EXPECTED: rc = -1, errno = E2BIG
2094 */
2095 if (DMVAR_EXEC(GET_DMATTR_BASE + 10)) {
2096 int fd;
2097 void *hanp;
2098 size_t hlen;
2099 dm_attrname_t attrname;
2100 char buf[ATTR_VALUELEN];
2101 size_t rlen;
2102
2103 /* Variation set up */
2104 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2105 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2106 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
2107 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2108 if ((rc = system(command)) == -1) {
2109 /* No clean up */
2110 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2111 remove(DUMMY_FILE);
2112 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2113 close(fd);
2114 remove(DUMMY_FILE);
2115 } else
2116 if ((rc =
2117 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
2118 0, sizeof(buf), buf)) == -1) {
2119 dm_handle_free(hanp, hlen);
2120 close(fd);
2121 remove(DUMMY_FILE);
2122 }
2123 if (fd == -1 || rc == -1) {
2124 DMLOG_PRINT(DMLVL_DEBUG,
2125 "Unable to set up variation! (errno = %d)\n",
2126 errno);
2127 DMVAR_SKIP();
2128 } else {
2129 /* Variation */
2130 DMLOG_PRINT(DMLVL_DEBUG,
2131 "%s(zero buflen, non-zero attr len)\n",
2132 szFuncName);
2133 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2134 &attrname, 0, NULL, &rlen);
2135 if (rc == -1) {
2136 if (errno == E2BIG) {
2137 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n",
2138 rlen);
2139 if (rlen == ATTR_VALUELEN) {
2140 DMLOG_PRINT(DMLVL_DEBUG,
2141 "%s passed with expected rc = %d and expected errno = %d\n",
2142 szFuncName, -1,
2143 E2BIG);
2144 DMVAR_PASS();
2145 } else {
2146 DMLOG_PRINT(DMLVL_ERR,
2147 "%s failed with expected rc = %d and expected errno = %d but unexpected rlen (%d vs %d)\n",
2148 szFuncName, -1,
2149 E2BIG, rlen,
2150 ATTR_VALUELEN);
2151 DMVAR_FAIL();
2152 }
2153 } else {
2154 DMLOG_PRINT(DMLVL_ERR,
2155 "%s failed with expected rc = %d but unexpected errno = %d\n",
2156 szFuncName, -1, E2BIG);
2157 DMVAR_FAIL();
2158 }
2159 } else {
2160 DMLOG_PRINT(DMLVL_ERR,
2161 "%s failed with unexpected rc = %d\n",
2162 szFuncName, -1);
2163 DMVAR_FAIL();
2164 }
2165
2166 /* Variation clean up */
2167 rc = close(fd);
2168 rc |= remove(DUMMY_FILE);
2169 if (rc == -1) {
2170 DMLOG_PRINT(DMLVL_DEBUG,
2171 "Unable to clean up variation! (errno = %d)\n",
2172 errno);
2173 }
2174 dm_handle_free(hanp, hlen);
2175 }
2176 }
2177
2178 /*
2179 * TEST : dm_get_dmattr - attribute not exist
2180 * EXPECTED: rc = -1, errno = ENOENT
2181 */
2182 if (DMVAR_EXEC(GET_DMATTR_BASE + 11)) {
2183 int fd;
2184 void *hanp;
2185 size_t hlen;
2186 dm_attrname_t attrname;
2187 char buf[ATTR_VALUELEN];
2188 size_t rlen;
2189
2190 /* Variation set up */
2191 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2192 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2193 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2194 if ((rc = system(command)) == -1) {
2195 /* No clean up */
2196 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2197 remove(DUMMY_FILE);
2198 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2199 close(fd);
2200 remove(DUMMY_FILE);
2201 }
2202 if (fd == -1 || rc == -1) {
2203 DMLOG_PRINT(DMLVL_DEBUG,
2204 "Unable to set up variation! (errno = %d)\n",
2205 errno);
2206 DMVAR_SKIP();
2207 } else {
2208 /* Variation */
2209 DMLOG_PRINT(DMLVL_DEBUG, "%s(attr not exist)\n",
2210 szFuncName);
2211 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2212 &attrname, sizeof(buf), buf, &rlen);
2213 DMVAR_ENDFAILEXP(szFuncName, -1, rc, ENOENT);
2214
2215 /* Variation clean up */
2216 rc = close(fd);
2217 rc |= remove(DUMMY_FILE);
2218 if (rc == -1) {
2219 DMLOG_PRINT(DMLVL_DEBUG,
2220 "Unable to clean up variation! (errno = %d)\n",
2221 errno);
2222 }
2223 dm_handle_free(hanp, hlen);
2224 }
2225 }
2226
2227 /*
2228 * TEST : dm_get_dmattr - buf too small
2229 * EXPECTED: rc = -1, errno = E2BIG
2230 */
2231 if (DMVAR_EXEC(GET_DMATTR_BASE + 12)) {
2232 int fd;
2233 void *hanp;
2234 size_t hlen;
2235 dm_attrname_t attrname;
2236 char buf[ATTR_VALUELEN];
2237 size_t rlen;
2238
2239 /* Variation set up */
2240 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2241 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2242 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
2243 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2244 if ((rc = system(command)) == -1) {
2245 /* No clean up */
2246 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2247 remove(DUMMY_FILE);
2248 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2249 close(fd);
2250 remove(DUMMY_FILE);
2251 } else
2252 if ((rc =
2253 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
2254 0, sizeof(buf), buf)) == -1) {
2255 dm_handle_free(hanp, hlen);
2256 close(fd);
2257 remove(DUMMY_FILE);
2258 }
2259 if (fd == -1 || rc == -1) {
2260 DMLOG_PRINT(DMLVL_DEBUG,
2261 "Unable to set up variation! (errno = %d)\n",
2262 errno);
2263 DMVAR_SKIP();
2264 } else {
2265 /* Variation */
2266 DMLOG_PRINT(DMLVL_DEBUG, "%s(buflen too small)\n",
2267 szFuncName);
2268 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2269 &attrname, sizeof(buf) - 1, buf,
2270 &rlen);
2271 if (rc == -1 && errno == E2BIG) {
2272 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
2273 }
2274 DMVAR_ENDFAILEXP(szFuncName, -1, rc, E2BIG);
2275
2276 /* Variation clean up */
2277 rc = close(fd);
2278 rc |= remove(DUMMY_FILE);
2279 if (rc == -1) {
2280 DMLOG_PRINT(DMLVL_DEBUG,
2281 "Unable to clean up variation! (errno = %d)\n",
2282 errno);
2283 }
2284 dm_handle_free(hanp, hlen);
2285 }
2286 }
2287
2288 /*
2289 * TEST : dm_get_dmattr - file handle
2290 * EXPECTED: rc = 0
2291 */
2292 if (DMVAR_EXEC(GET_DMATTR_BASE + 13)) {
2293 int fd;
2294 void *hanp;
2295 size_t hlen;
2296 dm_attrname_t attrname;
2297 char buf[ATTR_VALUELEN];
2298 size_t rlen;
2299
2300 /* Variation set up */
2301 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2302 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2303 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
2304 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2305 if ((rc = system(command)) == -1) {
2306 /* No clean up */
2307 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2308 remove(DUMMY_FILE);
2309 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2310 close(fd);
2311 remove(DUMMY_FILE);
2312 } else
2313 if ((rc =
2314 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
2315 0, sizeof(buf), buf)) == -1) {
2316 dm_handle_free(hanp, hlen);
2317 close(fd);
2318 remove(DUMMY_FILE);
2319 }
2320 if (fd == -1 || rc == -1) {
2321 DMLOG_PRINT(DMLVL_DEBUG,
2322 "Unable to set up variation! (errno = %d)\n",
2323 errno);
2324 DMVAR_SKIP();
2325 } else {
2326 /* Variation */
2327 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n",
2328 szFuncName);
2329 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2330 &attrname, sizeof(buf), buf, &rlen);
2331 if (rc == 0) {
2332 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
2333 if (rlen == ATTR_VALUELEN) {
2334 if (memcmp
2335 (buf, ATTR_VALUE,
2336 ATTR_VALUELEN) == 0) {
2337 DMLOG_PRINT(DMLVL_DEBUG,
2338 "%s passed with expected rc = %d\n",
2339 szFuncName, 0);
2340 DMVAR_PASS();
2341 } else {
2342 DMLOG_PRINT(DMLVL_ERR,
2343 "%s failed with expected rc = %d and rlen = %d but unexpected buf %s",
2344 szFuncName, 0, rlen,
2345 buf);
2346 DMVAR_FAIL();
2347 }
2348 } else {
2349 DMLOG_PRINT(DMLVL_ERR,
2350 "%s failed with expected rc = %d but unexpected rlen = %d\n",
2351 szFuncName, 0, rlen);
2352 DMVAR_FAIL();
2353 }
2354 } else {
2355 DMLOG_PRINT(DMLVL_ERR,
2356 "%s failed with unexpected rc = %d (errno = %d)\n",
2357 szFuncName, rc, errno);
2358 DMVAR_FAIL();
2359 }
2360
2361 /* Variation clean up */
2362 rc = close(fd);
2363 rc |= remove(DUMMY_FILE);
2364 if (rc == -1) {
2365 DMLOG_PRINT(DMLVL_DEBUG,
2366 "Unable to clean up variation! (errno = %d)\n",
2367 errno);
2368 }
2369 dm_handle_free(hanp, hlen);
2370 }
2371 }
2372
2373 /*
2374 * TEST : dm_get_dmattr - maximum buflen
2375 * EXPECTED: rc = 0
2376 */
2377 if (DMVAR_EXEC(GET_DMATTR_BASE + 14)) {
2378 int fd;
2379 void *hanp;
2380 size_t hlen;
2381 dm_attrname_t attrname;
2382 char *buf;
2383 size_t rlen;
2384
2385 /* Variation set up */
2386 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2387 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2388 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2389 if ((buf = malloc(maxAttrSize)) == NULL) {
2390 /* No clean up */
2391 } else if ((memset(buf, '3', maxAttrSize) == NULL) ||
2392 ((rc = system(command)) == -1)) {
2393 free(buf);
2394 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2395 free(buf);
2396 remove(DUMMY_FILE);
2397 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2398 free(buf);
2399 close(fd);
2400 remove(DUMMY_FILE);
2401 } else
2402 if ((rc =
2403 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
2404 0, maxAttrSize, buf)) == -1) {
2405 free(buf);
2406 dm_handle_free(hanp, hlen);
2407 close(fd);
2408 remove(DUMMY_FILE);
2409 }
2410 if (fd == -1 || rc == -1 || buf == NULL) {
2411 DMLOG_PRINT(DMLVL_DEBUG,
2412 "Unable to set up variation! (errno = %d)\n",
2413 errno);
2414 DMVAR_SKIP();
2415 } else {
2416 /* Variation */
2417 DMLOG_PRINT(DMLVL_DEBUG, "%s(max buflen)\n",
2418 szFuncName);
2419 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2420 &attrname, maxAttrSize, buf, &rlen);
2421 if (rc == 0) {
2422 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
2423 if (rlen == maxAttrSize) {
2424 DMLOG_PRINT(DMLVL_DEBUG,
2425 "%s passed with expected rc = %d\n",
2426 szFuncName, 0);
2427 DMVAR_PASS();
2428 } else {
2429 DMLOG_PRINT(DMLVL_ERR,
2430 "%s failed with expected rc = %d but unexpected rlen (%d vs %d)\n",
2431 szFuncName, 0, rlen,
2432 maxAttrSize);
2433 DMVAR_FAIL();
2434 }
2435 } else {
2436 DMLOG_PRINT(DMLVL_ERR,
2437 "%s failed with unexpected rc = %d (errno = %d)\n",
2438 szFuncName, rc, errno);
2439 DMVAR_FAIL();
2440 }
2441
2442 /* Variation clean up */
2443 rc = close(fd);
2444 rc |= remove(DUMMY_FILE);
2445 if (rc == -1) {
2446 DMLOG_PRINT(DMLVL_DEBUG,
2447 "Unable to clean up variation! (errno = %d)\n",
2448 errno);
2449 }
2450 free(buf);
2451 dm_handle_free(hanp, hlen);
2452 }
2453 }
2454
2455 /*
2456 * TEST : dm_get_dmattr - directory handle
2457 * EXPECTED: rc = 0
2458 */
2459 if (DMVAR_EXEC(GET_DMATTR_BASE + 15)) {
2460 void *hanp;
2461 size_t hlen;
2462 dm_attrname_t attrname;
2463 char buf[ATTR_VALUELEN];
2464 size_t rlen;
2465
2466 /* Variation set up */
2467 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2468 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2469 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
2470 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
2471 /* No clean up */
2472 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
2473 == -1) {
2474 rmdir(DUMMY_SUBDIR);
2475 } else
2476 if ((rc =
2477 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
2478 0, sizeof(buf), buf)) == -1) {
2479 dm_handle_free(hanp, hlen);
2480 rmdir(DUMMY_SUBDIR);
2481 }
2482 if (rc == -1) {
2483 DMLOG_PRINT(DMLVL_DEBUG,
2484 "Unable to set up variation! (errno = %d)\n",
2485 errno);
2486 DMVAR_SKIP();
2487 } else {
2488 /* Variation */
2489 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir handle)\n",
2490 szFuncName);
2491 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2492 &attrname, sizeof(buf), buf, &rlen);
2493 if (rc == 0) {
2494 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
2495 if (rlen == ATTR_VALUELEN) {
2496 if (memcmp
2497 (buf, ATTR_VALUE,
2498 ATTR_VALUELEN) == 0) {
2499 DMLOG_PRINT(DMLVL_DEBUG,
2500 "%s passed with expected rc = %d\n",
2501 szFuncName, 0);
2502 DMVAR_PASS();
2503 } else {
2504 DMLOG_PRINT(DMLVL_ERR,
2505 "%s failed with expected rc = %d and rlen = %d but unexpected buf %s",
2506 szFuncName, 0, rlen,
2507 buf);
2508 DMVAR_FAIL();
2509 }
2510 } else {
2511 DMLOG_PRINT(DMLVL_ERR,
2512 "%s failed with expected rc = %d but unexpected rlen = %d\n",
2513 szFuncName, 0, rlen);
2514 DMVAR_FAIL();
2515 }
2516 } else {
2517 DMLOG_PRINT(DMLVL_ERR,
2518 "%s failed with unexpected rc = %d (errno = %d)\n",
2519 szFuncName, rc, errno);
2520 DMVAR_FAIL();
2521 }
2522
2523 /* Variation clean up */
2524 rc = rmdir(DUMMY_SUBDIR);
2525 if (rc == -1) {
2526 DMLOG_PRINT(DMLVL_DEBUG,
2527 "Unable to clean up variation! (errno = %d)\n",
2528 errno);
2529 }
2530 dm_handle_free(hanp, hlen);
2531 }
2532 }
2533
2534 /*
2535 * TEST : dm_get_dmattr - fs handle
2536 * EXPECTED: rc = -1, errno = EINVAL
2537 */
2538 if (DMVAR_EXEC(GET_DMATTR_BASE + 16)) {
2539 void *hanp;
2540 size_t hlen;
2541 dm_attrname_t attrname;
2542 char buf[ATTR_VALUELEN];
2543 size_t rlen;
2544
2545 /* Variation set up */
2546 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2547 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2548 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
2549 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2550 if ((rc = system(command)) == -1) {
2551 /* No clean up */
2552 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
2553 == -1) {
2554 remove(DUMMY_FILE);
2555 }
2556 if (rc == -1) {
2557 DMLOG_PRINT(DMLVL_DEBUG,
2558 "Unable to set up variation! (errno = %d)\n",
2559 errno);
2560 DMVAR_SKIP();
2561 } else {
2562 /* Variation */
2563 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
2564 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2565 &attrname, sizeof(buf), buf, &rlen);
2566 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
2567
2568 /* Variation clean up */
2569 rc = remove(DUMMY_FILE);
2570 if (rc == -1) {
2571 DMLOG_PRINT(DMLVL_DEBUG,
2572 "Unable to clean up variation! (errno = %d)\n",
2573 errno);
2574 }
2575 dm_handle_free(hanp, hlen);
2576 }
2577 }
2578
2579 /*
2580 * TEST : dm_get_dmattr - DM_NO_SESSION sid
2581 * EXPECTED: rc = -1, errno = EINVAL
2582 */
2583 if (DMVAR_EXEC(GET_DMATTR_BASE + 17)) {
2584 int fd;
2585 void *hanp;
2586 size_t hlen;
2587 dm_attrname_t attrname;
2588 char buf[ATTR_VALUELEN];
2589 size_t rlen;
2590
2591 /* Variation set up */
2592 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2593 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2594 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
2595 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2596 if ((rc = system(command)) == -1) {
2597 /* No clean up */
2598 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2599 remove(DUMMY_FILE);
2600 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2601 close(fd);
2602 remove(DUMMY_FILE);
2603 } else
2604 if ((rc =
2605 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
2606 0, sizeof(buf), buf)) == -1) {
2607 dm_handle_free(hanp, hlen);
2608 close(fd);
2609 remove(DUMMY_FILE);
2610 }
2611 if (fd == -1 || rc == -1) {
2612 DMLOG_PRINT(DMLVL_DEBUG,
2613 "Unable to set up variation! (errno = %d)\n",
2614 errno);
2615 DMVAR_SKIP();
2616 } else {
2617 /* Variation */
2618 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
2619 szFuncName);
2620 rc = dm_get_dmattr(DM_NO_SESSION, hanp, hlen,
2621 DM_NO_TOKEN, &attrname, sizeof(buf),
2622 buf, &rlen);
2623 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
2624
2625 /* Variation clean up */
2626 rc = close(fd);
2627 rc |= remove(DUMMY_FILE);
2628 if (rc == -1) {
2629 DMLOG_PRINT(DMLVL_DEBUG,
2630 "Unable to clean up variation! (errno = %d)\n",
2631 errno);
2632 }
2633 dm_handle_free(hanp, hlen);
2634 }
2635 }
2636
2637 /*
2638 * TEST : dm_get_dmattr - global handle
2639 * EXPECTED: rc = -1, errno = EBADF
2640 */
2641 if (DMVAR_EXEC(GET_DMATTR_BASE + 18)) {
2642 dm_attrname_t attrname;
2643 char buf[ATTR_VALUELEN];
2644 size_t rlen;
2645
2646 /* Variation set up */
2647 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2648 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2649 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
2650
2651 /* Variation */
2652 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
2653 rc = dm_get_dmattr(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
2654 DM_NO_TOKEN, &attrname, sizeof(buf), buf,
2655 &rlen);
2656 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
2657
2658 /* Variation clean up */
2659 }
2660
2661 /*
2662 * TEST : dm_get_dmattr - invalidated hanp
2663 * EXPECTED: rc = -1, errno = EBADF
2664 */
2665 if (DMVAR_EXEC(GET_DMATTR_BASE + 19)) {
2666 int fd;
2667 void *hanp;
2668 size_t hlen;
2669 dm_attrname_t attrname;
2670 char buf[ATTR_VALUELEN];
2671 size_t rlen;
2672
2673 /* Variation set up */
2674 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2675 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2676 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
2677 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2678 if ((rc = system(command)) == -1) {
2679 /* No clean up */
2680 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2681 remove(DUMMY_FILE);
2682 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2683 close(fd);
2684 remove(DUMMY_FILE);
2685 } else
2686 if ((rc =
2687 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
2688 0, sizeof(buf), buf)) == -1) {
2689 dm_handle_free(hanp, hlen);
2690 close(fd);
2691 remove(DUMMY_FILE);
2692 } else if ((rc = close(fd)) == -1) {
2693 dm_handle_free(hanp, hlen);
2694 remove(DUMMY_FILE);
2695 } else if ((rc == remove(DUMMY_FILE)) == -1) {
2696 dm_handle_free(hanp, hlen);
2697 }
2698 if (fd == -1 || rc == -1) {
2699 DMLOG_PRINT(DMLVL_DEBUG,
2700 "Unable to set up variation! (errno = %d)\n",
2701 errno);
2702 DMVAR_SKIP();
2703 } else {
2704 /* Variation */
2705 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated hanp)\n",
2706 szFuncName);
2707 rc = dm_get_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
2708 &attrname, sizeof(buf), buf, &rlen);
2709 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
2710
2711 /* Variation clean up */
2712 dm_handle_free(hanp, hlen);
2713 }
2714 }
2715
2716 szFuncName = "dm_remove_dmattr";
2717
2718 /*
2719 * TEST : dm_remove_dmattr - invalid sid
2720 * EXPECTED: rc = -1, errno = EINVAL
2721 */
2722 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 1)) {
2723 int fd;
2724 void *hanp;
2725 size_t hlen;
2726 dm_attrname_t attrname;
2727
2728 /* Variation set up */
2729 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2730 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2731 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2732 if ((rc = system(command)) == -1) {
2733 /* No clean up */
2734 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2735 remove(DUMMY_FILE);
2736 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2737 close(fd);
2738 remove(DUMMY_FILE);
2739 }
2740 if (fd == -1 || rc == -1) {
2741 DMLOG_PRINT(DMLVL_DEBUG,
2742 "Unable to set up variation! (errno = %d)\n",
2743 errno);
2744 DMVAR_SKIP();
2745 } else {
2746 /* Variation */
2747 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
2748 szFuncName);
2749 rc = dm_remove_dmattr(INVALID_ADDR, hanp, hlen,
2750 DM_NO_TOKEN, 0, &attrname);
2751 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
2752
2753 /* Variation clean up */
2754 rc = close(fd);
2755 rc |= remove(DUMMY_FILE);
2756 if (rc == -1) {
2757 DMLOG_PRINT(DMLVL_DEBUG,
2758 "Unable to clean up variation! (errno = %d)\n",
2759 errno);
2760 }
2761 dm_handle_free(hanp, hlen);
2762 }
2763 }
2764
2765 /*
2766 * TEST : dm_remove_dmattr - invalid hanp
2767 * EXPECTED: rc = -1, errno = EFAULT
2768 */
2769 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 2)) {
2770 int fd;
2771 void *hanp;
2772 size_t hlen;
2773 dm_attrname_t attrname;
2774
2775 /* Variation set up */
2776 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2777 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2778 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2779 if ((rc = system(command)) == -1) {
2780 /* No clean up */
2781 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2782 remove(DUMMY_FILE);
2783 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2784 close(fd);
2785 remove(DUMMY_FILE);
2786 }
2787 if (fd == -1 || rc == -1) {
2788 DMLOG_PRINT(DMLVL_DEBUG,
2789 "Unable to set up variation! (errno = %d)\n",
2790 errno);
2791 DMVAR_SKIP();
2792 } else {
2793 /* Variation */
2794 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
2795 szFuncName);
2796 rc = dm_remove_dmattr(sid, (void *)INVALID_ADDR, hlen,
2797 DM_NO_TOKEN, 0, &attrname);
2798 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
2799
2800 /* Variation clean up */
2801 rc = close(fd);
2802 rc |= remove(DUMMY_FILE);
2803 if (rc == -1) {
2804 DMLOG_PRINT(DMLVL_DEBUG,
2805 "Unable to clean up variation! (errno = %d)\n",
2806 errno);
2807 }
2808 dm_handle_free(hanp, hlen);
2809 }
2810 }
2811
2812 /*
2813 * TEST : dm_remove_dmattr - invalid hlen
2814 * EXPECTED: rc = -1, errno = EBADF
2815 */
2816 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 3)) {
2817 int fd;
2818 void *hanp;
2819 size_t hlen;
2820 dm_attrname_t attrname;
2821
2822 /* Variation set up */
2823 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2824 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2825 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2826 if ((rc = system(command)) == -1) {
2827 /* No clean up */
2828 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2829 remove(DUMMY_FILE);
2830 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2831 close(fd);
2832 remove(DUMMY_FILE);
2833 }
2834 if (fd == -1 || rc == -1) {
2835 DMLOG_PRINT(DMLVL_DEBUG,
2836 "Unable to set up variation! (errno = %d)\n",
2837 errno);
2838 DMVAR_SKIP();
2839 } else {
2840 /* Variation */
2841 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
2842 szFuncName);
2843 rc = dm_remove_dmattr(sid, hanp, INVALID_ADDR,
2844 DM_NO_TOKEN, 0, &attrname);
2845 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
2846
2847 /* Variation clean up */
2848 rc = close(fd);
2849 rc |= remove(DUMMY_FILE);
2850 if (rc == -1) {
2851 DMLOG_PRINT(DMLVL_DEBUG,
2852 "Unable to clean up variation! (errno = %d)\n",
2853 errno);
2854 }
2855 dm_handle_free(hanp, hlen);
2856 }
2857 }
2858
2859 /*
2860 * TEST : dm_remove_dmattr - invalid token
2861 * EXPECTED: rc = -1, errno = EINVAL
2862 */
2863 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 4)) {
2864 int fd;
2865 void *hanp;
2866 size_t hlen;
2867 dm_attrname_t attrname;
2868
2869 /* Variation set up */
2870 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2871 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2872 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2873 if ((rc = system(command)) == -1) {
2874 /* No clean up */
2875 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2876 remove(DUMMY_FILE);
2877 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2878 close(fd);
2879 remove(DUMMY_FILE);
2880 }
2881 if (fd == -1 || rc == -1) {
2882 DMLOG_PRINT(DMLVL_DEBUG,
2883 "Unable to set up variation! (errno = %d)\n",
2884 errno);
2885 DMVAR_SKIP();
2886 } else {
2887 /* Variation */
2888 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
2889 szFuncName);
2890 rc = dm_remove_dmattr(sid, hanp, hlen, INVALID_ADDR, 0,
2891 &attrname);
2892 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
2893
2894 /* Variation clean up */
2895 rc = close(fd);
2896 rc |= remove(DUMMY_FILE);
2897 if (rc == -1) {
2898 DMLOG_PRINT(DMLVL_DEBUG,
2899 "Unable to clean up variation! (errno = %d)\n",
2900 errno);
2901 }
2902 dm_handle_free(hanp, hlen);
2903 }
2904 }
2905
2906 /*
2907 * TEST : dm_remove_dmattr - invalid attrnamep
2908 * EXPECTED: rc = -1, errno = EFAULT
2909 */
2910 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 5)) {
2911 int fd;
2912 void *hanp;
2913 size_t hlen;
2914 dm_attrname_t attrname;
2915
2916 /* Variation set up */
2917 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2918 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2919 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2920 if ((rc = system(command)) == -1) {
2921 /* No clean up */
2922 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2923 remove(DUMMY_FILE);
2924 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2925 close(fd);
2926 remove(DUMMY_FILE);
2927 }
2928 if (fd == -1 || rc == -1) {
2929 DMLOG_PRINT(DMLVL_DEBUG,
2930 "Unable to set up variation! (errno = %d)\n",
2931 errno);
2932 DMVAR_SKIP();
2933 } else {
2934 /* Variation */
2935 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid attrnamep)\n",
2936 szFuncName);
2937 rc = dm_remove_dmattr(sid, hanp, hlen, DM_NO_TOKEN, 0,
2938 (dm_attrname_t *) INVALID_ADDR);
2939 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
2940
2941 /* Variation clean up */
2942 rc = close(fd);
2943 rc |= remove(DUMMY_FILE);
2944 if (rc == -1) {
2945 DMLOG_PRINT(DMLVL_DEBUG,
2946 "Unable to clean up variation! (errno = %d)\n",
2947 errno);
2948 }
2949 dm_handle_free(hanp, hlen);
2950 }
2951 }
2952
2953 /*
2954 * TEST : dm_remove_dmattr - attribute not exist
2955 * EXPECTED: rc = -1, errno = ENOENT
2956 */
2957 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 6)) {
2958 int fd;
2959 void *hanp;
2960 size_t hlen;
2961 dm_attrname_t attrname;
2962
2963 /* Variation set up */
2964 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
2965 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
2966 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
2967 if ((rc = system(command)) == -1) {
2968 /* No clean up */
2969 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
2970 remove(DUMMY_FILE);
2971 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
2972 close(fd);
2973 remove(DUMMY_FILE);
2974 }
2975 if (fd == -1 || rc == -1) {
2976 DMLOG_PRINT(DMLVL_DEBUG,
2977 "Unable to set up variation! (errno = %d)\n",
2978 errno);
2979 DMVAR_SKIP();
2980 } else {
2981 /* Variation */
2982 DMLOG_PRINT(DMLVL_DEBUG, "%s(attr not exist)\n",
2983 szFuncName);
2984 rc = dm_remove_dmattr(sid, hanp, hlen, DM_NO_TOKEN, 0,
2985 &attrname);
2986 DMVAR_ENDFAILEXP(szFuncName, -1, rc, ENOENT);
2987
2988 /* Variation clean up */
2989 rc = close(fd);
2990 rc |= remove(DUMMY_FILE);
2991 if (rc == -1) {
2992 DMLOG_PRINT(DMLVL_DEBUG,
2993 "Unable to clean up variation! (errno = %d)\n",
2994 errno);
2995 }
2996 dm_handle_free(hanp, hlen);
2997 }
2998 }
2999
3000 /*
3001 * TEST : dm_remove_dmattr - file attribute, setdtime zero
3002 * EXPECTED: rc = 0
3003 */
3004 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 7)) {
3005 int fd;
3006 int rc2;
3007 void *hanp;
3008 size_t hlen;
3009 dm_attrname_t attrname;
3010 char buf[ATTR_VALUELEN];
3011 size_t rlen;
3012 struct stat statfs1, statfs2;
3013
3014 /* Variation set up */
3015 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3016 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3017 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3018 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3019 if ((rc = system(command)) == -1) {
3020 /* No clean up */
3021 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3022 remove(DUMMY_FILE);
3023 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3024 close(fd);
3025 remove(DUMMY_FILE);
3026 } else
3027 if ((rc =
3028 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3029 0, sizeof(buf), buf)) == -1) {
3030 dm_handle_free(hanp, hlen);
3031 close(fd);
3032 remove(DUMMY_FILE);
3033 }
3034 if (fd == -1 || rc == -1) {
3035 DMLOG_PRINT(DMLVL_DEBUG,
3036 "Unable to set up variation! (errno = %d)\n",
3037 errno);
3038 DMVAR_SKIP();
3039 } else {
3040 /* Variation */
3041 rc2 = stat(DUMMY_FILE, &statfs1);
3042 TIMESTAMP_DELAY;
3043 DMLOG_PRINT(DMLVL_DEBUG,
3044 "%s(file attr, setdtime zero)\n",
3045 szFuncName);
3046 rc = dm_remove_dmattr(sid, hanp, hlen, DM_NO_TOKEN, 0,
3047 &attrname);
3048 rc2 |= stat(DUMMY_FILE, &statfs2);
3049 if (rc == 0) {
3050 if (((rc =
3051 dm_get_dmattr(sid, hanp, hlen,
3052 DM_NO_TOKEN, &attrname,
3053 sizeof(buf), buf,
3054 &rlen)) == -1)
3055 && (errno == ENOENT)) {
3056 if ((rc2 == 0)
3057 && (statfs1.st_ctime ==
3058 statfs2.st_ctime)) {
3059 DMLOG_PRINT(DMLVL_DEBUG,
3060 "%s passed with expected rc = %d and dtime unmodified\n",
3061 szFuncName, 0);
3062 DMVAR_PASS();
3063 } else {
3064 DMLOG_PRINT(DMLVL_ERR,
3065 "%s failed with expected rc = %d but dtime modified (%d vs %d)\n",
3066 szFuncName, 0,
3067 statfs1.st_ctime,
3068 statfs2.st_ctime);
3069 DMVAR_FAIL();
3070 }
3071 } else {
3072 DMLOG_PRINT(DMLVL_ERR,
3073 "%s failed with expected rc = %d but attr still exist (errno = %d)\n",
3074 szFuncName, 0, errno);
3075 DMVAR_FAIL();
3076 }
3077 } else {
3078 DMLOG_PRINT(DMLVL_ERR,
3079 "%s failed with unexpected rc = %d (errno = %d)\n",
3080 szFuncName, rc, errno);
3081 DMVAR_FAIL();
3082 }
3083
3084 /* Variation clean up */
3085 rc = close(fd);
3086 rc |= remove(DUMMY_FILE);
3087 if (rc == -1) {
3088 DMLOG_PRINT(DMLVL_DEBUG,
3089 "Unable to clean up variation! (errno = %d)\n",
3090 errno);
3091 }
3092 dm_handle_free(hanp, hlen);
3093 }
3094 }
3095
3096 /*
3097 * TEST : dm_remove_dmattr - file attribute, setdtime non-zero
3098 * EXPECTED: rc = 0
3099 */
3100 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 8)) {
3101 int fd;
3102 int rc2;
3103 void *hanp;
3104 size_t hlen;
3105 dm_attrname_t attrname;
3106 char buf[ATTR_VALUELEN];
3107 size_t rlen;
3108 struct stat statfs1, statfs2;
3109
3110 /* Variation set up */
3111 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3112 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3113 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3114 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3115 if ((rc = system(command)) == -1) {
3116 /* No clean up */
3117 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3118 remove(DUMMY_FILE);
3119 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3120 close(fd);
3121 remove(DUMMY_FILE);
3122 } else
3123 if ((rc =
3124 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3125 0, sizeof(buf), buf)) == -1) {
3126 dm_handle_free(hanp, hlen);
3127 close(fd);
3128 remove(DUMMY_FILE);
3129 }
3130 if (fd == -1 || rc == -1) {
3131 DMLOG_PRINT(DMLVL_DEBUG,
3132 "Unable to set up variation! (errno = %d)\n",
3133 errno);
3134 DMVAR_SKIP();
3135 } else {
3136 /* Variation */
3137 rc2 = stat(DUMMY_FILE, &statfs1);
3138 TIMESTAMP_DELAY;
3139 DMLOG_PRINT(DMLVL_DEBUG,
3140 "%s(file attr, setdtime non-zero)\n",
3141 szFuncName);
3142 rc = dm_remove_dmattr(sid, hanp, hlen, DM_NO_TOKEN, 1,
3143 &attrname);
3144 rc2 |= stat(DUMMY_FILE, &statfs2);
3145 if (rc == 0) {
3146 if (((rc =
3147 dm_get_dmattr(sid, hanp, hlen,
3148 DM_NO_TOKEN, &attrname,
3149 sizeof(buf), buf,
3150 &rlen)) == -1)
3151 && (errno == ENOENT)) {
3152 if ((rc2 == 0)
3153 && (statfs1.st_ctime !=
3154 statfs2.st_ctime)) {
3155 DMLOG_PRINT(DMLVL_DEBUG,
3156 "%s passed with expected rc = %d and dtime modified\n",
3157 szFuncName, 0);
3158 DMVAR_PASS();
3159 } else {
3160 DMLOG_PRINT(DMLVL_ERR,
3161 "%s failed with expected rc = %d but dtime unmodified (%d vs %d)\n",
3162 szFuncName, 0,
3163 statfs1.st_ctime,
3164 statfs2.st_ctime);
3165 DMVAR_FAIL();
3166 }
3167 } else {
3168 DMLOG_PRINT(DMLVL_ERR,
3169 "%s failed with expected rc = %d but attr still exist (errno = %d)\n",
3170 szFuncName, 0, errno);
3171 DMVAR_FAIL();
3172 }
3173 } else {
3174 DMLOG_PRINT(DMLVL_ERR,
3175 "%s failed with unexpected rc = %d (errno = %d)\n",
3176 szFuncName, rc, errno);
3177 DMVAR_FAIL();
3178 }
3179
3180 /* Variation clean up */
3181 rc = close(fd);
3182 rc |= remove(DUMMY_FILE);
3183 if (rc == -1) {
3184 DMLOG_PRINT(DMLVL_DEBUG,
3185 "Unable to clean up variation! (errno = %d)\n",
3186 errno);
3187 }
3188 dm_handle_free(hanp, hlen);
3189 }
3190 }
3191
3192 /*
3193 * TEST : dm_remove_dmattr - directory attribute, setdtime zero
3194 * EXPECTED: rc = 0
3195 */
3196 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 9)) {
3197 int rc2;
3198 void *hanp;
3199 size_t hlen;
3200 dm_attrname_t attrname;
3201 char buf[ATTR_VALUELEN];
3202 size_t rlen;
3203 struct stat statfs1, statfs2;
3204
3205 /* Variation set up */
3206 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3207 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3208 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3209 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
3210 /* No clean up */
3211 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
3212 == -1) {
3213 rmdir(DUMMY_SUBDIR);
3214 } else
3215 if ((rc =
3216 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3217 0, sizeof(buf), buf)) == -1) {
3218 dm_handle_free(hanp, hlen);
3219 rmdir(DUMMY_SUBDIR);
3220 }
3221 if (rc == -1) {
3222 DMLOG_PRINT(DMLVL_DEBUG,
3223 "Unable to set up variation! (errno = %d)\n",
3224 errno);
3225 DMVAR_SKIP();
3226 } else {
3227 /* Variation */
3228 rc2 = stat(DUMMY_SUBDIR, &statfs1);
3229 TIMESTAMP_DELAY;
3230 DMLOG_PRINT(DMLVL_DEBUG,
3231 "%s(dir attr, setdtime zero)\n",
3232 szFuncName);
3233 rc = dm_remove_dmattr(sid, hanp, hlen, DM_NO_TOKEN, 0,
3234 &attrname);
3235 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
3236 if (rc == 0) {
3237 if (((rc =
3238 dm_get_dmattr(sid, hanp, hlen,
3239 DM_NO_TOKEN, &attrname,
3240 sizeof(buf), buf,
3241 &rlen)) == -1)
3242 && (errno == ENOENT)) {
3243 if ((rc2 == 0)
3244 && (statfs1.st_ctime ==
3245 statfs2.st_ctime)) {
3246 DMLOG_PRINT(DMLVL_DEBUG,
3247 "%s passed with expected rc = %d and dtime unmodified\n",
3248 szFuncName, 0);
3249 DMVAR_PASS();
3250 } else {
3251 DMLOG_PRINT(DMLVL_ERR,
3252 "%s failed with expected rc = %d but dtime modified (%d vs %d)\n",
3253 szFuncName, 0,
3254 statfs1.st_ctime,
3255 statfs2.st_ctime);
3256 DMVAR_FAIL();
3257 }
3258 } else {
3259 DMLOG_PRINT(DMLVL_ERR,
3260 "%s failed with expected rc = %d but attr still exist (errno = %d)\n",
3261 szFuncName, 0, errno);
3262 DMVAR_FAIL();
3263 }
3264 } else {
3265 DMLOG_PRINT(DMLVL_ERR,
3266 "%s failed with unexpected rc = %d (errno = %d)\n",
3267 szFuncName, rc, errno);
3268 DMVAR_FAIL();
3269 }
3270
3271 /* Variation clean up */
3272 rc = rmdir(DUMMY_SUBDIR);
3273 if (rc == -1) {
3274 DMLOG_PRINT(DMLVL_DEBUG,
3275 "Unable to clean up variation! (errno = %d)\n",
3276 errno);
3277 }
3278 dm_handle_free(hanp, hlen);
3279 }
3280 }
3281
3282 /*
3283 * TEST : dm_remove_dmattr - directory attribute, setdtime non-zero
3284 * EXPECTED: rc = 0
3285 */
3286 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 10)) {
3287 int rc2;
3288 void *hanp;
3289 size_t hlen;
3290 dm_attrname_t attrname;
3291 char buf[ATTR_VALUELEN];
3292 size_t rlen;
3293 struct stat statfs1, statfs2;
3294
3295 /* Variation set up */
3296 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3297 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3298 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3299 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
3300 /* No clean up */
3301 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
3302 == -1) {
3303 rmdir(DUMMY_SUBDIR);
3304 } else
3305 if ((rc =
3306 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3307 0, sizeof(buf), buf)) == -1) {
3308 dm_handle_free(hanp, hlen);
3309 rmdir(DUMMY_SUBDIR);
3310 }
3311 if (rc == -1) {
3312 DMLOG_PRINT(DMLVL_DEBUG,
3313 "Unable to set up variation! (errno = %d)\n",
3314 errno);
3315 DMVAR_SKIP();
3316 } else {
3317 /* Variation */
3318 rc2 = stat(DUMMY_SUBDIR, &statfs1);
3319 TIMESTAMP_DELAY;
3320 DMLOG_PRINT(DMLVL_DEBUG,
3321 "%s(dir attr, setdtime non-zero)\n",
3322 szFuncName);
3323 rc = dm_remove_dmattr(sid, hanp, hlen, DM_NO_TOKEN, 1,
3324 &attrname);
3325 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
3326 if (rc == 0) {
3327 if (((rc =
3328 dm_get_dmattr(sid, hanp, hlen,
3329 DM_NO_TOKEN, &attrname,
3330 sizeof(buf), buf,
3331 &rlen)) == -1)
3332 && (errno == ENOENT)) {
3333 if ((rc2 == 0)
3334 && (statfs1.st_ctime !=
3335 statfs2.st_ctime)) {
3336 DMLOG_PRINT(DMLVL_DEBUG,
3337 "%s passed with expected rc = %d and dtime modified\n",
3338 szFuncName, 0);
3339 DMVAR_PASS();
3340 } else {
3341 DMLOG_PRINT(DMLVL_ERR,
3342 "%s failed with expected rc = %d but dtime unmodified (%d vs %d)\n",
3343 szFuncName, 0,
3344 statfs1.st_ctime,
3345 statfs2.st_ctime);
3346 DMVAR_FAIL();
3347 }
3348 } else {
3349 DMLOG_PRINT(DMLVL_ERR,
3350 "%s failed with expected rc = %d but attr still exist (errno = %d)\n",
3351 szFuncName, 0, errno);
3352 DMVAR_FAIL();
3353 }
3354 } else {
3355 DMLOG_PRINT(DMLVL_ERR,
3356 "%s failed with unexpected rc = %d (errno = %d)\n",
3357 szFuncName, rc, errno);
3358 DMVAR_FAIL();
3359 }
3360
3361 /* Variation clean up */
3362 rc = rmdir(DUMMY_SUBDIR);
3363 if (rc == -1) {
3364 DMLOG_PRINT(DMLVL_DEBUG,
3365 "Unable to clean up variation! (errno = %d)\n",
3366 errno);
3367 }
3368 dm_handle_free(hanp, hlen);
3369 }
3370 }
3371
3372 /*
3373 * TEST : dm_remove_dmattr - fs handle
3374 * EXPECTED: rc = -1, errno = EINVAL
3375 */
3376 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 11)) {
3377 void *hanp;
3378 size_t hlen;
3379 dm_attrname_t attrname;
3380
3381 /* Variation set up */
3382 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3383 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3384 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3385 if ((rc = system(command)) == -1) {
3386 /* No clean up */
3387 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
3388 == -1) {
3389 remove(DUMMY_FILE);
3390 }
3391 if (rc == -1) {
3392 DMLOG_PRINT(DMLVL_DEBUG,
3393 "Unable to set up variation! (errno = %d)\n",
3394 errno);
3395 DMVAR_SKIP();
3396 } else {
3397 /* Variation */
3398 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
3399 rc = dm_remove_dmattr(sid, hanp, hlen, DM_NO_TOKEN, 0,
3400 &attrname);
3401 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
3402
3403 /* Variation clean up */
3404 rc = remove(DUMMY_FILE);
3405 if (rc == -1) {
3406 DMLOG_PRINT(DMLVL_DEBUG,
3407 "Unable to clean up variation! (errno = %d)\n",
3408 errno);
3409 }
3410 dm_handle_free(hanp, hlen);
3411 }
3412 }
3413
3414 /*
3415 * TEST : dm_remove_dmattr - DM_NO_SESSION sid
3416 * EXPECTED: rc = -1, errno = EINVAL
3417 */
3418 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 12)) {
3419 int fd;
3420 void *hanp;
3421 size_t hlen;
3422 dm_attrname_t attrname;
3423
3424 /* Variation set up */
3425 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3426 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3427 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3428 if ((rc = system(command)) == -1) {
3429 /* No clean up */
3430 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3431 remove(DUMMY_FILE);
3432 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3433 close(fd);
3434 remove(DUMMY_FILE);
3435 }
3436 if (fd == -1 || rc == -1) {
3437 DMLOG_PRINT(DMLVL_DEBUG,
3438 "Unable to set up variation! (errno = %d)\n",
3439 errno);
3440 DMVAR_SKIP();
3441 } else {
3442 /* Variation */
3443 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
3444 szFuncName);
3445 rc = dm_remove_dmattr(DM_NO_SESSION, hanp, hlen,
3446 DM_NO_TOKEN, 0, &attrname);
3447 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
3448
3449 /* Variation clean up */
3450 rc = close(fd);
3451 rc |= remove(DUMMY_FILE);
3452 if (rc == -1) {
3453 DMLOG_PRINT(DMLVL_DEBUG,
3454 "Unable to clean up variation! (errno = %d)\n",
3455 errno);
3456 }
3457 dm_handle_free(hanp, hlen);
3458 }
3459 }
3460
3461 /*
3462 * TEST : dm_remove_dmattr - global handle
3463 * EXPECTED: rc = -1, errno = EBADF
3464 */
3465 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 13)) {
3466 dm_attrname_t attrname;
3467 char buf[ATTR_VALUELEN];
3468
3469 /* Variation set up */
3470 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3471 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3472 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3473
3474 /* Variation */
3475 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
3476 rc = dm_remove_dmattr(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
3477 DM_NO_TOKEN, 0, &attrname);
3478 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
3479
3480 /* Variation clean up */
3481 }
3482
3483 /*
3484 * TEST : dm_remove_dmattr - invalidated handle
3485 * EXPECTED: rc = -1, errno = EBADF
3486 */
3487 if (DMVAR_EXEC(REMOVE_DMATTR_BASE + 14)) {
3488 int fd;
3489 void *hanp;
3490 size_t hlen;
3491 dm_attrname_t attrname;
3492 char buf[ATTR_VALUELEN];
3493
3494 /* Variation set up */
3495 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3496 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3497 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3498 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3499 if ((rc = system(command)) == -1) {
3500 /* No clean up */
3501 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3502 remove(DUMMY_FILE);
3503 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3504 close(fd);
3505 remove(DUMMY_FILE);
3506 } else
3507 if ((rc =
3508 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3509 0, sizeof(buf), buf)) == -1) {
3510 dm_handle_free(hanp, hlen);
3511 close(fd);
3512 remove(DUMMY_FILE);
3513 } else if ((rc = close(fd)) == -1) {
3514 dm_handle_free(hanp, hlen);
3515 remove(DUMMY_FILE);
3516 } else if ((rc = remove(DUMMY_FILE)) == -1) {
3517 dm_handle_free(hanp, hlen);
3518 }
3519 if (fd == -1 || rc == -1) {
3520 DMLOG_PRINT(DMLVL_DEBUG,
3521 "Unable to set up variation! (errno = %d)\n",
3522 errno);
3523 DMVAR_SKIP();
3524 } else {
3525 /* Variation */
3526 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated handle)\n",
3527 szFuncName);
3528 rc = dm_remove_dmattr(sid, hanp, hlen, DM_NO_TOKEN, 0,
3529 &attrname);
3530 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
3531
3532 /* Variation clean up */
3533 dm_handle_free(hanp, hlen);
3534 }
3535 }
3536
3537 szFuncName = "dm_getall_dmattr";
3538
3539 /*
3540 * TEST : dm_getall_dmattr - invalid sid
3541 * EXPECTED: rc = -1, errno = EINVAL
3542 */
3543 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 1)) {
3544 int fd;
3545 void *hanp;
3546 size_t hlen;
3547 dm_attrname_t attrname;
3548 char buf[ATTR_LISTLEN];
3549 size_t rlen;
3550
3551 /* Variation set up */
3552 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3553 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3554 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3555 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3556 if ((rc = system(command)) == -1) {
3557 /* No clean up */
3558 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3559 remove(DUMMY_FILE);
3560 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3561 close(fd);
3562 remove(DUMMY_FILE);
3563 } else
3564 if ((rc =
3565 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3566 0, sizeof(buf), buf)) == -1) {
3567 dm_handle_free(hanp, hlen);
3568 close(fd);
3569 remove(DUMMY_FILE);
3570 }
3571 if (fd == -1 || rc == -1) {
3572 DMLOG_PRINT(DMLVL_DEBUG,
3573 "Unable to set up variation! (errno = %d)\n",
3574 errno);
3575 DMVAR_SKIP();
3576 } else {
3577 /* Variation */
3578 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
3579 szFuncName);
3580 rc = dm_getall_dmattr(INVALID_ADDR, hanp, hlen,
3581 DM_NO_TOKEN, sizeof(buf), buf,
3582 &rlen);
3583 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
3584
3585 /* Variation clean up */
3586 rc = close(fd);
3587 rc |= remove(DUMMY_FILE);
3588 if (rc == -1) {
3589 DMLOG_PRINT(DMLVL_DEBUG,
3590 "Unable to clean up variation! (errno = %d)\n",
3591 errno);
3592 }
3593 dm_handle_free(hanp, hlen);
3594 }
3595 }
3596
3597 /*
3598 * TEST : dm_getall_dmattr - invalid hanp
3599 * EXPECTED: rc = -1, errno = EFAULT
3600 */
3601 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 2)) {
3602 int fd;
3603 void *hanp;
3604 size_t hlen;
3605 dm_attrname_t attrname;
3606 char buf[ATTR_LISTLEN];
3607 size_t rlen;
3608
3609 /* Variation set up */
3610 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3611 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3612 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3613 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3614 if ((rc = system(command)) == -1) {
3615 /* No clean up */
3616 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3617 remove(DUMMY_FILE);
3618 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3619 close(fd);
3620 remove(DUMMY_FILE);
3621 } else
3622 if ((rc =
3623 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3624 0, sizeof(buf), buf)) == -1) {
3625 dm_handle_free(hanp, hlen);
3626 close(fd);
3627 remove(DUMMY_FILE);
3628 }
3629 if (fd == -1 || rc == -1) {
3630 DMLOG_PRINT(DMLVL_DEBUG,
3631 "Unable to set up variation! (errno = %d)\n",
3632 errno);
3633 DMVAR_SKIP();
3634 } else {
3635 /* Variation */
3636 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
3637 szFuncName);
3638 rc = dm_getall_dmattr(sid, (void *)INVALID_ADDR, hlen,
3639 DM_NO_TOKEN, sizeof(buf), buf,
3640 &rlen);
3641 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
3642
3643 /* Variation clean up */
3644 rc = close(fd);
3645 rc |= remove(DUMMY_FILE);
3646 if (rc == -1) {
3647 DMLOG_PRINT(DMLVL_DEBUG,
3648 "Unable to clean up variation! (errno = %d)\n",
3649 errno);
3650 }
3651 dm_handle_free(hanp, hlen);
3652 }
3653 }
3654
3655 /*
3656 * TEST : dm_getall_dmattr - invalid hlen
3657 * EXPECTED: rc = -1, errno = EBADF
3658 */
3659 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 3)) {
3660 int fd;
3661 void *hanp;
3662 size_t hlen;
3663 dm_attrname_t attrname;
3664 char buf[ATTR_LISTLEN];
3665 size_t rlen;
3666
3667 /* Variation set up */
3668 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3669 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3670 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3671 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3672 if ((rc = system(command)) == -1) {
3673 /* No clean up */
3674 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3675 remove(DUMMY_FILE);
3676 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3677 close(fd);
3678 remove(DUMMY_FILE);
3679 } else
3680 if ((rc =
3681 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3682 0, sizeof(buf), buf)) == -1) {
3683 dm_handle_free(hanp, hlen);
3684 close(fd);
3685 remove(DUMMY_FILE);
3686 }
3687 if (fd == -1 || rc == -1) {
3688 DMLOG_PRINT(DMLVL_DEBUG,
3689 "Unable to set up variation! (errno = %d)\n",
3690 errno);
3691 DMVAR_SKIP();
3692 } else {
3693 /* Variation */
3694 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
3695 szFuncName);
3696 rc = dm_getall_dmattr(sid, hanp, INVALID_ADDR,
3697 DM_NO_TOKEN, sizeof(buf), buf,
3698 &rlen);
3699 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
3700
3701 /* Variation clean up */
3702 rc = close(fd);
3703 rc |= remove(DUMMY_FILE);
3704 if (rc == -1) {
3705 DMLOG_PRINT(DMLVL_DEBUG,
3706 "Unable to clean up variation! (errno = %d)\n",
3707 errno);
3708 }
3709 dm_handle_free(hanp, hlen);
3710 }
3711 }
3712
3713 /*
3714 * TEST : dm_getall_dmattr - invalid token
3715 * EXPECTED: rc = -1, errno = EINVAL
3716 */
3717 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 4)) {
3718 int fd;
3719 void *hanp;
3720 size_t hlen;
3721 dm_attrname_t attrname;
3722 char buf[ATTR_LISTLEN];
3723 size_t rlen;
3724
3725 /* Variation set up */
3726 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3727 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3728 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3729 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3730 if ((rc = system(command)) == -1) {
3731 /* No clean up */
3732 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3733 remove(DUMMY_FILE);
3734 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3735 close(fd);
3736 remove(DUMMY_FILE);
3737 } else
3738 if ((rc =
3739 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3740 0, sizeof(buf), buf)) == -1) {
3741 dm_handle_free(hanp, hlen);
3742 close(fd);
3743 remove(DUMMY_FILE);
3744 }
3745 if (fd == -1 || rc == -1) {
3746 DMLOG_PRINT(DMLVL_DEBUG,
3747 "Unable to set up variation! (errno = %d)\n",
3748 errno);
3749 DMVAR_SKIP();
3750 } else {
3751 /* Variation */
3752 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
3753 szFuncName);
3754 rc = dm_getall_dmattr(sid, hanp, hlen, INVALID_ADDR,
3755 sizeof(buf), buf, &rlen);
3756 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
3757
3758 /* Variation clean up */
3759 rc = close(fd);
3760 rc |= remove(DUMMY_FILE);
3761 if (rc == -1) {
3762 DMLOG_PRINT(DMLVL_DEBUG,
3763 "Unable to clean up variation! (errno = %d)\n",
3764 errno);
3765 }
3766 dm_handle_free(hanp, hlen);
3767 }
3768 }
3769
3770 /*
3771 * TEST : dm_getall_dmattr - invalid buflen
3772 * EXPECTED: rc = -1, errno = E2BIG
3773 */
3774 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 5)) {
3775 int fd;
3776 void *hanp;
3777 size_t hlen;
3778 dm_attrname_t attrname;
3779 char buf[ATTR_LISTLEN];
3780 size_t rlen;
3781
3782 /* Variation set up */
3783 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3784 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3785 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3786 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3787 if ((rc = system(command)) == -1) {
3788 /* No clean up */
3789 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3790 remove(DUMMY_FILE);
3791 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3792 close(fd);
3793 remove(DUMMY_FILE);
3794 } else
3795 if ((rc =
3796 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3797 0, sizeof(buf), buf)) == -1) {
3798 dm_handle_free(hanp, hlen);
3799 close(fd);
3800 remove(DUMMY_FILE);
3801 }
3802 if (fd == -1 || rc == -1) {
3803 DMLOG_PRINT(DMLVL_DEBUG,
3804 "Unable to set up variation! (errno = %d)\n",
3805 errno);
3806 DMVAR_SKIP();
3807 } else {
3808 /* Variation */
3809 DMLOG_PRINT(DMLVL_DEBUG, "%s(buflen too small)\n",
3810 szFuncName);
3811 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN, 1,
3812 buf, &rlen);
3813 if (rc == -1 && errno == E2BIG) {
3814 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
3815 }
3816 DMVAR_ENDFAILEXP(szFuncName, -1, rc, E2BIG);
3817
3818 /* Variation clean up */
3819 rc = close(fd);
3820 rc |= remove(DUMMY_FILE);
3821 if (rc == -1) {
3822 DMLOG_PRINT(DMLVL_DEBUG,
3823 "Unable to clean up variation! (errno = %d)\n",
3824 errno);
3825 }
3826 dm_handle_free(hanp, hlen);
3827 }
3828 }
3829
3830 /*
3831 * TEST : dm_getall_dmattr - invalid bufp
3832 * EXPECTED: rc = -1, errno = EFAULT
3833 */
3834 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 6)) {
3835 int fd;
3836 void *hanp;
3837 size_t hlen;
3838 dm_attrname_t attrname;
3839 char buf[ATTR_LISTLEN];
3840 size_t rlen;
3841
3842 /* Variation set up */
3843 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3844 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3845 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3846 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3847 if ((rc = system(command)) == -1) {
3848 /* No clean up */
3849 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3850 remove(DUMMY_FILE);
3851 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3852 close(fd);
3853 remove(DUMMY_FILE);
3854 } else
3855 if ((rc =
3856 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3857 0, sizeof(buf), buf)) == -1) {
3858 dm_handle_free(hanp, hlen);
3859 close(fd);
3860 remove(DUMMY_FILE);
3861 }
3862 if (fd == -1 || rc == -1) {
3863 DMLOG_PRINT(DMLVL_DEBUG,
3864 "Unable to set up variation! (errno = %d)\n",
3865 errno);
3866 DMVAR_SKIP();
3867 } else {
3868 /* Variation */
3869 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid bufp)\n",
3870 szFuncName);
3871 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
3872 sizeof(buf), (void *)INVALID_ADDR,
3873 &rlen);
3874 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
3875
3876 /* Variation clean up */
3877 rc = close(fd);
3878 rc |= remove(DUMMY_FILE);
3879 if (rc == -1) {
3880 DMLOG_PRINT(DMLVL_DEBUG,
3881 "Unable to clean up variation! (errno = %d)\n",
3882 errno);
3883 }
3884 dm_handle_free(hanp, hlen);
3885 }
3886 }
3887
3888 /*
3889 * TEST : dm_getall_dmattr - invalid rlenp
3890 * EXPECTED: rc = -1, errno = EFAULT
3891 */
3892 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 7)) {
3893 int fd;
3894 void *hanp;
3895 size_t hlen;
3896 dm_attrname_t attrname;
3897 char buf[ATTR_LISTLEN];
3898
3899 /* Variation set up */
3900 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3901 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3902 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
3903 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3904 if ((rc = system(command)) == -1) {
3905 /* No clean up */
3906 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3907 remove(DUMMY_FILE);
3908 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3909 close(fd);
3910 remove(DUMMY_FILE);
3911 } else
3912 if ((rc =
3913 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
3914 0, sizeof(buf), buf)) == -1) {
3915 dm_handle_free(hanp, hlen);
3916 close(fd);
3917 remove(DUMMY_FILE);
3918 }
3919 if (fd == -1 || rc == -1) {
3920 DMLOG_PRINT(DMLVL_DEBUG,
3921 "Unable to set up variation! (errno = %d)\n",
3922 errno);
3923 DMVAR_SKIP();
3924 } else {
3925 /* Variation */
3926 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid rlenp)\n",
3927 szFuncName);
3928 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
3929 sizeof(buf), buf,
3930 (size_t *) INVALID_ADDR);
3931 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
3932
3933 /* Variation clean up */
3934 rc = close(fd);
3935 rc |= remove(DUMMY_FILE);
3936 if (rc == -1) {
3937 DMLOG_PRINT(DMLVL_DEBUG,
3938 "Unable to clean up variation! (errno = %d)\n",
3939 errno);
3940 }
3941 dm_handle_free(hanp, hlen);
3942 }
3943 }
3944
3945 /*
3946 * TEST : dm_getall_dmattr - no file attribute
3947 * EXPECTED: rc = 0
3948 */
3949 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 8)) {
3950 int fd;
3951 void *hanp;
3952 size_t hlen;
3953 dm_attrname_t attrname;
3954 char buf[ATTR_LISTLEN];
3955 size_t rlen;
3956
3957 /* Variation set up */
3958 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
3959 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
3960 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
3961 if ((rc = system(command)) == -1) {
3962 /* No clean up */
3963 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
3964 remove(DUMMY_FILE);
3965 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
3966 close(fd);
3967 remove(DUMMY_FILE);
3968 }
3969 if (fd == -1 || rc == -1) {
3970 DMLOG_PRINT(DMLVL_DEBUG,
3971 "Unable to set up variation! (errno = %d)\n",
3972 errno);
3973 DMVAR_SKIP();
3974 } else {
3975 /* Variation */
3976 DMLOG_PRINT(DMLVL_DEBUG, "%s(no file attr)\n",
3977 szFuncName);
3978 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
3979 sizeof(buf), buf, &rlen);
3980 if (rc == 0) {
3981 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
3982 if (rlen == 0) {
3983 DMLOG_PRINT(DMLVL_DEBUG,
3984 "%s passed with expected rc = %d\n",
3985 szFuncName, 0);
3986 DMVAR_PASS();
3987 } else {
3988 DMLOG_PRINT(DMLVL_ERR,
3989 "%s failed with expected rc = %d but unexpected rlen %d\n",
3990 szFuncName, 0, rlen);
3991 DMVAR_FAIL();
3992 }
3993 } else {
3994 DMLOG_PRINT(DMLVL_ERR,
3995 "%s failed with unexpected rc = %d (errno = %d)\n",
3996 szFuncName, rc, errno);
3997 DMVAR_FAIL();
3998 }
3999
4000 /* Variation clean up */
4001 rc = close(fd);
4002 rc |= remove(DUMMY_FILE);
4003 if (rc == -1) {
4004 DMLOG_PRINT(DMLVL_DEBUG,
4005 "Unable to clean up variation! (errno = %d)\n",
4006 errno);
4007 }
4008 dm_handle_free(hanp, hlen);
4009 }
4010 }
4011
4012 /*
4013 * TEST : dm_getall_dmattr - one file attribute
4014 * EXPECTED: rc = 0
4015 */
4016 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 9)) {
4017 int fd;
4018 void *hanp;
4019 size_t hlen;
4020 dm_attrname_t attrname;
4021 char buf[ATTR_LISTLEN];
4022 size_t rlen;
4023
4024 /* Variation set up */
4025 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4026 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4027 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
4028 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4029 if ((rc = system(command)) == -1) {
4030 /* No clean up */
4031 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4032 remove(DUMMY_FILE);
4033 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4034 close(fd);
4035 remove(DUMMY_FILE);
4036 } else
4037 if ((rc =
4038 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
4039 0, ATTR_VALUELEN, buf)) == -1) {
4040 dm_handle_free(hanp, hlen);
4041 close(fd);
4042 remove(DUMMY_FILE);
4043 }
4044 if (fd == -1 || rc == -1) {
4045 DMLOG_PRINT(DMLVL_DEBUG,
4046 "Unable to set up variation! (errno = %d)\n",
4047 errno);
4048 DMVAR_SKIP();
4049 } else {
4050 /* Variation */
4051 DMLOG_PRINT(DMLVL_DEBUG, "%s(one file attr)\n",
4052 szFuncName);
4053 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
4054 sizeof(buf), buf, &rlen);
4055 if (rc == 0) {
4056 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
4057 LogDmAttrs((dm_attrlist_t *) buf);
4058 if (rlen ==
4059 DWALIGN(sizeof(dm_attrlist_t) +
4060 ATTR_VALUELEN)) {
4061 DMLOG_PRINT(DMLVL_DEBUG,
4062 "%s passed with expected rc = %d\n",
4063 szFuncName, 0);
4064 DMVAR_PASS();
4065 } else {
4066 DMLOG_PRINT(DMLVL_ERR,
4067 "%s failed with expected rc = %d but unexpected rlen %d\n",
4068 szFuncName, 0, rlen);
4069 DMVAR_FAIL();
4070 }
4071 } else {
4072 DMLOG_PRINT(DMLVL_ERR,
4073 "%s failed with unexpected rc = %d (errno = %d) %d\n",
4074 szFuncName, rc, errno, rlen);
4075 DMVAR_FAIL();
4076 }
4077
4078 /* Variation clean up */
4079 rc = close(fd);
4080 rc |= remove(DUMMY_FILE);
4081 if (rc == -1) {
4082 DMLOG_PRINT(DMLVL_DEBUG,
4083 "Unable to clean up variation! (errno = %d)\n",
4084 errno);
4085 }
4086 dm_handle_free(hanp, hlen);
4087 }
4088 }
4089
4090 /*
4091 * TEST : dm_getall_dmattr - two file attributes
4092 * EXPECTED: rc = 0
4093 */
4094 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 10)) {
4095 int fd;
4096 void *hanp;
4097 size_t hlen;
4098 dm_attrname_t attrname;
4099 char buf[ATTR_LISTLEN];
4100 size_t rlen;
4101
4102 /* Variation set up */
4103 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4104 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4105 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
4106 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4107 if ((rc = system(command)) == -1) {
4108 /* No clean up */
4109 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4110 remove(DUMMY_FILE);
4111 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4112 close(fd);
4113 remove(DUMMY_FILE);
4114 } else
4115 if (((rc =
4116 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
4117 0, ATTR_VALUELEN, buf)) == -1)
4118 || (memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE) ==
4119 NULL)
4120 ||
4121 (memcpy
4122 (attrname.an_chars, ATTR_NAME2,
4123 DM_ATTR_NAME_SIZE) == NULL)
4124 ||
4125 ((rc =
4126 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
4127 0, ATTR_VALUELEN, buf)) == -1)) {
4128 dm_handle_free(hanp, hlen);
4129 close(fd);
4130 remove(DUMMY_FILE);
4131 }
4132 if (fd == -1 || rc == -1) {
4133 DMLOG_PRINT(DMLVL_DEBUG,
4134 "Unable to set up variation! (errno = %d)\n",
4135 errno);
4136 DMVAR_SKIP();
4137 } else {
4138 /* Variation */
4139 DMLOG_PRINT(DMLVL_DEBUG, "%s(two file attr)\n",
4140 szFuncName);
4141 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
4142 sizeof(buf), buf, &rlen);
4143 if (rc == 0) {
4144 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
4145 LogDmAttrs((dm_attrlist_t *) buf);
4146 if (rlen ==
4147 2 * DWALIGN(sizeof(dm_attrlist_t) +
4148 ATTR_VALUELEN)) {
4149 DMLOG_PRINT(DMLVL_DEBUG,
4150 "%s passed with expected rc = %d\n",
4151 szFuncName, 0);
4152 DMVAR_PASS();
4153 } else {
4154 DMLOG_PRINT(DMLVL_ERR,
4155 "%s failed with expected rc = %d but unexpected rlen %d\n",
4156 szFuncName, 0, rlen);
4157 DMVAR_FAIL();
4158 }
4159 } else {
4160 DMLOG_PRINT(DMLVL_ERR,
4161 "%s failed with unexpected rc = %d (errno = %d) %d\n",
4162 szFuncName, rc, errno, rlen);
4163 DMVAR_FAIL();
4164 }
4165
4166 /* Variation clean up */
4167 rc = close(fd);
4168 rc |= remove(DUMMY_FILE);
4169 if (rc == -1) {
4170 DMLOG_PRINT(DMLVL_DEBUG,
4171 "Unable to clean up variation! (errno = %d)\n",
4172 errno);
4173 }
4174 dm_handle_free(hanp, hlen);
4175 }
4176 }
4177
4178 /*
4179 * TEST : dm_getall_dmattr - multiple file attributes
4180 * EXPECTED: rc = 0
4181 */
4182 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 11)) {
4183 int fd;
4184 void *hanp;
4185 size_t hlen;
4186 dm_attrname_t attrname;
4187 char buf[ATTR_LISTLEN];
4188 size_t rlen;
4189 size_t len;
4190 size_t totlen;
4191 int i;
4192 void *totbuf;
4193
4194 /* Variation set up */
4195 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4196 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4197 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
4198 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4199 if ((rc = system(command)) == -1) {
4200 /* No clean up */
4201 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4202 remove(DUMMY_FILE);
4203 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4204 close(fd);
4205 remove(DUMMY_FILE);
4206 }
4207 for (i = 0, len = 0, totlen = 0; i < NUM_ATTRS && rc == 0; i++) {
4208 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4209 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4210 attrname.an_chars[DM_ATTR_NAME_SIZE - 2] =
4211 '0' + (i / 10);
4212 attrname.an_chars[DM_ATTR_NAME_SIZE - 1] =
4213 '0' + (i % 10);
4214 memcpy(buf + len, DUMMY_STRING, DUMMY_STRLEN);
4215 len += DUMMY_STRLEN;
4216 totlen += DWALIGN(len + sizeof(dm_attrlist_t));
4217 rc = dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
4218 &attrname, 0, len, buf);
4219 }
4220 if (rc != -1) {
4221 if ((totbuf = malloc(totlen)) == NULL) {
4222 close(fd);
4223 remove(DUMMY_FILE);
4224 }
4225 }
4226 if (fd == -1 || rc == -1 || totbuf == NULL) {
4227 DMLOG_PRINT(DMLVL_DEBUG,
4228 "Unable to set up variation! (errno = %d)\n",
4229 errno);
4230 DMVAR_SKIP();
4231 } else {
4232 /* Variation */
4233 DMLOG_PRINT(DMLVL_DEBUG, "%s(%d file attr)\n",
4234 szFuncName, NUM_ATTRS);
4235 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
4236 totlen, totbuf, &rlen);
4237 if (rc == 0) {
4238 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
4239 LogDmAttrs((dm_attrlist_t *) totbuf);
4240 if (rlen == totlen) {
4241 DMLOG_PRINT(DMLVL_DEBUG,
4242 "%s passed with expected rc = %d\n",
4243 szFuncName, 0);
4244 DMVAR_PASS();
4245 } else {
4246 DMLOG_PRINT(DMLVL_ERR,
4247 "%s failed with expected rc = %d but unexpected rlen %d\n",
4248 szFuncName, 0, rlen);
4249 DMVAR_FAIL();
4250 }
4251 } else {
4252 DMLOG_PRINT(DMLVL_ERR,
4253 "%s failed with unexpected rc = %d (errno = %d) %d\n",
4254 szFuncName, rc, errno, rlen);
4255 DMVAR_FAIL();
4256 }
4257
4258 /* Variation clean up */
4259 rc = close(fd);
4260 rc |= remove(DUMMY_FILE);
4261 if (rc == -1) {
4262 DMLOG_PRINT(DMLVL_DEBUG,
4263 "Unable to clean up variation! (errno = %d)\n",
4264 errno);
4265 }
4266 free(totbuf);
4267 dm_handle_free(hanp, hlen);
4268 }
4269 }
4270
4271 /*
4272 * TEST : dm_getall_dmattr - one file attribute with non-DM attribute
4273 * EXPECTED: rc = 0
4274 */
4275 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 12)) {
4276 int fd;
4277 void *hanp;
4278 size_t hlen;
4279 dm_attrname_t attrname;
4280 char buf[ATTR_LISTLEN];
4281 size_t rlen;
4282
4283 /* Variation set up */
4284 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4285 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4286 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
4287 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4288 if ((rc = system(command)) == -1) {
4289 /* No clean up */
4290 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4291 remove(DUMMY_FILE);
4292 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4293 close(fd);
4294 remove(DUMMY_FILE);
4295 } else
4296 if (((rc =
4297 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
4298 0, ATTR_VALUELEN, buf)) == -1)
4299 ||
4300 ((rc =
4301 setxattr(DUMMY_FILE, NON_DM_ATTR_NAME,
4302 NON_DM_ATTR_VALUE, sizeof(NON_DM_ATTR_VALUE),
4303 0)) == -1)) {
4304 dm_handle_free(hanp, hlen);
4305 close(fd);
4306 remove(DUMMY_FILE);
4307 }
4308 if (fd == -1 || rc == -1) {
4309 DMLOG_PRINT(DMLVL_DEBUG,
4310 "Unable to set up variation! (errno = %d)\n",
4311 errno);
4312 DMVAR_SKIP();
4313 } else {
4314 /* Variation */
4315 DMLOG_PRINT(DMLVL_DEBUG,
4316 "%s(one file attr with non-DM attr)\n",
4317 szFuncName);
4318 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
4319 sizeof(buf), buf, &rlen);
4320 if (rc == 0) {
4321 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
4322 LogDmAttrs((dm_attrlist_t *) buf);
4323 if (rlen ==
4324 DWALIGN(sizeof(dm_attrlist_t) +
4325 ATTR_VALUELEN)) {
4326 DMLOG_PRINT(DMLVL_DEBUG,
4327 "%s passed with expected rc = %d\n",
4328 szFuncName, 0);
4329 DMVAR_PASS();
4330 } else {
4331 DMLOG_PRINT(DMLVL_ERR,
4332 "%s failed with expected rc = %d but unexpected rlen %d\n",
4333 szFuncName, 0, rlen);
4334 DMVAR_FAIL();
4335 }
4336 } else {
4337 DMLOG_PRINT(DMLVL_ERR,
4338 "%s failed with unexpected rc = %d (errno = %d) %d\n",
4339 szFuncName, rc, errno, rlen);
4340 DMVAR_FAIL();
4341 }
4342
4343 /* Variation clean up */
4344 rc = close(fd);
4345 rc |= remove(DUMMY_FILE);
4346 if (rc == -1) {
4347 DMLOG_PRINT(DMLVL_DEBUG,
4348 "Unable to clean up variation! (errno = %d)\n",
4349 errno);
4350 }
4351 dm_handle_free(hanp, hlen);
4352 }
4353 }
4354
4355 /*
4356 * TEST : dm_getall_dmattr - one directory attribute
4357 * EXPECTED: rc = 0
4358 */
4359 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 13)) {
4360 void *hanp;
4361 size_t hlen;
4362 dm_attrname_t attrname;
4363 char buf[ATTR_LISTLEN];
4364 size_t rlen;
4365
4366 /* Variation set up */
4367 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4368 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4369 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
4370 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
4371 /* No claen up */
4372 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
4373 == -1) {
4374 rmdir(DUMMY_SUBDIR);
4375 } else
4376 if ((rc =
4377 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
4378 0, ATTR_VALUELEN, buf)) == -1) {
4379 dm_handle_free(hanp, hlen);
4380 rmdir(DUMMY_SUBDIR);
4381 }
4382 if (rc == -1) {
4383 DMLOG_PRINT(DMLVL_DEBUG,
4384 "Unable to set up variation! (errno = %d)\n",
4385 errno);
4386 DMVAR_SKIP();
4387 } else {
4388 /* Variation */
4389 DMLOG_PRINT(DMLVL_DEBUG, "%s(one dir attr)\n",
4390 szFuncName);
4391 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
4392 sizeof(buf), buf, &rlen);
4393 if (rc == 0) {
4394 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen);
4395 LogDmAttrs((dm_attrlist_t *) buf);
4396 if (rlen ==
4397 DWALIGN(sizeof(dm_attrlist_t) +
4398 ATTR_VALUELEN)) {
4399 DMLOG_PRINT(DMLVL_DEBUG,
4400 "%s passed with expected rc = %d\n",
4401 szFuncName, 0);
4402 DMVAR_PASS();
4403 } else {
4404 DMLOG_PRINT(DMLVL_ERR,
4405 "%s failed with expected rc = %d but unexpected rlen %d\n",
4406 szFuncName, 0, rlen);
4407 DMVAR_FAIL();
4408 }
4409 } else {
4410 DMLOG_PRINT(DMLVL_ERR,
4411 "%s failed with unexpected rc = %d (errno = %d) %d\n",
4412 szFuncName, rc, errno, rlen);
4413 DMVAR_FAIL();
4414 }
4415
4416 /* Variation clean up */
4417 rc = rmdir(DUMMY_SUBDIR);
4418 if (rc == -1) {
4419 DMLOG_PRINT(DMLVL_DEBUG,
4420 "Unable to clean up variation! (errno = %d)\n",
4421 errno);
4422 }
4423 dm_handle_free(hanp, hlen);
4424 }
4425 }
4426
4427 /*
4428 * TEST : dm_getall_dmattr - fs handle
4429 * EXPECTED: rc = -1, errno = EINVAL
4430 */
4431 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 14)) {
4432 void *hanp;
4433 size_t hlen;
4434 dm_attrname_t attrname;
4435 char buf[ATTR_LISTLEN];
4436 size_t rlen;
4437
4438 /* Variation set up */
4439 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4440 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4441 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
4442 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4443 if ((rc = system(command)) == -1) {
4444 /* No clean up */
4445 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
4446 == -1) {
4447 remove(DUMMY_FILE);
4448 }
4449 if (rc == -1) {
4450 DMLOG_PRINT(DMLVL_DEBUG,
4451 "Unable to set up variation! (errno = %d)\n",
4452 errno);
4453 DMVAR_SKIP();
4454 } else {
4455 /* Variation */
4456 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
4457 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
4458 sizeof(buf), buf, &rlen);
4459 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
4460
4461 /* Variation clean up */
4462 rc = remove(DUMMY_FILE);
4463 if (rc == -1) {
4464 DMLOG_PRINT(DMLVL_DEBUG,
4465 "Unable to clean up variation! (errno = %d)\n",
4466 errno);
4467 }
4468 dm_handle_free(hanp, hlen);
4469 }
4470 }
4471
4472 /*
4473 * TEST : dm_getall_dmattr - DM_NO_SESSION sid
4474 * EXPECTED: rc = -1, errno = EINVAL
4475 */
4476 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 15)) {
4477 int fd;
4478 void *hanp;
4479 size_t hlen;
4480 dm_attrname_t attrname;
4481 char buf[ATTR_LISTLEN];
4482 size_t rlen;
4483
4484 /* Variation set up */
4485 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4486 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4487 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
4488 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4489 if ((rc = system(command)) == -1) {
4490 /* No clean up */
4491 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4492 remove(DUMMY_FILE);
4493 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4494 close(fd);
4495 remove(DUMMY_FILE);
4496 } else
4497 if ((rc =
4498 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
4499 0, sizeof(buf), buf)) == -1) {
4500 dm_handle_free(hanp, hlen);
4501 close(fd);
4502 remove(DUMMY_FILE);
4503 }
4504 if (fd == -1 || rc == -1) {
4505 DMLOG_PRINT(DMLVL_DEBUG,
4506 "Unable to set up variation! (errno = %d)\n",
4507 errno);
4508 DMVAR_SKIP();
4509 } else {
4510 /* Variation */
4511 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
4512 szFuncName);
4513 rc = dm_getall_dmattr(DM_NO_SESSION, hanp, hlen,
4514 DM_NO_TOKEN, sizeof(buf), buf,
4515 &rlen);
4516 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
4517
4518 /* Variation clean up */
4519 rc = close(fd);
4520 rc |= remove(DUMMY_FILE);
4521 if (rc == -1) {
4522 DMLOG_PRINT(DMLVL_DEBUG,
4523 "Unable to clean up variation! (errno = %d)\n",
4524 errno);
4525 }
4526 dm_handle_free(hanp, hlen);
4527 }
4528 }
4529
4530 /*
4531 * TEST : dm_getall_dmattr - global handle
4532 * EXPECTED: rc = -1, errno = EBADF
4533 */
4534 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 16)) {
4535 dm_attrname_t attrname;
4536 char buf[ATTR_LISTLEN];
4537 size_t rlen;
4538
4539 /* Variation set up */
4540 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4541 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4542 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
4543
4544 /* Variation */
4545 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
4546 rc = dm_getall_dmattr(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
4547 DM_NO_TOKEN, sizeof(buf), buf, &rlen);
4548 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
4549
4550 /* Variation clean up */
4551 }
4552
4553 /*
4554 * TEST : dm_getall_dmattr - invalidated handle
4555 * EXPECTED: rc = -1, errno = EBADF
4556 */
4557 if (DMVAR_EXEC(GETALL_DMATTR_BASE + 17)) {
4558 int fd;
4559 void *hanp;
4560 size_t hlen;
4561 dm_attrname_t attrname;
4562 char buf[ATTR_LISTLEN];
4563 size_t rlen;
4564
4565 /* Variation set up */
4566 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
4567 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
4568 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
4569 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4570 if ((rc = system(command)) == -1) {
4571 /* No clean up */
4572 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4573 remove(DUMMY_FILE);
4574 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4575 close(fd);
4576 remove(DUMMY_FILE);
4577 } else
4578 if ((rc =
4579 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
4580 0, ATTR_VALUELEN, buf)) == -1) {
4581 dm_handle_free(hanp, hlen);
4582 close(fd);
4583 remove(DUMMY_FILE);
4584 } else if ((rc = close(fd)) == -1) {
4585 dm_handle_free(hanp, hlen);
4586 remove(DUMMY_FILE);
4587 } else if ((rc = remove(DUMMY_FILE)) == -1) {
4588 dm_handle_free(hanp, hlen);
4589 }
4590 if (fd == -1 || rc == -1) {
4591 DMLOG_PRINT(DMLVL_DEBUG,
4592 "Unable to set up variation! (errno = %d)\n",
4593 errno);
4594 DMVAR_SKIP();
4595 } else {
4596 /* Variation */
4597 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated handle)\n",
4598 szFuncName);
4599 rc = dm_getall_dmattr(sid, hanp, hlen, DM_NO_TOKEN,
4600 sizeof(buf), buf, &rlen);
4601 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
4602
4603 /* Variation clean up */
4604 dm_handle_free(hanp, hlen);
4605 }
4606 }
4607
4608 szFuncName = "dm_set_fileattr";
4609
4610 /*
4611 * TEST : dm_set_fileattr - invalid sid
4612 * EXPECTED: rc = -1, errno = EINVAL
4613 */
4614 if (DMVAR_EXEC(SET_FILEATTR_BASE + 1)) {
4615 int fd;
4616 void *hanp;
4617 size_t hlen;
4618 dm_fileattr_t fileattr;
4619
4620 /* Variation set up */
4621 fileattr.fa_uid = DUMMY_UID;
4622 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4623 if ((rc = system(command)) == -1) {
4624 /* No clean up */
4625 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4626 remove(DUMMY_FILE);
4627 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4628 close(fd);
4629 remove(DUMMY_FILE);
4630 }
4631 if (fd == -1 || rc == -1) {
4632 DMLOG_PRINT(DMLVL_DEBUG,
4633 "Unable to set up variation! (errno = %d)\n",
4634 errno);
4635 DMVAR_SKIP();
4636 } else {
4637 /* Variation */
4638 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
4639 szFuncName);
4640 rc = dm_set_fileattr(INVALID_ADDR, hanp, hlen,
4641 DM_NO_TOKEN, DM_AT_UID, &fileattr);
4642 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
4643
4644 /* Variation clean up */
4645 rc = close(fd);
4646 rc |= remove(DUMMY_FILE);
4647 if (rc == -1) {
4648 DMLOG_PRINT(DMLVL_DEBUG,
4649 "Unable to clean up variation! (errno = %d)\n",
4650 errno);
4651 }
4652 dm_handle_free(hanp, hlen);
4653 }
4654 }
4655
4656 /*
4657 * TEST : dm_set_fileattr - invalid hanp
4658 * EXPECTED: rc = -1, errno = EFAULT
4659 */
4660 if (DMVAR_EXEC(SET_FILEATTR_BASE + 2)) {
4661 int fd;
4662 void *hanp;
4663 size_t hlen;
4664 dm_fileattr_t fileattr;
4665
4666 /* Variation set up */
4667 fileattr.fa_uid = DUMMY_UID;
4668 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4669 if ((rc = system(command)) == -1) {
4670 /* No clean up */
4671 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4672 remove(DUMMY_FILE);
4673 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4674 close(fd);
4675 remove(DUMMY_FILE);
4676 }
4677 if (fd == -1 || rc == -1) {
4678 DMLOG_PRINT(DMLVL_DEBUG,
4679 "Unable to set up variation! (errno = %d)\n",
4680 errno);
4681 DMVAR_SKIP();
4682 } else {
4683 /* Variation */
4684 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
4685 szFuncName);
4686 rc = dm_set_fileattr(sid, (void *)INVALID_ADDR, hlen,
4687 DM_NO_TOKEN, DM_AT_UID, &fileattr);
4688 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
4689
4690 /* Variation clean up */
4691 rc = close(fd);
4692 rc |= remove(DUMMY_FILE);
4693 if (rc == -1) {
4694 DMLOG_PRINT(DMLVL_DEBUG,
4695 "Unable to clean up variation! (errno = %d)\n",
4696 errno);
4697 }
4698 dm_handle_free(hanp, hlen);
4699 }
4700 }
4701
4702 /*
4703 * TEST : dm_set_fileattr - invalid hlen
4704 * EXPECTED: rc = -1, errno = EBADF
4705 */
4706 if (DMVAR_EXEC(SET_FILEATTR_BASE + 3)) {
4707 int fd;
4708 void *hanp;
4709 size_t hlen;
4710 dm_fileattr_t fileattr;
4711
4712 /* Variation set up */
4713 fileattr.fa_uid = DUMMY_UID;
4714 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4715 if ((rc = system(command)) == -1) {
4716 /* No clean up */
4717 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4718 remove(DUMMY_FILE);
4719 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4720 close(fd);
4721 remove(DUMMY_FILE);
4722 }
4723 if (fd == -1 || rc == -1) {
4724 DMLOG_PRINT(DMLVL_DEBUG,
4725 "Unable to set up variation! (errno = %d)\n",
4726 errno);
4727 DMVAR_SKIP();
4728 } else {
4729 /* Variation */
4730 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
4731 szFuncName);
4732 rc = dm_set_fileattr(sid, hanp, INVALID_ADDR,
4733 DM_NO_TOKEN, DM_AT_UID, &fileattr);
4734 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
4735
4736 /* Variation clean up */
4737 rc = close(fd);
4738 rc |= remove(DUMMY_FILE);
4739 if (rc == -1) {
4740 DMLOG_PRINT(DMLVL_DEBUG,
4741 "Unable to clean up variation! (errno = %d)\n",
4742 errno);
4743 }
4744 dm_handle_free(hanp, hlen);
4745 }
4746 }
4747
4748 /*
4749 * TEST : dm_set_fileattr - invalid token
4750 * EXPECTED: rc = -1, errno = EINVAL
4751 */
4752 if (DMVAR_EXEC(SET_FILEATTR_BASE + 4)) {
4753 int fd;
4754 void *hanp;
4755 size_t hlen;
4756 dm_fileattr_t fileattr;
4757
4758 /* Variation set up */
4759 fileattr.fa_uid = DUMMY_UID;
4760 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4761 if ((rc = system(command)) == -1) {
4762 /* No clean up */
4763 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4764 remove(DUMMY_FILE);
4765 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4766 close(fd);
4767 remove(DUMMY_FILE);
4768 }
4769 if (fd == -1 || rc == -1) {
4770 DMLOG_PRINT(DMLVL_DEBUG,
4771 "Unable to set up variation! (errno = %d)\n",
4772 errno);
4773 DMVAR_SKIP();
4774 } else {
4775 /* Variation */
4776 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
4777 szFuncName);
4778 rc = dm_set_fileattr(sid, hanp, hlen, INVALID_ADDR,
4779 DM_AT_UID, &fileattr);
4780 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
4781
4782 /* Variation clean up */
4783 rc = close(fd);
4784 rc |= remove(DUMMY_FILE);
4785 if (rc == -1) {
4786 DMLOG_PRINT(DMLVL_DEBUG,
4787 "Unable to clean up variation! (errno = %d)\n",
4788 errno);
4789 }
4790 dm_handle_free(hanp, hlen);
4791 }
4792 }
4793
4794 /*
4795 * TEST : dm_set_fileattr - invalid mask
4796 * EXPECTED: rc = -1, errno = EINVAL
4797 *
4798 * This variation uncovered XFS BUG #20 (0 returned instead of -1 and
4799 * EINVAL errno)
4800 */
4801 if (DMVAR_EXEC(SET_FILEATTR_BASE + 5)) {
4802 int fd;
4803 void *hanp;
4804 size_t hlen;
4805 dm_fileattr_t fileattr;
4806
4807 /* Variation set up */
4808 fileattr.fa_uid = DUMMY_UID;
4809 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4810 if ((rc = system(command)) == -1) {
4811 /* No clean up */
4812 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4813 remove(DUMMY_FILE);
4814 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4815 close(fd);
4816 remove(DUMMY_FILE);
4817 }
4818 if (fd == -1 || rc == -1) {
4819 DMLOG_PRINT(DMLVL_DEBUG,
4820 "Unable to set up variation! (errno = %d)\n",
4821 errno);
4822 DMVAR_SKIP();
4823 } else {
4824 /* Variation */
4825 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid mask)\n",
4826 szFuncName);
4827 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
4828 DM_AT_HANDLE, &fileattr);
4829 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
4830
4831 /* Variation clean up */
4832 rc = close(fd);
4833 rc |= remove(DUMMY_FILE);
4834 if (rc == -1) {
4835 DMLOG_PRINT(DMLVL_DEBUG,
4836 "Unable to clean up variation! (errno = %d)\n",
4837 errno);
4838 }
4839 dm_handle_free(hanp, hlen);
4840 }
4841 }
4842
4843 /*
4844 * TEST : dm_set_fileattr - invalid attrp
4845 * EXPECTED: rc = -1, errno = EFAULT
4846 */
4847 if (DMVAR_EXEC(SET_FILEATTR_BASE + 6)) {
4848 int fd;
4849 void *hanp;
4850 size_t hlen;
4851 dm_fileattr_t fileattr;
4852
4853 /* Variation set up */
4854 fileattr.fa_uid = DUMMY_UID;
4855 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4856 if ((rc = system(command)) == -1) {
4857 /* No clean up */
4858 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4859 remove(DUMMY_FILE);
4860 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4861 close(fd);
4862 remove(DUMMY_FILE);
4863 }
4864 if (fd == -1 || rc == -1) {
4865 DMLOG_PRINT(DMLVL_DEBUG,
4866 "Unable to set up variation! (errno = %d)\n",
4867 errno);
4868 DMVAR_SKIP();
4869 } else {
4870 /* Variation */
4871 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid attrp)\n",
4872 szFuncName);
4873 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
4874 DM_AT_UID,
4875 (dm_fileattr_t *) INVALID_ADDR);
4876 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
4877
4878 /* Variation clean up */
4879 rc = close(fd);
4880 rc |= remove(DUMMY_FILE);
4881 if (rc == -1) {
4882 DMLOG_PRINT(DMLVL_DEBUG,
4883 "Unable to clean up variation! (errno = %d)\n",
4884 errno);
4885 }
4886 dm_handle_free(hanp, hlen);
4887 }
4888 }
4889
4890 /*
4891 * TEST : dm_set_fileattr - DM_AT_ATIME on file
4892 * EXPECTED: rc = 0
4893 */
4894 if (DMVAR_EXEC(SET_FILEATTR_BASE + 7)) {
4895 int fd;
4896 void *hanp;
4897 size_t hlen;
4898 dm_fileattr_t fileattr;
4899 struct stat statfs1, statfs2;
4900 int rc2;
4901
4902 /* Variation set up */
4903 fileattr.fa_atime = DUMMY_TIME;
4904 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4905 if ((rc = system(command)) == -1) {
4906 /* No clean up */
4907 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4908 remove(DUMMY_FILE);
4909 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4910 close(fd);
4911 remove(DUMMY_FILE);
4912 }
4913 if (fd == -1 || rc == -1) {
4914 DMLOG_PRINT(DMLVL_DEBUG,
4915 "Unable to set up variation! (errno = %d)\n",
4916 errno);
4917 DMVAR_SKIP();
4918 } else {
4919 /* Variation */
4920 rc2 = stat(DUMMY_FILE, &statfs1);
4921 DMLOG_PRINT(DMLVL_DEBUG, "%s(file DM_AT_ATIME)\n",
4922 szFuncName);
4923 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
4924 DM_AT_ATIME, &fileattr);
4925 rc2 |= stat(DUMMY_FILE, &statfs2);
4926 if (rc == 0) {
4927 if ((rc2 == 0)
4928 && (statfs1.st_atime != statfs2.st_atime)
4929 && (statfs2.st_atime == DUMMY_TIME)) {
4930 DMLOG_PRINT(DMLVL_DEBUG,
4931 "%s passed with expected rc = %d and atime modified\n",
4932 szFuncName, 0);
4933 DMVAR_PASS();
4934 } else {
4935 DMLOG_PRINT(DMLVL_ERR,
4936 "%s failed with expected rc = %d but atime unmodified (%d vs %d)\n",
4937 szFuncName, 0,
4938 statfs1.st_atime,
4939 statfs2.st_atime);
4940 DMVAR_FAIL();
4941 }
4942 } else {
4943 DMLOG_PRINT(DMLVL_ERR,
4944 "%s failed with unexpected rc = %d (errno = %d)\n",
4945 szFuncName, rc, errno);
4946 DMVAR_FAIL();
4947 }
4948
4949 /* Variation clean up */
4950 rc = close(fd);
4951 rc |= remove(DUMMY_FILE);
4952 if (rc == -1) {
4953 DMLOG_PRINT(DMLVL_DEBUG,
4954 "Unable to clean up variation! (errno = %d)\n",
4955 errno);
4956 }
4957 dm_handle_free(hanp, hlen);
4958 }
4959 }
4960
4961 /*
4962 * TEST : dm_set_fileattr - DM_AT_MTIME on file
4963 * EXPECTED: rc = 0
4964 */
4965 if (DMVAR_EXEC(SET_FILEATTR_BASE + 8)) {
4966 int fd;
4967 void *hanp;
4968 size_t hlen;
4969 dm_fileattr_t fileattr;
4970 struct stat statfs1, statfs2;
4971 int rc2;
4972
4973 /* Variation set up */
4974 fileattr.fa_mtime = DUMMY_TIME;
4975 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
4976 if ((rc = system(command)) == -1) {
4977 /* No clean up */
4978 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
4979 remove(DUMMY_FILE);
4980 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
4981 close(fd);
4982 remove(DUMMY_FILE);
4983 }
4984 if (fd == -1 || rc == -1) {
4985 DMLOG_PRINT(DMLVL_DEBUG,
4986 "Unable to set up variation! (errno = %d)\n",
4987 errno);
4988 DMVAR_SKIP();
4989 } else {
4990 /* Variation */
4991 rc2 = stat(DUMMY_FILE, &statfs1);
4992 DMLOG_PRINT(DMLVL_DEBUG, "%s(file DM_AT_MTIME)\n",
4993 szFuncName);
4994 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
4995 DM_AT_MTIME, &fileattr);
4996 rc2 |= stat(DUMMY_FILE, &statfs2);
4997 if (rc == 0) {
4998 if ((rc2 == 0)
4999 && (statfs1.st_mtime != statfs2.st_mtime)
5000 && (statfs2.st_mtime == DUMMY_TIME)) {
5001 DMLOG_PRINT(DMLVL_DEBUG,
5002 "%s passed with expected rc = %d and mtime modified\n",
5003 szFuncName, 0);
5004 DMVAR_PASS();
5005 } else {
5006 DMLOG_PRINT(DMLVL_ERR,
5007 "%s failed with expected rc = %d but mtime unmodified (%d vs %d)\n",
5008 szFuncName, 0,
5009 statfs1.st_mtime,
5010 statfs2.st_mtime);
5011 DMVAR_FAIL();
5012 }
5013 } else {
5014 DMLOG_PRINT(DMLVL_ERR,
5015 "%s failed with unexpected rc = %d (errno = %d)\n",
5016 szFuncName, rc, errno);
5017 DMVAR_FAIL();
5018 }
5019
5020 /* Variation clean up */
5021 rc = close(fd);
5022 rc |= remove(DUMMY_FILE);
5023 if (rc == -1) {
5024 DMLOG_PRINT(DMLVL_DEBUG,
5025 "Unable to clean up variation! (errno = %d)\n",
5026 errno);
5027 }
5028 dm_handle_free(hanp, hlen);
5029 }
5030 }
5031
5032 /*
5033 * TEST : dm_set_fileattr - DM_AT_CTIME on file
5034 * EXPECTED: rc = 0
5035 */
5036 if (DMVAR_EXEC(SET_FILEATTR_BASE + 9)) {
5037 int fd;
5038 void *hanp;
5039 size_t hlen;
5040 dm_fileattr_t fileattr;
5041 struct stat statfs1, statfs2;
5042 int rc2;
5043
5044 /* Variation set up */
5045 fileattr.fa_ctime = DUMMY_TIME;
5046 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
5047 if ((rc = system(command)) == -1) {
5048 /* No clean up */
5049 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
5050 remove(DUMMY_FILE);
5051 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
5052 close(fd);
5053 remove(DUMMY_FILE);
5054 }
5055 if (fd == -1 || rc == -1) {
5056 DMLOG_PRINT(DMLVL_DEBUG,
5057 "Unable to set up variation! (errno = %d)\n",
5058 errno);
5059 DMVAR_SKIP();
5060 } else {
5061 /* Variation */
5062 rc2 = stat(DUMMY_FILE, &statfs1);
5063 DMLOG_PRINT(DMLVL_DEBUG, "%s(file DM_AT_CTIME)\n",
5064 szFuncName);
5065 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5066 DM_AT_CTIME, &fileattr);
5067 rc2 |= stat(DUMMY_FILE, &statfs2);
5068 if (rc == 0) {
5069 if ((rc2 == 0)
5070 && (statfs1.st_ctime != statfs2.st_ctime)
5071 && (statfs2.st_ctime == DUMMY_TIME)) {
5072 DMLOG_PRINT(DMLVL_DEBUG,
5073 "%s passed with expected rc = %d and ctime modified\n",
5074 szFuncName, 0);
5075 DMVAR_PASS();
5076 } else {
5077 DMLOG_PRINT(DMLVL_ERR,
5078 "%s failed with expected rc = %d but ctime unmodified (%d vs %d)\n",
5079 szFuncName, 0,
5080 statfs1.st_ctime,
5081 statfs2.st_ctime);
5082 DMVAR_FAIL();
5083 }
5084 } else {
5085 DMLOG_PRINT(DMLVL_ERR,
5086 "%s failed with unexpected rc = %d (errno = %d)\n",
5087 szFuncName, rc, errno);
5088 DMVAR_FAIL();
5089 }
5090
5091 /* Variation clean up */
5092 rc = close(fd);
5093 rc |= remove(DUMMY_FILE);
5094 if (rc == -1) {
5095 DMLOG_PRINT(DMLVL_DEBUG,
5096 "Unable to clean up variation! (errno = %d)\n",
5097 errno);
5098 }
5099 dm_handle_free(hanp, hlen);
5100 }
5101 }
5102
5103 /*
5104 * TEST : dm_set_fileattr - DM_AT_DTIME on file with DM attribute
5105 * EXPECTED: rc = 0
5106 */
5107 if (DMVAR_EXEC(SET_FILEATTR_BASE + 10)) {
5108 int fd;
5109 void *hanp;
5110 size_t hlen;
5111 dm_fileattr_t fileattr;
5112 dm_attrname_t attrname;
5113 char buf[ATTR_LISTLEN];
5114 struct stat statfs1, statfs2;
5115 int rc2;
5116
5117 /* Variation set up */
5118 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
5119 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
5120 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
5121 fileattr.fa_dtime = DUMMY_TIME;
5122 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
5123 if ((rc = system(command)) == -1) {
5124 /* No clean up */
5125 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
5126 remove(DUMMY_FILE);
5127 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
5128 close(fd);
5129 remove(DUMMY_FILE);
5130 } else
5131 if ((rc =
5132 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
5133 0, ATTR_VALUELEN, buf)) == -1) {
5134 dm_handle_free(hanp, hlen);
5135 close(fd);
5136 remove(DUMMY_FILE);
5137 }
5138 if (fd == -1 || rc == -1) {
5139 DMLOG_PRINT(DMLVL_DEBUG,
5140 "Unable to set up variation! (errno = %d)\n",
5141 errno);
5142 DMVAR_SKIP();
5143 } else {
5144 /* Variation */
5145 rc2 = stat(DUMMY_FILE, &statfs1);
5146 DMLOG_PRINT(DMLVL_DEBUG,
5147 "%s(file DM_AT_DTIME with attr)\n",
5148 szFuncName);
5149 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5150 DM_AT_DTIME, &fileattr);
5151 rc2 |= stat(DUMMY_FILE, &statfs2);
5152 if (rc == 0) {
5153 if ((rc2 == 0)
5154 && (statfs1.st_ctime != statfs2.st_ctime)
5155 && (statfs2.st_ctime == DUMMY_TIME)) {
5156 DMLOG_PRINT(DMLVL_DEBUG,
5157 "%s passed with expected rc = %d and ctime modified\n",
5158 szFuncName, 0);
5159 DMVAR_PASS();
5160 } else {
5161 DMLOG_PRINT(DMLVL_ERR,
5162 "%s failed with expected rc = %d but ctime unmodified (%d vs %d)\n",
5163 szFuncName, 0,
5164 statfs1.st_ctime,
5165 statfs2.st_ctime);
5166 DMVAR_FAIL();
5167 }
5168 } else {
5169 DMLOG_PRINT(DMLVL_ERR,
5170 "%s failed with unexpected rc = %d (errno = %d)\n",
5171 szFuncName, rc, errno);
5172 DMVAR_FAIL();
5173 }
5174
5175 /* Variation clean up */
5176 rc = close(fd);
5177 rc |= remove(DUMMY_FILE);
5178 if (rc == -1) {
5179 DMLOG_PRINT(DMLVL_DEBUG,
5180 "Unable to clean up variation! (errno = %d)\n",
5181 errno);
5182 }
5183 dm_handle_free(hanp, hlen);
5184 }
5185 }
5186
5187 /*
5188 * TEST : dm_set_fileattr - DM_AT_DTIME on file without DM attr
5189 * EXPECTED: rc = -1, errno = EINVAL
5190 *
5191 * This variation uncovered XFS BUG #21 (dtime updated without any DM
5192 * attributes)
5193 */
5194 if (DMVAR_EXEC(SET_FILEATTR_BASE + 11)) {
5195 int fd;
5196 void *hanp;
5197 size_t hlen;
5198 dm_fileattr_t fileattr;
5199 struct stat statfs1, statfs2;
5200 int rc2;
5201
5202 /* Variation set up */
5203 fileattr.fa_dtime = DUMMY_TIME;
5204 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
5205 if ((rc = system(command)) == -1) {
5206 /* No clean up */
5207 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
5208 remove(DUMMY_FILE);
5209 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
5210 close(fd);
5211 remove(DUMMY_FILE);
5212 }
5213 if (fd == -1 || rc == -1) {
5214 DMLOG_PRINT(DMLVL_DEBUG,
5215 "Unable to set up variation! (errno = %d)\n",
5216 errno);
5217 DMVAR_SKIP();
5218 } else {
5219 /* Variation */
5220 rc2 = stat(DUMMY_FILE, &statfs1);
5221 DMLOG_PRINT(DMLVL_DEBUG,
5222 "%s(file DM_AT_DTIME without attr)\n",
5223 szFuncName);
5224 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5225 DM_AT_DTIME, &fileattr);
5226 rc2 |= stat(DUMMY_FILE, &statfs2);
5227 if (rc == 0) {
5228 if ((rc2 == 0)
5229 && (statfs1.st_ctime == statfs2.st_ctime)
5230 && (statfs2.st_ctime != DUMMY_TIME)) {
5231 DMLOG_PRINT(DMLVL_DEBUG,
5232 "%s passed with expected rc = %d and ctime unmodified\n",
5233 szFuncName, 0);
5234 DMVAR_PASS();
5235 } else {
5236 DMLOG_PRINT(DMLVL_ERR,
5237 "%s failed with expected rc = %d but ctime modified (%d vs %d)\n",
5238 szFuncName, 0,
5239 statfs1.st_ctime,
5240 statfs2.st_ctime);
5241 DMVAR_FAIL();
5242 }
5243 } else {
5244 DMLOG_PRINT(DMLVL_ERR,
5245 "%s failed with unexpected rc = %d\n",
5246 szFuncName, rc);
5247 DMVAR_FAIL();
5248 }
5249
5250 /* Variation clean up */
5251 rc = close(fd);
5252 rc |= remove(DUMMY_FILE);
5253 if (rc == -1) {
5254 DMLOG_PRINT(DMLVL_DEBUG,
5255 "Unable to clean up variation! (errno = %d)\n",
5256 errno);
5257 }
5258 dm_handle_free(hanp, hlen);
5259 }
5260 }
5261
5262 /*
5263 * TEST : dm_set_fileattr - DM_AT_UID on file
5264 * EXPECTED: rc = 0
5265 */
5266 if (DMVAR_EXEC(SET_FILEATTR_BASE + 12)) {
5267 int fd;
5268 void *hanp;
5269 size_t hlen;
5270 dm_fileattr_t fileattr;
5271 struct stat statfs1, statfs2;
5272 int rc2;
5273
5274 /* Variation set up */
5275 fileattr.fa_uid = DUMMY_UID;
5276 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
5277 if ((rc = system(command)) == -1) {
5278 /* No clean up */
5279 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
5280 remove(DUMMY_FILE);
5281 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
5282 close(fd);
5283 remove(DUMMY_FILE);
5284 }
5285 if (fd == -1 || rc == -1) {
5286 DMLOG_PRINT(DMLVL_DEBUG,
5287 "Unable to set up variation! (errno = %d)\n",
5288 errno);
5289 DMVAR_SKIP();
5290 } else {
5291 /* Variation */
5292 rc2 = stat(DUMMY_FILE, &statfs1);
5293 DMLOG_PRINT(DMLVL_DEBUG, "%s(file DM_AT_UID)\n",
5294 szFuncName);
5295 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5296 DM_AT_UID, &fileattr);
5297 rc2 |= stat(DUMMY_FILE, &statfs2);
5298 if (rc == 0) {
5299 if ((rc2 == 0)
5300 && (statfs1.st_uid != statfs2.st_uid)
5301 && (statfs2.st_uid == DUMMY_UID)) {
5302 DMLOG_PRINT(DMLVL_DEBUG,
5303 "%s passed with expected rc = %d and uid modified\n",
5304 szFuncName, 0);
5305 DMVAR_PASS();
5306 } else {
5307 DMLOG_PRINT(DMLVL_ERR,
5308 "%s failed with expected rc = %d but uid unmodified (%d vs %d)\n",
5309 szFuncName, 0,
5310 statfs1.st_uid,
5311 statfs2.st_uid);
5312 DMVAR_FAIL();
5313 }
5314 } else {
5315 DMLOG_PRINT(DMLVL_ERR,
5316 "%s failed with unexpected rc = %d (errno = %d)\n",
5317 szFuncName, rc, errno);
5318 DMVAR_FAIL();
5319 }
5320
5321 /* Variation clean up */
5322 rc = close(fd);
5323 rc |= remove(DUMMY_FILE);
5324 if (rc == -1) {
5325 DMLOG_PRINT(DMLVL_DEBUG,
5326 "Unable to clean up variation! (errno = %d)\n",
5327 errno);
5328 }
5329 dm_handle_free(hanp, hlen);
5330 }
5331 }
5332
5333 /*
5334 * TEST : dm_set_fileattr - DM_AT_GID on file
5335 * EXPECTED: rc = 0
5336 */
5337 if (DMVAR_EXEC(SET_FILEATTR_BASE + 13)) {
5338 int fd;
5339 void *hanp;
5340 size_t hlen;
5341 dm_fileattr_t fileattr;
5342 struct stat statfs1, statfs2;
5343 int rc2;
5344
5345 /* Variation set up */
5346 fileattr.fa_gid = DUMMY_GID;
5347 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
5348 if ((rc = system(command)) == -1) {
5349 /* No clean up */
5350 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
5351 remove(DUMMY_FILE);
5352 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
5353 close(fd);
5354 remove(DUMMY_FILE);
5355 }
5356 if (fd == -1 || rc == -1) {
5357 DMLOG_PRINT(DMLVL_DEBUG,
5358 "Unable to set up variation! (errno = %d)\n",
5359 errno);
5360 DMVAR_SKIP();
5361 } else {
5362 /* Variation */
5363 rc2 = stat(DUMMY_FILE, &statfs1);
5364 DMLOG_PRINT(DMLVL_DEBUG, "%s(file DM_AT_GID)\n",
5365 szFuncName);
5366 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5367 DM_AT_GID, &fileattr);
5368 rc2 |= stat(DUMMY_FILE, &statfs2);
5369 if (rc == 0) {
5370 if ((rc2 == 0)
5371 && (statfs1.st_gid != statfs2.st_gid)
5372 && (statfs2.st_gid == DUMMY_GID)) {
5373 DMLOG_PRINT(DMLVL_DEBUG,
5374 "%s passed with expected rc = %d and gid modified\n",
5375 szFuncName, 0);
5376 DMVAR_PASS();
5377 } else {
5378 DMLOG_PRINT(DMLVL_ERR,
5379 "%s failed with expected rc = %d but gid unmodified (%d vs %d)\n",
5380 szFuncName, 0,
5381 statfs1.st_gid,
5382 statfs2.st_gid);
5383 DMVAR_FAIL();
5384 }
5385 } else {
5386 DMLOG_PRINT(DMLVL_ERR,
5387 "%s failed with unexpected rc = %d (errno = %d)\n",
5388 szFuncName, rc, errno);
5389 DMVAR_FAIL();
5390 }
5391
5392 /* Variation clean up */
5393 rc = close(fd);
5394 rc |= remove(DUMMY_FILE);
5395 if (rc == -1) {
5396 DMLOG_PRINT(DMLVL_DEBUG,
5397 "Unable to clean up variation! (errno = %d)\n",
5398 errno);
5399 }
5400 dm_handle_free(hanp, hlen);
5401 }
5402 }
5403
5404 /*
5405 * TEST : dm_set_fileattr - DM_AT_MODE on file
5406 * EXPECTED: rc = 0
5407 */
5408 if (DMVAR_EXEC(SET_FILEATTR_BASE + 14)) {
5409 int fd;
5410 void *hanp;
5411 size_t hlen;
5412 dm_fileattr_t fileattr;
5413 struct stat statfs1, statfs2;
5414 int rc2;
5415
5416 /* Variation set up */
5417 fileattr.fa_mode = DUMMY_MODE;
5418 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
5419 if ((rc = system(command)) == -1) {
5420 /* No clean up */
5421 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
5422 remove(DUMMY_FILE);
5423 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
5424 close(fd);
5425 remove(DUMMY_FILE);
5426 }
5427 if (fd == -1 || rc == -1) {
5428 DMLOG_PRINT(DMLVL_DEBUG,
5429 "Unable to set up variation! (errno = %d)\n",
5430 errno);
5431 DMVAR_SKIP();
5432 } else {
5433 /* Variation */
5434 rc2 = stat(DUMMY_FILE, &statfs1);
5435 DMLOG_PRINT(DMLVL_DEBUG, "%s(file DM_AT_MODE)\n",
5436 szFuncName);
5437 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5438 DM_AT_MODE, &fileattr);
5439 rc2 |= stat(DUMMY_FILE, &statfs2);
5440 if (rc == 0) {
5441 if ((rc2 == 0)
5442 && (statfs1.st_mode != statfs2.st_mode)
5443 && ((statfs2.st_mode & MODE_MASK) ==
5444 DUMMY_MODE)) {
5445 DMLOG_PRINT(DMLVL_DEBUG,
5446 "%s passed with expected rc = %d and mode modified\n",
5447 szFuncName, 0);
5448 DMVAR_PASS();
5449 } else {
5450 DMLOG_PRINT(DMLVL_ERR,
5451 "%s failed with expected rc = %d but mode unmodified (%x vs %x)\n",
5452 szFuncName, 0,
5453 statfs1.st_mode,
5454 statfs2.st_mode);
5455 DMVAR_FAIL();
5456 }
5457 } else {
5458 DMLOG_PRINT(DMLVL_ERR,
5459 "%s failed with unexpected rc = %d (errno = %d)\n",
5460 szFuncName, rc, errno);
5461 DMVAR_FAIL();
5462 }
5463
5464 /* Variation clean up */
5465 rc = close(fd);
5466 rc |= remove(DUMMY_FILE);
5467 if (rc == -1) {
5468 DMLOG_PRINT(DMLVL_DEBUG,
5469 "Unable to clean up variation! (errno = %d)\n",
5470 errno);
5471 }
5472 dm_handle_free(hanp, hlen);
5473 }
5474 }
5475
5476 /*
5477 * TEST : dm_set_fileattr - DM_AT_SIZE on file, shrink
5478 * EXPECTED: rc = 0
5479 */
5480 if (DMVAR_EXEC(SET_FILEATTR_BASE + 15)) {
5481 int fd;
5482 void *hanp;
5483 size_t hlen;
5484 dm_fileattr_t fileattr;
5485 struct stat statfs1, statfs2;
5486 int rc2;
5487
5488 /* Variation set up */
5489 fileattr.fa_size = TMP_FILELEN / 2;
5490 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
5491 if ((rc = system(command)) == -1) {
5492 /* No clean up */
5493 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
5494 remove(DUMMY_FILE);
5495 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
5496 close(fd);
5497 remove(DUMMY_FILE);
5498 }
5499 if (fd == -1 || rc == -1) {
5500 DMLOG_PRINT(DMLVL_DEBUG,
5501 "Unable to set up variation! (errno = %d)\n",
5502 errno);
5503 DMVAR_SKIP();
5504 } else {
5505 /* Variation */
5506 rc2 = stat(DUMMY_FILE, &statfs1);
5507 DMLOG_PRINT(DMLVL_DEBUG,
5508 "%s(file DM_AT_SIZE, shrink)\n",
5509 szFuncName);
5510 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5511 DM_AT_SIZE, &fileattr);
5512 rc2 |= stat(DUMMY_FILE, &statfs2);
5513 if (rc == 0) {
5514 if ((rc2 == 0)
5515 && (statfs1.st_size != statfs2.st_size)
5516 && (statfs2.st_size == TMP_FILELEN / 2)) {
5517 DMLOG_PRINT(DMLVL_DEBUG,
5518 "%s passed with expected rc = %d and size modified\n",
5519 szFuncName, 0);
5520 DMVAR_PASS();
5521 } else {
5522 DMLOG_PRINT(DMLVL_ERR,
5523 "%s failed with expected rc = %d but size unmodified (%x vs %x)\n",
5524 szFuncName, 0,
5525 statfs1.st_size,
5526 statfs2.st_size);
5527 DMVAR_FAIL();
5528 }
5529 } else {
5530 DMLOG_PRINT(DMLVL_ERR,
5531 "%s failed with unexpected rc = %d (errno = %d)\n",
5532 szFuncName, rc, errno);
5533 DMVAR_FAIL();
5534 }
5535
5536 /* Variation clean up */
5537 rc = close(fd);
5538 rc |= remove(DUMMY_FILE);
5539 if (rc == -1) {
5540 DMLOG_PRINT(DMLVL_DEBUG,
5541 "Unable to clean up variation! (errno = %d)\n",
5542 errno);
5543 }
5544 dm_handle_free(hanp, hlen);
5545 }
5546 }
5547
5548 /*
5549 * TEST : dm_set_fileattr - DM_AT_SIZE on file, expand
5550 * EXPECTED: rc = 0
5551 */
5552 if (DMVAR_EXEC(SET_FILEATTR_BASE + 16)) {
5553 int fd;
5554 void *hanp;
5555 size_t hlen;
5556 dm_fileattr_t fileattr;
5557 struct stat statfs1, statfs2;
5558 int rc2;
5559
5560 /* Variation set up */
5561 fileattr.fa_size = TMP_FILELEN * 2;
5562 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
5563 if ((rc = system(command)) == -1) {
5564 /* No clean up */
5565 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
5566 remove(DUMMY_FILE);
5567 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
5568 close(fd);
5569 remove(DUMMY_FILE);
5570 }
5571 if (fd == -1 || rc == -1) {
5572 DMLOG_PRINT(DMLVL_DEBUG,
5573 "Unable to set up variation! (errno = %d)\n",
5574 errno);
5575 DMVAR_SKIP();
5576 } else {
5577 /* Variation */
5578 rc2 = stat(DUMMY_FILE, &statfs1);
5579 DMLOG_PRINT(DMLVL_DEBUG,
5580 "%s(file DM_AT_SIZE, expand)\n",
5581 szFuncName);
5582 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5583 DM_AT_SIZE, &fileattr);
5584 rc2 |= stat(DUMMY_FILE, &statfs2);
5585 if (rc == 0) {
5586 if ((rc2 == 0)
5587 && (statfs1.st_size != statfs2.st_size)
5588 && (statfs2.st_size == TMP_FILELEN * 2)) {
5589 DMLOG_PRINT(DMLVL_DEBUG,
5590 "%s passed with expected rc = %d and size modified\n",
5591 szFuncName, 0);
5592 DMVAR_PASS();
5593 } else {
5594 DMLOG_PRINT(DMLVL_ERR,
5595 "%s failed with expected rc = %d but size unmodified (%x vs %x)\n",
5596 szFuncName, 0,
5597 statfs1.st_size,
5598 statfs2.st_size);
5599 DMVAR_FAIL();
5600 }
5601 } else {
5602 DMLOG_PRINT(DMLVL_ERR,
5603 "%s failed with unexpected rc = %d (errno = %d)\n",
5604 szFuncName, rc, errno);
5605 DMVAR_FAIL();
5606 }
5607
5608 /* Variation clean up */
5609 rc = close(fd);
5610 rc |= remove(DUMMY_FILE);
5611 if (rc == -1) {
5612 DMLOG_PRINT(DMLVL_DEBUG,
5613 "Unable to clean up variation! (errno = %d)\n",
5614 errno);
5615 }
5616 dm_handle_free(hanp, hlen);
5617 }
5618 }
5619
5620 /*
5621 * TEST : dm_set_fileattr - fs handle
5622 * EXPECTED: rc = -1, errno = EINVAL
5623 */
5624 if (DMVAR_EXEC(SET_FILEATTR_BASE + 17)) {
5625 int fd;
5626 void *hanp;
5627 size_t hlen;
5628 dm_fileattr_t fileattr;
5629 struct stat statfs1, statfs2;
5630 int rc2;
5631
5632 /* Variation set up */
5633 fileattr.fa_uid = DUMMY_UID;
5634 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
5635 if ((rc = system(command)) == -1) {
5636 /* No clean up */
5637 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
5638 remove(DUMMY_FILE);
5639 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
5640 == -1) {
5641 close(fd);
5642 remove(DUMMY_FILE);
5643 }
5644 if (fd == -1 || rc == -1) {
5645 DMLOG_PRINT(DMLVL_DEBUG,
5646 "Unable to set up variation! (errno = %d)\n",
5647 errno);
5648 DMVAR_SKIP();
5649 } else {
5650 /* Variation */
5651 rc2 = stat(DUMMY_FILE, &statfs1);
5652 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
5653 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5654 DM_AT_UID, &fileattr);
5655 rc2 |= stat(DUMMY_FILE, &statfs2);
5656 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
5657
5658 /* Variation clean up */
5659 rc = close(fd);
5660 rc |= remove(DUMMY_FILE);
5661 if (rc == -1) {
5662 DMLOG_PRINT(DMLVL_DEBUG,
5663 "Unable to clean up variation! (errno = %d)\n",
5664 errno);
5665 }
5666 dm_handle_free(hanp, hlen);
5667 }
5668 }
5669
5670 /*
5671 * TEST : dm_set_fileattr - DM_AT_ATIME on directory
5672 * EXPECTED: rc = 0
5673 */
5674 if (DMVAR_EXEC(SET_FILEATTR_BASE + 18)) {
5675 void *hanp;
5676 size_t hlen;
5677 dm_fileattr_t fileattr;
5678 struct stat statfs1, statfs2;
5679 int rc2;
5680
5681 /* Variation set up */
5682 fileattr.fa_atime = DUMMY_TIME;
5683 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
5684 /* No clean up */
5685 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
5686 == -1) {
5687 rmdir(DUMMY_SUBDIR);
5688 }
5689 if (rc == -1) {
5690 DMLOG_PRINT(DMLVL_DEBUG,
5691 "Unable to set up variation! (errno = %d)\n",
5692 errno);
5693 DMVAR_SKIP();
5694 } else {
5695 /* Variation */
5696 rc2 = stat(DUMMY_SUBDIR, &statfs1);
5697 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir DM_AT_ATIME)\n",
5698 szFuncName);
5699 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5700 DM_AT_ATIME, &fileattr);
5701 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
5702 if (rc == 0) {
5703 if ((rc2 == 0)
5704 && (statfs1.st_atime != statfs2.st_atime)
5705 && (statfs2.st_atime == DUMMY_TIME)) {
5706 DMLOG_PRINT(DMLVL_DEBUG,
5707 "%s passed with expected rc = %d and atime modified\n",
5708 szFuncName, 0);
5709 DMVAR_PASS();
5710 } else {
5711 DMLOG_PRINT(DMLVL_ERR,
5712 "%s failed with expected rc = %d but atime unmodified (%d vs %d)\n",
5713 szFuncName, 0,
5714 statfs1.st_atime,
5715 statfs2.st_atime);
5716 DMVAR_FAIL();
5717 }
5718 } else {
5719 DMLOG_PRINT(DMLVL_ERR,
5720 "%s failed with unexpected rc = %d (errno = %d)\n",
5721 szFuncName, rc, errno);
5722 DMVAR_FAIL();
5723 }
5724
5725 /* Variation clean up */
5726 rc = rmdir(DUMMY_SUBDIR);
5727 if (rc == -1) {
5728 DMLOG_PRINT(DMLVL_DEBUG,
5729 "Unable to clean up variation! (errno = %d)\n",
5730 errno);
5731 }
5732 dm_handle_free(hanp, hlen);
5733 }
5734 }
5735
5736 /*
5737 * TEST : dm_set_fileattr - DM_AT_MTIME on directory
5738 * EXPECTED: rc = 0
5739 */
5740 if (DMVAR_EXEC(SET_FILEATTR_BASE + 19)) {
5741 void *hanp;
5742 size_t hlen;
5743 dm_fileattr_t fileattr;
5744 struct stat statfs1, statfs2;
5745 int rc2;
5746
5747 /* Variation set up */
5748 fileattr.fa_mtime = DUMMY_TIME;
5749 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
5750 /* No clean up */
5751 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
5752 == -1) {
5753 rmdir(DUMMY_SUBDIR);
5754 }
5755 if (rc == -1) {
5756 DMLOG_PRINT(DMLVL_DEBUG,
5757 "Unable to set up variation! (errno = %d)\n",
5758 errno);
5759 DMVAR_SKIP();
5760 } else {
5761 /* Variation */
5762 rc2 = stat(DUMMY_SUBDIR, &statfs1);
5763 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir DM_AT_MTIME)\n",
5764 szFuncName);
5765 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5766 DM_AT_MTIME, &fileattr);
5767 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
5768 if (rc == 0) {
5769 if ((rc2 == 0)
5770 && (statfs1.st_mtime != statfs2.st_mtime)
5771 && (statfs2.st_mtime == DUMMY_TIME)) {
5772 DMLOG_PRINT(DMLVL_DEBUG,
5773 "%s passed with expected rc = %d and mtime modified\n",
5774 szFuncName, 0);
5775 DMVAR_PASS();
5776 } else {
5777 DMLOG_PRINT(DMLVL_ERR,
5778 "%s failed with expected rc = %d but mtime unmodified (%d vs %d)\n",
5779 szFuncName, 0,
5780 statfs1.st_mtime,
5781 statfs2.st_mtime);
5782 DMVAR_FAIL();
5783 }
5784 } else {
5785 DMLOG_PRINT(DMLVL_ERR,
5786 "%s failed with unexpected rc = %d (errno = %d)\n",
5787 szFuncName, rc, errno);
5788 DMVAR_FAIL();
5789 }
5790
5791 /* Variation clean up */
5792 rc = rmdir(DUMMY_SUBDIR);
5793 if (rc == -1) {
5794 DMLOG_PRINT(DMLVL_DEBUG,
5795 "Unable to clean up variation! (errno = %d)\n",
5796 errno);
5797 }
5798 dm_handle_free(hanp, hlen);
5799 }
5800 }
5801
5802 /*
5803 * TEST : dm_set_fileattr - DM_AT_CTIME on directory
5804 * EXPECTED: rc = 0
5805 */
5806 if (DMVAR_EXEC(SET_FILEATTR_BASE + 20)) {
5807 void *hanp;
5808 size_t hlen;
5809 dm_fileattr_t fileattr;
5810 struct stat statfs1, statfs2;
5811 int rc2;
5812
5813 /* Variation set up */
5814 fileattr.fa_ctime = DUMMY_TIME;
5815 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
5816 /* No clean up */
5817 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
5818 == -1) {
5819 rmdir(DUMMY_SUBDIR);
5820 }
5821 if (rc == -1) {
5822 DMLOG_PRINT(DMLVL_DEBUG,
5823 "Unable to set up variation! (errno = %d)\n",
5824 errno);
5825 DMVAR_SKIP();
5826 } else {
5827 /* Variation */
5828 rc2 = stat(DUMMY_SUBDIR, &statfs1);
5829 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir DM_AT_CTIME)\n",
5830 szFuncName);
5831 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5832 DM_AT_CTIME, &fileattr);
5833 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
5834 if (rc == 0) {
5835 if ((rc2 == 0)
5836 && (statfs1.st_ctime != statfs2.st_ctime)
5837 && (statfs2.st_ctime == DUMMY_TIME)) {
5838 DMLOG_PRINT(DMLVL_DEBUG,
5839 "%s passed with expected rc = %d and ctime modified\n",
5840 szFuncName, 0);
5841 DMVAR_PASS();
5842 } else {
5843 DMLOG_PRINT(DMLVL_ERR,
5844 "%s failed with expected rc = %d but ctime unmodified (%d vs %d)\n",
5845 szFuncName, 0,
5846 statfs1.st_ctime,
5847 statfs2.st_ctime);
5848 DMVAR_FAIL();
5849 }
5850 } else {
5851 DMLOG_PRINT(DMLVL_ERR,
5852 "%s failed with unexpected rc = %d (errno = %d)\n",
5853 szFuncName, rc, errno);
5854 DMVAR_FAIL();
5855 }
5856
5857 /* Variation clean up */
5858 rc = rmdir(DUMMY_SUBDIR);
5859 if (rc == -1) {
5860 DMLOG_PRINT(DMLVL_DEBUG,
5861 "Unable to clean up variation! (errno = %d)\n",
5862 errno);
5863 }
5864 dm_handle_free(hanp, hlen);
5865 }
5866 }
5867
5868 /*
5869 * TEST : dm_set_fileattr - DM_AT_DTIME on directory with DM attribute
5870 * EXPECTED: rc = 0
5871 */
5872 if (DMVAR_EXEC(SET_FILEATTR_BASE + 21)) {
5873 void *hanp;
5874 size_t hlen;
5875 dm_fileattr_t fileattr;
5876 dm_attrname_t attrname;
5877 char buf[ATTR_LISTLEN];
5878 struct stat statfs1, statfs2;
5879 int rc2;
5880
5881 /* Variation set up */
5882 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
5883 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
5884 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
5885 fileattr.fa_dtime = DUMMY_TIME;
5886 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
5887 /* No clean up */
5888 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
5889 == -1) {
5890 rmdir(DUMMY_SUBDIR);
5891 } else
5892 if ((rc =
5893 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
5894 0, ATTR_VALUELEN, buf)) == -1) {
5895 dm_handle_free(hanp, hlen);
5896 rmdir(DUMMY_SUBDIR);
5897 }
5898 if (rc == -1) {
5899 DMLOG_PRINT(DMLVL_DEBUG,
5900 "Unable to set up variation! (errno = %d)\n",
5901 errno);
5902 DMVAR_SKIP();
5903 } else {
5904 /* Variation */
5905 rc2 = stat(DUMMY_SUBDIR, &statfs1);
5906 DMLOG_PRINT(DMLVL_DEBUG,
5907 "%s(dir DM_AT_DTIME with attr)\n",
5908 szFuncName);
5909 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5910 DM_AT_DTIME, &fileattr);
5911 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
5912 if (rc == 0) {
5913 if ((rc2 == 0)
5914 && (statfs1.st_ctime != statfs2.st_ctime)
5915 && (statfs2.st_ctime == DUMMY_TIME)) {
5916 DMLOG_PRINT(DMLVL_DEBUG,
5917 "%s passed with expected rc = %d and ctime modified\n",
5918 szFuncName, 0);
5919 DMVAR_PASS();
5920 } else {
5921 DMLOG_PRINT(DMLVL_ERR,
5922 "%s failed with expected rc = %d but ctime unmodified (%d vs %d)\n",
5923 szFuncName, 0,
5924 statfs1.st_ctime,
5925 statfs2.st_ctime);
5926 DMVAR_FAIL();
5927 }
5928 } else {
5929 DMLOG_PRINT(DMLVL_ERR,
5930 "%s failed with unexpected rc = %d (errno = %d)\n",
5931 szFuncName, rc, errno);
5932 DMVAR_FAIL();
5933 }
5934
5935 /* Variation clean up */
5936 rc = rmdir(DUMMY_SUBDIR);
5937 if (rc == -1) {
5938 DMLOG_PRINT(DMLVL_DEBUG,
5939 "Unable to clean up variation! (errno = %d)\n",
5940 errno);
5941 }
5942 dm_handle_free(hanp, hlen);
5943 }
5944 }
5945
5946 /*
5947 * TEST : dm_set_fileattr - DM_AT_DTIME on directory without DM attribute
5948 * EXPECTED: rc = -1, errno = EINVAL
5949 */
5950 if (DMVAR_EXEC(SET_FILEATTR_BASE + 22)) {
5951 void *hanp;
5952 size_t hlen;
5953 dm_fileattr_t fileattr;
5954 struct stat statfs1, statfs2;
5955 int rc2;
5956
5957 /* Variation set up */
5958 fileattr.fa_dtime = DUMMY_TIME;
5959 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
5960 /* No clean up */
5961 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
5962 == -1) {
5963 rmdir(DUMMY_SUBDIR);
5964 }
5965 if (rc == -1) {
5966 DMLOG_PRINT(DMLVL_DEBUG,
5967 "Unable to set up variation! (errno = %d)\n",
5968 errno);
5969 DMVAR_SKIP();
5970 } else {
5971 /* Variation */
5972 rc2 = stat(DUMMY_SUBDIR, &statfs1);
5973 DMLOG_PRINT(DMLVL_DEBUG,
5974 "%s(dir DM_AT_DTIME without attr)\n",
5975 szFuncName);
5976 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
5977 DM_AT_DTIME, &fileattr);
5978 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
5979 if (rc == 0) {
5980 if ((rc2 == 0)
5981 && (statfs1.st_ctime == statfs2.st_ctime)
5982 && (statfs2.st_ctime != DUMMY_TIME)) {
5983 DMLOG_PRINT(DMLVL_DEBUG,
5984 "%s passed with expected rc = %d and ctime unmodified\n",
5985 szFuncName, 0);
5986 DMVAR_PASS();
5987 } else {
5988 DMLOG_PRINT(DMLVL_ERR,
5989 "%s failed with expected rc = %d but ctime modified (%d vs %d)\n",
5990 szFuncName, 0,
5991 statfs1.st_ctime,
5992 statfs2.st_ctime);
5993 DMVAR_FAIL();
5994 }
5995 } else {
5996 DMLOG_PRINT(DMLVL_ERR,
5997 "%s failed with unexpected rc = %d\n",
5998 szFuncName, rc);
5999 DMVAR_FAIL();
6000 }
6001
6002 /* Variation clean up */
6003 rc = rmdir(DUMMY_SUBDIR);
6004 if (rc == -1) {
6005 DMLOG_PRINT(DMLVL_DEBUG,
6006 "Unable to clean up variation! (errno = %d)\n",
6007 errno);
6008 }
6009 dm_handle_free(hanp, hlen);
6010 }
6011 }
6012
6013 /*
6014 * TEST : dm_set_fileattr - DM_AT_UID on directory
6015 * EXPECTED: rc = 0
6016 */
6017 if (DMVAR_EXEC(SET_FILEATTR_BASE + 23)) {
6018 void *hanp;
6019 size_t hlen;
6020 dm_fileattr_t fileattr;
6021 struct stat statfs1, statfs2;
6022 int rc2;
6023
6024 /* Variation set up */
6025 fileattr.fa_uid = DUMMY_UID;
6026 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
6027 /* No clean up */
6028 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
6029 == -1) {
6030 rmdir(DUMMY_SUBDIR);
6031 }
6032 if (rc == -1) {
6033 DMLOG_PRINT(DMLVL_DEBUG,
6034 "Unable to set up variation! (errno = %d)\n",
6035 errno);
6036 DMVAR_SKIP();
6037 } else {
6038 /* Variation */
6039 rc2 = stat(DUMMY_SUBDIR, &statfs1);
6040 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir DM_AT_UID)\n",
6041 szFuncName);
6042 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6043 DM_AT_UID, &fileattr);
6044 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
6045 if (rc == 0) {
6046 if ((rc2 == 0)
6047 && (statfs1.st_uid != statfs2.st_uid)
6048 && (statfs2.st_uid == DUMMY_UID)) {
6049 DMLOG_PRINT(DMLVL_DEBUG,
6050 "%s passed with expected rc = %d and uid modified\n",
6051 szFuncName, 0);
6052 DMVAR_PASS();
6053 } else {
6054 DMLOG_PRINT(DMLVL_ERR,
6055 "%s failed with expected rc = %d but uid unmodified (%d vs %d)\n",
6056 szFuncName, 0,
6057 statfs1.st_uid,
6058 statfs2.st_uid);
6059 DMVAR_FAIL();
6060 }
6061 } else {
6062 DMLOG_PRINT(DMLVL_ERR,
6063 "%s failed with unexpected rc = %d (errno = %d)\n",
6064 szFuncName, rc, errno);
6065 DMVAR_FAIL();
6066 }
6067
6068 /* Variation clean up */
6069 rc = rmdir(DUMMY_SUBDIR);
6070 if (rc == -1) {
6071 DMLOG_PRINT(DMLVL_DEBUG,
6072 "Unable to clean up variation! (errno = %d)\n",
6073 errno);
6074 }
6075 dm_handle_free(hanp, hlen);
6076 }
6077 }
6078
6079 /*
6080 * TEST : dm_set_fileattr - DM_AT_GID on directory
6081 * EXPECTED: rc = 0
6082 */
6083 if (DMVAR_EXEC(SET_FILEATTR_BASE + 24)) {
6084 void *hanp;
6085 size_t hlen;
6086 dm_fileattr_t fileattr;
6087 struct stat statfs1, statfs2;
6088 int rc2;
6089
6090 /* Variation set up */
6091 fileattr.fa_gid = DUMMY_GID;
6092 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
6093 /* No clean up */
6094 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
6095 == -1) {
6096 rmdir(DUMMY_SUBDIR);
6097 }
6098 if (rc == -1) {
6099 DMLOG_PRINT(DMLVL_DEBUG,
6100 "Unable to set up variation! (errno = %d)\n",
6101 errno);
6102 DMVAR_SKIP();
6103 } else {
6104 /* Variation */
6105 rc2 = stat(DUMMY_SUBDIR, &statfs1);
6106 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir DM_AT_GID)\n",
6107 szFuncName);
6108 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6109 DM_AT_GID, &fileattr);
6110 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
6111 if (rc == 0) {
6112 if ((rc2 == 0)
6113 && (statfs1.st_gid != statfs2.st_gid)
6114 && (statfs2.st_gid == DUMMY_GID)) {
6115 DMLOG_PRINT(DMLVL_DEBUG,
6116 "%s passed with expected rc = %d and gid modified\n",
6117 szFuncName, 0);
6118 DMVAR_PASS();
6119 } else {
6120 DMLOG_PRINT(DMLVL_ERR,
6121 "%s failed with expected rc = %d but gid unmodified (%d vs %d)\n",
6122 szFuncName, 0,
6123 statfs1.st_gid,
6124 statfs2.st_gid);
6125 DMVAR_FAIL();
6126 }
6127 } else {
6128 DMLOG_PRINT(DMLVL_ERR,
6129 "%s failed with unexpected rc = %d (errno = %d)\n",
6130 szFuncName, rc, errno);
6131 DMVAR_FAIL();
6132 }
6133
6134 /* Variation clean up */
6135 rc = rmdir(DUMMY_SUBDIR);
6136 if (rc == -1) {
6137 DMLOG_PRINT(DMLVL_DEBUG,
6138 "Unable to clean up variation! (errno = %d)\n",
6139 errno);
6140 }
6141 dm_handle_free(hanp, hlen);
6142 }
6143 }
6144
6145 /*
6146 * TEST : dm_set_fileattr - DM_AT_MODE on directory
6147 * EXPECTED: rc = 0
6148 */
6149 if (DMVAR_EXEC(SET_FILEATTR_BASE + 25)) {
6150 void *hanp;
6151 size_t hlen;
6152 dm_fileattr_t fileattr;
6153 struct stat statfs1, statfs2;
6154 int rc2;
6155
6156 /* Variation set up */
6157 fileattr.fa_mode = DUMMY_MODE;
6158 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
6159 /* No clean up */
6160 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
6161 == -1) {
6162 rmdir(DUMMY_SUBDIR);
6163 }
6164 if (rc == -1) {
6165 DMLOG_PRINT(DMLVL_DEBUG,
6166 "Unable to set up variation! (errno = %d)\n",
6167 errno);
6168 DMVAR_SKIP();
6169 } else {
6170 /* Variation */
6171 rc2 = stat(DUMMY_SUBDIR, &statfs1);
6172 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir DM_AT_MODE)\n",
6173 szFuncName);
6174 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6175 DM_AT_MODE, &fileattr);
6176 rc2 |= stat(DUMMY_SUBDIR, &statfs2);
6177 if (rc == 0) {
6178 if ((rc2 == 0)
6179 && (statfs1.st_mode != statfs2.st_mode)
6180 && ((statfs2.st_mode & MODE_MASK) ==
6181 DUMMY_MODE)) {
6182 DMLOG_PRINT(DMLVL_DEBUG,
6183 "%s passed with expected rc = %d and mode modified\n",
6184 szFuncName, 0);
6185 DMVAR_PASS();
6186 } else {
6187 DMLOG_PRINT(DMLVL_ERR,
6188 "%s failed with expected rc = %d but mode unmodified (%x vs %x)\n",
6189 szFuncName, 0,
6190 statfs1.st_mode,
6191 statfs2.st_mode);
6192 DMVAR_FAIL();
6193 }
6194 } else {
6195 DMLOG_PRINT(DMLVL_ERR,
6196 "%s failed with unexpected rc = %d (errno = %d)\n",
6197 szFuncName, rc, errno);
6198 DMVAR_FAIL();
6199 }
6200
6201 /* Variation clean up */
6202 rc = rmdir(DUMMY_SUBDIR);
6203 if (rc == -1) {
6204 DMLOG_PRINT(DMLVL_DEBUG,
6205 "Unable to clean up variation! (errno = %d)\n",
6206 errno);
6207 }
6208 dm_handle_free(hanp, hlen);
6209 }
6210 }
6211
6212 /*
6213 * TEST : dm_set_fileattr - DM_NO_SESSION sid
6214 * EXPECTED: rc = -1, errno = EINVAL
6215 */
6216 if (DMVAR_EXEC(SET_FILEATTR_BASE + 26)) {
6217 int fd;
6218 void *hanp;
6219 size_t hlen;
6220 dm_fileattr_t fileattr;
6221
6222 /* Variation set up */
6223 fileattr.fa_uid = DUMMY_UID;
6224 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6225 if ((rc = system(command)) == -1) {
6226 /* No clean up */
6227 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6228 remove(DUMMY_FILE);
6229 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6230 close(fd);
6231 remove(DUMMY_FILE);
6232 }
6233 if (fd == -1 || rc == -1) {
6234 DMLOG_PRINT(DMLVL_DEBUG,
6235 "Unable to set up variation! (errno = %d)\n",
6236 errno);
6237 DMVAR_SKIP();
6238 } else {
6239 /* Variation */
6240 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
6241 szFuncName);
6242 rc = dm_set_fileattr(DM_NO_SESSION, hanp, hlen,
6243 DM_NO_TOKEN, DM_AT_UID, &fileattr);
6244 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
6245
6246 /* Variation clean up */
6247 rc = close(fd);
6248 rc |= remove(DUMMY_FILE);
6249 if (rc == -1) {
6250 DMLOG_PRINT(DMLVL_DEBUG,
6251 "Unable to clean up variation! (errno = %d)\n",
6252 errno);
6253 }
6254 dm_handle_free(hanp, hlen);
6255 }
6256 }
6257
6258 /*
6259 * TEST : dm_set_fileattr - global handle
6260 * EXPECTED: rc = -1, errno = EBADF
6261 */
6262 if (DMVAR_EXEC(SET_FILEATTR_BASE + 27)) {
6263 dm_fileattr_t fileattr;
6264
6265 /* Variation set up */
6266 fileattr.fa_uid = DUMMY_UID;
6267
6268 /* Variation */
6269 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
6270 rc = dm_set_fileattr(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
6271 DM_NO_TOKEN, DM_AT_UID, &fileattr);
6272 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
6273
6274 /* Variation clean up */
6275 }
6276
6277 /*
6278 * TEST : dm_set_fileattr - invalidated hanp
6279 * EXPECTED: rc = -1, errno = EBADF
6280 */
6281 if (DMVAR_EXEC(SET_FILEATTR_BASE + 28)) {
6282 int fd;
6283 void *hanp;
6284 size_t hlen;
6285 dm_fileattr_t fileattr;
6286
6287 /* Variation set up */
6288 fileattr.fa_uid = DUMMY_UID;
6289 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6290 if ((rc = system(command)) == -1) {
6291 /* No clean up */
6292 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6293 remove(DUMMY_FILE);
6294 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6295 close(fd);
6296 remove(DUMMY_FILE);
6297 } else if ((rc = close(fd)) == -1) {
6298 dm_handle_free(hanp, hlen);
6299 remove(DUMMY_FILE);
6300 } else if ((rc = remove(DUMMY_FILE)) == -1) {
6301 dm_handle_free(hanp, hlen);
6302 }
6303 if (fd == -1 || rc == -1) {
6304 DMLOG_PRINT(DMLVL_DEBUG,
6305 "Unable to set up variation! (errno = %d)\n",
6306 errno);
6307 DMVAR_SKIP();
6308 } else {
6309 /* Variation */
6310 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated hanp)\n",
6311 szFuncName);
6312 rc = dm_set_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6313 DM_AT_UID, &fileattr);
6314 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
6315
6316 /* Variation clean up */
6317 dm_handle_free(hanp, hlen);
6318 }
6319 }
6320
6321 szFuncName = "dm_get_fileattr";
6322
6323 /*
6324 * TEST : dm_get_fileattr - invalid sid
6325 * EXPECTED: rc = -1, errno = EINVAL
6326 */
6327 if (DMVAR_EXEC(GET_FILEATTR_BASE + 1)) {
6328 int fd;
6329 void *hanp;
6330 size_t hlen;
6331 dm_stat_t stat;
6332
6333 /* Variation set up */
6334 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6335 if ((rc = system(command)) == -1) {
6336 /* No clean up */
6337 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6338 remove(DUMMY_FILE);
6339 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6340 close(fd);
6341 remove(DUMMY_FILE);
6342 }
6343 if (fd == -1 || rc == -1) {
6344 DMLOG_PRINT(DMLVL_DEBUG,
6345 "Unable to set up variation! (errno = %d)\n",
6346 errno);
6347 DMVAR_SKIP();
6348 } else {
6349 /* Variation */
6350 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
6351 szFuncName);
6352 rc = dm_get_fileattr(INVALID_ADDR, hanp, hlen,
6353 DM_NO_TOKEN, DM_AT_EMASK, &stat);
6354 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
6355
6356 /* Variation clean up */
6357 rc = close(fd);
6358 rc |= remove(DUMMY_FILE);
6359 if (rc == -1) {
6360 DMLOG_PRINT(DMLVL_DEBUG,
6361 "Unable to clean up variation! (errno = %d)\n",
6362 errno);
6363 }
6364 dm_handle_free(hanp, hlen);
6365 }
6366 }
6367
6368 /*
6369 * TEST : dm_get_fileattr - invalid hanp
6370 * EXPECTED: rc = -1, errno = EFAULT
6371 */
6372 if (DMVAR_EXEC(GET_FILEATTR_BASE + 2)) {
6373 int fd;
6374 void *hanp;
6375 size_t hlen;
6376 dm_stat_t stat;
6377
6378 /* Variation set up */
6379 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6380 if ((rc = system(command)) == -1) {
6381 /* No clean up */
6382 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6383 remove(DUMMY_FILE);
6384 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6385 close(fd);
6386 remove(DUMMY_FILE);
6387 }
6388 if (fd == -1 || rc == -1) {
6389 DMLOG_PRINT(DMLVL_DEBUG,
6390 "Unable to set up variation! (errno = %d)\n",
6391 errno);
6392 DMVAR_SKIP();
6393 } else {
6394 /* Variation */
6395 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
6396 szFuncName);
6397 rc = dm_get_fileattr(sid, (void *)INVALID_ADDR, hlen,
6398 DM_NO_TOKEN, DM_AT_EMASK, &stat);
6399 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
6400
6401 /* Variation clean up */
6402 rc = close(fd);
6403 rc |= remove(DUMMY_FILE);
6404 if (rc == -1) {
6405 DMLOG_PRINT(DMLVL_DEBUG,
6406 "Unable to clean up variation! (errno = %d)\n",
6407 errno);
6408 }
6409 dm_handle_free(hanp, hlen);
6410 }
6411 }
6412
6413 /*
6414 * TEST : dm_get_fileattr - invalid hlen
6415 * EXPECTED: rc = -1, errno = EBADF
6416 */
6417 if (DMVAR_EXEC(GET_FILEATTR_BASE + 3)) {
6418 int fd;
6419 void *hanp;
6420 size_t hlen;
6421 dm_stat_t stat;
6422
6423 /* Variation set up */
6424 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6425 if ((rc = system(command)) == -1) {
6426 /* No clean up */
6427 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6428 remove(DUMMY_FILE);
6429 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6430 close(fd);
6431 remove(DUMMY_FILE);
6432 }
6433 if (fd == -1 || rc == -1) {
6434 DMLOG_PRINT(DMLVL_DEBUG,
6435 "Unable to set up variation! (errno = %d)\n",
6436 errno);
6437 DMVAR_SKIP();
6438 } else {
6439 /* Variation */
6440 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
6441 szFuncName);
6442 rc = dm_get_fileattr(sid, hanp, INVALID_ADDR,
6443 DM_NO_TOKEN, DM_AT_EMASK, &stat);
6444 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
6445
6446 /* Variation clean up */
6447 rc = close(fd);
6448 rc |= remove(DUMMY_FILE);
6449 if (rc == -1) {
6450 DMLOG_PRINT(DMLVL_DEBUG,
6451 "Unable to clean up variation! (errno = %d)\n",
6452 errno);
6453 }
6454 dm_handle_free(hanp, hlen);
6455 }
6456 }
6457
6458 /*
6459 * TEST : dm_get_fileattr - invalid token
6460 * EXPECTED: rc = -1, errno = EINVAL
6461 */
6462 if (DMVAR_EXEC(GET_FILEATTR_BASE + 4)) {
6463 int fd;
6464 void *hanp;
6465 size_t hlen;
6466 dm_stat_t stat;
6467
6468 /* Variation set up */
6469 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6470 if ((rc = system(command)) == -1) {
6471 /* No clean up */
6472 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6473 remove(DUMMY_FILE);
6474 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6475 close(fd);
6476 remove(DUMMY_FILE);
6477 }
6478 if (fd == -1 || rc == -1) {
6479 DMLOG_PRINT(DMLVL_DEBUG,
6480 "Unable to set up variation! (errno = %d)\n",
6481 errno);
6482 DMVAR_SKIP();
6483 } else {
6484 /* Variation */
6485 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
6486 szFuncName);
6487 rc = dm_get_fileattr(sid, hanp, hlen, INVALID_ADDR,
6488 DM_AT_EMASK, &stat);
6489 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
6490
6491 /* Variation clean up */
6492 rc = close(fd);
6493 rc |= remove(DUMMY_FILE);
6494 if (rc == -1) {
6495 DMLOG_PRINT(DMLVL_DEBUG,
6496 "Unable to clean up variation! (errno = %d)\n",
6497 errno);
6498 }
6499 dm_handle_free(hanp, hlen);
6500 }
6501 }
6502
6503 /*
6504 * TEST : dm_get_fileattr - invalid mask
6505 * EXPECTED: rc = -1, errno = EINVAL
6506 *
6507 * This variation uncovered XFS BUG #22 (0 returned instead of -1 and
6508 * EINVAL errno)
6509 */
6510 if (DMVAR_EXEC(GET_FILEATTR_BASE + 5)) {
6511 int fd;
6512 void *hanp;
6513 size_t hlen;
6514 dm_stat_t stat;
6515
6516 /* Variation set up */
6517 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6518 if ((rc = system(command)) == -1) {
6519 /* No clean up */
6520 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6521 remove(DUMMY_FILE);
6522 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6523 close(fd);
6524 remove(DUMMY_FILE);
6525 }
6526 if (fd == -1 || rc == -1) {
6527 DMLOG_PRINT(DMLVL_DEBUG,
6528 "Unable to set up variation! (errno = %d)\n",
6529 errno);
6530 DMVAR_SKIP();
6531 } else {
6532 /* Variation */
6533 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid mask)\n",
6534 szFuncName);
6535 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6536 DM_AT_HANDLE, &stat);
6537 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
6538
6539 /* Variation clean up */
6540 rc = close(fd);
6541 rc |= remove(DUMMY_FILE);
6542 if (rc == -1) {
6543 DMLOG_PRINT(DMLVL_DEBUG,
6544 "Unable to clean up variation! (errno = %d)\n",
6545 errno);
6546 }
6547 dm_handle_free(hanp, hlen);
6548 }
6549 }
6550
6551 /*
6552 * TEST : dm_get_fileattr - invalid statp
6553 * EXPECTED: rc = -1, errno = EFAULT
6554 */
6555 if (DMVAR_EXEC(GET_FILEATTR_BASE + 6)) {
6556 int fd;
6557 void *hanp;
6558 size_t hlen;
6559
6560 /* Variation set up */
6561 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6562 if ((rc = system(command)) == -1) {
6563 /* No clean up */
6564 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6565 remove(DUMMY_FILE);
6566 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6567 close(fd);
6568 remove(DUMMY_FILE);
6569 }
6570 if (fd == -1 || rc == -1) {
6571 DMLOG_PRINT(DMLVL_DEBUG,
6572 "Unable to set up variation! (errno = %d)\n",
6573 errno);
6574 DMVAR_SKIP();
6575 } else {
6576 /* Variation */
6577 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid statp)\n",
6578 szFuncName);
6579 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6580 DM_AT_EMASK,
6581 (dm_stat_t *) INVALID_ADDR);
6582 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
6583
6584 /* Variation clean up */
6585 rc = close(fd);
6586 rc |= remove(DUMMY_FILE);
6587 if (rc == -1) {
6588 DMLOG_PRINT(DMLVL_DEBUG,
6589 "Unable to clean up variation! (errno = %d)\n",
6590 errno);
6591 }
6592 dm_handle_free(hanp, hlen);
6593 }
6594 }
6595
6596 /*
6597 * TEST : dm_get_fileattr - DM_AT_EMASK on file
6598 * EXPECTED: rc = 0
6599 */
6600 if (DMVAR_EXEC(GET_FILEATTR_BASE + 7)) {
6601 int fd;
6602 void *hanp;
6603 size_t hlen;
6604 dm_stat_t stat;
6605 dm_eventset_t eventset;
6606
6607 /* Variation set up */
6608 DMEV_ZERO(eventset);
6609 DMEV_SET(DM_EVENT_ATTRIBUTE, eventset);
6610 DMEV_SET(DM_EVENT_CLOSE, eventset);
6611 DMEV_SET(DM_EVENT_DESTROY, eventset);
6612 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6613 if ((rc = system(command)) == -1) {
6614 /* No clean up */
6615 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6616 remove(DUMMY_FILE);
6617 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6618 close(fd);
6619 remove(DUMMY_FILE);
6620 } else
6621 if ((rc =
6622 dm_set_eventlist(sid, hanp, hlen, DM_NO_TOKEN,
6623 &eventset, DM_EVENT_MAX)) == -1) {
6624 dm_handle_free(hanp, hlen);
6625 close(fd);
6626 remove(DUMMY_FILE);
6627 }
6628 if (fd == -1 || rc == -1) {
6629 DMLOG_PRINT(DMLVL_DEBUG,
6630 "Unable to set up variation! (errno = %d)\n",
6631 errno);
6632 DMVAR_SKIP();
6633 } else {
6634 /* Variation */
6635 DMLOG_PRINT(DMLVL_DEBUG, "%s(file DM_AT_EMASK)\n",
6636 szFuncName);
6637 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6638 DM_AT_EMASK, &stat);
6639 if (rc == 0) {
6640 if (memcmp
6641 (&eventset, &stat.dt_emask,
6642 sizeof(dm_eventset_t)) == 0) {
6643 DMLOG_PRINT(DMLVL_DEBUG,
6644 "%s passed with expected rc = %d\n",
6645 szFuncName, 0);
6646 DMVAR_PASS();
6647 } else {
6648 DMLOG_PRINT(DMLVL_ERR,
6649 "%s failed with expected rc = %d but unexpected emask (%llx vs %llx)\n",
6650 szFuncName, 0, eventset,
6651 stat.dt_emask);
6652 DMVAR_FAIL();
6653 }
6654 } else {
6655 DMLOG_PRINT(DMLVL_ERR,
6656 "%s failed with unexpected rc = %d (errno = %d)\n",
6657 szFuncName, rc, errno);
6658 DMVAR_FAIL();
6659 }
6660
6661 /* Variation clean up */
6662 DMEV_ZERO(eventset);
6663 rc |=
6664 dm_set_eventlist(sid, hanp, hlen, DM_NO_TOKEN,
6665 &eventset, DM_EVENT_MAX);
6666 rc |= close(fd);
6667 rc |= remove(DUMMY_FILE);
6668 if (rc == -1) {
6669 DMLOG_PRINT(DMLVL_DEBUG,
6670 "Unable to clean up variation! (errno = %d)\n",
6671 errno);
6672 }
6673 dm_handle_free(hanp, hlen);
6674 }
6675 }
6676
6677 /*
6678 * TEST : dm_get_fileattr - file DM_AT_PMANR with region
6679 * EXPECTED: rc = 0
6680 */
6681 if (DMVAR_EXEC(GET_FILEATTR_BASE + 8)) {
6682 int fd;
6683 void *hanp;
6684 size_t hlen;
6685 dm_stat_t stat;
6686 dm_region_t region = { 0, 0, DM_REGION_READ };
6687 dm_boolean_t exactflag;
6688
6689 /* Variation set up */
6690 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6691 if ((rc = system(command)) == -1) {
6692 /* No clean up */
6693 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6694 remove(DUMMY_FILE);
6695 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6696 close(fd);
6697 remove(DUMMY_FILE);
6698 } else
6699 if ((rc =
6700 dm_set_region(sid, hanp, hlen, DM_NO_TOKEN, 1, ®ion,
6701 &exactflag)) == -1) {
6702 dm_handle_free(hanp, hlen);
6703 close(fd);
6704 remove(DUMMY_FILE);
6705 close(fd);
6706 remove(DUMMY_FILE);
6707 }
6708 if (fd == -1 || rc == -1) {
6709 DMLOG_PRINT(DMLVL_DEBUG,
6710 "Unable to set up variation! (errno = %d)\n",
6711 errno);
6712 DMVAR_SKIP();
6713 } else {
6714 /* Variation */
6715 DMLOG_PRINT(DMLVL_DEBUG,
6716 "%s(file DM_AT_PMANR with region)\n",
6717 szFuncName);
6718 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6719 DM_AT_PMANR, &stat);
6720 if (rc == 0) {
6721 if (stat.dt_pmanreg == DM_TRUE) {
6722 DMLOG_PRINT(DMLVL_DEBUG,
6723 "%s passed with expected rc = %d\n",
6724 szFuncName, 0);
6725 DMVAR_PASS();
6726 } else {
6727 DMLOG_PRINT(DMLVL_ERR,
6728 "%s failed with expected rc = %d but unexpected pmanreg (%d vs %d)\n",
6729 szFuncName, 0, DM_TRUE,
6730 stat.dt_pmanreg);
6731 DMVAR_FAIL();
6732 }
6733 } else {
6734 DMLOG_PRINT(DMLVL_ERR,
6735 "%s failed with unexpected rc = %d (errno = %d)\n",
6736 szFuncName, rc, errno);
6737 DMVAR_FAIL();
6738 }
6739
6740 /* Variation clean up */
6741 rc = close(fd);
6742 rc |= remove(DUMMY_FILE);
6743 if (rc == -1) {
6744 DMLOG_PRINT(DMLVL_DEBUG,
6745 "Unable to clean up variation! (errno = %d)\n",
6746 errno);
6747 }
6748 dm_handle_free(hanp, hlen);
6749 }
6750 }
6751
6752 /*
6753 * TEST : dm_get_fileattr - file DM_AT_PMANR without region
6754 * EXPECTED: rc = 0
6755 */
6756 if (DMVAR_EXEC(GET_FILEATTR_BASE + 9)) {
6757 int fd;
6758 void *hanp;
6759 size_t hlen;
6760 dm_stat_t stat;
6761
6762 /* Variation set up */
6763 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6764 if ((rc = system(command)) == -1) {
6765 /* No clean up */
6766 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6767 remove(DUMMY_FILE);
6768 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6769 close(fd);
6770 remove(DUMMY_FILE);
6771 }
6772 if (fd == -1 || rc == -1) {
6773 DMLOG_PRINT(DMLVL_DEBUG,
6774 "Unable to set up variation! (errno = %d)\n",
6775 errno);
6776 DMVAR_SKIP();
6777 } else {
6778 /* Variation */
6779 DMLOG_PRINT(DMLVL_DEBUG,
6780 "%s(file DM_AT_PMANR without region)\n",
6781 szFuncName);
6782 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6783 DM_AT_PMANR, &stat);
6784 if (rc == 0) {
6785 if (stat.dt_pmanreg == DM_FALSE) {
6786 DMLOG_PRINT(DMLVL_DEBUG,
6787 "%s passed with expected rc = %d\n",
6788 szFuncName, 0);
6789 DMVAR_PASS();
6790 } else {
6791 DMLOG_PRINT(DMLVL_ERR,
6792 "%s failed with expected rc = %d but unexpected pmanreg (%d vs %d)\n",
6793 szFuncName, 0, DM_FALSE,
6794 stat.dt_pmanreg);
6795 DMVAR_FAIL();
6796 }
6797 } else {
6798 DMLOG_PRINT(DMLVL_ERR,
6799 "%s failed with unexpected rc = %d (errno = %d)\n",
6800 szFuncName, rc, errno);
6801 DMVAR_FAIL();
6802 }
6803
6804 /* Variation clean up */
6805 rc = close(fd);
6806 rc |= remove(DUMMY_FILE);
6807 if (rc == -1) {
6808 DMLOG_PRINT(DMLVL_DEBUG,
6809 "Unable to clean up variation! (errno = %d)\n",
6810 errno);
6811 }
6812 dm_handle_free(hanp, hlen);
6813 }
6814 }
6815
6816 /*
6817 * TEST : dm_get_fileattr - file DM_AT_PATTR with DM attribute
6818 * EXPECTED: rc = 0
6819 */
6820 if (DMVAR_EXEC(GET_FILEATTR_BASE + 10)) {
6821 int fd;
6822 void *hanp;
6823 size_t hlen;
6824 dm_stat_t stat;
6825 dm_attrname_t attrname;
6826 char buf[ATTR_VALUELEN];
6827
6828 /* Variation set up */
6829 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
6830 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
6831 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
6832 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6833 if ((rc = system(command)) == -1) {
6834 /* No clean up */
6835 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6836 remove(DUMMY_FILE);
6837 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6838 close(fd);
6839 remove(DUMMY_FILE);
6840 } else
6841 if ((rc =
6842 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
6843 0, sizeof(buf), buf)) == -1) {
6844 dm_handle_free(hanp, hlen);
6845 close(fd);
6846 remove(DUMMY_FILE);
6847 }
6848 if (fd == -1 || rc == -1) {
6849 DMLOG_PRINT(DMLVL_DEBUG,
6850 "Unable to set up variation! (errno = %d)\n",
6851 errno);
6852 DMVAR_SKIP();
6853 } else {
6854 /* Variation */
6855 DMLOG_PRINT(DMLVL_DEBUG,
6856 "%s(file DM_AT_PATTR with attr)\n",
6857 szFuncName);
6858 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6859 DM_AT_PATTR, &stat);
6860 if (rc == 0) {
6861 if (stat.dt_pers == DM_TRUE) {
6862 DMLOG_PRINT(DMLVL_DEBUG,
6863 "%s passed with expected rc = %d\n",
6864 szFuncName, 0);
6865 DMVAR_PASS();
6866 } else {
6867 DMLOG_PRINT(DMLVL_ERR,
6868 "%s failed with expected rc = %d but unexpected pers (%d vs %d)\n",
6869 szFuncName, 0, DM_TRUE,
6870 stat.dt_pers);
6871 DMVAR_FAIL();
6872 }
6873 } else {
6874 DMLOG_PRINT(DMLVL_ERR,
6875 "%s failed with unexpected rc = %d (errno = %d)\n",
6876 szFuncName, rc, errno);
6877 DMVAR_FAIL();
6878 }
6879
6880 /* Variation clean up */
6881 rc = close(fd);
6882 rc |= remove(DUMMY_FILE);
6883 if (rc == -1) {
6884 DMLOG_PRINT(DMLVL_DEBUG,
6885 "Unable to clean up variation! (errno = %d)\n",
6886 errno);
6887 }
6888 dm_handle_free(hanp, hlen);
6889 }
6890 }
6891
6892 /*
6893 * TEST : dm_get_fileattr - file DM_AT_PATTR without DM attribute
6894 * EXPECTED: rc = 0
6895 */
6896 if (DMVAR_EXEC(GET_FILEATTR_BASE + 11)) {
6897 int fd;
6898 void *hanp;
6899 size_t hlen;
6900 dm_stat_t stat;
6901
6902 /* Variation set up */
6903 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6904 if ((rc = system(command)) == -1) {
6905 /* No clean up */
6906 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6907 remove(DUMMY_FILE);
6908 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6909 close(fd);
6910 remove(DUMMY_FILE);
6911 }
6912 if (fd == -1 || rc == -1) {
6913 DMLOG_PRINT(DMLVL_DEBUG,
6914 "Unable to set up variation! (errno = %d)\n",
6915 errno);
6916 DMVAR_SKIP();
6917 } else {
6918 /* Variation */
6919 DMLOG_PRINT(DMLVL_DEBUG,
6920 "%s(file DM_AT_PATTR without attr)\n",
6921 szFuncName);
6922 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
6923 DM_AT_PATTR, &stat);
6924 if (rc == 0) {
6925 if (stat.dt_pers == DM_FALSE) {
6926 DMLOG_PRINT(DMLVL_DEBUG,
6927 "%s passed with expected rc = %d\n",
6928 szFuncName, 0);
6929 DMVAR_PASS();
6930 } else {
6931 DMLOG_PRINT(DMLVL_ERR,
6932 "%s failed with expected rc = %d but unexpected pers (%d vs %d)\n",
6933 szFuncName, 0, DM_FALSE,
6934 stat.dt_pers);
6935 DMVAR_FAIL();
6936 }
6937 } else {
6938 DMLOG_PRINT(DMLVL_ERR,
6939 "%s failed with unexpected rc = %d (errno = %d)\n",
6940 szFuncName, rc, errno);
6941 DMVAR_FAIL();
6942 }
6943
6944 /* Variation clean up */
6945 rc = close(fd);
6946 rc |= remove(DUMMY_FILE);
6947 if (rc == -1) {
6948 DMLOG_PRINT(DMLVL_DEBUG,
6949 "Unable to clean up variation! (errno = %d)\n",
6950 errno);
6951 }
6952 dm_handle_free(hanp, hlen);
6953 }
6954 }
6955
6956 /*
6957 * TEST : dm_get_fileattr - file DM_AT_DTIME with DM attribute
6958 * EXPECTED: rc = 0
6959 */
6960 if (DMVAR_EXEC(GET_FILEATTR_BASE + 12)) {
6961 int fd;
6962 void *hanp;
6963 size_t hlen;
6964 dm_stat_t stat;
6965 dm_attrname_t attrname;
6966 char buf[ATTR_VALUELEN];
6967
6968 /* Variation set up */
6969 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
6970 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
6971 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
6972 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
6973 if ((rc = system(command)) == -1) {
6974 /* No clean up */
6975 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
6976 remove(DUMMY_FILE);
6977 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
6978 close(fd);
6979 remove(DUMMY_FILE);
6980 } else
6981 if ((rc =
6982 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
6983 0, sizeof(buf), buf)) == -1) {
6984 dm_handle_free(hanp, hlen);
6985 close(fd);
6986 remove(DUMMY_FILE);
6987 }
6988 if (fd == -1 || rc == -1) {
6989 DMLOG_PRINT(DMLVL_DEBUG,
6990 "Unable to set up variation! (errno = %d)\n",
6991 errno);
6992 DMVAR_SKIP();
6993 } else {
6994 /* Variation */
6995 stat.dt_dtime = 0;
6996 DMLOG_PRINT(DMLVL_DEBUG,
6997 "%s(file DM_AT_DTIME with attr)\n",
6998 szFuncName);
6999 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7000 DM_AT_DTIME, &stat);
7001 if (rc == 0) {
7002 if (stat.dt_dtime != 0) {
7003 DMLOG_PRINT(DMLVL_DEBUG,
7004 "%s passed with expected rc = %d\n",
7005 szFuncName, 0);
7006 DMVAR_PASS();
7007 } else {
7008 DMLOG_PRINT(DMLVL_ERR,
7009 "%s failed with expected rc = %d but dtime not set\n",
7010 szFuncName, 0);
7011 DMVAR_FAIL();
7012 }
7013 } else {
7014 DMLOG_PRINT(DMLVL_ERR,
7015 "%s failed with unexpected rc = %d (errno = %d)\n",
7016 szFuncName, rc, errno);
7017 DMVAR_FAIL();
7018 }
7019
7020 /* Variation clean up */
7021 rc = close(fd);
7022 rc |= remove(DUMMY_FILE);
7023 if (rc == -1) {
7024 DMLOG_PRINT(DMLVL_DEBUG,
7025 "Unable to clean up variation! (errno = %d)\n",
7026 errno);
7027 }
7028 dm_handle_free(hanp, hlen);
7029 }
7030 }
7031
7032 /*
7033 * TEST : dm_get_fileattr - file DM_AT_DTIME without DM attribute
7034 * EXPECTED: rc = 0
7035 *
7036 * This variation uncovered XFS BUG #23 (dtime updated without any DM
7037 * attributes)
7038 */
7039 if (DMVAR_EXEC(GET_FILEATTR_BASE + 13)) {
7040 int fd;
7041 void *hanp;
7042 size_t hlen;
7043 dm_stat_t stat;
7044
7045 /* Variation set up */
7046 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
7047 if ((rc = system(command)) == -1) {
7048 /* No clean up */
7049 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
7050 remove(DUMMY_FILE);
7051 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
7052 close(fd);
7053 remove(DUMMY_FILE);
7054 }
7055 if (fd == -1 || rc == -1) {
7056 DMLOG_PRINT(DMLVL_DEBUG,
7057 "Unable to set up variation! (errno = %d)\n",
7058 errno);
7059 DMVAR_SKIP();
7060 } else {
7061 /* Variation */
7062 stat.dt_dtime = 0;
7063 DMLOG_PRINT(DMLVL_DEBUG,
7064 "%s(file DM_AT_DTIME without attr)\n",
7065 szFuncName);
7066 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7067 DM_AT_DTIME, &stat);
7068 if (rc == 0) {
7069 if (stat.dt_dtime == 0) {
7070 DMLOG_PRINT(DMLVL_DEBUG,
7071 "%s passed with expected rc = %d\n",
7072 szFuncName, 0);
7073 DMVAR_PASS();
7074 } else {
7075 DMLOG_PRINT(DMLVL_ERR,
7076 "%s failed with expected rc = %d but dtime set\n",
7077 szFuncName, 0);
7078 DMVAR_FAIL();
7079 }
7080 } else {
7081 DMLOG_PRINT(DMLVL_ERR,
7082 "%s failed with unexpected rc = %d (errno = %d)\n",
7083 szFuncName, rc, errno);
7084 DMVAR_FAIL();
7085 }
7086
7087 /* Variation clean up */
7088 rc = close(fd);
7089 rc |= remove(DUMMY_FILE);
7090 if (rc == -1) {
7091 DMLOG_PRINT(DMLVL_DEBUG,
7092 "Unable to clean up variation! (errno = %d)\n",
7093 errno);
7094 }
7095 dm_handle_free(hanp, hlen);
7096 }
7097 }
7098
7099 /*
7100 * TEST : dm_get_fileattr - file DM_AT_STAT
7101 * EXPECTED: rc = 0
7102 */
7103 if (DMVAR_EXEC(GET_FILEATTR_BASE + 14)) {
7104 int fd;
7105 void *hanp;
7106 size_t hlen;
7107 dm_stat_t statdm;
7108 struct stat statfs;
7109 int varStatus;
7110
7111 /* Variation set up */
7112 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
7113 if ((rc = system(command)) == -1) {
7114 /* No clean up */
7115 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
7116 remove(DUMMY_FILE);
7117 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
7118 close(fd);
7119 remove(DUMMY_FILE);
7120 } else if ((rc = stat(DUMMY_FILE, &statfs)) == -1) {
7121 dm_handle_free(hanp, hlen);
7122 close(fd);
7123 remove(DUMMY_FILE);
7124 }
7125 if (fd == -1 || rc == -1) {
7126 DMLOG_PRINT(DMLVL_DEBUG,
7127 "Unable to set up variation! (errno = %d)\n",
7128 errno);
7129 DMVAR_SKIP();
7130 } else {
7131 /* Variation */
7132 DMLOG_PRINT(DMLVL_DEBUG, "%s(file DM_AT_STAT)\n",
7133 szFuncName);
7134 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7135 DM_AT_STAT, &statdm);
7136 if (rc == 0) {
7137 varStatus = DMSTAT_PASS;
7138 DMLOG_PRINT(DMLVL_DEBUG,
7139 "%s returned expected rc = %d\n",
7140 szFuncName, rc);
7141 if (statfs.st_dev != statdm.dt_dev) {
7142 DMLOG_PRINT(DMLVL_ERR,
7143 "%s failed with nonmatching dev (%lld vs %lld)\n",
7144 szFuncName, statfs.st_dev,
7145 statdm.dt_dev);
7146 varStatus = DMSTAT_FAIL;
7147 }
7148 if (statfs.st_ino != statdm.dt_ino) {
7149 DMLOG_PRINT(DMLVL_ERR,
7150 "%s failed with nonmatching ino (%lld vs %lld)\n",
7151 szFuncName, statfs.st_ino,
7152 statdm.dt_ino);
7153 varStatus = DMSTAT_FAIL;
7154 }
7155 if (statfs.st_mode != statdm.dt_mode) {
7156 DMLOG_PRINT(DMLVL_ERR,
7157 "%s failed with nonmatching mode (%d vs %d)\n",
7158 szFuncName, statfs.st_mode,
7159 statdm.dt_mode);
7160 varStatus = DMSTAT_FAIL;
7161 }
7162 if (statfs.st_nlink != statdm.dt_nlink) {
7163 DMLOG_PRINT(DMLVL_ERR,
7164 "%s failed with nonmatching nlink (%d vs %d)\n",
7165 szFuncName, statfs.st_nlink,
7166 statdm.dt_nlink);
7167 varStatus = DMSTAT_FAIL;
7168 }
7169 if (statfs.st_uid != statdm.dt_uid) {
7170 DMLOG_PRINT(DMLVL_ERR,
7171 "%s failed with nonmatching uid (%d vs %d)\n",
7172 szFuncName, statfs.st_uid,
7173 statdm.dt_uid);
7174 varStatus = DMSTAT_FAIL;
7175 }
7176 if (statfs.st_gid != statdm.dt_gid) {
7177 DMLOG_PRINT(DMLVL_ERR,
7178 "%s failed with nonmatching gid (%d vs %d)\n",
7179 szFuncName, statfs.st_gid,
7180 statdm.dt_gid);
7181 varStatus = DMSTAT_FAIL;
7182 }
7183 if (statfs.st_rdev != statdm.dt_rdev) {
7184 DMLOG_PRINT(DMLVL_ERR,
7185 "%s failed with nonmatching rdev (%lld vs %lld)\n",
7186 szFuncName, statfs.st_rdev,
7187 statdm.dt_rdev);
7188 varStatus = DMSTAT_FAIL;
7189 }
7190 if (statfs.st_size != statdm.dt_size) {
7191 DMLOG_PRINT(DMLVL_ERR,
7192 "%s failed with nonmatching size (%lld vs %lld)\n",
7193 szFuncName, statfs.st_size,
7194 statdm.dt_size);
7195 varStatus = DMSTAT_FAIL;
7196 }
7197 if (statfs.st_atime != statdm.dt_atime) {
7198 DMLOG_PRINT(DMLVL_ERR,
7199 "%s failed with nonmatching atime (%d vs %d)\n",
7200 szFuncName, statfs.st_atime,
7201 statdm.dt_atime);
7202 varStatus = DMSTAT_FAIL;
7203 }
7204 if (statfs.st_mtime != statdm.dt_mtime) {
7205 DMLOG_PRINT(DMLVL_ERR,
7206 "%s failed with nonmatching mtime (%d vs %d)\n",
7207 szFuncName, statfs.st_mtime,
7208 statdm.dt_mtime);
7209 varStatus = DMSTAT_FAIL;
7210 }
7211 if (statfs.st_ctime != statdm.dt_ctime) {
7212 DMLOG_PRINT(DMLVL_ERR,
7213 "%s failed with nonmatching ctime (%d vs %d)\n",
7214 szFuncName, statfs.st_ctime,
7215 statdm.dt_ctime);
7216 varStatus = DMSTAT_FAIL;
7217 }
7218 if (statfs.st_blksize != statdm.dt_blksize) {
7219 DMLOG_PRINT(DMLVL_ERR,
7220 "%s failed with nonmatching blksize (%d vs %d)\n",
7221 szFuncName,
7222 statfs.st_blksize,
7223 statdm.dt_blksize);
7224 varStatus = DMSTAT_FAIL;
7225 }
7226 if (statfs.st_blocks != statdm.dt_blocks) {
7227 DMLOG_PRINT(DMLVL_ERR,
7228 "%s failed with nonmatching blocks (%lld vs %lld)\n",
7229 szFuncName,
7230 statfs.st_blocks,
7231 statdm.dt_blocks);
7232 varStatus = DMSTAT_FAIL;
7233 }
7234 } else {
7235 DMLOG_PRINT(DMLVL_ERR,
7236 "%s failed with unexpected rc = %d (errno = %d)\n",
7237 szFuncName, rc, errno);
7238 varStatus = DMSTAT_FAIL;
7239 }
7240 DMVAR_END(varStatus);
7241
7242 /* Variation clean up */
7243 rc = close(fd);
7244 rc |= remove(DUMMY_FILE);
7245 if (rc == -1) {
7246 DMLOG_PRINT(DMLVL_DEBUG,
7247 "Unable to clean up variation! (errno = %d)\n",
7248 errno);
7249 }
7250 dm_handle_free(hanp, hlen);
7251 }
7252 }
7253
7254 /*
7255 * TEST : dm_get_fileattr - DM_AT_EMASK on directory
7256 * EXPECTED: rc = 0
7257 */
7258 if (DMVAR_EXEC(GET_FILEATTR_BASE + 15)) {
7259 void *hanp;
7260 size_t hlen;
7261 dm_stat_t stat;
7262 dm_eventset_t eventset;
7263
7264 /* Variation set up */
7265 DMEV_ZERO(eventset);
7266 DMEV_SET(DM_EVENT_ATTRIBUTE, eventset);
7267 DMEV_SET(DM_EVENT_CLOSE, eventset);
7268 DMEV_SET(DM_EVENT_DESTROY, eventset);
7269 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
7270 /* No clean up */
7271 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
7272 == -1) {
7273 rmdir(DUMMY_SUBDIR);
7274 } else
7275 if ((rc =
7276 dm_set_eventlist(sid, hanp, hlen, DM_NO_TOKEN,
7277 &eventset, DM_EVENT_MAX)) == -1) {
7278 dm_handle_free(hanp, hlen);
7279 rmdir(DUMMY_SUBDIR);
7280 }
7281 if (rc == -1) {
7282 DMLOG_PRINT(DMLVL_DEBUG,
7283 "Unable to set up variation! (errno = %d)\n",
7284 errno);
7285 DMVAR_SKIP();
7286 } else {
7287 /* Variation */
7288 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir DM_AT_EMASK)\n",
7289 szFuncName);
7290 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7291 DM_AT_EMASK, &stat);
7292 if (rc == 0) {
7293 if (memcmp
7294 (&eventset, &stat.dt_emask,
7295 sizeof(dm_eventset_t)) == 0) {
7296 DMLOG_PRINT(DMLVL_DEBUG,
7297 "%s passed with expected rc = %d\n",
7298 szFuncName, 0);
7299 DMVAR_PASS();
7300 } else {
7301 DMLOG_PRINT(DMLVL_ERR,
7302 "%s failed with expected rc = %d but unexpected emask (%llx vs %llx)\n",
7303 szFuncName, 0, eventset,
7304 stat.dt_emask);
7305 DMVAR_FAIL();
7306 }
7307 } else {
7308 DMLOG_PRINT(DMLVL_ERR,
7309 "%s failed with unexpected rc = %d (errno = %d)\n",
7310 szFuncName, rc, errno);
7311 DMVAR_FAIL();
7312 }
7313
7314 /* Variation clean up */
7315 DMEV_ZERO(eventset);
7316 rc |=
7317 dm_set_eventlist(sid, hanp, hlen, DM_NO_TOKEN,
7318 &eventset, DM_EVENT_MAX);
7319 rc = rmdir(DUMMY_SUBDIR);
7320 if (rc == -1) {
7321 DMLOG_PRINT(DMLVL_DEBUG,
7322 "Unable to clean up variation! (errno = %d)\n",
7323 errno);
7324 }
7325 dm_handle_free(hanp, hlen);
7326 }
7327 }
7328
7329 /*
7330 * TEST : dm_get_fileattr - DM_AT_PMANR on directory
7331 * EXPECTED: rc = 0
7332 */
7333 if (DMVAR_EXEC(GET_FILEATTR_BASE + 16)) {
7334 void *hanp;
7335 size_t hlen;
7336 dm_stat_t stat;
7337
7338 /* Variation set up */
7339 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
7340 /* No clean up */
7341 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
7342 == -1) {
7343 rmdir(DUMMY_SUBDIR);
7344 }
7345 if (rc == -1) {
7346 DMLOG_PRINT(DMLVL_DEBUG,
7347 "Unable to set up variation! (errno = %d)\n",
7348 errno);
7349 DMVAR_SKIP();
7350 } else {
7351 /* Variation */
7352 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir DM_AT_PMANR)\n",
7353 szFuncName);
7354 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7355 DM_AT_PMANR, &stat);
7356 if (rc == 0) {
7357 if (stat.dt_pmanreg == DM_FALSE) {
7358 DMLOG_PRINT(DMLVL_DEBUG,
7359 "%s passed with expected rc = %d\n",
7360 szFuncName, 0);
7361 DMVAR_PASS();
7362 } else {
7363 DMLOG_PRINT(DMLVL_ERR,
7364 "%s failed with expected rc = %d but unexpected pmanreg (%d vs %d)\n",
7365 szFuncName, 0, DM_FALSE,
7366 stat.dt_pmanreg);
7367 DMVAR_FAIL();
7368 }
7369 } else {
7370 DMLOG_PRINT(DMLVL_ERR,
7371 "%s failed with unexpected rc = %d (errno = %d)\n",
7372 szFuncName, rc, errno);
7373 DMVAR_FAIL();
7374 }
7375
7376 /* Variation clean up */
7377 rc = rmdir(DUMMY_SUBDIR);
7378 if (rc == -1) {
7379 DMLOG_PRINT(DMLVL_DEBUG,
7380 "Unable to clean up variation! (errno = %d)\n",
7381 errno);
7382 }
7383 dm_handle_free(hanp, hlen);
7384 }
7385 }
7386
7387 /*
7388 * TEST : dm_get_fileattr - DM_AT_PATTR on directory with DM attribute
7389 * EXPECTED: rc = 0
7390 */
7391 if (DMVAR_EXEC(GET_FILEATTR_BASE + 17)) {
7392 void *hanp;
7393 size_t hlen;
7394 dm_stat_t stat;
7395 dm_attrname_t attrname;
7396 char buf[ATTR_VALUELEN];
7397
7398 /* Variation set up */
7399 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
7400 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
7401 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
7402 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
7403 /* No clean up */
7404 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
7405 == -1) {
7406 rmdir(DUMMY_SUBDIR);
7407 } else
7408 if ((rc =
7409 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
7410 0, sizeof(buf), buf)) == -1) {
7411 dm_handle_free(hanp, hlen);
7412 rmdir(DUMMY_SUBDIR);
7413 }
7414 if (rc == -1) {
7415 DMLOG_PRINT(DMLVL_DEBUG,
7416 "Unable to set up variation! (errno = %d)\n",
7417 errno);
7418 DMVAR_SKIP();
7419 } else {
7420 /* Variation */
7421 DMLOG_PRINT(DMLVL_DEBUG,
7422 "%s(dir DM_AT_PATTR with attr)\n",
7423 szFuncName);
7424 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7425 DM_AT_PATTR, &stat);
7426 if (rc == 0) {
7427 if (stat.dt_pers == DM_TRUE) {
7428 DMLOG_PRINT(DMLVL_DEBUG,
7429 "%s passed with expected rc = %d\n",
7430 szFuncName, 0);
7431 DMVAR_PASS();
7432 } else {
7433 DMLOG_PRINT(DMLVL_ERR,
7434 "%s failed with expected rc = %d but unexpected pers (%d vs %d)\n",
7435 szFuncName, 0, DM_TRUE,
7436 stat.dt_pers);
7437 DMVAR_FAIL();
7438 }
7439 } else {
7440 DMLOG_PRINT(DMLVL_ERR,
7441 "%s failed with unexpected rc = %d (errno = %d)\n",
7442 szFuncName, rc, errno);
7443 DMVAR_FAIL();
7444 }
7445
7446 /* Variation clean up */
7447 rc = rmdir(DUMMY_SUBDIR);
7448 if (rc == -1) {
7449 DMLOG_PRINT(DMLVL_DEBUG,
7450 "Unable to clean up variation! (errno = %d)\n",
7451 errno);
7452 }
7453 dm_handle_free(hanp, hlen);
7454 }
7455 }
7456
7457 /*
7458 * TEST : dm_get_fileattr - DM_AT_PATTR on directory without DM attribute
7459 * EXPECTED: rc = 0
7460 */
7461 if (DMVAR_EXEC(GET_FILEATTR_BASE + 18)) {
7462 void *hanp;
7463 size_t hlen;
7464 dm_stat_t stat;
7465
7466 /* Variation set up */
7467 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
7468 /* No clean up */
7469 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
7470 == -1) {
7471 rmdir(DUMMY_SUBDIR);
7472 }
7473 if (rc == -1) {
7474 DMLOG_PRINT(DMLVL_DEBUG,
7475 "Unable to set up variation! (errno = %d)\n",
7476 errno);
7477 DMVAR_SKIP();
7478 } else {
7479 /* Variation */
7480 DMLOG_PRINT(DMLVL_DEBUG,
7481 "%s(dir DM_AT_PATTR without attr)\n",
7482 szFuncName);
7483 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7484 DM_AT_PATTR, &stat);
7485 if (rc == 0) {
7486 if (stat.dt_pers == DM_FALSE) {
7487 DMLOG_PRINT(DMLVL_DEBUG,
7488 "%s passed with expected rc = %d\n",
7489 szFuncName, 0);
7490 DMVAR_PASS();
7491 } else {
7492 DMLOG_PRINT(DMLVL_ERR,
7493 "%s failed with expected rc = %d but unexpected pers (%d vs %d)\n",
7494 szFuncName, 0, DM_FALSE,
7495 stat.dt_pers);
7496 DMVAR_FAIL();
7497 }
7498 } else {
7499 DMLOG_PRINT(DMLVL_ERR,
7500 "%s failed with unexpected rc = %d (errno = %d)\n",
7501 szFuncName, rc, errno);
7502 DMVAR_FAIL();
7503 }
7504
7505 /* Variation clean up */
7506 rc = rmdir(DUMMY_SUBDIR);
7507 if (rc == -1) {
7508 DMLOG_PRINT(DMLVL_DEBUG,
7509 "Unable to clean up variation! (errno = %d)\n",
7510 errno);
7511 }
7512 dm_handle_free(hanp, hlen);
7513 }
7514 }
7515
7516 /*
7517 * TEST : dm_get_fileattr - DM_AT_DTIME on directory with DM attribute
7518 * EXPECTED: rc = 0
7519 */
7520 if (DMVAR_EXEC(GET_FILEATTR_BASE + 19)) {
7521 void *hanp;
7522 size_t hlen;
7523 dm_stat_t stat;
7524 dm_attrname_t attrname;
7525 char buf[ATTR_VALUELEN];
7526
7527 /* Variation set up */
7528 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
7529 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
7530 memcpy(buf, ATTR_VALUE, ATTR_VALUELEN);
7531 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
7532 /* No clean up */
7533 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
7534 == -1) {
7535 rmdir(DUMMY_SUBDIR);
7536 } else
7537 if ((rc =
7538 dm_set_dmattr(sid, hanp, hlen, DM_NO_TOKEN, &attrname,
7539 0, sizeof(buf), buf)) == -1) {
7540 dm_handle_free(hanp, hlen);
7541 rmdir(DUMMY_SUBDIR);
7542 }
7543 if (rc == -1) {
7544 DMLOG_PRINT(DMLVL_DEBUG,
7545 "Unable to set up variation! (errno = %d)\n",
7546 errno);
7547 DMVAR_SKIP();
7548 } else {
7549 /* Variation */
7550 stat.dt_dtime = 0;
7551 DMLOG_PRINT(DMLVL_DEBUG,
7552 "%s(dir DM_AT_DTIME with attr)\n",
7553 szFuncName);
7554 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7555 DM_AT_DTIME, &stat);
7556 if (rc == 0) {
7557 if (stat.dt_dtime != 0) {
7558 DMLOG_PRINT(DMLVL_DEBUG,
7559 "%s passed with expected rc = %d\n",
7560 szFuncName, 0);
7561 DMVAR_PASS();
7562 } else {
7563 DMLOG_PRINT(DMLVL_ERR,
7564 "%s failed with expected rc = %d but dtime not set\n",
7565 szFuncName, 0);
7566 DMVAR_FAIL();
7567 }
7568 } else {
7569 DMLOG_PRINT(DMLVL_ERR,
7570 "%s failed with unexpected rc = %d (errno = %d)\n",
7571 szFuncName, rc, errno);
7572 DMVAR_FAIL();
7573 }
7574
7575 /* Variation clean up */
7576 rc = rmdir(DUMMY_SUBDIR);
7577 if (rc == -1) {
7578 DMLOG_PRINT(DMLVL_DEBUG,
7579 "Unable to clean up variation! (errno = %d)\n",
7580 errno);
7581 }
7582 dm_handle_free(hanp, hlen);
7583 }
7584 }
7585
7586 /*
7587 * TEST : dm_get_fileattr - DM_AT_DTIME on directory without DM attribute
7588 * EXPECTED: rc = 0
7589 */
7590 if (DMVAR_EXEC(GET_FILEATTR_BASE + 20)) {
7591 void *hanp;
7592 size_t hlen;
7593 dm_stat_t stat;
7594
7595 /* Variation set up */
7596 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
7597 /* No clean up */
7598 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
7599 == -1) {
7600 rmdir(DUMMY_SUBDIR);
7601 }
7602 if (rc == -1) {
7603 DMLOG_PRINT(DMLVL_DEBUG,
7604 "Unable to set up variation! (errno = %d)\n",
7605 errno);
7606 DMVAR_SKIP();
7607 } else {
7608 /* Variation */
7609 stat.dt_dtime = 0;
7610 DMLOG_PRINT(DMLVL_DEBUG,
7611 "%s(dir DM_AT_DTIME without attr)\n",
7612 szFuncName);
7613 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7614 DM_AT_DTIME, &stat);
7615 if (rc == 0) {
7616 if (stat.dt_dtime == 0) {
7617 DMLOG_PRINT(DMLVL_DEBUG,
7618 "%s passed with expected rc = %d\n",
7619 szFuncName, 0);
7620 DMVAR_PASS();
7621 } else {
7622 DMLOG_PRINT(DMLVL_ERR,
7623 "%s failed with expected rc = %d but dtime set\n",
7624 szFuncName, 0);
7625 DMVAR_FAIL();
7626 }
7627 } else {
7628 DMLOG_PRINT(DMLVL_ERR,
7629 "%s failed with unexpected rc = %d (errno = %d)\n",
7630 szFuncName, rc, errno);
7631 DMVAR_FAIL();
7632 }
7633
7634 /* Variation clean up */
7635 rc = rmdir(DUMMY_SUBDIR);
7636 if (rc == -1) {
7637 DMLOG_PRINT(DMLVL_DEBUG,
7638 "Unable to clean up variation! (errno = %d)\n",
7639 errno);
7640 }
7641 dm_handle_free(hanp, hlen);
7642 }
7643 }
7644
7645 /*
7646 * TEST : dm_get_fileattr - DM_AT_STAT on directory
7647 * EXPECTED: rc = 0
7648 */
7649 if (DMVAR_EXEC(GET_FILEATTR_BASE + 21)) {
7650 void *hanp;
7651 size_t hlen;
7652 dm_stat_t statdm;
7653 struct stat statfs;
7654 int varStatus;
7655
7656 /* Variation set up */
7657 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
7658 /* No clean up */
7659 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
7660 == -1) {
7661 rmdir(DUMMY_SUBDIR);
7662 } else if ((rc = stat(DUMMY_SUBDIR, &statfs)) == -1) {
7663 dm_handle_free(hanp, hlen);
7664 rmdir(DUMMY_SUBDIR);
7665 }
7666 if (rc == -1) {
7667 DMLOG_PRINT(DMLVL_DEBUG,
7668 "Unable to set up variation! (errno = %d)\n",
7669 errno);
7670 DMVAR_SKIP();
7671 } else {
7672 /* Variation */
7673 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir DM_AT_STAT)\n",
7674 szFuncName);
7675 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7676 DM_AT_STAT, &statdm);
7677 if (rc == 0) {
7678 varStatus = DMSTAT_PASS;
7679 DMLOG_PRINT(DMLVL_DEBUG,
7680 "%s returned expected rc = %d\n",
7681 szFuncName, rc);
7682 if (statfs.st_dev != statdm.dt_dev) {
7683 DMLOG_PRINT(DMLVL_ERR,
7684 "%s failed with nonmatching dev (%lld vs %lld)\n",
7685 szFuncName, statfs.st_dev,
7686 statdm.dt_dev);
7687 varStatus = DMSTAT_FAIL;
7688 }
7689 if (statfs.st_ino != statdm.dt_ino) {
7690 DMLOG_PRINT(DMLVL_ERR,
7691 "%s failed with nonmatching ino (%lld vs %lld)\n",
7692 szFuncName, statfs.st_ino,
7693 statdm.dt_ino);
7694 varStatus = DMSTAT_FAIL;
7695 }
7696 if (statfs.st_mode != statdm.dt_mode) {
7697 DMLOG_PRINT(DMLVL_ERR,
7698 "%s failed with nonmatching mode (%d vs %d)\n",
7699 szFuncName, statfs.st_mode,
7700 statdm.dt_mode);
7701 varStatus = DMSTAT_FAIL;
7702 }
7703 if (statfs.st_nlink != statdm.dt_nlink) {
7704 DMLOG_PRINT(DMLVL_ERR,
7705 "%s failed with nonmatching nlink (%d vs %d)\n",
7706 szFuncName, statfs.st_nlink,
7707 statdm.dt_nlink);
7708 varStatus = DMSTAT_FAIL;
7709 }
7710 if (statfs.st_uid != statdm.dt_uid) {
7711 DMLOG_PRINT(DMLVL_ERR,
7712 "%s failed with nonmatching uid (%d vs %d)\n",
7713 szFuncName, statfs.st_uid,
7714 statdm.dt_uid);
7715 varStatus = DMSTAT_FAIL;
7716 }
7717 if (statfs.st_gid != statdm.dt_gid) {
7718 DMLOG_PRINT(DMLVL_ERR,
7719 "%s failed with nonmatching gid (%d vs %d)\n",
7720 szFuncName, statfs.st_gid,
7721 statdm.dt_gid);
7722 varStatus = DMSTAT_FAIL;
7723 }
7724 if (statfs.st_rdev != statdm.dt_rdev) {
7725 DMLOG_PRINT(DMLVL_ERR,
7726 "%s failed with nonmatching rdev (%lld vs %lld)\n",
7727 szFuncName, statfs.st_rdev,
7728 statdm.dt_rdev);
7729 varStatus = DMSTAT_FAIL;
7730 }
7731 if (statfs.st_size != statdm.dt_size) {
7732 DMLOG_PRINT(DMLVL_ERR,
7733 "%s failed with nonmatching size (%lld vs %lld)\n",
7734 szFuncName, statfs.st_size,
7735 statdm.dt_size);
7736 varStatus = DMSTAT_FAIL;
7737 }
7738 if (statfs.st_atime != statdm.dt_atime) {
7739 DMLOG_PRINT(DMLVL_ERR,
7740 "%s failed with nonmatching atime (%d vs %d)\n",
7741 szFuncName, statfs.st_atime,
7742 statdm.dt_atime);
7743 varStatus = DMSTAT_FAIL;
7744 }
7745 if (statfs.st_mtime != statdm.dt_mtime) {
7746 DMLOG_PRINT(DMLVL_ERR,
7747 "%s failed with nonmatching mtime (%d vs %d)\n",
7748 szFuncName, statfs.st_mtime,
7749 statdm.dt_mtime);
7750 varStatus = DMSTAT_FAIL;
7751 }
7752 if (statfs.st_ctime != statdm.dt_ctime) {
7753 DMLOG_PRINT(DMLVL_ERR,
7754 "%s failed with nonmatching ctime (%d vs %d)\n",
7755 szFuncName, statfs.st_ctime,
7756 statdm.dt_ctime);
7757 varStatus = DMSTAT_FAIL;
7758 }
7759 if (statfs.st_blksize != statdm.dt_blksize) {
7760 DMLOG_PRINT(DMLVL_ERR,
7761 "%s failed with nonmatching blksize (%d vs %d)\n",
7762 szFuncName,
7763 statfs.st_blksize,
7764 statdm.dt_blksize);
7765 varStatus = DMSTAT_FAIL;
7766 }
7767 if (statfs.st_blocks != statdm.dt_blocks) {
7768 DMLOG_PRINT(DMLVL_ERR,
7769 "%s failed with nonmatching blocks (%lld vs %lld)\n",
7770 szFuncName,
7771 statfs.st_blocks,
7772 statdm.dt_blocks);
7773 varStatus = DMSTAT_FAIL;
7774 }
7775 } else {
7776 DMLOG_PRINT(DMLVL_ERR,
7777 "%s failed with unexpected rc = %d (errno = %d)\n",
7778 szFuncName, rc, errno);
7779 varStatus = DMSTAT_FAIL;
7780 }
7781 DMVAR_END(varStatus);
7782
7783 /* Variation clean up */
7784 rc = rmdir(DUMMY_SUBDIR);
7785 if (rc == -1) {
7786 DMLOG_PRINT(DMLVL_DEBUG,
7787 "Unable to clean up variation! (errno = %d)\n",
7788 errno);
7789 }
7790 dm_handle_free(hanp, hlen);
7791 }
7792 }
7793
7794 /*
7795 * TEST : dm_get_fileattr - fs handle
7796 * EXPECTED: rc = -1, errno = EINVAL
7797 */
7798 if (DMVAR_EXEC(GET_FILEATTR_BASE + 22)) {
7799 void *hanp;
7800 size_t hlen;
7801 dm_stat_t stat;
7802
7803 /* Variation set up */
7804 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
7805 if ((rc = system(command)) == -1) {
7806 /* No clean up */
7807 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
7808 == -1) {
7809 remove(DUMMY_FILE);
7810 }
7811 if (rc == -1) {
7812 DMLOG_PRINT(DMLVL_DEBUG,
7813 "Unable to set up variation! (errno = %d)\n",
7814 errno);
7815 DMVAR_SKIP();
7816 } else {
7817 /* Variation */
7818 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
7819 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7820 DM_AT_EMASK, &stat);
7821 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
7822
7823 /* Variation clean up */
7824 rc = remove(DUMMY_FILE);
7825 if (rc == -1) {
7826 DMLOG_PRINT(DMLVL_DEBUG,
7827 "Unable to clean up variation! (errno = %d)\n",
7828 errno);
7829 }
7830 dm_handle_free(hanp, hlen);
7831 }
7832 }
7833
7834 /*
7835 * TEST : dm_get_fileattr - DM_NO_SESSION sid
7836 * EXPECTED: rc = -1, errno = EINVAL
7837 */
7838 if (DMVAR_EXEC(GET_FILEATTR_BASE + 23)) {
7839 int fd;
7840 void *hanp;
7841 size_t hlen;
7842 dm_stat_t stat;
7843
7844 /* Variation set up */
7845 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
7846 if ((rc = system(command)) == -1) {
7847 /* No clean up */
7848 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
7849 remove(DUMMY_FILE);
7850 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
7851 close(fd);
7852 remove(DUMMY_FILE);
7853 }
7854 if (fd == -1 || rc == -1) {
7855 DMLOG_PRINT(DMLVL_DEBUG,
7856 "Unable to set up variation! (errno = %d)\n",
7857 errno);
7858 DMVAR_SKIP();
7859 } else {
7860 /* Variation */
7861 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
7862 szFuncName);
7863 rc = dm_get_fileattr(DM_NO_SESSION, hanp, hlen,
7864 DM_NO_TOKEN, DM_AT_EMASK, &stat);
7865 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
7866
7867 /* Variation clean up */
7868 rc = close(fd);
7869 rc |= remove(DUMMY_FILE);
7870 if (rc == -1) {
7871 DMLOG_PRINT(DMLVL_DEBUG,
7872 "Unable to clean up variation! (errno = %d)\n",
7873 errno);
7874 }
7875 dm_handle_free(hanp, hlen);
7876 }
7877 }
7878
7879 /*
7880 * TEST : dm_get_fileattr - global handle
7881 * EXPECTED: rc = -1, errno = EBADF
7882 */
7883 if (DMVAR_EXEC(GET_FILEATTR_BASE + 24)) {
7884 dm_stat_t stat;
7885
7886 /* Variation set up */
7887
7888 /* Variation */
7889 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
7890 rc = dm_get_fileattr(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
7891 DM_NO_TOKEN, DM_AT_EMASK, &stat);
7892 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
7893
7894 /* Variation clean up */
7895 }
7896
7897 /*
7898 * TEST : dm_get_fileattr - invalidated hanp
7899 * EXPECTED: rc = -1, errno = EBADF
7900 */
7901 if (DMVAR_EXEC(GET_FILEATTR_BASE + 25)) {
7902 int fd;
7903 void *hanp;
7904 size_t hlen;
7905 dm_stat_t stat;
7906
7907 /* Variation set up */
7908 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
7909 if ((rc = system(command)) == -1) {
7910 /* No clean up */
7911 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
7912 remove(DUMMY_FILE);
7913 } else if ((rc = dm_fd_to_handle(fd, &hanp, &hlen)) == -1) {
7914 close(fd);
7915 remove(DUMMY_FILE);
7916 } else if ((rc = close(fd)) == -1) {
7917 dm_handle_free(hanp, hlen);
7918 remove(DUMMY_FILE);
7919 } else if ((rc = remove(DUMMY_FILE)) == -1) {
7920 dm_handle_free(hanp, hlen);
7921 }
7922 if (fd == -1 || rc == -1) {
7923 DMLOG_PRINT(DMLVL_DEBUG,
7924 "Unable to set up variation! (errno = %d)\n",
7925 errno);
7926 DMVAR_SKIP();
7927 } else {
7928 /* Variation */
7929 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated hanp)\n",
7930 szFuncName);
7931 rc = dm_get_fileattr(sid, hanp, hlen, DM_NO_TOKEN,
7932 DM_AT_EMASK, &stat);
7933 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
7934
7935 /* Variation clean up */
7936 dm_handle_free(hanp, hlen);
7937 }
7938 }
7939
7940 szFuncName = "dm_init_attrloc";
7941
7942 /*
7943 * TEST : dm_init_attrloc - invalid sid
7944 * EXPECTED: rc = -1, errno = EINVAL
7945 */
7946 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 1)) {
7947 void *hanp;
7948 size_t hlen;
7949 dm_attrloc_t loc;
7950
7951 /* Variation set up */
7952 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
7953 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
7954 /* No clean up */
7955 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
7956 == -1) {
7957 rmdir(DUMMY_SUBDIR);
7958 } else if ((rc = system(command)) == -1) {
7959 dm_handle_free(hanp, hlen);
7960 rmdir(DUMMY_SUBDIR);
7961 }
7962 if (rc == -1) {
7963 DMLOG_PRINT(DMLVL_DEBUG,
7964 "Unable to set up variation! (errno = %d)\n",
7965 errno);
7966 DMVAR_SKIP();
7967 } else {
7968 /* Variation */
7969 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
7970 szFuncName);
7971 rc = dm_init_attrloc(INVALID_ADDR, hanp, hlen,
7972 DM_NO_TOKEN, &loc);
7973 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
7974
7975 /* Variation clean up */
7976 rc = remove(DUMMY_SUBDIR_FILE);
7977 rc |= rmdir(DUMMY_SUBDIR);
7978 if (rc == -1) {
7979 DMLOG_PRINT(DMLVL_DEBUG,
7980 "Unable to clean up variation! (errno = %d)\n",
7981 errno);
7982 }
7983 dm_handle_free(hanp, hlen);
7984 }
7985 }
7986
7987 /*
7988 * TEST : dm_init_attrloc - invalid hanp
7989 * EXPECTED: rc = -1, errno = EFAULT
7990 */
7991 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 2)) {
7992 void *hanp;
7993 size_t hlen;
7994 dm_attrloc_t loc;
7995
7996 /* Variation set up */
7997 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
7998 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
7999 /* No clean up */
8000 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8001 == -1) {
8002 rmdir(DUMMY_SUBDIR);
8003 } else if ((rc = system(command)) == -1) {
8004 dm_handle_free(hanp, hlen);
8005 rmdir(DUMMY_SUBDIR);
8006 }
8007 if (rc == -1) {
8008 DMLOG_PRINT(DMLVL_DEBUG,
8009 "Unable to set up variation! (errno = %d)\n",
8010 errno);
8011 DMVAR_SKIP();
8012 } else {
8013 /* Variation */
8014 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
8015 szFuncName);
8016 rc = dm_init_attrloc(sid, (void *)INVALID_ADDR, hlen,
8017 DM_NO_TOKEN, &loc);
8018 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
8019
8020 /* Variation clean up */
8021 rc = remove(DUMMY_SUBDIR_FILE);
8022 rc |= rmdir(DUMMY_SUBDIR);
8023 if (rc == -1) {
8024 DMLOG_PRINT(DMLVL_DEBUG,
8025 "Unable to clean up variation! (errno = %d)\n",
8026 errno);
8027 }
8028 dm_handle_free(hanp, hlen);
8029 }
8030 }
8031
8032 /*
8033 * TEST : dm_init_attrloc - invalid hlen
8034 * EXPECTED: rc = -1, errno = EBADF
8035 */
8036 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 3)) {
8037 void *hanp;
8038 size_t hlen;
8039 dm_attrloc_t loc;
8040
8041 /* Variation set up */
8042 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8043 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8044 /* No clean up */
8045 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8046 == -1) {
8047 rmdir(DUMMY_SUBDIR);
8048 } else if ((rc = system(command)) == -1) {
8049 dm_handle_free(hanp, hlen);
8050 rmdir(DUMMY_SUBDIR);
8051 }
8052 if (rc == -1) {
8053 DMLOG_PRINT(DMLVL_DEBUG,
8054 "Unable to set up variation! (errno = %d)\n",
8055 errno);
8056 DMVAR_SKIP();
8057 } else {
8058 /* Variation */
8059 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
8060 szFuncName);
8061 rc = dm_init_attrloc(sid, hanp, INVALID_ADDR,
8062 DM_NO_TOKEN, &loc);
8063 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
8064
8065 /* Variation clean up */
8066 rc = remove(DUMMY_SUBDIR_FILE);
8067 rc |= rmdir(DUMMY_SUBDIR);
8068 if (rc == -1) {
8069 DMLOG_PRINT(DMLVL_DEBUG,
8070 "Unable to clean up variation! (errno = %d)\n",
8071 errno);
8072 }
8073 dm_handle_free(hanp, hlen);
8074 }
8075 }
8076
8077 /*
8078 * TEST : dm_init_attrloc - invalid token
8079 * EXPECTED: rc = -1, errno = EINVAL
8080 */
8081 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 4)) {
8082 void *hanp;
8083 size_t hlen;
8084 dm_attrloc_t loc;
8085
8086 /* Variation set up */
8087 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8088 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8089 /* No clean up */
8090 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8091 == -1) {
8092 rmdir(DUMMY_SUBDIR);
8093 } else if ((rc = system(command)) == -1) {
8094 dm_handle_free(hanp, hlen);
8095 rmdir(DUMMY_SUBDIR);
8096 }
8097 if (rc == -1) {
8098 DMLOG_PRINT(DMLVL_DEBUG,
8099 "Unable to set up variation! (errno = %d)\n",
8100 errno);
8101 DMVAR_SKIP();
8102 } else {
8103 /* Variation */
8104 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
8105 szFuncName);
8106 rc = dm_init_attrloc(sid, hanp, hlen, INVALID_ADDR,
8107 &loc);
8108 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
8109
8110 /* Variation clean up */
8111 rc = remove(DUMMY_SUBDIR_FILE);
8112 rc |= rmdir(DUMMY_SUBDIR);
8113 if (rc == -1) {
8114 DMLOG_PRINT(DMLVL_DEBUG,
8115 "Unable to clean up variation! (errno = %d)\n",
8116 errno);
8117 }
8118 dm_handle_free(hanp, hlen);
8119 }
8120 }
8121
8122 /*
8123 * TEST : dm_init_attrloc - invalid locp
8124 * EXPECTED: rc = -1, errno = EFAULT
8125 */
8126 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 5)) {
8127 void *hanp;
8128 size_t hlen;
8129
8130 /* Variation set up */
8131 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8132 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8133 /* No clean up */
8134 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8135 == -1) {
8136 rmdir(DUMMY_SUBDIR);
8137 } else if ((rc = system(command)) == -1) {
8138 dm_handle_free(hanp, hlen);
8139 rmdir(DUMMY_SUBDIR);
8140 }
8141 if (rc == -1) {
8142 DMLOG_PRINT(DMLVL_DEBUG,
8143 "Unable to set up variation! (errno = %d)\n",
8144 errno);
8145 DMVAR_SKIP();
8146 } else {
8147 /* Variation */
8148 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid locp)\n",
8149 szFuncName);
8150 rc = dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8151 (dm_attrloc_t *) INVALID_ADDR);
8152 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
8153
8154 /* Variation clean up */
8155 rc = remove(DUMMY_SUBDIR_FILE);
8156 rc |= rmdir(DUMMY_SUBDIR);
8157 if (rc == -1) {
8158 DMLOG_PRINT(DMLVL_DEBUG,
8159 "Unable to clean up variation! (errno = %d)\n",
8160 errno);
8161 }
8162 dm_handle_free(hanp, hlen);
8163 }
8164 }
8165
8166 /*
8167 * TEST : dm_init_attrloc - file handle
8168 * EXPECTED: rc = -1, errno = EINVAL
8169 */
8170 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 6)) {
8171 void *hanp;
8172 size_t hlen;
8173 dm_attrloc_t loc;
8174
8175 /* Variation set up */
8176 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
8177 if ((rc = system(command)) == -1) {
8178 /* No clean up */
8179 } else if ((rc = dm_path_to_handle(DUMMY_FILE, &hanp, &hlen)) ==
8180 -1) {
8181 remove(DUMMY_FILE);
8182 }
8183 if (rc == -1) {
8184 DMLOG_PRINT(DMLVL_DEBUG,
8185 "Unable to set up variation! (errno = %d)\n",
8186 errno);
8187 DMVAR_SKIP();
8188 } else {
8189 /* Variation */
8190 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n",
8191 szFuncName);
8192 rc = dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8193 &loc);
8194 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
8195
8196 /* Variation clean up */
8197 rc = remove(DUMMY_FILE);
8198 if (rc == -1) {
8199 DMLOG_PRINT(DMLVL_DEBUG,
8200 "Unable to clean up variation! (errno = %d)\n",
8201 errno);
8202 }
8203 dm_handle_free(hanp, hlen);
8204 }
8205 }
8206
8207 /*
8208 * TEST : dm_init_attrloc - directory handle
8209 * EXPECTED: rc = 0
8210 */
8211 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 7)) {
8212 void *hanp;
8213 size_t hlen;
8214 dm_attrloc_t loc;
8215
8216 /* Variation set up */
8217 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8218 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8219 /* No clean up */
8220 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8221 == -1) {
8222 rmdir(DUMMY_SUBDIR);
8223 } else if ((rc = system(command)) == -1) {
8224 dm_handle_free(hanp, hlen);
8225 rmdir(DUMMY_SUBDIR);
8226 }
8227 if (rc == -1) {
8228 DMLOG_PRINT(DMLVL_DEBUG,
8229 "Unable to set up variation! (errno = %d)\n",
8230 errno);
8231 DMVAR_SKIP();
8232 } else {
8233 /* Variation */
8234 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir handle)\n",
8235 szFuncName);
8236 rc = dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8237 &loc);
8238 if (rc == 0) {
8239 DMLOG_PRINT(DMLVL_DEBUG, "loc = %lld\n", loc);
8240 }
8241 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
8242
8243 /* Variation clean up */
8244 rc = remove(DUMMY_SUBDIR_FILE);
8245 rc |= rmdir(DUMMY_SUBDIR);
8246 if (rc == -1) {
8247 DMLOG_PRINT(DMLVL_DEBUG,
8248 "Unable to clean up variation! (errno = %d)\n",
8249 errno);
8250 }
8251 dm_handle_free(hanp, hlen);
8252 }
8253 }
8254
8255 /*
8256 * TEST : dm_init_attrloc - fs handle
8257 * EXPECTED: rc = 0
8258 */
8259 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 8)) {
8260 void *hanp;
8261 size_t hlen;
8262 dm_attrloc_t loc;
8263
8264 /* Variation set up */
8265 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8266 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8267 /* No clean up */
8268 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8269 == -1) {
8270 rmdir(DUMMY_SUBDIR);
8271 } else if ((rc = system(command)) == -1) {
8272 dm_handle_free(hanp, hlen);
8273 rmdir(DUMMY_SUBDIR);
8274 }
8275 if (rc == -1) {
8276 DMLOG_PRINT(DMLVL_DEBUG,
8277 "Unable to set up variation! (errno = %d)\n",
8278 errno);
8279 DMVAR_SKIP();
8280 } else {
8281 /* Variation */
8282 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
8283 rc = dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8284 &loc);
8285 if (rc == 0) {
8286 DMLOG_PRINT(DMLVL_DEBUG, "loc = %lld\n", loc);
8287 }
8288 DMVAR_ENDPASSEXP(szFuncName, 0, rc);
8289
8290 /* Variation clean up */
8291 rc = remove(DUMMY_SUBDIR_FILE);
8292 rc |= rmdir(DUMMY_SUBDIR);
8293 if (rc == -1) {
8294 DMLOG_PRINT(DMLVL_DEBUG,
8295 "Unable to clean up variation! (errno = %d)\n",
8296 errno);
8297 }
8298 dm_handle_free(hanp, hlen);
8299 }
8300 }
8301
8302 /*
8303 * TEST : dm_init_attrloc - DM_NO_SESSION sid
8304 * EXPECTED: rc = -1, errno = EINVAL
8305 */
8306 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 9)) {
8307 void *hanp;
8308 size_t hlen;
8309 dm_attrloc_t loc;
8310
8311 /* Variation set up */
8312 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8313 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8314 /* No clean up */
8315 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8316 == -1) {
8317 rmdir(DUMMY_SUBDIR);
8318 } else if ((rc = system(command)) == -1) {
8319 dm_handle_free(hanp, hlen);
8320 rmdir(DUMMY_SUBDIR);
8321 }
8322 if (rc == -1) {
8323 DMLOG_PRINT(DMLVL_DEBUG,
8324 "Unable to set up variation! (errno = %d)\n",
8325 errno);
8326 DMVAR_SKIP();
8327 } else {
8328 /* Variation */
8329 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
8330 szFuncName);
8331 rc = dm_init_attrloc(DM_NO_SESSION, hanp, hlen,
8332 DM_NO_TOKEN, &loc);
8333 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
8334
8335 /* Variation clean up */
8336 rc = remove(DUMMY_SUBDIR_FILE);
8337 rc |= rmdir(DUMMY_SUBDIR);
8338 if (rc == -1) {
8339 DMLOG_PRINT(DMLVL_DEBUG,
8340 "Unable to clean up variation! (errno = %d)\n",
8341 errno);
8342 }
8343 dm_handle_free(hanp, hlen);
8344 }
8345 }
8346
8347 /*
8348 * TEST : dm_init_attrloc - global handle
8349 * EXPECTED: rc = -1, errno = EBADF
8350 */
8351 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 10)) {
8352 dm_attrloc_t loc;
8353
8354 /* Variation set up */
8355
8356 /* Variation */
8357 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
8358 rc = dm_init_attrloc(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
8359 DM_NO_TOKEN, &loc);
8360 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
8361
8362 /* Variation clean up */
8363 }
8364
8365 /*
8366 * TEST : dm_init_attrloc - invalidated hanp
8367 * EXPECTED: rc = -1, errno = EBADF
8368 */
8369 if (DMVAR_EXEC(INIT_ATTRLOC_BASE + 11)) {
8370 void *hanp;
8371 size_t hlen;
8372 dm_attrloc_t loc;
8373
8374 /* Variation set up */
8375 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8376 /* No clean up */
8377 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8378 == -1) {
8379 rmdir(DUMMY_SUBDIR);
8380 } else if ((rmdir(DUMMY_SUBDIR)) == -1) {
8381 dm_handle_free(hanp, hlen);
8382 }
8383 if (rc == -1) {
8384 DMLOG_PRINT(DMLVL_DEBUG,
8385 "Unable to set up variation! (errno = %d)\n",
8386 errno);
8387 DMVAR_SKIP();
8388 } else {
8389 /* Variation */
8390 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated hanp)\n",
8391 szFuncName);
8392 rc = dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8393 &loc);
8394 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
8395
8396 /* Variation clean up */
8397 dm_handle_free(hanp, hlen);
8398 }
8399 }
8400
8401 szFuncName = "dm_get_dirattrs";
8402
8403 /*
8404 * TEST : dm_get_dirattrs - invalid sid
8405 * EXPECTED: rc = -1, errno = EINVAL
8406 */
8407 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 1)) {
8408 void *hanp;
8409 size_t hlen;
8410 dm_attrloc_t loc;
8411 char buf[ATTR_LISTLEN];
8412 size_t rlen;
8413
8414 /* Variation set up */
8415 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8416 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8417 /* No clean up */
8418 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8419 == -1) {
8420 rmdir(DUMMY_SUBDIR);
8421 } else
8422 if (((rc =
8423 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8424 &loc)) == -1)
8425 || ((rc = system(command)) == -1)) {
8426 dm_handle_free(hanp, hlen);
8427 rmdir(DUMMY_SUBDIR);
8428 }
8429 if (rc == -1) {
8430 DMLOG_PRINT(DMLVL_DEBUG,
8431 "Unable to set up variation! (errno = %d)\n",
8432 errno);
8433 DMVAR_SKIP();
8434 } else {
8435 /* Variation */
8436 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
8437 szFuncName);
8438 rc = dm_get_dirattrs(INVALID_ADDR, hanp, hlen,
8439 DM_NO_TOKEN, DM_AT_EMASK, &loc,
8440 sizeof(buf), buf, &rlen);
8441 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
8442
8443 /* Variation clean up */
8444 rc = remove(DUMMY_SUBDIR_FILE);
8445 rc |= rmdir(DUMMY_SUBDIR);
8446 if (rc == -1) {
8447 DMLOG_PRINT(DMLVL_DEBUG,
8448 "Unable to clean up variation! (errno = %d)\n",
8449 errno);
8450 }
8451 dm_handle_free(hanp, hlen);
8452 }
8453 }
8454
8455 /*
8456 * TEST : dm_get_dirattrs - invalid hanp
8457 * EXPECTED: rc = -1, errno = EFAULT
8458 */
8459 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 2)) {
8460 void *hanp;
8461 size_t hlen;
8462 dm_attrloc_t loc;
8463 char buf[ATTR_LISTLEN];
8464 size_t rlen;
8465
8466 /* Variation set up */
8467 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8468 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8469 /* No clean up */
8470 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8471 == -1) {
8472 rmdir(DUMMY_SUBDIR);
8473 } else
8474 if (((rc =
8475 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8476 &loc)) == -1)
8477 || ((rc = system(command)) == -1)) {
8478 dm_handle_free(hanp, hlen);
8479 rmdir(DUMMY_SUBDIR);
8480 }
8481 if (rc == -1) {
8482 DMLOG_PRINT(DMLVL_DEBUG,
8483 "Unable to set up variation! (errno = %d)\n",
8484 errno);
8485 DMVAR_SKIP();
8486 } else {
8487 /* Variation */
8488 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
8489 szFuncName);
8490 rc = dm_get_dirattrs(sid, (void *)INVALID_ADDR, hlen,
8491 DM_NO_TOKEN, DM_AT_EMASK, &loc,
8492 sizeof(buf), buf, &rlen);
8493 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
8494
8495 /* Variation clean up */
8496 rc = remove(DUMMY_SUBDIR_FILE);
8497 rc |= rmdir(DUMMY_SUBDIR);
8498 if (rc == -1) {
8499 DMLOG_PRINT(DMLVL_DEBUG,
8500 "Unable to clean up variation! (errno = %d)\n",
8501 errno);
8502 }
8503 dm_handle_free(hanp, hlen);
8504 }
8505 }
8506
8507 /*
8508 * TEST : dm_get_dirattrs - invalid hlen
8509 * EXPECTED: rc = -1, errno = EINVAL
8510 */
8511 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 3)) {
8512 void *hanp;
8513 size_t hlen;
8514 dm_attrloc_t loc;
8515 char buf[ATTR_LISTLEN];
8516 size_t rlen;
8517
8518 /* Variation set up */
8519 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8520 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8521 /* No clean up */
8522 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8523 == -1) {
8524 rmdir(DUMMY_SUBDIR);
8525 } else
8526 if (((rc =
8527 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8528 &loc)) == -1)
8529 || ((rc = system(command)) == -1)) {
8530 dm_handle_free(hanp, hlen);
8531 rmdir(DUMMY_SUBDIR);
8532 }
8533 if (rc == -1) {
8534 DMLOG_PRINT(DMLVL_DEBUG,
8535 "Unable to set up variation! (errno = %d)\n",
8536 errno);
8537 DMVAR_SKIP();
8538 } else {
8539 /* Variation */
8540 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
8541 szFuncName);
8542 rc = dm_get_dirattrs(sid, hanp, INVALID_ADDR,
8543 DM_NO_TOKEN, DM_AT_EMASK, &loc,
8544 sizeof(buf), buf, &rlen);
8545 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
8546
8547 /* Variation clean up */
8548 rc = remove(DUMMY_SUBDIR_FILE);
8549 rc |= rmdir(DUMMY_SUBDIR);
8550 if (rc == -1) {
8551 DMLOG_PRINT(DMLVL_DEBUG,
8552 "Unable to clean up variation! (errno = %d)\n",
8553 errno);
8554 }
8555 dm_handle_free(hanp, hlen);
8556 }
8557 }
8558
8559 /*
8560 * TEST : dm_get_dirattrs - invalid token
8561 * EXPECTED: rc = -1, errno = EINVAL
8562 */
8563 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 4)) {
8564 void *hanp;
8565 size_t hlen;
8566 dm_attrloc_t loc;
8567 char buf[ATTR_LISTLEN];
8568 size_t rlen;
8569
8570 /* Variation set up */
8571 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8572 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8573 /* No clean up */
8574 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8575 == -1) {
8576 rmdir(DUMMY_SUBDIR);
8577 } else
8578 if (((rc =
8579 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8580 &loc)) == -1)
8581 || ((rc = system(command)) == -1)) {
8582 dm_handle_free(hanp, hlen);
8583 rmdir(DUMMY_SUBDIR);
8584 }
8585 if (rc == -1) {
8586 DMLOG_PRINT(DMLVL_DEBUG,
8587 "Unable to set up variation! (errno = %d)\n",
8588 errno);
8589 DMVAR_SKIP();
8590 } else {
8591 /* Variation */
8592 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
8593 szFuncName);
8594 rc = dm_get_dirattrs(sid, hanp, hlen, INVALID_ADDR,
8595 DM_AT_EMASK, &loc, sizeof(buf),
8596 buf, &rlen);
8597 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
8598
8599 /* Variation clean up */
8600 rc = remove(DUMMY_SUBDIR_FILE);
8601 rc |= rmdir(DUMMY_SUBDIR);
8602 if (rc == -1) {
8603 DMLOG_PRINT(DMLVL_DEBUG,
8604 "Unable to clean up variation! (errno = %d)\n",
8605 errno);
8606 }
8607 dm_handle_free(hanp, hlen);
8608 }
8609 }
8610
8611 /*
8612 * TEST : dm_get_dirattrs - invalid mask
8613 * EXPECTED: rc = -1, errno = EINVAL
8614 *
8615 * This variation uncovered XFS BUG #24 (0 returned instead of -1 and
8616 * EINVAL errno)
8617 */
8618 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 5)) {
8619 void *hanp;
8620 size_t hlen;
8621 dm_attrloc_t loc;
8622 char buf[ATTR_LISTLEN];
8623 size_t rlen;
8624
8625 /* Variation set up */
8626 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8627 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8628 /* No clean up */
8629 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8630 == -1) {
8631 rmdir(DUMMY_SUBDIR);
8632 } else
8633 if (((rc =
8634 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8635 &loc)) == -1)
8636 || ((rc = system(command)) == -1)) {
8637 dm_handle_free(hanp, hlen);
8638 rmdir(DUMMY_SUBDIR);
8639 }
8640 if (rc == -1) {
8641 DMLOG_PRINT(DMLVL_DEBUG,
8642 "Unable to set up variation! (errno = %d)\n",
8643 errno);
8644 DMVAR_SKIP();
8645 } else {
8646 /* Variation */
8647 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid mask)\n",
8648 szFuncName);
8649 rc = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN,
8650 DM_AT_SIZE, &loc, sizeof(buf), buf,
8651 &rlen);
8652 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
8653
8654 /* Variation clean up */
8655 rc = remove(DUMMY_SUBDIR_FILE);
8656 rc |= rmdir(DUMMY_SUBDIR);
8657 if (rc == -1) {
8658 DMLOG_PRINT(DMLVL_DEBUG,
8659 "Unable to clean up variation! (errno = %d)\n",
8660 errno);
8661 }
8662 dm_handle_free(hanp, hlen);
8663 }
8664 }
8665
8666 /*
8667 * TEST : dm_get_dirattrs - invalid locp
8668 * EXPECTED: rc = -1, errno = EFAULT
8669 */
8670 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 6)) {
8671 void *hanp;
8672 size_t hlen;
8673 char buf[ATTR_LISTLEN];
8674 size_t rlen;
8675
8676 /* Variation set up */
8677 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8678 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8679 /* No clean up */
8680 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8681 == -1) {
8682 rmdir(DUMMY_SUBDIR);
8683 } else if ((rc = system(command)) == -1) {
8684 dm_handle_free(hanp, hlen);
8685 rmdir(DUMMY_SUBDIR);
8686 }
8687 if (rc == -1) {
8688 DMLOG_PRINT(DMLVL_DEBUG,
8689 "Unable to set up variation! (errno = %d)\n",
8690 errno);
8691 DMVAR_SKIP();
8692 } else {
8693 /* Variation */
8694 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid locp)\n",
8695 szFuncName);
8696 rc = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN,
8697 DM_AT_EMASK,
8698 (dm_attrloc_t *) INVALID_ADDR,
8699 sizeof(buf), buf, &rlen);
8700 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
8701
8702 /* Variation clean up */
8703 rc = remove(DUMMY_SUBDIR_FILE);
8704 rc |= rmdir(DUMMY_SUBDIR);
8705 if (rc == -1) {
8706 DMLOG_PRINT(DMLVL_DEBUG,
8707 "Unable to clean up variation! (errno = %d)\n",
8708 errno);
8709 }
8710 dm_handle_free(hanp, hlen);
8711 }
8712 }
8713
8714 /*
8715 * TEST : dm_get_dirattrs - invalid loc
8716 * EXPECTED: rc = -1, errno = EINVAL
8717 */
8718 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 7)) {
8719 void *hanp;
8720 size_t hlen;
8721 dm_attrloc_t loc;
8722 char buf[ATTR_LISTLEN];
8723 size_t rlen;
8724
8725 /* Variation set up */
8726 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8727 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8728 /* No clean up */
8729 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8730 == -1) {
8731 rmdir(DUMMY_SUBDIR);
8732 } else
8733 if (((rc =
8734 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8735 &loc)) == -1)
8736 || ((rc = system(command)) == -1)) {
8737 dm_handle_free(hanp, hlen);
8738 rmdir(DUMMY_SUBDIR);
8739 }
8740 if (rc == -1) {
8741 DMLOG_PRINT(DMLVL_DEBUG,
8742 "Unable to set up variation! (errno = %d)\n",
8743 errno);
8744 DMVAR_SKIP();
8745 } else {
8746 /* Variation */
8747 loc = INVALID_ADDR;
8748 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid loc)\n",
8749 szFuncName);
8750 rc = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN,
8751 DM_AT_EMASK, &loc, sizeof(buf),
8752 buf, &rlen);
8753 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
8754
8755 /* Variation clean up */
8756 rc = remove(DUMMY_SUBDIR_FILE);
8757 rc |= rmdir(DUMMY_SUBDIR);
8758 if (rc == -1) {
8759 DMLOG_PRINT(DMLVL_DEBUG,
8760 "Unable to clean up variation! (errno = %d)\n",
8761 errno);
8762 }
8763 dm_handle_free(hanp, hlen);
8764 }
8765 }
8766
8767 /*
8768 * TEST : dm_get_dirattrs - invalid buflen
8769 * EXPECTED: rc = 1
8770 *
8771 * This variation uncovered XFS BUG #26 (-1 and E2BIG errno returned
8772 * instead of 1)
8773 */
8774 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 8)) {
8775 void *hanp;
8776 size_t hlen;
8777 dm_attrloc_t loc;
8778 char buf[ATTR_LISTLEN];
8779 size_t rlen;
8780
8781 /* Variation set up */
8782 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8783 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8784 /* No clean up */
8785 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8786 == -1) {
8787 rmdir(DUMMY_SUBDIR);
8788 } else
8789 if (((rc =
8790 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8791 &loc)) == -1)
8792 || ((rc = system(command)) == -1)) {
8793 dm_handle_free(hanp, hlen);
8794 rmdir(DUMMY_SUBDIR);
8795 }
8796 if (rc == -1) {
8797 DMLOG_PRINT(DMLVL_DEBUG,
8798 "Unable to set up variation! (errno = %d)\n",
8799 errno);
8800 DMVAR_SKIP();
8801 } else {
8802 /* Variation */
8803 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid buflen)\n",
8804 szFuncName);
8805 rc = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN,
8806 DM_AT_EMASK, &loc, 0, buf, &rlen);
8807 DMLOG_PRINT(DMLVL_DEBUG,
8808 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
8809 rlen);
8810 DMVAR_ENDPASSEXP(szFuncName, 1, rc);
8811
8812 /* Variation clean up */
8813 rc = remove(DUMMY_SUBDIR_FILE);
8814 rc |= rmdir(DUMMY_SUBDIR);
8815 if (rc == -1) {
8816 DMLOG_PRINT(DMLVL_DEBUG,
8817 "Unable to clean up variation! (errno = %d)\n",
8818 errno);
8819 }
8820 dm_handle_free(hanp, hlen);
8821 }
8822 }
8823
8824 /*
8825 * TEST : dm_get_dirattrs - invalid bufp
8826 * EXPECTED: rc = -1, errno = EFAULT
8827 */
8828 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 9)) {
8829 void *hanp;
8830 size_t hlen;
8831 dm_attrloc_t loc;
8832 char buf[ATTR_LISTLEN];
8833 size_t rlen;
8834
8835 /* Variation set up */
8836 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8837 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8838 /* No clean up */
8839 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8840 == -1) {
8841 rmdir(DUMMY_SUBDIR);
8842 } else
8843 if (((rc =
8844 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8845 &loc)) == -1)
8846 || ((rc = system(command)) == -1)) {
8847 dm_handle_free(hanp, hlen);
8848 rmdir(DUMMY_SUBDIR);
8849 }
8850 if (rc == -1) {
8851 DMLOG_PRINT(DMLVL_DEBUG,
8852 "Unable to set up variation! (errno = %d)\n",
8853 errno);
8854 DMVAR_SKIP();
8855 } else {
8856 /* Variation */
8857 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid bufp)\n",
8858 szFuncName);
8859 rc = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN,
8860 DM_AT_EMASK, &loc, sizeof(buf),
8861 (void *)INVALID_ADDR, &rlen);
8862 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
8863
8864 /* Variation clean up */
8865 rc = remove(DUMMY_SUBDIR_FILE);
8866 rc |= rmdir(DUMMY_SUBDIR);
8867 if (rc == -1) {
8868 DMLOG_PRINT(DMLVL_DEBUG,
8869 "Unable to clean up variation! (errno = %d)\n",
8870 errno);
8871 }
8872 dm_handle_free(hanp, hlen);
8873 }
8874 }
8875
8876 /*
8877 * TEST : dm_get_dirattrs - invalid rlenp
8878 * EXPECTED: rc = -1, errno = EFAULT
8879 */
8880 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 10)) {
8881 void *hanp;
8882 size_t hlen;
8883 dm_attrloc_t loc;
8884 char buf[ATTR_LISTLEN];
8885
8886 /* Variation set up */
8887 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8888 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8889 /* No clean up */
8890 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
8891 == -1) {
8892 rmdir(DUMMY_SUBDIR);
8893 } else
8894 if (((rc =
8895 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
8896 &loc)) == -1)
8897 || ((rc = system(command)) == -1)) {
8898 dm_handle_free(hanp, hlen);
8899 rmdir(DUMMY_SUBDIR);
8900 }
8901 if (rc == -1) {
8902 DMLOG_PRINT(DMLVL_DEBUG,
8903 "Unable to set up variation! (errno = %d)\n",
8904 errno);
8905 DMVAR_SKIP();
8906 } else {
8907 /* Variation */
8908 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid rlenp)\n",
8909 szFuncName);
8910 rc = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN,
8911 DM_AT_EMASK, &loc, sizeof(buf),
8912 buf, (size_t *) INVALID_ADDR);
8913 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
8914
8915 /* Variation clean up */
8916 rc = remove(DUMMY_SUBDIR_FILE);
8917 rc |= rmdir(DUMMY_SUBDIR);
8918 if (rc == -1) {
8919 DMLOG_PRINT(DMLVL_DEBUG,
8920 "Unable to clean up variation! (errno = %d)\n",
8921 errno);
8922 }
8923 dm_handle_free(hanp, hlen);
8924 }
8925 }
8926
8927 /*
8928 * TEST : dm_get_dirattrs - file handle
8929 * EXPECTED: rc = -1, errno = EINVAL
8930 */
8931 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 11)) {
8932 void *hanp;
8933 size_t hlen;
8934 dm_attrloc_t loc;
8935 char buf[ATTR_LISTLEN];
8936 size_t rlen;
8937
8938 /* Variation set up */
8939 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
8940 if ((rc = system(command)) == -1) {
8941 /* No clean up */
8942 } else if ((rc = dm_path_to_handle(DUMMY_FILE, &hanp, &hlen)) ==
8943 -1) {
8944 remove(DUMMY_FILE);
8945 }
8946 if (rc == -1) {
8947 DMLOG_PRINT(DMLVL_DEBUG,
8948 "Unable to set up variation! (errno = %d)\n",
8949 errno);
8950 DMVAR_SKIP();
8951 } else {
8952 /* Variation */
8953 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n",
8954 szFuncName);
8955 rc = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN,
8956 DM_AT_EMASK, &loc, sizeof(buf),
8957 buf, &rlen);
8958 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
8959
8960 /* Variation clean up */
8961 rc = remove(DUMMY_FILE);
8962 if (rc == -1) {
8963 DMLOG_PRINT(DMLVL_DEBUG,
8964 "Unable to clean up variation! (errno = %d)\n",
8965 errno);
8966 }
8967 dm_handle_free(hanp, hlen);
8968 }
8969 }
8970
8971 /*
8972 * TEST : dm_get_dirattrs - DM_AT_HANDLE
8973 * EXPECTED: rc = 0
8974 */
8975 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 12)) {
8976 void *dhanp, *fhanp;
8977 size_t dhlen, fhlen;
8978 dm_attrloc_t loc;
8979 char buf[ATTR_LISTLEN];
8980 size_t rlen;
8981
8982 /* Variation set up */
8983 memset(buf, 0, ATTR_LISTLEN);
8984 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
8985 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
8986 /* No clean up */
8987 } else
8988 if ((rc =
8989 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
8990 &dhlen)) == -1) {
8991 rmdir(DUMMY_SUBDIR);
8992 } else if ((rc = system(command)) == -1) {
8993 dm_handle_free(dhanp, dhlen);
8994 rmdir(DUMMY_SUBDIR);
8995 } else
8996 if ((rc =
8997 dm_path_to_handle(DUMMY_SUBDIR_FILE, &fhanp,
8998 &fhlen)) == -1) {
8999 remove(DUMMY_SUBDIR_FILE);
9000 dm_handle_free(dhanp, dhlen);
9001 rmdir(DUMMY_SUBDIR);
9002 } else
9003 if ((rc =
9004 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9005 &loc)) == -1) {
9006 dm_handle_free(fhanp, fhlen);
9007 remove(DUMMY_SUBDIR_FILE);
9008 dm_handle_free(dhanp, dhlen);
9009 rmdir(DUMMY_SUBDIR);
9010 }
9011 if (rc == -1) {
9012 DMLOG_PRINT(DMLVL_DEBUG,
9013 "Unable to set up variation! (errno = %d)\n",
9014 errno);
9015 DMVAR_SKIP();
9016 } else {
9017 /* Variation */
9018 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_AT_HANDLE)\n",
9019 szFuncName);
9020 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9021 DM_AT_HANDLE, &loc, sizeof(buf),
9022 buf, &rlen);
9023 DMLOG_PRINT(DMLVL_DEBUG,
9024 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9025 rlen);
9026 if (rc == 0) {
9027 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
9028 LogDirAttrs(buf, DM_AT_HANDLE);
9029 if (entry != NULL) {
9030 if (dm_handle_cmp
9031 (fhanp, fhlen,
9032 DM_GET_VALUE(entry, dt_handle,
9033 void *),
9034 DM_GET_LEN(entry,
9035 dt_handle)) == 0) {
9036 DMLOG_PRINT(DMLVL_DEBUG,
9037 "%s passed with expected rc = %d\n",
9038 szFuncName, 0);
9039 DMVAR_PASS();
9040 } else {
9041 DMLOG_PRINT(DMLVL_ERR,
9042 "%s failed with expected rc = %d but handles NOT same\n",
9043 szFuncName, 0);
9044 DMVAR_FAIL();
9045 }
9046 } else {
9047 DMLOG_PRINT(DMLVL_ERR,
9048 "%s failed with expected rc = %d but unable to find entry %s",
9049 szFuncName, 0, DUMMY_FILE);
9050 DMVAR_FAIL();
9051 }
9052 } else {
9053 DMLOG_PRINT(DMLVL_ERR,
9054 "%s failed with unexpected rc = %d (errno = %d)\n",
9055 szFuncName, rc, errno);
9056 DMVAR_FAIL();
9057 }
9058
9059 /* Variation clean up */
9060 rc = remove(DUMMY_SUBDIR_FILE);
9061 rc |= rmdir(DUMMY_SUBDIR);
9062 if (rc == -1) {
9063 DMLOG_PRINT(DMLVL_DEBUG,
9064 "Unable to clean up variation! (errno = %d)\n",
9065 errno);
9066 }
9067 dm_handle_free(dhanp, dhlen);
9068 dm_handle_free(fhanp, fhlen);
9069 }
9070 }
9071
9072 /*
9073 * TEST : dm_get_dirattrs - DM_AT_EMASK
9074 * EXPECTED: rc = 0
9075 */
9076 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 13)) {
9077 void *dhanp, *fhanp;
9078 size_t dhlen, fhlen;
9079 dm_attrloc_t loc;
9080 char buf[ATTR_LISTLEN];
9081 size_t rlen;
9082 dm_eventset_t eventset;
9083
9084 /* Variation set up */
9085 memset(buf, 0, ATTR_LISTLEN);
9086 DMEV_ZERO(eventset);
9087 DMEV_SET(DM_EVENT_ATTRIBUTE, eventset);
9088 DMEV_SET(DM_EVENT_CLOSE, eventset);
9089 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
9090 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
9091 /* No clean up */
9092 } else
9093 if ((rc =
9094 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
9095 &dhlen)) == -1) {
9096 rmdir(DUMMY_SUBDIR);
9097 } else if ((rc = system(command)) == -1) {
9098 dm_handle_free(dhanp, dhlen);
9099 rmdir(DUMMY_SUBDIR);
9100 } else
9101 if ((rc =
9102 dm_path_to_handle(DUMMY_SUBDIR_FILE, &fhanp,
9103 &fhlen)) == -1) {
9104 remove(DUMMY_SUBDIR_FILE);
9105 dm_handle_free(dhanp, dhlen);
9106 rmdir(DUMMY_SUBDIR);
9107 } else
9108 if (((rc =
9109 dm_set_eventlist(sid, fhanp, fhlen, DM_NO_TOKEN,
9110 &eventset, DM_EVENT_MAX)) == -1)
9111 ||
9112 ((rc =
9113 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9114 &loc)) == -1)) {
9115 dm_handle_free(fhanp, fhlen);
9116 remove(DUMMY_SUBDIR_FILE);
9117 dm_handle_free(dhanp, dhlen);
9118 rmdir(DUMMY_SUBDIR);
9119 }
9120 if (rc == -1) {
9121 DMLOG_PRINT(DMLVL_DEBUG,
9122 "Unable to set up variation! (errno = %d)\n",
9123 errno);
9124 DMVAR_SKIP();
9125 } else {
9126 /* Variation */
9127 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_AT_EMASK)\n",
9128 szFuncName);
9129 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9130 DM_AT_EMASK, &loc, sizeof(buf),
9131 buf, &rlen);
9132 DMLOG_PRINT(DMLVL_DEBUG,
9133 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9134 rlen);
9135 if (rc == 0) {
9136 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
9137 LogDirAttrs(buf, DM_AT_EMASK);
9138 if (entry != NULL) {
9139 if (eventset == entry->dt_emask) {
9140 DMLOG_PRINT(DMLVL_DEBUG,
9141 "%s passed with expected rc = %d\n",
9142 szFuncName, 0);
9143 DMVAR_PASS();
9144 } else {
9145 DMLOG_PRINT(DMLVL_ERR,
9146 "%s failed with expected rc = %d but emasks NOT same (%llx vs %llx)\n",
9147 szFuncName, 0,
9148 eventset,
9149 entry->dt_emask);
9150 DMVAR_FAIL();
9151 }
9152 } else {
9153 DMLOG_PRINT(DMLVL_ERR,
9154 "%s failed with expected rc = %d but unable to find entry %s",
9155 szFuncName, 0, DUMMY_FILE);
9156 DMVAR_FAIL();
9157 }
9158 } else {
9159 DMLOG_PRINT(DMLVL_ERR,
9160 "%s failed with unexpected rc = %d (errno = %d)\n",
9161 szFuncName, rc, errno);
9162 DMVAR_FAIL();
9163 }
9164
9165 /* Variation clean up */
9166 rc = remove(DUMMY_SUBDIR_FILE);
9167 rc |= rmdir(DUMMY_SUBDIR);
9168 if (rc == -1) {
9169 DMLOG_PRINT(DMLVL_DEBUG,
9170 "Unable to clean up variation! (errno = %d)\n",
9171 errno);
9172 }
9173 dm_handle_free(dhanp, dhlen);
9174 dm_handle_free(fhanp, fhlen);
9175 }
9176 }
9177
9178 /*
9179 * TEST : dm_get_dirattrs - DM_AT_PMANR with region
9180 * EXPECTED: rc = 0
9181 */
9182 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 14)) {
9183 void *dhanp, *fhanp;
9184 size_t dhlen, fhlen;
9185 dm_attrloc_t loc;
9186 char buf[ATTR_LISTLEN];
9187 size_t rlen;
9188 dm_region_t region = { 0, 0, DM_REGION_READ };
9189 dm_boolean_t exactflag;
9190
9191 /* Variation set up */
9192 memset(buf, 0, ATTR_LISTLEN);
9193 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
9194 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
9195 /* No clean up */
9196 } else
9197 if ((rc =
9198 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
9199 &dhlen)) == -1) {
9200 rmdir(DUMMY_SUBDIR);
9201 } else if ((rc = system(command)) == -1) {
9202 dm_handle_free(dhanp, dhlen);
9203 rmdir(DUMMY_SUBDIR);
9204 } else
9205 if ((rc =
9206 dm_path_to_handle(DUMMY_SUBDIR_FILE, &fhanp,
9207 &fhlen)) == -1) {
9208 remove(DUMMY_SUBDIR_FILE);
9209 dm_handle_free(dhanp, dhlen);
9210 rmdir(DUMMY_SUBDIR);
9211 } else
9212 if (((rc =
9213 dm_set_region(sid, fhanp, fhlen, DM_NO_TOKEN, 1,
9214 ®ion, &exactflag)) == -1)
9215 ||
9216 ((rc =
9217 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9218 &loc)) == -1)) {
9219 dm_handle_free(fhanp, fhlen);
9220 remove(DUMMY_SUBDIR_FILE);
9221 dm_handle_free(dhanp, dhlen);
9222 rmdir(DUMMY_SUBDIR);
9223 }
9224 if (rc == -1) {
9225 DMLOG_PRINT(DMLVL_DEBUG,
9226 "Unable to set up variation! (errno = %d)\n",
9227 errno);
9228 DMVAR_SKIP();
9229 } else {
9230 /* Variation */
9231 DMLOG_PRINT(DMLVL_DEBUG,
9232 "%s(DM_AT_PMANR with region)\n",
9233 szFuncName);
9234 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9235 DM_AT_PMANR, &loc, sizeof(buf),
9236 buf, &rlen);
9237 DMLOG_PRINT(DMLVL_DEBUG,
9238 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9239 rlen);
9240 if (rc == 0) {
9241 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
9242 LogDirAttrs(buf, DM_AT_PMANR);
9243 if (entry != NULL) {
9244 if (entry->dt_pmanreg == DM_TRUE) {
9245 DMLOG_PRINT(DMLVL_DEBUG,
9246 "%s passed with expected rc = %d\n",
9247 szFuncName, 0);
9248 DMVAR_PASS();
9249 } else {
9250 DMLOG_PRINT(DMLVL_ERR,
9251 "%s failed with expected rc = %d but pmanreg NOT same (%d vs %d)\n",
9252 szFuncName, 0,
9253 entry->dt_pmanreg,
9254 DM_TRUE);
9255 DMVAR_FAIL();
9256 }
9257 } else {
9258 DMLOG_PRINT(DMLVL_ERR,
9259 "%s failed with expected rc = %d but unable to find entry %s",
9260 szFuncName, 0, DUMMY_FILE);
9261 DMVAR_FAIL();
9262 }
9263 } else {
9264 DMLOG_PRINT(DMLVL_ERR,
9265 "%s failed with unexpected rc = %d (errno = %d)\n",
9266 szFuncName, rc, errno);
9267 DMVAR_FAIL();
9268 }
9269
9270 /* Variation clean up */
9271 rc = remove(DUMMY_SUBDIR_FILE);
9272 rc |= rmdir(DUMMY_SUBDIR);
9273 if (rc == -1) {
9274 DMLOG_PRINT(DMLVL_DEBUG,
9275 "Unable to clean up variation! (errno = %d)\n",
9276 errno);
9277 }
9278 dm_handle_free(dhanp, dhlen);
9279 dm_handle_free(fhanp, fhlen);
9280 }
9281 }
9282
9283 /*
9284 * TEST : dm_get_dirattrs - DM_AT_PMANR without region
9285 * EXPECTED: rc = 0
9286 */
9287 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 15)) {
9288 void *dhanp;
9289 size_t dhlen;
9290 dm_attrloc_t loc;
9291 char buf[ATTR_LISTLEN];
9292 size_t rlen;
9293
9294 /* Variation set up */
9295 memset(buf, 0, ATTR_LISTLEN);
9296 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
9297 rc |= dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN, &loc);
9298 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
9299 /* No clean up */
9300 } else
9301 if ((rc =
9302 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
9303 &dhlen)) == -1) {
9304 rmdir(DUMMY_SUBDIR);
9305 } else if ((rc = system(command)) == -1) {
9306 dm_handle_free(dhanp, dhlen);
9307 rmdir(DUMMY_SUBDIR);
9308 } else
9309 if ((rc =
9310 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9311 &loc)) == -1) {
9312 remove(DUMMY_SUBDIR_FILE);
9313 dm_handle_free(dhanp, dhlen);
9314 rmdir(DUMMY_SUBDIR);
9315 }
9316 if (rc == -1) {
9317 DMLOG_PRINT(DMLVL_DEBUG,
9318 "Unable to set up variation! (errno = %d)\n",
9319 errno);
9320 DMVAR_SKIP();
9321 } else {
9322 /* Variation */
9323 DMLOG_PRINT(DMLVL_DEBUG,
9324 "%s(DM_AT_PMANR without region)\n",
9325 szFuncName);
9326 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9327 DM_AT_PMANR, &loc, sizeof(buf),
9328 buf, &rlen);
9329 DMLOG_PRINT(DMLVL_DEBUG,
9330 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9331 rlen);
9332 if (rc == 0) {
9333 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
9334 LogDirAttrs(buf, DM_AT_PMANR);
9335 if (entry != NULL) {
9336 if (entry->dt_pmanreg == DM_FALSE) {
9337 DMLOG_PRINT(DMLVL_DEBUG,
9338 "%s passed with expected rc = %d\n",
9339 szFuncName, 0);
9340 DMVAR_PASS();
9341 } else {
9342 DMLOG_PRINT(DMLVL_ERR,
9343 "%s failed with expected rc = %d but pmanreg NOT same (%d vs %d)\n",
9344 szFuncName, 0,
9345 entry->dt_pmanreg,
9346 DM_FALSE);
9347 DMVAR_FAIL();
9348 }
9349 } else {
9350 DMLOG_PRINT(DMLVL_ERR,
9351 "%s failed with expected rc = %d but unable to find entry %s",
9352 szFuncName, 0, DUMMY_FILE);
9353 DMVAR_FAIL();
9354 }
9355 } else {
9356 DMLOG_PRINT(DMLVL_ERR,
9357 "%s failed with unexpected rc = %d (errno = %d)\n",
9358 szFuncName, rc, errno);
9359 DMVAR_FAIL();
9360 }
9361
9362 /* Variation clean up */
9363 rc = remove(DUMMY_SUBDIR_FILE);
9364 rc |= rmdir(DUMMY_SUBDIR);
9365 if (rc == -1) {
9366 DMLOG_PRINT(DMLVL_DEBUG,
9367 "Unable to clean up variation! (errno = %d)\n",
9368 errno);
9369 }
9370 dm_handle_free(dhanp, dhlen);
9371 }
9372 }
9373
9374 /*
9375 * TEST : dm_get_dirattrs - DM_AT_PATTR with DM attribute
9376 * EXPECTED: rc = 0
9377 */
9378 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 16)) {
9379 void *dhanp, *fhanp;
9380 size_t dhlen, fhlen;
9381 dm_attrloc_t loc;
9382 char buf[ATTR_LISTLEN];
9383 size_t rlen;
9384 dm_attrname_t attrname;
9385 char attrbuf[ATTR_VALUELEN];
9386
9387 /* Variation set up */
9388 memset(buf, 0, ATTR_LISTLEN);
9389 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
9390 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
9391 memcpy(attrbuf, ATTR_VALUE, ATTR_VALUELEN);
9392 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
9393 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
9394 /* No clean up */
9395 } else
9396 if ((rc =
9397 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
9398 &dhlen)) == -1) {
9399 rmdir(DUMMY_SUBDIR);
9400 } else if ((rc = system(command)) == -1) {
9401 dm_handle_free(dhanp, dhlen);
9402 rmdir(DUMMY_SUBDIR);
9403 } else
9404 if ((rc =
9405 dm_path_to_handle(DUMMY_SUBDIR_FILE, &fhanp,
9406 &fhlen)) == -1) {
9407 remove(DUMMY_SUBDIR_FILE);
9408 dm_handle_free(dhanp, dhlen);
9409 rmdir(DUMMY_SUBDIR);
9410 } else
9411 if (((rc =
9412 dm_set_dmattr(sid, fhanp, fhlen, DM_NO_TOKEN,
9413 &attrname, 0, sizeof(attrbuf),
9414 attrbuf)) == -1)
9415 ||
9416 ((rc =
9417 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9418 &loc)) == -1)) {
9419 dm_handle_free(fhanp, fhlen);
9420 remove(DUMMY_SUBDIR_FILE);
9421 dm_handle_free(dhanp, dhlen);
9422 rmdir(DUMMY_SUBDIR);
9423 }
9424 if (rc == -1) {
9425 DMLOG_PRINT(DMLVL_DEBUG,
9426 "Unable to set up variation! (errno = %d)\n",
9427 errno);
9428 DMVAR_SKIP();
9429 } else {
9430 /* Variation */
9431 DMLOG_PRINT(DMLVL_DEBUG,
9432 "%s(DM_AT_PATTR with DM attr)\n",
9433 szFuncName);
9434 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9435 DM_AT_PATTR, &loc, sizeof(buf),
9436 buf, &rlen);
9437 DMLOG_PRINT(DMLVL_DEBUG,
9438 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9439 rlen);
9440 if (rc == 0) {
9441 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
9442 LogDirAttrs(buf, DM_AT_PATTR);
9443 if (entry != NULL) {
9444 if (entry->dt_pers == DM_TRUE) {
9445 DMLOG_PRINT(DMLVL_DEBUG,
9446 "%s passed with expected rc = %d\n",
9447 szFuncName, 0);
9448 DMVAR_PASS();
9449 } else {
9450 DMLOG_PRINT(DMLVL_ERR,
9451 "%s failed with expected rc = %d but pers NOT same (%d vs %d)\n",
9452 szFuncName, 0,
9453 entry->dt_pers,
9454 DM_TRUE);
9455 DMVAR_FAIL();
9456 }
9457 } else {
9458 DMLOG_PRINT(DMLVL_ERR,
9459 "%s failed with expected rc = %d but unable to find entry %s",
9460 szFuncName, 0, DUMMY_FILE);
9461 DMVAR_FAIL();
9462 }
9463 } else {
9464 DMLOG_PRINT(DMLVL_ERR,
9465 "%s failed with unexpected rc = %d (errno = %d)\n",
9466 szFuncName, rc, errno);
9467 DMVAR_FAIL();
9468 }
9469
9470 /* Variation clean up */
9471 rc = remove(DUMMY_SUBDIR_FILE);
9472 rc |= rmdir(DUMMY_SUBDIR);
9473 if (rc == -1) {
9474 DMLOG_PRINT(DMLVL_DEBUG,
9475 "Unable to clean up variation! (errno = %d)\n",
9476 errno);
9477 }
9478 dm_handle_free(dhanp, dhlen);
9479 dm_handle_free(fhanp, fhlen);
9480 }
9481 }
9482
9483 /*
9484 * TEST : dm_get_dirattrs - DM_AT_PATTR without DM attribute
9485 * EXPECTED: rc = 0
9486 */
9487 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 17)) {
9488 void *dhanp;
9489 size_t dhlen;
9490 dm_attrloc_t loc;
9491 char buf[ATTR_LISTLEN];
9492 size_t rlen;
9493
9494 /* Variation set up */
9495 memset(buf, 0, ATTR_LISTLEN);
9496 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
9497 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
9498 /* No clean up */
9499 } else
9500 if ((rc =
9501 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
9502 &dhlen)) == -1) {
9503 rmdir(DUMMY_SUBDIR);
9504 } else if ((rc = system(command)) == -1) {
9505 dm_handle_free(dhanp, dhlen);
9506 rmdir(DUMMY_SUBDIR);
9507 } else
9508 if ((rc =
9509 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9510 &loc)) == -1) {
9511 remove(DUMMY_SUBDIR_FILE);
9512 dm_handle_free(dhanp, dhlen);
9513 rmdir(DUMMY_SUBDIR);
9514 }
9515 if (rc == -1) {
9516 DMLOG_PRINT(DMLVL_DEBUG,
9517 "Unable to set up variation! (errno = %d)\n",
9518 errno);
9519 DMVAR_SKIP();
9520 } else {
9521 /* Variation */
9522 DMLOG_PRINT(DMLVL_DEBUG,
9523 "%s(DM_AT_PATTR without DM attr)\n",
9524 szFuncName);
9525 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9526 DM_AT_PATTR, &loc, sizeof(buf),
9527 buf, &rlen);
9528 DMLOG_PRINT(DMLVL_DEBUG,
9529 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9530 rlen);
9531 if (rc == 0) {
9532 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
9533 LogDirAttrs(buf, DM_AT_PATTR);
9534 if (entry != NULL) {
9535 if (entry->dt_pers == DM_FALSE) {
9536 DMLOG_PRINT(DMLVL_DEBUG,
9537 "%s passed with expected rc = %d\n",
9538 szFuncName, 0);
9539 DMVAR_PASS();
9540 } else {
9541 DMLOG_PRINT(DMLVL_ERR,
9542 "%s failed with expected rc = %d but pers NOT same (%d vs %d)\n",
9543 szFuncName, 0,
9544 entry->dt_pers,
9545 DM_FALSE);
9546 DMVAR_FAIL();
9547 }
9548 } else {
9549 DMLOG_PRINT(DMLVL_ERR,
9550 "%s failed with expected rc = %d but unable to find entry %s",
9551 szFuncName, 0, DUMMY_FILE);
9552 DMVAR_FAIL();
9553 }
9554 } else {
9555 DMLOG_PRINT(DMLVL_ERR,
9556 "%s failed with unexpected rc = %d (errno = %d)\n",
9557 szFuncName, rc, errno);
9558 DMVAR_FAIL();
9559 }
9560
9561 /* Variation clean up */
9562 rc = remove(DUMMY_SUBDIR_FILE);
9563 rc |= rmdir(DUMMY_SUBDIR);
9564 if (rc == -1) {
9565 DMLOG_PRINT(DMLVL_DEBUG,
9566 "Unable to clean up variation! (errno = %d)\n",
9567 errno);
9568 }
9569 dm_handle_free(dhanp, dhlen);
9570 }
9571 }
9572
9573 /*
9574 * TEST : dm_get_dirattrs - DM_AT_DTIME with DM attribute
9575 * EXPECTED: rc = 0
9576 */
9577 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 18)) {
9578 void *dhanp, *fhanp;
9579 size_t dhlen, fhlen;
9580 dm_attrloc_t loc;
9581 char buf[ATTR_LISTLEN];
9582 size_t rlen;
9583 dm_attrname_t attrname;
9584 char attrbuf[ATTR_VALUELEN];
9585 struct stat statfs;
9586
9587 /* Variation set up */
9588 memset(buf, 0, ATTR_LISTLEN);
9589 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
9590 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
9591 memcpy(attrbuf, ATTR_VALUE, ATTR_VALUELEN);
9592 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
9593 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
9594 /* No clean up */
9595 } else
9596 if ((rc =
9597 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
9598 &dhlen)) == -1) {
9599 rmdir(DUMMY_SUBDIR);
9600 } else if ((rc = system(command)) == -1) {
9601 dm_handle_free(dhanp, dhlen);
9602 rmdir(DUMMY_SUBDIR);
9603 } else
9604 if ((rc =
9605 dm_path_to_handle(DUMMY_SUBDIR_FILE, &fhanp,
9606 &fhlen)) == -1) {
9607 remove(DUMMY_SUBDIR_FILE);
9608 dm_handle_free(dhanp, dhlen);
9609 rmdir(DUMMY_SUBDIR);
9610 } else if (((rc = stat(DUMMY_SUBDIR_FILE, &statfs)) == -1) ||
9611 ((rc =
9612 dm_set_dmattr(sid, fhanp, fhlen, DM_NO_TOKEN,
9613 &attrname, 0, sizeof(attrbuf),
9614 attrbuf)) == -1)
9615 ||
9616 ((rc =
9617 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9618 &loc)) == -1)) {
9619 dm_handle_free(fhanp, fhlen);
9620 remove(DUMMY_SUBDIR_FILE);
9621 dm_handle_free(dhanp, dhlen);
9622 rmdir(DUMMY_SUBDIR);
9623 }
9624 if (rc == -1) {
9625 DMLOG_PRINT(DMLVL_DEBUG,
9626 "Unable to set up variation! (errno = %d)\n",
9627 errno);
9628 DMVAR_SKIP();
9629 } else {
9630 /* Variation */
9631 DMLOG_PRINT(DMLVL_DEBUG,
9632 "%s(DM_AT_DTIME with DM attr)\n",
9633 szFuncName);
9634 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9635 DM_AT_DTIME, &loc, sizeof(buf),
9636 buf, &rlen);
9637 DMLOG_PRINT(DMLVL_DEBUG,
9638 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9639 rlen);
9640 if (rc == 0) {
9641 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
9642 LogDirAttrs(buf, DM_AT_DTIME);
9643 if (entry != NULL) {
9644 if (entry->dt_dtime == statfs.st_ctime) {
9645 DMLOG_PRINT(DMLVL_DEBUG,
9646 "%s passed with expected rc = %d\n",
9647 szFuncName, 0);
9648 DMVAR_PASS();
9649 } else {
9650 DMLOG_PRINT(DMLVL_ERR,
9651 "%s failed with expected rc = %d but dtime NOT same (%d vs %d)\n",
9652 szFuncName, 0,
9653 entry->dt_dtime,
9654 statfs.st_ctime);
9655 DMVAR_FAIL();
9656 }
9657 } else {
9658 DMLOG_PRINT(DMLVL_ERR,
9659 "%s failed with expected rc = %d but unable to find entry %s",
9660 szFuncName, 0, DUMMY_FILE);
9661 DMVAR_FAIL();
9662 }
9663 } else {
9664 DMLOG_PRINT(DMLVL_ERR,
9665 "%s failed with unexpected rc = %d (errno = %d)\n",
9666 szFuncName, rc, errno);
9667 DMVAR_FAIL();
9668 }
9669
9670 /* Variation clean up */
9671 rc = remove(DUMMY_SUBDIR_FILE);
9672 rc |= rmdir(DUMMY_SUBDIR);
9673 if (rc == -1) {
9674 DMLOG_PRINT(DMLVL_DEBUG,
9675 "Unable to clean up variation! (errno = %d)\n",
9676 errno);
9677 }
9678 dm_handle_free(dhanp, dhlen);
9679 dm_handle_free(fhanp, fhlen);
9680 }
9681 }
9682
9683 /*
9684 * TEST : dm_get_dirattrs - DM_AT_DTIME without DM attribute
9685 * EXPECTED: rc = 0
9686 *
9687 * This variation uncovered XFS BUG #25 (dtime updated without any DM
9688 * attributes)
9689 */
9690 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 19)) {
9691 void *dhanp;
9692 size_t dhlen;
9693 dm_attrloc_t loc;
9694 char buf[ATTR_LISTLEN];
9695 size_t rlen;
9696 struct stat statfs;
9697
9698 /* Variation set up */
9699 memset(buf, 0, ATTR_LISTLEN);
9700 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
9701 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
9702 /* No clean up */
9703 } else
9704 if ((rc =
9705 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
9706 &dhlen)) == -1) {
9707 rmdir(DUMMY_SUBDIR);
9708 } else if ((rc = system(command)) == -1) {
9709 dm_handle_free(dhanp, dhlen);
9710 rmdir(DUMMY_SUBDIR);
9711 } else if (((rc = stat(DUMMY_SUBDIR_FILE, &statfs)) == -1) ||
9712 ((rc =
9713 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9714 &loc)) == -1)) {
9715 remove(DUMMY_SUBDIR_FILE);
9716 dm_handle_free(dhanp, dhlen);
9717 rmdir(DUMMY_SUBDIR);
9718 }
9719 if (rc == -1) {
9720 DMLOG_PRINT(DMLVL_DEBUG,
9721 "Unable to set up variation! (errno = %d)\n",
9722 errno);
9723 DMVAR_SKIP();
9724 } else {
9725 /* Variation */
9726 DMLOG_PRINT(DMLVL_DEBUG,
9727 "%s(DM_AT_DTIME without DM attr)\n",
9728 szFuncName);
9729 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9730 DM_AT_DTIME, &loc, sizeof(buf),
9731 buf, &rlen);
9732 DMLOG_PRINT(DMLVL_DEBUG,
9733 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9734 rlen);
9735 if (rc == 0) {
9736 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
9737 LogDirAttrs(buf, DM_AT_DTIME);
9738 if (entry != NULL) {
9739 if (entry->dt_dtime != statfs.st_ctime) {
9740 DMLOG_PRINT(DMLVL_DEBUG,
9741 "%s passed with expected rc = %d\n",
9742 szFuncName, 0);
9743 DMVAR_PASS();
9744 } else {
9745 DMLOG_PRINT(DMLVL_ERR,
9746 "%s failed with expected rc = %d but dtime same (%d vs %d)\n",
9747 szFuncName, 0,
9748 entry->dt_dtime,
9749 statfs.st_ctime);
9750 DMVAR_FAIL();
9751 }
9752 } else {
9753 DMLOG_PRINT(DMLVL_ERR,
9754 "%s failed with expected rc = %d but unable to find entry %s",
9755 szFuncName, 0, DUMMY_FILE);
9756 DMVAR_FAIL();
9757 }
9758 } else {
9759 DMLOG_PRINT(DMLVL_ERR,
9760 "%s failed with unexpected rc = %d (errno = %d)\n",
9761 szFuncName, rc, errno);
9762 DMVAR_FAIL();
9763 }
9764
9765 /* Variation clean up */
9766 rc = remove(DUMMY_SUBDIR_FILE);
9767 rc |= rmdir(DUMMY_SUBDIR);
9768 if (rc == -1) {
9769 DMLOG_PRINT(DMLVL_DEBUG,
9770 "Unable to clean up variation! (errno = %d)\n",
9771 errno);
9772 }
9773 dm_handle_free(dhanp, dhlen);
9774 }
9775 }
9776
9777 /*
9778 * TEST : dm_get_dirattrs - DM_AT_CFLAG with no change
9779 * EXPECTED: rc = 0
9780 */
9781 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 20)) {
9782 void *dhanp;
9783 size_t dhlen;
9784 dm_attrloc_t loc;
9785 char buf1[ATTR_LISTLEN], buf2[ATTR_LISTLEN];
9786 size_t rlen;
9787
9788 /* Variation set up */
9789 memset(buf1, 0, ATTR_LISTLEN);
9790 memset(buf2, 0, ATTR_LISTLEN);
9791 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
9792 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
9793 /* No clean up */
9794 } else
9795 if ((rc =
9796 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
9797 &dhlen)) == -1) {
9798 rmdir(DUMMY_SUBDIR);
9799 } else if ((rc = system(command)) == -1) {
9800 dm_handle_free(dhanp, dhlen);
9801 rmdir(DUMMY_SUBDIR);
9802 } else
9803 if (((rc =
9804 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9805 &loc)) == -1)
9806 ||
9807 ((rc =
9808 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9809 DM_AT_CFLAG, &loc, sizeof(buf1), buf1,
9810 &rlen)) == -1)
9811 ||
9812 ((rc =
9813 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9814 &loc)) == -1)) {
9815 remove(DUMMY_SUBDIR_FILE);
9816 dm_handle_free(dhanp, dhlen);
9817 rmdir(DUMMY_SUBDIR);
9818 }
9819 if (rc == -1) {
9820 DMLOG_PRINT(DMLVL_DEBUG,
9821 "Unable to set up variation! (errno = %d)\n",
9822 errno);
9823 DMVAR_SKIP();
9824 } else {
9825 /* Variation */
9826 DMLOG_PRINT(DMLVL_DEBUG,
9827 "%s(DM_AT_CFLAG with no change)\n",
9828 szFuncName);
9829 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9830 DM_AT_CFLAG, &loc, sizeof(buf2),
9831 buf2, &rlen);
9832 DMLOG_PRINT(DMLVL_DEBUG,
9833 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9834 rlen);
9835 if (rc == 0) {
9836 dm_stat_t *entry1 =
9837 GetDirEntry(buf1, DUMMY_FILE);
9838 dm_stat_t *entry2 =
9839 GetDirEntry(buf2, DUMMY_FILE);
9840 LogDirAttrs(buf2, DM_AT_CFLAG);
9841 if ((entry1 != NULL) && (entry2 != NULL)) {
9842 if (entry1->dt_change ==
9843 entry2->dt_change) {
9844 DMLOG_PRINT(DMLVL_DEBUG,
9845 "%s passed with expected rc = %d\n",
9846 szFuncName, 0);
9847 DMVAR_PASS();
9848 } else {
9849 DMLOG_PRINT(DMLVL_ERR,
9850 "%s failed with expected rc = %d but change not same (%d vs %d)\n",
9851 szFuncName, 0,
9852 entry1->dt_change,
9853 entry2->dt_change);
9854 DMVAR_FAIL();
9855 }
9856 } else {
9857 DMLOG_PRINT(DMLVL_ERR,
9858 "%s failed with expected rc = %d but unable to find entry %s",
9859 szFuncName, 0, DUMMY_FILE);
9860 DMVAR_FAIL();
9861 }
9862 } else {
9863 DMLOG_PRINT(DMLVL_ERR,
9864 "%s failed with unexpected rc = %d (errno = %d)\n",
9865 szFuncName, rc, errno);
9866 DMVAR_FAIL();
9867 }
9868
9869 /* Variation clean up */
9870 rc = remove(DUMMY_SUBDIR_FILE);
9871 rc |= rmdir(DUMMY_SUBDIR);
9872 if (rc == -1) {
9873 DMLOG_PRINT(DMLVL_DEBUG,
9874 "Unable to clean up variation! (errno = %d)\n",
9875 errno);
9876 }
9877 dm_handle_free(dhanp, dhlen);
9878 }
9879 }
9880
9881 /*
9882 * TEST : dm_get_dirattrs - DM_AT_CFLAG with data change
9883 * EXPECTED: rc = 0
9884 */
9885 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 21)) {
9886 int fd;
9887 void *dhanp;
9888 size_t dhlen;
9889 dm_attrloc_t loc;
9890 char buf1[ATTR_LISTLEN], buf2[ATTR_LISTLEN];
9891 size_t rlen;
9892
9893 /* Variation set up */
9894 memset(buf1, 0, ATTR_LISTLEN);
9895 memset(buf2, 0, ATTR_LISTLEN);
9896 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
9897 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
9898 /* No clean up */
9899 } else
9900 if ((rc =
9901 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
9902 &dhlen)) == -1) {
9903 rmdir(DUMMY_SUBDIR);
9904 } else if ((rc = system(command)) == -1) {
9905 dm_handle_free(dhanp, dhlen);
9906 rmdir(DUMMY_SUBDIR);
9907 } else if ((fd = open(DUMMY_SUBDIR_FILE, O_RDWR | O_CREAT,
9908 DUMMY_FILE_RW_MODE)) == -1) {
9909 remove(DUMMY_SUBDIR_FILE);
9910 dm_handle_free(dhanp, dhlen);
9911 rmdir(DUMMY_SUBDIR);
9912 } else
9913 if (((rc =
9914 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9915 &loc)) == -1)
9916 ||
9917 ((rc =
9918 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9919 DM_AT_CFLAG, &loc, sizeof(buf1), buf1,
9920 &rlen)) == -1)
9921 ||
9922 ((rc =
9923 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
9924 &loc)) == -1)
9925 ||
9926 ((rc =
9927 (write(fd, DUMMY_STRING, DUMMY_STRLEN) !=
9928 DUMMY_STRLEN ? -1 : 0) == 1))) {
9929 close(fd);
9930 remove(DUMMY_SUBDIR_FILE);
9931 dm_handle_free(dhanp, dhlen);
9932 rmdir(DUMMY_SUBDIR);
9933 }
9934 if (fd == -1 || rc == -1) {
9935 DMLOG_PRINT(DMLVL_DEBUG,
9936 "Unable to set up variation! (errno = %d)\n",
9937 errno);
9938 DMVAR_SKIP();
9939 } else {
9940 /* Variation */
9941 DMLOG_PRINT(DMLVL_DEBUG,
9942 "%s(DM_AT_CFLAG with data change)\n",
9943 szFuncName);
9944 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
9945 DM_AT_CFLAG, &loc, sizeof(buf2),
9946 buf2, &rlen);
9947 DMLOG_PRINT(DMLVL_DEBUG,
9948 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
9949 rlen);
9950 if (rc == 0) {
9951 dm_stat_t *entry1 =
9952 GetDirEntry(buf1, DUMMY_FILE);
9953 dm_stat_t *entry2 =
9954 GetDirEntry(buf2, DUMMY_FILE);
9955 LogDirAttrs(buf2, DM_AT_CFLAG);
9956 if ((entry1 != NULL) && (entry2 != NULL)) {
9957 if (entry1->dt_change !=
9958 entry2->dt_change) {
9959 DMLOG_PRINT(DMLVL_DEBUG,
9960 "%s passed with expected rc = %d\n",
9961 szFuncName, 0);
9962 DMVAR_PASS();
9963 } else {
9964 DMLOG_PRINT(DMLVL_ERR,
9965 "%s failed with expected rc = %d but change same (%d vs %d)\n",
9966 szFuncName, 0,
9967 entry1->dt_change,
9968 entry2->dt_change);
9969 DMVAR_FAIL();
9970 }
9971 } else {
9972 DMLOG_PRINT(DMLVL_ERR,
9973 "%s failed with expected rc = %d but unable to find entry %s",
9974 szFuncName, 0, DUMMY_FILE);
9975 DMVAR_FAIL();
9976 }
9977 } else {
9978 DMLOG_PRINT(DMLVL_ERR,
9979 "%s failed with unexpected rc = %d (errno = %d)\n",
9980 szFuncName, rc, errno);
9981 DMVAR_FAIL();
9982 }
9983
9984 /* Variation clean up */
9985 rc = remove(DUMMY_SUBDIR_FILE);
9986 rc |= rmdir(DUMMY_SUBDIR);
9987 if (rc == -1) {
9988 DMLOG_PRINT(DMLVL_DEBUG,
9989 "Unable to clean up variation! (errno = %d)\n",
9990 errno);
9991 }
9992 dm_handle_free(dhanp, dhlen);
9993 }
9994 }
9995
9996 /*
9997 * TEST : dm_get_dirattrs - DM_AT_CFLAG with metadata change
9998 * EXPECTED: rc = 0
9999 */
10000 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 22)) {
10001 void *dhanp;
10002 size_t dhlen;
10003 dm_attrloc_t loc;
10004 char buf1[ATTR_LISTLEN], buf2[ATTR_LISTLEN];
10005 size_t rlen;
10006
10007 /* Variation set up */
10008 memset(buf1, 0, ATTR_LISTLEN);
10009 memset(buf2, 0, ATTR_LISTLEN);
10010 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
10011 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
10012 /* No clean up */
10013 } else
10014 if ((rc =
10015 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
10016 &dhlen)) == -1) {
10017 rmdir(DUMMY_SUBDIR);
10018 } else if ((rc = system(command)) == -1) {
10019 dm_handle_free(dhanp, dhlen);
10020 rmdir(DUMMY_SUBDIR);
10021 } else
10022 if (((rc =
10023 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10024 &loc)) == -1)
10025 ||
10026 ((rc =
10027 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10028 DM_AT_CFLAG, &loc, sizeof(buf1), buf1,
10029 &rlen)) == -1)
10030 ||
10031 ((rc =
10032 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10033 &loc)) == -1)
10034 ||
10035 ((rc =
10036 chown(DUMMY_SUBDIR_FILE, DUMMY_UID,
10037 DUMMY_GID)) == -1)) {
10038 remove(DUMMY_SUBDIR_FILE);
10039 dm_handle_free(dhanp, dhlen);
10040 rmdir(DUMMY_SUBDIR);
10041 }
10042 if (rc == -1) {
10043 DMLOG_PRINT(DMLVL_DEBUG,
10044 "Unable to set up variation! (errno = %d)\n",
10045 errno);
10046 DMVAR_SKIP();
10047 } else {
10048 /* Variation */
10049 DMLOG_PRINT(DMLVL_DEBUG,
10050 "%s(DM_AT_CFLAG with metadata change)\n",
10051 szFuncName);
10052 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10053 DM_AT_CFLAG, &loc, sizeof(buf2),
10054 buf2, &rlen);
10055 DMLOG_PRINT(DMLVL_DEBUG,
10056 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
10057 rlen);
10058 if (rc == 0) {
10059 dm_stat_t *entry1 =
10060 GetDirEntry(buf1, DUMMY_FILE);
10061 dm_stat_t *entry2 =
10062 GetDirEntry(buf2, DUMMY_FILE);
10063 LogDirAttrs(buf2, DM_AT_CFLAG);
10064 if ((entry1 != NULL) && (entry2 != NULL)) {
10065 if (entry1->dt_change !=
10066 entry2->dt_change) {
10067 DMLOG_PRINT(DMLVL_DEBUG,
10068 "%s passed with expected rc = %d\n",
10069 szFuncName, 0);
10070 DMVAR_PASS();
10071 } else {
10072 DMLOG_PRINT(DMLVL_ERR,
10073 "%s failed with expected rc = %d but change same (%d vs %d)\n",
10074 szFuncName, 0,
10075 entry1->dt_change,
10076 entry2->dt_change);
10077 DMVAR_FAIL();
10078 }
10079 } else {
10080 DMLOG_PRINT(DMLVL_ERR,
10081 "%s failed with expected rc = %d but unable to find entry %s",
10082 szFuncName, 0, DUMMY_FILE);
10083 DMVAR_FAIL();
10084 }
10085 } else {
10086 DMLOG_PRINT(DMLVL_ERR,
10087 "%s failed with unexpected rc = %d (errno = %d)\n",
10088 szFuncName, rc, errno);
10089 DMVAR_FAIL();
10090 }
10091
10092 /* Variation clean up */
10093 rc = remove(DUMMY_SUBDIR_FILE);
10094 rc |= rmdir(DUMMY_SUBDIR);
10095 if (rc == -1) {
10096 DMLOG_PRINT(DMLVL_DEBUG,
10097 "Unable to clean up variation! (errno = %d)\n",
10098 errno);
10099 }
10100 dm_handle_free(dhanp, dhlen);
10101 }
10102 }
10103
10104 /*
10105 * TEST : dm_get_dirattrs - DM_AT_CFLAG with DM attribute change
10106 * EXPECTED: rc = 0
10107 */
10108 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 23)) {
10109 void *dhanp, *fhanp;
10110 size_t dhlen, fhlen;
10111 dm_attrloc_t loc;
10112 char buf1[ATTR_LISTLEN], buf2[ATTR_LISTLEN];
10113 size_t rlen;
10114 dm_attrname_t attrname;
10115
10116 /* Variation set up */
10117 memset(buf1, 0, ATTR_LISTLEN);
10118 memset(buf2, 0, ATTR_LISTLEN);
10119 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
10120 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
10121 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
10122 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
10123 /* No clean up */
10124 } else
10125 if ((rc =
10126 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
10127 &dhlen)) == -1) {
10128 rmdir(DUMMY_SUBDIR);
10129 } else if ((rc = system(command)) == -1) {
10130 dm_handle_free(dhanp, dhlen);
10131 rmdir(DUMMY_SUBDIR);
10132 } else
10133 if ((rc =
10134 dm_path_to_handle(DUMMY_SUBDIR_FILE, &fhanp,
10135 &fhlen)) == -1) {
10136 remove(DUMMY_SUBDIR_FILE);
10137 dm_handle_free(dhanp, dhlen);
10138 rmdir(DUMMY_SUBDIR);
10139 } else
10140 if (((rc =
10141 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10142 &loc)) == -1)
10143 ||
10144 ((rc =
10145 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10146 DM_AT_CFLAG, &loc, sizeof(buf1), buf1,
10147 &rlen)) == -1)
10148 ||
10149 ((rc =
10150 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10151 &loc)) == -1)
10152 ||
10153 ((rc =
10154 dm_set_dmattr(sid, fhanp, fhlen, DM_NO_TOKEN,
10155 &attrname, 0, 0, NULL)) == -1)) {
10156 dm_handle_free(fhanp, fhlen);
10157 remove(DUMMY_SUBDIR_FILE);
10158 dm_handle_free(dhanp, dhlen);
10159 rmdir(DUMMY_SUBDIR);
10160 }
10161 if (rc == -1) {
10162 DMLOG_PRINT(DMLVL_DEBUG,
10163 "Unable to set up variation! (errno = %d)\n",
10164 errno);
10165 DMVAR_SKIP();
10166 } else {
10167 /* Variation */
10168 DMLOG_PRINT(DMLVL_DEBUG,
10169 "%s(DM_AT_CFLAG with DM attr change)\n",
10170 szFuncName);
10171 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10172 DM_AT_CFLAG, &loc, sizeof(buf2),
10173 buf2, &rlen);
10174 DMLOG_PRINT(DMLVL_DEBUG,
10175 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
10176 rlen);
10177 if (rc == 0) {
10178 dm_stat_t *entry1 =
10179 GetDirEntry(buf1, DUMMY_FILE);
10180 dm_stat_t *entry2 =
10181 GetDirEntry(buf2, DUMMY_FILE);
10182 LogDirAttrs(buf2, DM_AT_CFLAG);
10183 if ((entry1 != NULL) && (entry2 != NULL)) {
10184 if (entry1->dt_change !=
10185 entry2->dt_change) {
10186 DMLOG_PRINT(DMLVL_DEBUG,
10187 "%s passed with expected rc = %d\n",
10188 szFuncName, 0);
10189 DMVAR_PASS();
10190 } else {
10191 DMLOG_PRINT(DMLVL_ERR,
10192 "%s failed with expected rc = %d but change same (%d vs %d)\n",
10193 szFuncName, 0,
10194 entry1->dt_change,
10195 entry2->dt_change);
10196 DMVAR_FAIL();
10197 }
10198 } else {
10199 DMLOG_PRINT(DMLVL_ERR,
10200 "%s failed with expected rc = %d but unable to find entry %s",
10201 szFuncName, 0, DUMMY_FILE);
10202 DMVAR_FAIL();
10203 }
10204 } else {
10205 DMLOG_PRINT(DMLVL_ERR,
10206 "%s failed with unexpected rc = %d (errno = %d)\n",
10207 szFuncName, rc, errno);
10208 DMVAR_FAIL();
10209 }
10210
10211 /* Variation clean up */
10212 rc = remove(DUMMY_SUBDIR_FILE);
10213 rc |= rmdir(DUMMY_SUBDIR);
10214 if (rc == -1) {
10215 DMLOG_PRINT(DMLVL_DEBUG,
10216 "Unable to clean up variation! (errno = %d)\n",
10217 errno);
10218 }
10219 dm_handle_free(dhanp, dhlen);
10220 dm_handle_free(fhanp, fhlen);
10221 }
10222 }
10223
10224 /*
10225 * TEST : dm_get_dirattrs - DM_AT_CFLAG with non-DM attribute change
10226 * EXPECTED: rc = 0
10227 */
10228 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 23)) {
10229 void *dhanp, *fhanp;
10230 size_t dhlen, fhlen;
10231 dm_attrloc_t loc;
10232 char buf1[ATTR_LISTLEN], buf2[ATTR_LISTLEN];
10233 size_t rlen;
10234 dm_attrname_t attrname;
10235
10236 /* Variation set up */
10237 memset(buf1, 0, ATTR_LISTLEN);
10238 memset(buf2, 0, ATTR_LISTLEN);
10239 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
10240 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
10241 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
10242 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
10243 /* No clean up */
10244 } else
10245 if ((rc =
10246 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
10247 &dhlen)) == -1) {
10248 rmdir(DUMMY_SUBDIR);
10249 } else if ((rc = system(command)) == -1) {
10250 dm_handle_free(dhanp, dhlen);
10251 rmdir(DUMMY_SUBDIR);
10252 } else
10253 if ((rc =
10254 dm_path_to_handle(DUMMY_SUBDIR_FILE, &fhanp,
10255 &fhlen)) == -1) {
10256 remove(DUMMY_SUBDIR_FILE);
10257 dm_handle_free(dhanp, dhlen);
10258 rmdir(DUMMY_SUBDIR);
10259 } else
10260 if (((rc =
10261 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10262 &loc)) == -1)
10263 ||
10264 ((rc =
10265 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10266 DM_AT_CFLAG, &loc, sizeof(buf1), buf1,
10267 &rlen)) == -1)
10268 ||
10269 ((rc =
10270 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10271 &loc)) == -1)
10272 ||
10273 ((rc =
10274 setxattr(DUMMY_SUBDIR_FILE, NON_DM_ATTR_NAME,
10275 NON_DM_ATTR_VALUE, sizeof(NON_DM_ATTR_VALUE),
10276 0)) == -1)) {
10277 dm_handle_free(fhanp, fhlen);
10278 remove(DUMMY_SUBDIR_FILE);
10279 dm_handle_free(dhanp, dhlen);
10280 rmdir(DUMMY_SUBDIR);
10281 }
10282 if (rc == -1) {
10283 DMLOG_PRINT(DMLVL_DEBUG,
10284 "Unable to set up variation! (errno = %d)\n",
10285 errno);
10286 DMVAR_SKIP();
10287 } else {
10288 /* Variation */
10289 DMLOG_PRINT(DMLVL_DEBUG,
10290 "%s(DM_AT_CFLAG with non-DM attr change)\n",
10291 szFuncName);
10292 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10293 DM_AT_CFLAG, &loc, sizeof(buf2),
10294 buf2, &rlen);
10295 DMLOG_PRINT(DMLVL_DEBUG,
10296 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
10297 rlen);
10298 if (rc == 0) {
10299 dm_stat_t *entry1 =
10300 GetDirEntry(buf1, DUMMY_FILE);
10301 dm_stat_t *entry2 =
10302 GetDirEntry(buf2, DUMMY_FILE);
10303 LogDirAttrs(buf2, DM_AT_CFLAG);
10304 if ((entry1 != NULL) && (entry2 != NULL)) {
10305 if (entry1->dt_change !=
10306 entry2->dt_change) {
10307 DMLOG_PRINT(DMLVL_DEBUG,
10308 "%s passed with expected rc = %d\n",
10309 szFuncName, 0);
10310 DMVAR_PASS();
10311 } else {
10312 DMLOG_PRINT(DMLVL_ERR,
10313 "%s failed with expected rc = %d but change same (%d vs %d)\n",
10314 szFuncName, 0,
10315 entry1->dt_change,
10316 entry2->dt_change);
10317 DMVAR_FAIL();
10318 }
10319 } else {
10320 DMLOG_PRINT(DMLVL_ERR,
10321 "%s failed with expected rc = %d but unable to find entry %s",
10322 szFuncName, 0, DUMMY_FILE);
10323 DMVAR_FAIL();
10324 }
10325 } else {
10326 DMLOG_PRINT(DMLVL_ERR,
10327 "%s failed with unexpected rc = %d (errno = %d)\n",
10328 szFuncName, rc, errno);
10329 DMVAR_FAIL();
10330 }
10331
10332 /* Variation clean up */
10333 rc = remove(DUMMY_SUBDIR_FILE);
10334 rc |= rmdir(DUMMY_SUBDIR);
10335 if (rc == -1) {
10336 DMLOG_PRINT(DMLVL_DEBUG,
10337 "Unable to clean up variation! (errno = %d)\n",
10338 errno);
10339 }
10340 dm_handle_free(dhanp, dhlen);
10341 dm_handle_free(fhanp, fhlen);
10342 }
10343 }
10344
10345 /*
10346 * TEST : dm_get_dirattrs - DM_AT_STAT
10347 * EXPECTED: rc = 0
10348 */
10349 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 24)) {
10350 void *dhanp;
10351 size_t dhlen;
10352 dm_attrloc_t loc;
10353 char buf[ATTR_LISTLEN];
10354 size_t rlen;
10355 struct stat statfs;
10356 int varStatus;
10357
10358 /* Variation set up */
10359 memset(buf, 0, ATTR_LISTLEN);
10360 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
10361 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
10362 /* No clean up */
10363 } else
10364 if ((rc =
10365 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
10366 &dhlen)) == -1) {
10367 rmdir(DUMMY_SUBDIR);
10368 } else if ((rc = system(command)) == -1) {
10369 dm_handle_free(dhanp, dhlen);
10370 rmdir(DUMMY_SUBDIR);
10371 } else
10372 if (((rc =
10373 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10374 &loc)) == -1)
10375 || ((rc = stat(DUMMY_SUBDIR_FILE, &statfs)) == -1)) {
10376 remove(DUMMY_SUBDIR_FILE);
10377 dm_handle_free(dhanp, dhlen);
10378 rmdir(DUMMY_SUBDIR);
10379 }
10380 if (rc == -1) {
10381 DMLOG_PRINT(DMLVL_DEBUG,
10382 "Unable to set up variation! (errno = %d)\n",
10383 errno);
10384 DMVAR_SKIP();
10385 } else {
10386 /* Variation */
10387 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_AT_STAT)\n",
10388 szFuncName);
10389 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10390 DM_AT_STAT, &loc, sizeof(buf), buf,
10391 &rlen);
10392 DMLOG_PRINT(DMLVL_DEBUG,
10393 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
10394 rlen);
10395 if (rc == 0) {
10396 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
10397 LogDirAttrs(buf, DM_AT_STAT);
10398 if (entry != NULL) {
10399 varStatus = DMSTAT_PASS;
10400 DMLOG_PRINT(DMLVL_DEBUG,
10401 "%s returned expected rc = %d\n",
10402 szFuncName, rc);
10403 if (statfs.st_dev != entry->dt_dev) {
10404 DMLOG_PRINT(DMLVL_ERR,
10405 "%s failed with nonmatching dev (%lld vs %lld)\n",
10406 szFuncName,
10407 statfs.st_dev,
10408 entry->dt_dev);
10409 varStatus = DMSTAT_FAIL;
10410 }
10411 if (statfs.st_ino != entry->dt_ino) {
10412 DMLOG_PRINT(DMLVL_ERR,
10413 "%s failed with nonmatching ino (%lld vs %lld)\n",
10414 szFuncName,
10415 statfs.st_ino,
10416 entry->dt_ino);
10417 varStatus = DMSTAT_FAIL;
10418 }
10419 if (statfs.st_mode != entry->dt_mode) {
10420 DMLOG_PRINT(DMLVL_ERR,
10421 "%s failed with nonmatching mode (%d vs %d)\n",
10422 szFuncName,
10423 statfs.st_mode,
10424 entry->dt_mode);
10425 varStatus = DMSTAT_FAIL;
10426 }
10427 if (statfs.st_nlink != entry->dt_nlink) {
10428 DMLOG_PRINT(DMLVL_ERR,
10429 "%s failed with nonmatching nlink (%d vs %d)\n",
10430 szFuncName,
10431 statfs.st_nlink,
10432 entry->dt_nlink);
10433 varStatus = DMSTAT_FAIL;
10434 }
10435 if (statfs.st_uid != entry->dt_uid) {
10436 DMLOG_PRINT(DMLVL_ERR,
10437 "%s failed with nonmatching uid (%d vs %d)\n",
10438 szFuncName,
10439 statfs.st_uid,
10440 entry->dt_uid);
10441 varStatus = DMSTAT_FAIL;
10442 }
10443 if (statfs.st_gid != entry->dt_gid) {
10444 DMLOG_PRINT(DMLVL_ERR,
10445 "%s failed with nonmatching gid (%d vs %d)\n",
10446 szFuncName,
10447 statfs.st_gid,
10448 entry->dt_gid);
10449 varStatus = DMSTAT_FAIL;
10450 }
10451 if (statfs.st_rdev != entry->dt_rdev) {
10452 DMLOG_PRINT(DMLVL_ERR,
10453 "%s failed with nonmatching rdev (%lld vs %lld)\n",
10454 szFuncName,
10455 statfs.st_rdev,
10456 entry->dt_rdev);
10457 varStatus = DMSTAT_FAIL;
10458 }
10459 if (statfs.st_size != entry->dt_size) {
10460 DMLOG_PRINT(DMLVL_ERR,
10461 "%s failed with nonmatching size (%lld vs %lld)\n",
10462 szFuncName,
10463 statfs.st_size,
10464 entry->dt_size);
10465 varStatus = DMSTAT_FAIL;
10466 }
10467 if (statfs.st_atime != entry->dt_atime) {
10468 DMLOG_PRINT(DMLVL_ERR,
10469 "%s failed with nonmatching atime (%d vs %d)\n",
10470 szFuncName,
10471 statfs.st_atime,
10472 entry->dt_atime);
10473 varStatus = DMSTAT_FAIL;
10474 }
10475 if (statfs.st_mtime != entry->dt_mtime) {
10476 DMLOG_PRINT(DMLVL_ERR,
10477 "%s failed with nonmatching mtime (%d vs %d)\n",
10478 szFuncName,
10479 statfs.st_mtime,
10480 entry->dt_mtime);
10481 varStatus = DMSTAT_FAIL;
10482 }
10483 if (statfs.st_ctime != entry->dt_ctime) {
10484 DMLOG_PRINT(DMLVL_ERR,
10485 "%s failed with nonmatching ctime (%d vs %d)\n",
10486 szFuncName,
10487 statfs.st_ctime,
10488 entry->dt_ctime);
10489 varStatus = DMSTAT_FAIL;
10490 }
10491 if (statfs.st_blksize !=
10492 entry->dt_blksize) {
10493 DMLOG_PRINT(DMLVL_ERR,
10494 "%s failed with nonmatching blksize (%d vs %d)\n",
10495 szFuncName,
10496 statfs.st_blksize,
10497 entry->dt_blksize);
10498 varStatus = DMSTAT_FAIL;
10499 }
10500 if (statfs.st_blocks !=
10501 entry->dt_blocks) {
10502 DMLOG_PRINT(DMLVL_ERR,
10503 "%s failed with nonmatching blocks (%lld vs %lld)\n",
10504 szFuncName,
10505 statfs.st_blocks,
10506 entry->dt_blocks);
10507 varStatus = DMSTAT_FAIL;
10508 }
10509 } else {
10510 DMLOG_PRINT(DMLVL_ERR,
10511 "%s failed with expected rc = %d but unable to find entry %s",
10512 szFuncName, 0, DUMMY_FILE);
10513 varStatus = DMSTAT_FAIL;
10514 }
10515 } else {
10516 DMLOG_PRINT(DMLVL_ERR,
10517 "%s failed with unexpected rc = %d (errno = %d)\n",
10518 szFuncName, rc, errno);
10519 varStatus = DMSTAT_FAIL;
10520 }
10521 DMVAR_END(varStatus);
10522
10523 /* Variation clean up */
10524 rc = remove(DUMMY_SUBDIR_FILE);
10525 rc |= rmdir(DUMMY_SUBDIR);
10526 if (rc == -1) {
10527 DMLOG_PRINT(DMLVL_DEBUG,
10528 "Unable to clean up variation! (errno = %d)\n",
10529 errno);
10530 }
10531 dm_handle_free(dhanp, dhlen);
10532 }
10533 }
10534
10535 /*
10536 * TEST : dm_get_dirattrs - DM_AT_STAT returned over two calls
10537 * EXPECTED: rc = 1, 0
10538 */
10539 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 25)) {
10540 void *dhanp;
10541 size_t dhlen;
10542 dm_attrloc_t loc;
10543 char buf1[2 * ATTR_SMALLLEN];
10544 char buf2[ATTR_SMALLLEN + 1];
10545 size_t rlen1, rlen2;
10546 dm_stat_t *entry;
10547 int rc1, rc2;
10548 int varStatus;
10549 int num;
10550
10551 /* Variation set up */
10552 memset(buf1, 0, sizeof(buf1));
10553 memset(buf2, 0, sizeof(buf2));
10554 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
10555 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
10556 /* No clean up */
10557 } else
10558 if ((rc =
10559 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
10560 &dhlen)) == -1) {
10561 rmdir(DUMMY_SUBDIR);
10562 } else if ((rc = system(command)) == -1) {
10563 dm_handle_free(dhanp, dhlen);
10564 rmdir(DUMMY_SUBDIR);
10565 } else
10566 if ((rc =
10567 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10568 &loc)) == -1) {
10569 remove(DUMMY_SUBDIR_FILE);
10570 dm_handle_free(dhanp, dhlen);
10571 rmdir(DUMMY_SUBDIR);
10572 }
10573 if (rc == -1) {
10574 DMLOG_PRINT(DMLVL_DEBUG,
10575 "Unable to set up variation! (errno = %d)\n",
10576 errno);
10577 DMVAR_SKIP();
10578 } else {
10579 /* Variation */
10580 DMLOG_PRINT(DMLVL_DEBUG,
10581 "%s(DM_AT_STAT over two calls)\n",
10582 szFuncName);
10583 rc1 =
10584 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10585 DM_AT_STAT, &loc, sizeof(buf1),
10586 buf1, &rlen1);
10587 DMLOG_PRINT(DMLVL_DEBUG,
10588 "1st call: rc %d, rlen %d, loc %llx\n", rc1,
10589 rlen1, loc);
10590 rc2 =
10591 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10592 DM_AT_STAT, &loc, sizeof(buf2),
10593 buf2, &rlen2);
10594 DMLOG_PRINT(DMLVL_DEBUG,
10595 "2nd call: rc %d, rlen %d, loc %llx\n", rc2,
10596 rlen2, loc);
10597 varStatus = DMSTAT_PASS;
10598 if (rc1 == 1) {
10599 if (((num = GetNumDirEntry(buf1)) == 2)
10600 && (rlen1 >= 2 * MIN_ENTRYLEN)) {
10601 DMLOG_PRINT(DMLVL_DEBUG,
10602 "1st call attrs:\n");
10603 LogDirAttrs(buf1, DM_AT_STAT);
10604 if (((entry =
10605 GetDirEntry(buf1,
10606 CURRENT_DIR)) != NULL)
10607 &&
10608 ((entry =
10609 GetDirEntry(buf1,
10610 PARENT_DIR)) !=
10611 NULL)) {
10612 DMLOG_PRINT(DMLVL_DEBUG,
10613 "%s 1st call returned expected rc = %d and %d entries %s and %s in buffer\n",
10614 szFuncName, rc1,
10615 num, CURRENT_DIR,
10616 PARENT_DIR);
10617 } else {
10618 DMLOG_PRINT(DMLVL_ERR,
10619 "%s 1st call returned expected rc = %d but entries %s and/or %s not in buffer\n",
10620 szFuncName, rc1,
10621 CURRENT_DIR,
10622 PARENT_DIR);
10623 varStatus = DMSTAT_FAIL;
10624 }
10625 } else {
10626 DMLOG_PRINT(DMLVL_ERR,
10627 "%s 1st call returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
10628 szFuncName, rc1, rlen1,
10629 num);
10630 varStatus = DMSTAT_FAIL;
10631 }
10632 } else {
10633 DMLOG_PRINT(DMLVL_ERR,
10634 "%s 1st call returned unexpected rc = %d\n",
10635 szFuncName, rc1);
10636 varStatus = DMSTAT_FAIL;
10637 }
10638 if (rc2 == 0) {
10639 if (((num = GetNumDirEntry(buf2)) == 1)
10640 && (rlen2 >= MIN_ENTRYLEN)) {
10641 DMLOG_PRINT(DMLVL_DEBUG,
10642 "2nd call attrs:\n");
10643 LogDirAttrs(buf2, DM_AT_STAT);
10644 if ((entry =
10645 GetDirEntry(buf2,
10646 DUMMY_FILE)) != NULL) {
10647 DMLOG_PRINT(DMLVL_DEBUG,
10648 "%s 2nd call returned expected rc = %d and %d entry %s in buffer\n",
10649 szFuncName, rc2,
10650 num, DUMMY_FILE);
10651 } else {
10652 DMLOG_PRINT(DMLVL_ERR,
10653 "%s 2nd call returned expected rc = %d but entry %s not in buffer\n",
10654 szFuncName, rc2,
10655 DUMMY_FILE);
10656 varStatus = DMSTAT_FAIL;
10657 }
10658 } else {
10659 DMLOG_PRINT(DMLVL_ERR,
10660 "%s 2nd call returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
10661 szFuncName, rc2, rlen2,
10662 num);
10663 varStatus = DMSTAT_FAIL;
10664 }
10665 } else {
10666 DMLOG_PRINT(DMLVL_ERR,
10667 "%s 2nd call returned unexpected rc = %d\n",
10668 szFuncName, rc2);
10669 varStatus = DMSTAT_FAIL;
10670 }
10671 DMVAR_END(varStatus);
10672
10673 /* Variation clean up */
10674 rc = remove(DUMMY_SUBDIR_FILE);
10675 rc |= rmdir(DUMMY_SUBDIR);
10676 if (rc == -1) {
10677 DMLOG_PRINT(DMLVL_DEBUG,
10678 "Unable to clean up variation! (errno = %d)\n",
10679 errno);
10680 }
10681 dm_handle_free(dhanp, dhlen);
10682 }
10683 }
10684
10685 /*
10686 * TEST : dm_get_dirattrs - DM_AT_STAT returned over three calls,
10687 * third buffer too small
10688 * EXPECTED: rc = 1, 1, 1
10689 */
10690 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 26)) {
10691 void *dhanp;
10692 size_t dhlen;
10693 dm_attrloc_t loc;
10694 char buf1[ATTR_SMALLLEN];
10695 char buf2[ATTR_SMALLLEN];
10696 char buf3[ATTR_SMALLLEN / 2];
10697 size_t rlen1, rlen2, rlen3;
10698 dm_stat_t *entry;
10699 int rc1, rc2, rc3;
10700 int varStatus;
10701 int num;
10702
10703 /* Variation set up */
10704 memset(buf1, 0, sizeof(buf1));
10705 memset(buf2, 0, sizeof(buf2));
10706 memset(buf3, 0, sizeof(buf3));
10707 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
10708 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
10709 /* No clean up */
10710 } else
10711 if ((rc =
10712 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
10713 &dhlen)) == -1) {
10714 rmdir(DUMMY_SUBDIR);
10715 } else if ((rc = system(command)) == -1) {
10716 dm_handle_free(dhanp, dhlen);
10717 rmdir(DUMMY_SUBDIR);
10718 } else
10719 if ((rc =
10720 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10721 &loc)) == -1) {
10722 remove(DUMMY_SUBDIR_FILE);
10723 dm_handle_free(dhanp, dhlen);
10724 rmdir(DUMMY_SUBDIR);
10725 }
10726 if (rc == -1) {
10727 DMLOG_PRINT(DMLVL_DEBUG,
10728 "Unable to set up variation! (errno = %d)\n",
10729 errno);
10730 DMVAR_SKIP();
10731 } else {
10732 /* Variation */
10733 DMLOG_PRINT(DMLVL_DEBUG,
10734 "%s(DM_AT_STAT over three calls, third buf too small)\n",
10735 szFuncName);
10736 rc1 =
10737 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10738 DM_AT_STAT, &loc, sizeof(buf1),
10739 buf1, &rlen1);
10740 DMLOG_PRINT(DMLVL_DEBUG,
10741 "1st call: rc %d, rlen %d, loc %llx\n", rc1,
10742 rlen1, loc);
10743 rc2 =
10744 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10745 DM_AT_STAT, &loc, sizeof(buf2),
10746 buf2, &rlen2);
10747 DMLOG_PRINT(DMLVL_DEBUG,
10748 "2nd call: rc %d, rlen %d, loc %llx\n", rc2,
10749 rlen2, loc);
10750 rc3 =
10751 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10752 DM_AT_STAT, &loc, sizeof(buf3),
10753 buf3, &rlen3);
10754 DMLOG_PRINT(DMLVL_DEBUG,
10755 "3rd call: rc %d, rlen %d, loc %llx\n", rc3,
10756 rlen3, loc);
10757 varStatus = DMSTAT_PASS;
10758 if (rc1 == 1) {
10759 if (((num = GetNumDirEntry(buf1)) == 1)
10760 && (rlen1 >= MIN_ENTRYLEN)) {
10761 DMLOG_PRINT(DMLVL_DEBUG,
10762 "1st call attrs:\n");
10763 LogDirAttrs(buf1, DM_AT_STAT);
10764 if ((entry =
10765 GetDirEntry(buf1,
10766 CURRENT_DIR)) !=
10767 NULL) {
10768 DMLOG_PRINT(DMLVL_DEBUG,
10769 "%s 1st call returned expected rc = %d and %d entry %s in buffer\n",
10770 szFuncName, rc1,
10771 num, CURRENT_DIR);
10772 } else {
10773 DMLOG_PRINT(DMLVL_ERR,
10774 "%s 1st call returned expected rc = %d but entry %s not in buffer\n",
10775 szFuncName, rc1,
10776 CURRENT_DIR);
10777 varStatus = DMSTAT_FAIL;
10778 }
10779 } else {
10780 DMLOG_PRINT(DMLVL_ERR,
10781 "%s 1st call returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
10782 szFuncName, rc1, rlen1,
10783 num);
10784 varStatus = DMSTAT_FAIL;
10785 }
10786 } else {
10787 DMLOG_PRINT(DMLVL_ERR,
10788 "%s 1st call returned unexpected rc = %d\n",
10789 szFuncName, rc1);
10790 varStatus = DMSTAT_FAIL;
10791 }
10792 if (rc2 == 1) {
10793 if (((num = GetNumDirEntry(buf2)) == 1)
10794 && (rlen2 >= MIN_ENTRYLEN)) {
10795 DMLOG_PRINT(DMLVL_DEBUG,
10796 "2nd call attrs:\n");
10797 LogDirAttrs(buf2, DM_AT_STAT);
10798 if ((entry =
10799 GetDirEntry(buf2,
10800 PARENT_DIR)) != NULL) {
10801 DMLOG_PRINT(DMLVL_DEBUG,
10802 "%s 2nd call returned expected rc = %d and %d entry %s in buffer\n",
10803 szFuncName, rc2,
10804 num, PARENT_DIR);
10805 } else {
10806 DMLOG_PRINT(DMLVL_ERR,
10807 "%s 2nd call returned expected rc = %d but entry %s not in buffer\n",
10808 szFuncName, rc2,
10809 PARENT_DIR);
10810 varStatus = DMSTAT_FAIL;
10811 }
10812 } else {
10813 DMLOG_PRINT(DMLVL_ERR,
10814 "%s 2nd call returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
10815 szFuncName, rc2, rlen2,
10816 num);
10817 varStatus = DMSTAT_FAIL;
10818 }
10819 } else {
10820 DMLOG_PRINT(DMLVL_ERR,
10821 "%s 2nd call returned unexpected rc = %d\n",
10822 szFuncName, rc2);
10823 varStatus = DMSTAT_FAIL;
10824 }
10825 if (rc3 == 1) {
10826 if (rlen3 == 0) {
10827 DMLOG_PRINT(DMLVL_DEBUG,
10828 "%s 3rd call returned expected rc = %d and empty buffer\n",
10829 szFuncName, rc3);
10830 } else {
10831 DMLOG_PRINT(DMLVL_ERR,
10832 "%s 3rd call returned expected rc = %d but unexpected rlen = %d\n",
10833 szFuncName, rc3, rlen3);
10834 varStatus = DMSTAT_FAIL;
10835 }
10836 } else {
10837 DMLOG_PRINT(DMLVL_ERR,
10838 "%s 3rd call returned unexpected rc = %d\n",
10839 szFuncName, rc3);
10840 varStatus = DMSTAT_FAIL;
10841 }
10842 DMVAR_END(varStatus);
10843
10844 /* Variation clean up */
10845 rc = remove(DUMMY_SUBDIR_FILE);
10846 rc |= rmdir(DUMMY_SUBDIR);
10847 if (rc == -1) {
10848 DMLOG_PRINT(DMLVL_DEBUG,
10849 "Unable to clean up variation! (errno = %d)\n",
10850 errno);
10851 }
10852 dm_handle_free(dhanp, dhlen);
10853 }
10854 }
10855
10856 /*
10857 * TEST : dm_get_dirattrs - DM_AT_STAT returned over three calls
10858 * EXPECTED: rc = 1, 1, 0
10859 */
10860 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 27)) {
10861 void *dhanp;
10862 size_t dhlen;
10863 dm_attrloc_t loc;
10864 char buf1[ATTR_SMALLLEN];
10865 char buf2[ATTR_SMALLLEN];
10866 char buf3[ATTR_SMALLLEN];
10867 size_t rlen1, rlen2, rlen3;
10868 dm_stat_t *entry;
10869 int rc1, rc2, rc3;
10870 int varStatus;
10871 int num;
10872
10873 /* Variation set up */
10874 memset(buf1, 0, sizeof(buf1));
10875 memset(buf2, 0, sizeof(buf2));
10876 memset(buf3, 0, sizeof(buf3));
10877 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
10878 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
10879 /* No clean up */
10880 } else
10881 if ((rc =
10882 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
10883 &dhlen)) == -1) {
10884 rmdir(DUMMY_SUBDIR);
10885 } else if ((rc = system(command)) == -1) {
10886 dm_handle_free(dhanp, dhlen);
10887 rmdir(DUMMY_SUBDIR);
10888 } else
10889 if ((rc =
10890 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
10891 &loc)) == -1) {
10892 remove(DUMMY_SUBDIR_FILE);
10893 dm_handle_free(dhanp, dhlen);
10894 rmdir(DUMMY_SUBDIR);
10895 }
10896 if (rc == -1) {
10897 DMLOG_PRINT(DMLVL_DEBUG,
10898 "Unable to set up variation! (errno = %d)\n",
10899 errno);
10900 DMVAR_SKIP();
10901 } else {
10902 /* Variation */
10903 DMLOG_PRINT(DMLVL_DEBUG,
10904 "%s(DM_AT_STAT over three calls)\n",
10905 szFuncName);
10906 rc1 =
10907 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10908 DM_AT_STAT, &loc, sizeof(buf1),
10909 buf1, &rlen1);
10910 DMLOG_PRINT(DMLVL_DEBUG,
10911 "1st call: rc %d, rlen %d, loc %llx\n", rc1,
10912 rlen1, loc);
10913 rc2 =
10914 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10915 DM_AT_STAT, &loc, sizeof(buf2),
10916 buf2, &rlen2);
10917 DMLOG_PRINT(DMLVL_DEBUG,
10918 "2nd call: rc %d, rlen %d, loc %llx\n", rc2,
10919 rlen2, loc);
10920 rc3 =
10921 dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
10922 DM_AT_STAT, &loc, sizeof(buf3),
10923 buf3, &rlen3);
10924 DMLOG_PRINT(DMLVL_DEBUG,
10925 "3rd call: rc %d, rlen %d, loc %llx\n", rc3,
10926 rlen3, loc);
10927 varStatus = DMSTAT_PASS;
10928 if (rc1 == 1) {
10929 if (((num = GetNumDirEntry(buf1)) == 1)
10930 && (rlen1 >= MIN_ENTRYLEN)) {
10931 DMLOG_PRINT(DMLVL_DEBUG,
10932 "1st call attrs:\n");
10933 LogDirAttrs(buf1, DM_AT_STAT);
10934 if ((entry =
10935 GetDirEntry(buf1,
10936 CURRENT_DIR)) !=
10937 NULL) {
10938 DMLOG_PRINT(DMLVL_DEBUG,
10939 "%s 1st call returned expected rc = %d and %d entry %s in buffer\n",
10940 szFuncName, rc1,
10941 num, CURRENT_DIR);
10942 } else {
10943 DMLOG_PRINT(DMLVL_ERR,
10944 "%s 1st call returned expected rc = %d but entry %s not in buffer\n",
10945 szFuncName, rc1,
10946 CURRENT_DIR);
10947 varStatus = DMSTAT_FAIL;
10948 }
10949 } else {
10950 DMLOG_PRINT(DMLVL_ERR,
10951 "%s 1st call returned expected rc = %d but unexpected rlen = %d\n and/or number of entries in buffer %d",
10952 szFuncName, rc1, rlen1,
10953 num);
10954 varStatus = DMSTAT_FAIL;
10955 }
10956 } else {
10957 DMLOG_PRINT(DMLVL_ERR,
10958 "%s 1st call returned unexpected rc = %d\n",
10959 szFuncName, rc1);
10960 varStatus = DMSTAT_FAIL;
10961 }
10962 if (rc2 == 1) {
10963 if (((num = GetNumDirEntry(buf2)) == 1)
10964 && (rlen2 >= MIN_ENTRYLEN)) {
10965 DMLOG_PRINT(DMLVL_DEBUG,
10966 "2nd call attrs:\n");
10967 LogDirAttrs(buf2, DM_AT_STAT);
10968 if ((entry =
10969 GetDirEntry(buf2,
10970 PARENT_DIR)) != NULL) {
10971 DMLOG_PRINT(DMLVL_DEBUG,
10972 "%s 2nd call returned expected rc = %d and %d entry %s in buffer\n",
10973 szFuncName, rc2,
10974 num, PARENT_DIR);
10975 } else {
10976 DMLOG_PRINT(DMLVL_ERR,
10977 "%s 2nd call returned expected rc = %d but entry %s not in buffer\n",
10978 szFuncName, rc2,
10979 PARENT_DIR);
10980 varStatus = DMSTAT_FAIL;
10981 }
10982 } else {
10983 DMLOG_PRINT(DMLVL_ERR,
10984 "%s 2nd call returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
10985 szFuncName, rc2, rlen2,
10986 num);
10987 varStatus = DMSTAT_FAIL;
10988 }
10989 } else {
10990 DMLOG_PRINT(DMLVL_ERR,
10991 "%s 2nd call returned unexpected rc = %d\n",
10992 szFuncName, rc2);
10993 varStatus = DMSTAT_FAIL;
10994 }
10995 if (rc3 == 0) {
10996 if (((num = GetNumDirEntry(buf3)) == 1)
10997 && (rlen3 >= MIN_ENTRYLEN)) {
10998 DMLOG_PRINT(DMLVL_DEBUG,
10999 "3rd call attrs:\n");
11000 LogDirAttrs(buf3, DM_AT_STAT);
11001 if ((entry =
11002 GetDirEntry(buf3,
11003 DUMMY_FILE)) != NULL) {
11004 DMLOG_PRINT(DMLVL_DEBUG,
11005 "%s 3rd call returned expected rc = %d and %d entry %s in buffer\n",
11006 szFuncName, rc3,
11007 num, DUMMY_FILE);
11008 } else {
11009 DMLOG_PRINT(DMLVL_ERR,
11010 "%s 3rd call returned expected rc = %d but entry %s not in buffer\n",
11011 szFuncName, rc3,
11012 DUMMY_FILE);
11013 varStatus = DMSTAT_FAIL;
11014 }
11015 } else {
11016 DMLOG_PRINT(DMLVL_ERR,
11017 "%s 3rd call returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
11018 szFuncName, rc3, rlen3,
11019 num);
11020 varStatus = DMSTAT_FAIL;
11021 }
11022 } else {
11023 DMLOG_PRINT(DMLVL_ERR,
11024 "%s 3rd call returned unexpected rc = %d\n",
11025 szFuncName, rc3);
11026 varStatus = DMSTAT_FAIL;
11027 }
11028 DMVAR_END(varStatus);
11029
11030 /* Variation clean up */
11031 rc = remove(DUMMY_SUBDIR_FILE);
11032 rc |= rmdir(DUMMY_SUBDIR);
11033 if (rc == -1) {
11034 DMLOG_PRINT(DMLVL_DEBUG,
11035 "Unable to clean up variation! (errno = %d)\n",
11036 errno);
11037 }
11038 dm_handle_free(dhanp, dhlen);
11039 }
11040 }
11041
11042 /*
11043 * TEST : dm_get_dirattrs - DM_AT_STAT with one buffer (files
11044 * returned from jfs_readdir > files fit in buffer)
11045 * EXPECTED: rc = 1
11046 */
11047 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 28)) {
11048 void *dhanp;
11049 size_t dhlen;
11050 dm_attrloc_t loc;
11051 char buf[ATTR_SMALLLEN * (DIRENTS_FILES - 1)];
11052 size_t rlen;
11053 dm_stat_t *entry;
11054 int varStatus;
11055 int i;
11056 char *filename;
11057 int num;
11058
11059 /* Variation set up */
11060 memset(buf, 0, sizeof(buf));
11061 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
11062 /* No clean up */
11063 } else
11064 if ((rc =
11065 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
11066 &dhlen)) == -1) {
11067 rmdir(DUMMY_SUBDIR);
11068 } else {
11069 for (i = 0; i < NUM_FILES && rc == 0; i++) {
11070 sprintf(command, "cp %s %s.%3.3d", DUMMY_TMP,
11071 DUMMY_SUBDIR_FILE, i);
11072 rc = system(command);
11073 }
11074 if ((rc == -1) ||
11075 ((rc =
11076 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
11077 &loc)) == -1)) {
11078 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11079 rc = system(command);
11080 }
11081 }
11082 if (rc == -1) {
11083 DMLOG_PRINT(DMLVL_DEBUG,
11084 "Unable to set up variation! (errno = %d)\n",
11085 errno);
11086 DMVAR_SKIP();
11087 } else {
11088 /* Variation */
11089 DMLOG_PRINT(DMLVL_DEBUG,
11090 "%s(DM_AT_STAT with %d files)\n",
11091 szFuncName, DIRENTS_FILES - 1);
11092 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
11093 DM_AT_STAT, &loc, sizeof(buf), buf,
11094 &rlen);
11095 DMLOG_PRINT(DMLVL_DEBUG,
11096 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
11097 rlen);
11098 varStatus = DMSTAT_PASS;
11099 if (rc == 1) {
11100 if (((num =
11101 GetNumDirEntry(buf)) == DIRENTS_FILES - 1)
11102 && (rlen >=
11103 (DIRENTS_FILES - 1) * MIN_ENTRYLEN)) {
11104 filename = strchr(command, '/') + 1;
11105 DMLOG_PRINT(DMLVL_DEBUG, "attrs:\n");
11106 LogDirAttrs(buf, DM_AT_STAT);
11107 if ((entry =
11108 GetDirEntry(buf,
11109 filename)) == NULL) {
11110 if (((entry =
11111 GetLastDirEntry(buf)) !=
11112 NULL)
11113 && (entry->dt_compname.
11114 vd_length > 0)) {
11115 DMLOG_PRINT(DMLVL_DEBUG,
11116 "%s returned expected rc = %d, expected number of entries in buffer %d, and neither entry %s nor empty entry in buffer\n",
11117 szFuncName,
11118 rc, num,
11119 filename);
11120 } else {
11121 DMLOG_PRINT(DMLVL_ERR,
11122 "%s returned expected rc = %d but empty entry in buffer\n",
11123 szFuncName,
11124 rc,
11125 filename);
11126 varStatus = DMSTAT_FAIL;
11127 }
11128 } else {
11129 DMLOG_PRINT(DMLVL_ERR,
11130 "%s returned expected rc = %d but entry %s in buffer\n",
11131 szFuncName, rc,
11132 filename);
11133 varStatus = DMSTAT_FAIL;
11134 }
11135 } else {
11136 DMLOG_PRINT(DMLVL_ERR,
11137 "%s returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
11138 szFuncName, rc, rlen, num);
11139 varStatus = DMSTAT_FAIL;
11140 }
11141 } else {
11142 DMLOG_PRINT(DMLVL_ERR,
11143 "%s returned unexpected rc = %d\n",
11144 szFuncName, rc);
11145 varStatus = DMSTAT_FAIL;
11146 }
11147 DMVAR_END(varStatus);
11148
11149 /* Variation clean up */
11150 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11151 rc = system(command);
11152 if (rc == -1) {
11153 DMLOG_PRINT(DMLVL_DEBUG,
11154 "Unable to clean up variation! (errno = %d)\n",
11155 errno);
11156 }
11157 dm_handle_free(dhanp, dhlen);
11158 }
11159 }
11160
11161 /*
11162 * TEST : dm_get_dirattrs - DM_AT_STAT with one buffer (files
11163 * returned from jfs_readdir > files fit in buffer)
11164 * EXPECTED: rc = 1
11165 */
11166 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 29)) {
11167 void *dhanp;
11168 size_t dhlen;
11169 dm_attrloc_t loc;
11170 char buf[ATTR_SMALLLEN * DIRENTS_FILES];
11171 size_t rlen;
11172 dm_stat_t *entry;
11173 int varStatus;
11174 int i;
11175 char *filename;
11176 int num;
11177
11178 /* Variation set up */
11179 memset(buf, 0, sizeof(buf));
11180 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
11181 /* No clean up */
11182 } else
11183 if ((rc =
11184 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
11185 &dhlen)) == -1) {
11186 rmdir(DUMMY_SUBDIR);
11187 } else {
11188 for (i = 0; i < NUM_FILES && rc == 0; i++) {
11189 sprintf(command, "cp %s %s.%3.3d", DUMMY_TMP,
11190 DUMMY_SUBDIR_FILE, i);
11191 rc = system(command);
11192 }
11193 if ((rc == -1) ||
11194 ((rc =
11195 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
11196 &loc)) == -1)) {
11197 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11198 rc = system(command);
11199 }
11200 }
11201 if (rc == -1) {
11202 DMLOG_PRINT(DMLVL_DEBUG,
11203 "Unable to set up variation! (errno = %d)\n",
11204 errno);
11205 DMVAR_SKIP();
11206 } else {
11207 /* Variation */
11208 DMLOG_PRINT(DMLVL_DEBUG,
11209 "%s(DM_AT_STAT with %d files)\n",
11210 szFuncName, DIRENTS_FILES);
11211 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
11212 DM_AT_STAT, &loc, sizeof(buf), buf,
11213 &rlen);
11214 DMLOG_PRINT(DMLVL_DEBUG,
11215 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
11216 rlen);
11217 varStatus = DMSTAT_PASS;
11218 if (rc == 1) {
11219 if (((num =
11220 GetNumDirEntry(buf)) == DIRENTS_FILES)
11221 && (rlen >= DIRENTS_FILES * MIN_ENTRYLEN)) {
11222 filename = strchr(command, '/') + 1;
11223 DMLOG_PRINT(DMLVL_DEBUG, "attrs:\n");
11224 LogDirAttrs(buf, DM_AT_STAT);
11225 if ((entry =
11226 GetDirEntry(buf,
11227 filename)) == NULL) {
11228 if (((entry =
11229 GetLastDirEntry(buf)) !=
11230 NULL)
11231 && (entry->dt_compname.
11232 vd_length > 0)) {
11233 DMLOG_PRINT(DMLVL_DEBUG,
11234 "%s returned expected rc = %d, expected number of entries in buffer %d, and neither entry %s nor empty entry in buffer\n",
11235 szFuncName,
11236 rc, num,
11237 filename);
11238 } else {
11239 DMLOG_PRINT(DMLVL_ERR,
11240 "%s returned expected rc = %d but empty entry in buffer\n",
11241 szFuncName,
11242 rc,
11243 filename);
11244 varStatus = DMSTAT_FAIL;
11245 }
11246 } else {
11247 DMLOG_PRINT(DMLVL_ERR,
11248 "%s returned expected rc = %d but entry %s in buffer\n",
11249 szFuncName, rc,
11250 filename);
11251 varStatus = DMSTAT_FAIL;
11252 }
11253 } else {
11254 DMLOG_PRINT(DMLVL_ERR,
11255 "%s returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
11256 szFuncName, rc, rlen, num);
11257 varStatus = DMSTAT_FAIL;
11258 }
11259 } else {
11260 DMLOG_PRINT(DMLVL_ERR,
11261 "%s returned unexpected rc = %d\n",
11262 szFuncName, rc);
11263 varStatus = DMSTAT_FAIL;
11264 }
11265 DMVAR_END(varStatus);
11266
11267 /* Variation clean up */
11268 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11269 rc = system(command);
11270 if (rc == -1) {
11271 DMLOG_PRINT(DMLVL_DEBUG,
11272 "Unable to clean up variation! (errno = %d)\n",
11273 errno);
11274 }
11275 dm_handle_free(dhanp, dhlen);
11276 }
11277 }
11278
11279 /*
11280 * TEST : dm_get_dirattrs - DM_AT_STAT with one buffer (files
11281 * returned from jfs_readdir > files fit in buffer)
11282 * EXPECTED: rc = 1
11283 */
11284 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 30)) {
11285 void *dhanp;
11286 size_t dhlen;
11287 dm_attrloc_t loc;
11288 char buf[ATTR_SMALLLEN * (DIRENTS_FILES + 1)];
11289 size_t rlen;
11290 dm_stat_t *entry;
11291 int varStatus;
11292 int i;
11293 char *filename;
11294 int num;
11295
11296 /* Variation set up */
11297 memset(buf, 0, sizeof(buf));
11298 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
11299 /* No clean up */
11300 } else
11301 if ((rc =
11302 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
11303 &dhlen)) == -1) {
11304 rmdir(DUMMY_SUBDIR);
11305 } else {
11306 for (i = 0; i < NUM_FILES && rc == 0; i++) {
11307 sprintf(command, "cp %s %s.%3.3d", DUMMY_TMP,
11308 DUMMY_SUBDIR_FILE, i);
11309 rc = system(command);
11310 }
11311 if ((rc == -1) ||
11312 ((rc =
11313 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
11314 &loc)) == -1)) {
11315 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11316 rc = system(command);
11317 }
11318 }
11319 if (rc == -1) {
11320 DMLOG_PRINT(DMLVL_DEBUG,
11321 "Unable to set up variation! (errno = %d)\n",
11322 errno);
11323 DMVAR_SKIP();
11324 } else {
11325 /* Variation */
11326 DMLOG_PRINT(DMLVL_DEBUG,
11327 "%s(DM_AT_STAT with %d files)\n",
11328 szFuncName, DIRENTS_FILES + 1);
11329 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
11330 DM_AT_STAT, &loc, sizeof(buf), buf,
11331 &rlen);
11332 DMLOG_PRINT(DMLVL_DEBUG,
11333 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
11334 rlen);
11335 varStatus = DMSTAT_PASS;
11336 if (rc == 1) {
11337 if (((num =
11338 GetNumDirEntry(buf)) == DIRENTS_FILES + 1)
11339 && (rlen >=
11340 (DIRENTS_FILES + 1) * MIN_ENTRYLEN)) {
11341 filename = strchr(command, '/') + 1;
11342 DMLOG_PRINT(DMLVL_DEBUG, "attrs:\n");
11343 LogDirAttrs(buf, DM_AT_STAT);
11344 if ((entry =
11345 GetDirEntry(buf,
11346 filename)) == NULL) {
11347 if (((entry =
11348 GetLastDirEntry(buf)) !=
11349 NULL)
11350 && (entry->dt_compname.
11351 vd_length > 0)) {
11352 DMLOG_PRINT(DMLVL_DEBUG,
11353 "%s returned expected rc = %d, expected number of entries in buffer %d, and neither entry %s nor empty entry in buffer\n",
11354 szFuncName,
11355 rc, num,
11356 filename);
11357 } else {
11358 DMLOG_PRINT(DMLVL_ERR,
11359 "%s returned expected rc = %d but empty entry in buffer\n",
11360 szFuncName,
11361 rc,
11362 filename);
11363 varStatus = DMSTAT_FAIL;
11364 }
11365 } else {
11366 DMLOG_PRINT(DMLVL_ERR,
11367 "%s returned expected rc = %d but entry %s in buffer\n",
11368 szFuncName, rc,
11369 filename);
11370 varStatus = DMSTAT_FAIL;
11371 }
11372 } else {
11373 DMLOG_PRINT(DMLVL_ERR,
11374 "%s returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
11375 szFuncName, rc, rlen, num);
11376 varStatus = DMSTAT_FAIL;
11377 }
11378 } else {
11379 DMLOG_PRINT(DMLVL_ERR,
11380 "%s returned unexpected rc = %d\n",
11381 szFuncName, rc);
11382 varStatus = DMSTAT_FAIL;
11383 }
11384 DMVAR_END(varStatus);
11385
11386 /* Variation clean up */
11387 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11388 rc = system(command);
11389 if (rc == -1) {
11390 DMLOG_PRINT(DMLVL_DEBUG,
11391 "Unable to clean up variation! (errno = %d)\n",
11392 errno);
11393 }
11394 dm_handle_free(dhanp, dhlen);
11395 }
11396 }
11397
11398 /*
11399 * TEST : dm_get_dirattrs - DM_AT_STAT with one buffer (files
11400 * returned from jfs_readdir > files fit in buffer)
11401 * EXPECTED: rc = 1
11402 */
11403 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 31)) {
11404 void *dhanp;
11405 size_t dhlen;
11406 dm_attrloc_t loc;
11407 char buf[ATTR_SMALLLEN * ((2 * DIRENTS_FILES) - 1)];
11408 size_t rlen;
11409 dm_stat_t *entry;
11410 int varStatus;
11411 int i;
11412 char *filename;
11413 int num;
11414
11415 /* Variation set up */
11416 memset(buf, 0, sizeof(buf));
11417 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
11418 /* No clean up */
11419 } else
11420 if ((rc =
11421 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
11422 &dhlen)) == -1) {
11423 rmdir(DUMMY_SUBDIR);
11424 } else {
11425 for (i = 0; i < NUM_FILES && rc == 0; i++) {
11426 sprintf(command, "cp %s %s.%3.3d", DUMMY_TMP,
11427 DUMMY_SUBDIR_FILE, i);
11428 rc = system(command);
11429 }
11430 if ((rc == -1) ||
11431 ((rc =
11432 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
11433 &loc)) == -1)) {
11434 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11435 rc = system(command);
11436 }
11437 }
11438 if (rc == -1) {
11439 DMLOG_PRINT(DMLVL_DEBUG,
11440 "Unable to set up variation! (errno = %d)\n",
11441 errno);
11442 DMVAR_SKIP();
11443 } else {
11444 /* Variation */
11445 DMLOG_PRINT(DMLVL_DEBUG,
11446 "%s(DM_AT_STAT with %d files)\n",
11447 szFuncName, (2 * DIRENTS_FILES) - 1);
11448 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
11449 DM_AT_STAT, &loc, sizeof(buf), buf,
11450 &rlen);
11451 DMLOG_PRINT(DMLVL_DEBUG,
11452 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
11453 rlen);
11454 varStatus = DMSTAT_PASS;
11455 if (rc == 1) {
11456 if (((num =
11457 GetNumDirEntry(buf)) ==
11458 (2 * DIRENTS_FILES) - 1)
11459 && (rlen >=
11460 ((2 * DIRENTS_FILES) -
11461 1) * MIN_ENTRYLEN)) {
11462 filename = strchr(command, '/') + 1;
11463 DMLOG_PRINT(DMLVL_DEBUG, "attrs:\n");
11464 LogDirAttrs(buf, DM_AT_STAT);
11465 if ((entry =
11466 GetDirEntry(buf,
11467 filename)) == NULL) {
11468 if (((entry =
11469 GetLastDirEntry(buf)) !=
11470 NULL)
11471 && (entry->dt_compname.
11472 vd_length > 0)) {
11473 DMLOG_PRINT(DMLVL_DEBUG,
11474 "%s returned expected rc = %d, expected number of entries in buffer %d, and neither entry %s nor empty entry in buffer\n",
11475 szFuncName,
11476 rc, num,
11477 filename);
11478 } else {
11479 DMLOG_PRINT(DMLVL_ERR,
11480 "%s returned expected rc = %d but empty entry in buffer\n",
11481 szFuncName,
11482 rc,
11483 filename);
11484 varStatus = DMSTAT_FAIL;
11485 }
11486 } else {
11487 DMLOG_PRINT(DMLVL_ERR,
11488 "%s returned expected rc = %d but entry %s in buffer\n",
11489 szFuncName, rc,
11490 filename);
11491 varStatus = DMSTAT_FAIL;
11492 }
11493 } else {
11494 DMLOG_PRINT(DMLVL_ERR,
11495 "%s returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
11496 szFuncName, rc, rlen, num);
11497 varStatus = DMSTAT_FAIL;
11498 }
11499 } else {
11500 DMLOG_PRINT(DMLVL_ERR,
11501 "%s returned unexpected rc = %d\n",
11502 szFuncName, rc);
11503 varStatus = DMSTAT_FAIL;
11504 }
11505 DMVAR_END(varStatus);
11506
11507 /* Variation clean up */
11508 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11509 rc = system(command);
11510 if (rc == -1) {
11511 DMLOG_PRINT(DMLVL_DEBUG,
11512 "Unable to clean up variation! (errno = %d)\n",
11513 errno);
11514 }
11515 dm_handle_free(dhanp, dhlen);
11516 }
11517 }
11518
11519 /*
11520 * TEST : dm_get_dirattrs - DM_AT_STAT with one buffer (files
11521 * returned from jfs_readdir > files fit in buffer)
11522 * EXPECTED: rc = 1
11523 */
11524 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 32)) {
11525 void *dhanp;
11526 size_t dhlen;
11527 dm_attrloc_t loc;
11528 char buf[ATTR_SMALLLEN * (2 * DIRENTS_FILES)];
11529 size_t rlen;
11530 dm_stat_t *entry;
11531 int varStatus;
11532 int i;
11533 char *filename;
11534 int num;
11535
11536 /* Variation set up */
11537 memset(buf, 0, sizeof(buf));
11538 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
11539 /* No clean up */
11540 } else
11541 if ((rc =
11542 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
11543 &dhlen)) == -1) {
11544 rmdir(DUMMY_SUBDIR);
11545 } else {
11546 for (i = 0; i < NUM_FILES && rc == 0; i++) {
11547 sprintf(command, "cp %s %s.%3.3d", DUMMY_TMP,
11548 DUMMY_SUBDIR_FILE, i);
11549 rc = system(command);
11550 }
11551 if ((rc == -1) ||
11552 ((rc =
11553 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
11554 &loc)) == -1)) {
11555 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11556 rc = system(command);
11557 }
11558 }
11559 if (rc == -1) {
11560 DMLOG_PRINT(DMLVL_DEBUG,
11561 "Unable to set up variation! (errno = %d)\n",
11562 errno);
11563 DMVAR_SKIP();
11564 } else {
11565 /* Variation */
11566 DMLOG_PRINT(DMLVL_DEBUG,
11567 "%s(DM_AT_STAT with %d files)\n",
11568 szFuncName, 2 * DIRENTS_FILES);
11569 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
11570 DM_AT_STAT, &loc, sizeof(buf), buf,
11571 &rlen);
11572 DMLOG_PRINT(DMLVL_DEBUG,
11573 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
11574 rlen);
11575 varStatus = DMSTAT_PASS;
11576 if (rc == 1) {
11577 if (((num =
11578 GetNumDirEntry(buf)) == 2 * DIRENTS_FILES)
11579 && (rlen >=
11580 (2 * DIRENTS_FILES) * MIN_ENTRYLEN)) {
11581 filename = strchr(command, '/') + 1;
11582 DMLOG_PRINT(DMLVL_DEBUG, "attrs:\n");
11583 LogDirAttrs(buf, DM_AT_STAT);
11584 if ((entry =
11585 GetDirEntry(buf,
11586 filename)) == NULL) {
11587 if (((entry =
11588 GetLastDirEntry(buf)) !=
11589 NULL)
11590 && (entry->dt_compname.
11591 vd_length > 0)) {
11592 DMLOG_PRINT(DMLVL_DEBUG,
11593 "%s returned expected rc = %d, expected number of entries in buffer %d, and neither entry %s nor empty entry in buffer\n",
11594 szFuncName,
11595 rc, num,
11596 filename);
11597 } else {
11598 DMLOG_PRINT(DMLVL_ERR,
11599 "%s returned expected rc = %d but empty entry in buffer\n",
11600 szFuncName,
11601 rc,
11602 filename);
11603 varStatus = DMSTAT_FAIL;
11604 }
11605 } else {
11606 DMLOG_PRINT(DMLVL_ERR,
11607 "%s returned expected rc = %d but entry %s in buffer\n",
11608 szFuncName, rc,
11609 filename);
11610 varStatus = DMSTAT_FAIL;
11611 }
11612 } else {
11613 DMLOG_PRINT(DMLVL_ERR,
11614 "%s returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
11615 szFuncName, rc, rlen, num);
11616 varStatus = DMSTAT_FAIL;
11617 }
11618 } else {
11619 DMLOG_PRINT(DMLVL_ERR,
11620 "%s returned unexpected rc = %d\n",
11621 szFuncName, rc);
11622 varStatus = DMSTAT_FAIL;
11623 }
11624 DMVAR_END(varStatus);
11625
11626 /* Variation clean up */
11627 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11628 rc = system(command);
11629 if (rc == -1) {
11630 DMLOG_PRINT(DMLVL_DEBUG,
11631 "Unable to clean up variation! (errno = %d)\n",
11632 errno);
11633 }
11634 dm_handle_free(dhanp, dhlen);
11635 }
11636 }
11637
11638 /*
11639 * TEST : dm_get_dirattrs - DM_AT_STAT with one buffer (files
11640 * returned from jfs_readdir > files fit in buffer)
11641 * EXPECTED: rc = 1
11642 */
11643 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 33)) {
11644 void *dhanp;
11645 size_t dhlen;
11646 dm_attrloc_t loc;
11647 char buf[ATTR_SMALLLEN * ((2 * DIRENTS_FILES) + 1)];
11648 size_t rlen;
11649 dm_stat_t *entry;
11650 int varStatus;
11651 int i;
11652 char *filename;
11653 int num;
11654
11655 /* Variation set up */
11656 memset(buf, 0, sizeof(buf));
11657 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
11658 /* No clean up */
11659 } else
11660 if ((rc =
11661 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
11662 &dhlen)) == -1) {
11663 rmdir(DUMMY_SUBDIR);
11664 } else {
11665 for (i = 0; i < NUM_FILES && rc == 0; i++) {
11666 sprintf(command, "cp %s %s.%3.3d", DUMMY_TMP,
11667 DUMMY_SUBDIR_FILE, i);
11668 rc = system(command);
11669 }
11670 if ((rc == -1) ||
11671 ((rc =
11672 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
11673 &loc)) == -1)) {
11674 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11675 rc = system(command);
11676 }
11677 }
11678 if (rc == -1) {
11679 DMLOG_PRINT(DMLVL_DEBUG,
11680 "Unable to set up variation! (errno = %d)\n",
11681 errno);
11682 DMVAR_SKIP();
11683 } else {
11684 /* Variation */
11685 DMLOG_PRINT(DMLVL_DEBUG,
11686 "%s(DM_AT_STAT with %d files)\n",
11687 szFuncName, (2 * DIRENTS_FILES) + 1);
11688 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
11689 DM_AT_STAT, &loc, sizeof(buf), buf,
11690 &rlen);
11691 DMLOG_PRINT(DMLVL_DEBUG,
11692 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
11693 rlen);
11694 varStatus = DMSTAT_PASS;
11695 if (rc == 1) {
11696 if (((num =
11697 GetNumDirEntry(buf)) ==
11698 (2 * DIRENTS_FILES) + 1)
11699 && (rlen >=
11700 ((2 * DIRENTS_FILES) +
11701 1) * MIN_ENTRYLEN)) {
11702 filename = strchr(command, '/') + 1;
11703 DMLOG_PRINT(DMLVL_DEBUG, "attrs:\n");
11704 LogDirAttrs(buf, DM_AT_STAT);
11705 if ((entry =
11706 GetDirEntry(buf,
11707 filename)) == NULL) {
11708 if (((entry =
11709 GetLastDirEntry(buf)) !=
11710 NULL)
11711 && (entry->dt_compname.
11712 vd_length > 0)) {
11713 DMLOG_PRINT(DMLVL_DEBUG,
11714 "%s returned expected rc = %d, expected number of entries in buffer %d, and neither entry %s nor empty entry in buffer\n",
11715 szFuncName,
11716 rc, num,
11717 filename);
11718 } else {
11719 DMLOG_PRINT(DMLVL_ERR,
11720 "%s returned expected rc = %d but empty entry in buffer\n",
11721 szFuncName,
11722 rc,
11723 filename);
11724 varStatus = DMSTAT_FAIL;
11725 }
11726 } else {
11727 DMLOG_PRINT(DMLVL_ERR,
11728 "%s returned expected rc = %d but entry %s in buffer\n",
11729 szFuncName, rc,
11730 filename);
11731 varStatus = DMSTAT_FAIL;
11732 }
11733 } else {
11734 DMLOG_PRINT(DMLVL_ERR,
11735 "%s returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
11736 szFuncName, rc, rlen, num);
11737 varStatus = DMSTAT_FAIL;
11738 }
11739 } else {
11740 DMLOG_PRINT(DMLVL_ERR,
11741 "%s returned unexpected rc = %d\n",
11742 szFuncName, rc);
11743 varStatus = DMSTAT_FAIL;
11744 }
11745 DMVAR_END(varStatus);
11746
11747 /* Variation clean up */
11748 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11749 rc = system(command);
11750 if (rc == -1) {
11751 DMLOG_PRINT(DMLVL_DEBUG,
11752 "Unable to clean up variation! (errno = %d)\n",
11753 errno);
11754 }
11755 dm_handle_free(dhanp, dhlen);
11756 }
11757 }
11758
11759 /*
11760 * TEST : dm_get_dirattrs - DM_AT_STAT with one buffer (files
11761 * returned from jfs_readdir < files fit in buffer)
11762 * EXPECTED: rc = 0
11763 */
11764 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 34)) {
11765 void *dhanp;
11766 size_t dhlen;
11767 dm_attrloc_t loc;
11768 char buf[ATTR_BIGLISTLEN];
11769 size_t rlen;
11770 dm_stat_t *entry;
11771 int varStatus;
11772 int i;
11773 char *filename;
11774 int num;
11775
11776 /* Variation set up */
11777 memset(buf, 0, sizeof(buf));
11778 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
11779 /* No clean up */
11780 } else
11781 if ((rc =
11782 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
11783 &dhlen)) == -1) {
11784 rmdir(DUMMY_SUBDIR);
11785 } else {
11786 for (i = 0; i < NUM_FILES && rc == 0; i++) {
11787 sprintf(command, "cp %s %s.%3.3d", DUMMY_TMP,
11788 DUMMY_SUBDIR_FILE, i);
11789 rc = system(command);
11790 }
11791 if ((rc == -1) ||
11792 ((rc =
11793 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
11794 &loc)) == -1)) {
11795 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11796 rc = system(command);
11797 }
11798 }
11799 if (rc == -1) {
11800 DMLOG_PRINT(DMLVL_DEBUG,
11801 "Unable to set up variation! (errno = %d)\n",
11802 errno);
11803 DMVAR_SKIP();
11804 } else {
11805 /* Variation */
11806 DMLOG_PRINT(DMLVL_DEBUG,
11807 "%s(DM_AT_STAT with %d files)\n",
11808 szFuncName, NUM_FILES + 2);
11809 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
11810 DM_AT_STAT, &loc, sizeof(buf), buf,
11811 &rlen);
11812 DMLOG_PRINT(DMLVL_DEBUG,
11813 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
11814 rlen);
11815 varStatus = DMSTAT_PASS;
11816 if (rc == 0) {
11817 if (((num =
11818 GetNumDirEntry(buf)) == NUM_FILES + 2)
11819 && (rlen >=
11820 (NUM_FILES + 2) * MIN_ENTRYLEN)) {
11821 filename = strchr(command, '/') + 1;
11822 DMLOG_PRINT(DMLVL_DEBUG, "attrs:\n");
11823 LogDirAttrs(buf, DM_AT_STAT);
11824 if ((entry =
11825 GetDirEntry(buf,
11826 filename)) != NULL) {
11827 DMLOG_PRINT(DMLVL_DEBUG,
11828 "%s returned expected rc = %d, expected number of entries in buffer %d, and entry %s in buffer\n",
11829 szFuncName, rc, num,
11830 filename);
11831 } else {
11832 DMLOG_PRINT(DMLVL_ERR,
11833 "%s returned expected rc = %d but entry %s not in buffer\n",
11834 szFuncName, rc,
11835 filename);
11836 varStatus = DMSTAT_FAIL;
11837 }
11838 } else {
11839 DMLOG_PRINT(DMLVL_ERR,
11840 "%s returned expected rc = %d but unexpected rlen = %d and/or number of entries in buffer %d\n",
11841 szFuncName, rc, rlen, num);
11842 varStatus = DMSTAT_FAIL;
11843 }
11844 } else {
11845 DMLOG_PRINT(DMLVL_ERR,
11846 "%s returned unexpected rc = %d\n",
11847 szFuncName, rc);
11848 varStatus = DMSTAT_FAIL;
11849 }
11850 DMVAR_END(varStatus);
11851
11852 /* Variation clean up */
11853 sprintf(command, "rm -rf %s", DUMMY_SUBDIR);
11854 rc = system(command);
11855 if (rc == -1) {
11856 DMLOG_PRINT(DMLVL_DEBUG,
11857 "Unable to clean up variation! (errno = %d)\n",
11858 errno);
11859 }
11860 dm_handle_free(dhanp, dhlen);
11861 }
11862 }
11863
11864 /*
11865 * TEST : dm_get_dirattrs - DM_AT_HANDLE with link
11866 * EXPECTED: rc = 0
11867 */
11868 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 35)) {
11869 void *dhanp, *fhanp1, *fhanp2;
11870 size_t dhlen, fhlen1, fhlen2;
11871 dm_attrloc_t loc;
11872 char buf[ATTR_LISTLEN];
11873 size_t rlen;
11874
11875 /* Variation set up */
11876 memset(buf, 0, ATTR_LISTLEN);
11877 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
11878 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
11879 /* No clean up */
11880 } else
11881 if ((rc =
11882 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
11883 &dhlen)) == -1) {
11884 rmdir(DUMMY_SUBDIR);
11885 } else if ((rc = system(command)) == -1) {
11886 dm_handle_free(dhanp, dhlen);
11887 rmdir(DUMMY_SUBDIR);
11888 } else
11889 if ((rc =
11890 dm_path_to_handle(DUMMY_SUBDIR_FILE, &fhanp1,
11891 &fhlen1)) == -1) {
11892 remove(DUMMY_SUBDIR_FILE);
11893 dm_handle_free(dhanp, dhlen);
11894 rmdir(DUMMY_SUBDIR);
11895 } else if ((rc = link(DUMMY_SUBDIR_FILE, DUMMY_SUBDIR_LINK)) ==
11896 -1) {
11897 dm_handle_free(fhanp1, fhlen1);
11898 remove(DUMMY_SUBDIR_FILE);
11899 dm_handle_free(dhanp, dhlen);
11900 rmdir(DUMMY_SUBDIR);
11901 } else
11902 if ((rc =
11903 dm_path_to_handle(DUMMY_SUBDIR_LINK, &fhanp2,
11904 &fhlen2)) == -1) {
11905 unlink(DUMMY_SUBDIR_LINK);
11906 dm_handle_free(fhanp1, fhlen1);
11907 remove(DUMMY_SUBDIR_FILE);
11908 dm_handle_free(dhanp, dhlen);
11909 rmdir(DUMMY_SUBDIR);
11910 } else
11911 if ((rc =
11912 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
11913 &loc)) == -1) {
11914 dm_handle_free(fhanp2, fhlen2);
11915 unlink(DUMMY_SUBDIR_LINK);
11916 dm_handle_free(fhanp1, fhlen1);
11917 remove(DUMMY_SUBDIR_FILE);
11918 dm_handle_free(dhanp, dhlen);
11919 rmdir(DUMMY_SUBDIR);
11920 }
11921 if (rc == -1) {
11922 DMLOG_PRINT(DMLVL_DEBUG,
11923 "Unable to set up variation! (errno = %d)\n",
11924 errno);
11925 DMVAR_SKIP();
11926 } else {
11927 /* Variation */
11928 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_AT_HANDLE with link)\n",
11929 szFuncName);
11930 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
11931 DM_AT_HANDLE, &loc, sizeof(buf),
11932 buf, &rlen);
11933 DMLOG_PRINT(DMLVL_DEBUG,
11934 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
11935 rlen);
11936 if (rc == 0) {
11937 dm_stat_t *entry1 =
11938 GetDirEntry(buf, DUMMY_FILE);
11939 dm_stat_t *entry2 =
11940 GetDirEntry(buf, DUMMY_LINK);
11941 LogDirAttrs(buf, DM_AT_HANDLE);
11942 if (entry1 != NULL) {
11943 if (dm_handle_cmp
11944 (fhanp1, fhlen1,
11945 DM_GET_VALUE(entry1, dt_handle,
11946 void *),
11947 DM_GET_LEN(entry1,
11948 dt_handle)) == 0) {
11949 if (entry2 != NULL) {
11950 if (dm_handle_cmp
11951 (fhanp2, fhlen2,
11952 DM_GET_VALUE
11953 (entry2, dt_handle,
11954 void *),
11955 DM_GET_LEN(entry2,
11956 dt_handle))
11957 == 0) {
11958 DMLOG_PRINT
11959 (DMLVL_DEBUG,
11960 "%s passed with expected rc = %d\n",
11961 szFuncName,
11962 0);
11963 DMVAR_PASS();
11964 } else {
11965 DMLOG_PRINT
11966 (DMLVL_ERR,
11967 "%s failed with expected rc = %d but link handles NOT same\n",
11968 szFuncName,
11969 0);
11970 DMVAR_FAIL();
11971 }
11972 } else {
11973 DMLOG_PRINT(DMLVL_ERR,
11974 "%s failed with expected rc = %d but unable to find entry %s",
11975 szFuncName,
11976 0,
11977 DUMMY_LINK);
11978 DMVAR_FAIL();
11979 }
11980 } else {
11981 DMLOG_PRINT(DMLVL_ERR,
11982 "%s failed with expected rc = %d but file handles NOT same\n",
11983 szFuncName, 0);
11984 DMVAR_FAIL();
11985 }
11986 } else {
11987 DMLOG_PRINT(DMLVL_ERR,
11988 "%s failed with expected rc = %d but unable to find entry %s",
11989 szFuncName, 0, DUMMY_FILE);
11990 DMVAR_FAIL();
11991 }
11992 } else {
11993 DMLOG_PRINT(DMLVL_ERR,
11994 "%s failed with unexpected rc = %d (errno = %d)\n",
11995 szFuncName, rc, errno);
11996 DMVAR_FAIL();
11997 }
11998
11999 /* Variation clean up */
12000 rc = remove(DUMMY_SUBDIR_FILE);
12001 rc |= remove(DUMMY_SUBDIR_LINK);
12002 rc |= rmdir(DUMMY_SUBDIR);
12003 if (rc == -1) {
12004 DMLOG_PRINT(DMLVL_DEBUG,
12005 "Unable to clean up variation! (errno = %d)\n",
12006 errno);
12007 }
12008 dm_handle_free(dhanp, dhlen);
12009 dm_handle_free(fhanp1, fhlen1);
12010 dm_handle_free(fhanp2, fhlen2);
12011 }
12012 }
12013
12014 /*
12015 * TEST : dm_get_dirattrs - DM_AT_EMASK (verify no handle)
12016 * EXPECTED: rc = 0
12017 *
12018 * This variation uncovered XFS BUG #28 (handle returned when
12019 * DM_AT_HANDLE not set in mask)
12020 */
12021 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 36)) {
12022 void *dhanp;
12023 size_t dhlen;
12024 dm_attrloc_t loc;
12025 char buf[ATTR_LISTLEN];
12026 size_t rlen;
12027
12028 /* Variation set up */
12029 memset(buf, 0, ATTR_LISTLEN);
12030 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
12031 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
12032 /* No clean up */
12033 } else
12034 if ((rc =
12035 dm_path_to_handle(DUMMY_SUBDIR, &dhanp,
12036 &dhlen)) == -1) {
12037 rmdir(DUMMY_SUBDIR);
12038 } else if (((rc = system(command)) == -1) ||
12039 ((rc =
12040 dm_init_attrloc(sid, dhanp, dhlen, DM_NO_TOKEN,
12041 &loc)) == -1)) {
12042 dm_handle_free(dhanp, dhlen);
12043 rmdir(DUMMY_SUBDIR);
12044 }
12045 if (rc == -1) {
12046 DMLOG_PRINT(DMLVL_DEBUG,
12047 "Unable to set up variation! (errno = %d)\n",
12048 errno);
12049 DMVAR_SKIP();
12050 } else {
12051 /* Variation */
12052 DMLOG_PRINT(DMLVL_DEBUG, "%s(~DM_AT_HANDLE)\n",
12053 szFuncName);
12054 rc = dm_get_dirattrs(sid, dhanp, dhlen, DM_NO_TOKEN,
12055 DM_AT_ALL_DIRATTRS &
12056 (~DM_AT_HANDLE), &loc, sizeof(buf),
12057 buf, &rlen);
12058 DMLOG_PRINT(DMLVL_DEBUG,
12059 "call: rc %d, loc %lld, rlen %d\n", rc, loc,
12060 rlen);
12061 if (rc == 0) {
12062 dm_stat_t *entry = GetDirEntry(buf, DUMMY_FILE);
12063 LogDirAttrs(buf, DM_AT_ALL_DIRATTRS);
12064 if (entry != NULL) {
12065 if ((entry->dt_handle.vd_offset == 0)
12066 && (entry->dt_handle.vd_length ==
12067 0)) {
12068 DMLOG_PRINT(DMLVL_DEBUG,
12069 "%s passed with expected rc = %d\n",
12070 szFuncName, 0);
12071 DMVAR_PASS();
12072 } else {
12073 DMLOG_PRINT(DMLVL_ERR,
12074 "%s failed with expected rc = %d but handle non-zero (offset %d, length %d)\n",
12075 szFuncName, 0,
12076 entry->dt_handle.
12077 vd_offset,
12078 entry->dt_handle.
12079 vd_length);
12080 DMVAR_FAIL();
12081 }
12082 } else {
12083 DMLOG_PRINT(DMLVL_ERR,
12084 "%s failed with expected rc = %d but unable to find entry %s",
12085 szFuncName, 0, DUMMY_FILE);
12086 DMVAR_FAIL();
12087 }
12088 } else {
12089 DMLOG_PRINT(DMLVL_ERR,
12090 "%s failed with unexpected rc = %d (errno = %d)\n",
12091 szFuncName, rc, errno);
12092 DMVAR_FAIL();
12093 }
12094
12095 /* Variation clean up */
12096 rc = remove(DUMMY_SUBDIR_FILE);
12097 rc |= rmdir(DUMMY_SUBDIR);
12098 if (rc == -1) {
12099 DMLOG_PRINT(DMLVL_DEBUG,
12100 "Unable to clean up variation! (errno = %d)\n",
12101 errno);
12102 }
12103 dm_handle_free(dhanp, dhlen);
12104 }
12105 }
12106
12107 /*
12108 * TEST : dm_get_dirattrs - fs handle
12109 * EXPECTED: rc = -1, errno = EINVAL
12110 */
12111 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 37)) {
12112 void *hanp;
12113 size_t hlen;
12114 dm_attrloc_t loc;
12115 char buf[ATTR_LISTLEN];
12116 size_t rlen;
12117
12118 /* Variation set up */
12119 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12120 if ((rc = system(command)) == -1) {
12121 /* No clean up */
12122 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12123 == -1) {
12124 remove(DUMMY_FILE);
12125 }
12126 if (rc == -1) {
12127 DMLOG_PRINT(DMLVL_DEBUG,
12128 "Unable to set up variation! (errno = %d)\n",
12129 errno);
12130 DMVAR_SKIP();
12131 } else {
12132 /* Variation */
12133 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName);
12134 rc = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN,
12135 DM_AT_EMASK, &loc, sizeof(buf),
12136 buf, &rlen);
12137 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12138
12139 /* Variation clean up */
12140 rc = remove(DUMMY_FILE);
12141 if (rc == -1) {
12142 DMLOG_PRINT(DMLVL_DEBUG,
12143 "Unable to clean up variation! (errno = %d)\n",
12144 errno);
12145 }
12146 dm_handle_free(hanp, hlen);
12147 }
12148 }
12149
12150 /*
12151 * TEST : dm_get_dirattrs - DM_NO_SESSION sid
12152 * EXPECTED: rc = -1, errno = EINVAL
12153 */
12154 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 38)) {
12155 void *hanp;
12156 size_t hlen;
12157 dm_attrloc_t loc;
12158 char buf[ATTR_LISTLEN];
12159 size_t rlen;
12160
12161 /* Variation set up */
12162 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_SUBDIR_FILE);
12163 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
12164 /* No clean up */
12165 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
12166 == -1) {
12167 rmdir(DUMMY_SUBDIR);
12168 } else
12169 if (((rc =
12170 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
12171 &loc)) == -1)
12172 || ((rc = system(command)) == -1)) {
12173 dm_handle_free(hanp, hlen);
12174 rmdir(DUMMY_SUBDIR);
12175 }
12176 if (rc == -1) {
12177 DMLOG_PRINT(DMLVL_DEBUG,
12178 "Unable to set up variation! (errno = %d)\n",
12179 errno);
12180 DMVAR_SKIP();
12181 } else {
12182 /* Variation */
12183 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
12184 szFuncName);
12185 rc = dm_get_dirattrs(DM_NO_SESSION, hanp, hlen,
12186 DM_NO_TOKEN, DM_AT_EMASK, &loc,
12187 sizeof(buf), buf, &rlen);
12188 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12189
12190 /* Variation clean up */
12191 rc = remove(DUMMY_SUBDIR_FILE);
12192 rc |= rmdir(DUMMY_SUBDIR);
12193 if (rc == -1) {
12194 DMLOG_PRINT(DMLVL_DEBUG,
12195 "Unable to clean up variation! (errno = %d)\n",
12196 errno);
12197 }
12198 dm_handle_free(hanp, hlen);
12199 }
12200 }
12201
12202 /*
12203 * TEST : dm_get_dirattrs - global handle
12204 * EXPECTED: rc = -1, errno = EBADF
12205 */
12206 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 39)) {
12207 void *hanp;
12208 size_t hlen;
12209 dm_attrloc_t loc;
12210 char buf[ATTR_LISTLEN];
12211 size_t rlen;
12212
12213 /* Variation set up */
12214 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
12215 /* No clean up */
12216 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
12217 == -1) {
12218 rmdir(DUMMY_SUBDIR);
12219 } else
12220 if ((rc =
12221 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
12222 &loc)) == -1) {
12223 dm_handle_free(hanp, hlen);
12224 rmdir(DUMMY_SUBDIR);
12225 }
12226 if (rc == -1) {
12227 DMLOG_PRINT(DMLVL_DEBUG,
12228 "Unable to set up variation! (errno = %d)\n",
12229 errno);
12230 DMVAR_SKIP();
12231 } else {
12232 /* Variation */
12233 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n",
12234 szFuncName);
12235 rc = dm_get_dirattrs(sid, DM_GLOBAL_HANP,
12236 DM_GLOBAL_HLEN, DM_NO_TOKEN,
12237 DM_AT_EMASK, &loc, sizeof(buf),
12238 buf, &rlen);
12239 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
12240
12241 /* Variation clean up */
12242 rc = rmdir(DUMMY_SUBDIR);
12243 if (rc == -1) {
12244 DMLOG_PRINT(DMLVL_DEBUG,
12245 "Unable to clean up variation! (errno = %d)\n",
12246 errno);
12247 }
12248 dm_handle_free(hanp, hlen);
12249 }
12250 }
12251
12252 /*
12253 * TEST : dm_get_dirattrs - invalidated hanp
12254 * EXPECTED: rc = -1, errno = EBADF
12255 */
12256 if (DMVAR_EXEC(GET_DIRATTRS_BASE + 40)) {
12257 void *hanp;
12258 size_t hlen;
12259 dm_attrloc_t loc;
12260 char buf[ATTR_LISTLEN];
12261 size_t rlen;
12262
12263 /* Variation set up */
12264 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
12265 /* No clean up */
12266 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
12267 == -1) {
12268 rmdir(DUMMY_SUBDIR);
12269 } else
12270 if ((rc =
12271 dm_init_attrloc(sid, hanp, hlen, DM_NO_TOKEN,
12272 &loc)) == -1) {
12273 dm_handle_free(hanp, hlen);
12274 rmdir(DUMMY_SUBDIR);
12275 } else if ((rc = rmdir(DUMMY_SUBDIR)) == -1) {
12276 dm_handle_free(hanp, hlen);
12277 }
12278 if (rc == -1) {
12279 DMLOG_PRINT(DMLVL_DEBUG,
12280 "Unable to set up variation! (errno = %d)\n",
12281 errno);
12282 DMVAR_SKIP();
12283 } else {
12284 /* Variation */
12285 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated hanp)\n",
12286 szFuncName);
12287 rc = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN,
12288 DM_AT_EMASK, &loc, sizeof(buf),
12289 buf, &rlen);
12290 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
12291
12292 /* Variation clean up */
12293 dm_handle_free(hanp, hlen);
12294 }
12295 }
12296
12297 szFuncName = "dm_set_inherit";
12298
12299 /*
12300 * TEST : dm_set_inherit - invalid sid
12301 * EXPECTED: rc = -1, errno = EINVAL
12302 */
12303 if (DMVAR_EXEC(SET_INHERIT_BASE + 1)) {
12304 int fd;
12305 void *hanp;
12306 size_t hlen;
12307 dm_attrname_t attrname;
12308
12309 /* Variation set up */
12310 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12311 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12312 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12313 if ((rc = system(command)) == -1) {
12314 /* No clean up */
12315 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12316 remove(DUMMY_FILE);
12317 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12318 == -1) {
12319 close(fd);
12320 remove(DUMMY_FILE);
12321 }
12322 if (fd == -1 || rc == -1) {
12323 DMLOG_PRINT(DMLVL_DEBUG,
12324 "Unable to set up variation! (errno = %d)\n",
12325 errno);
12326 DMVAR_SKIP();
12327 } else {
12328 /* Variation */
12329 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
12330 szFuncName);
12331 rc = dm_set_inherit(INVALID_ADDR, hanp, hlen,
12332 DM_NO_TOKEN, &attrname, 0);
12333 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12334
12335 /* Variation clean up */
12336 rc = close(fd);
12337 rc |= remove(DUMMY_FILE);
12338 if (rc == -1) {
12339 DMLOG_PRINT(DMLVL_DEBUG,
12340 "Unable to clean up variation! (errno = %d)\n",
12341 errno);
12342 }
12343 dm_handle_free(hanp, hlen);
12344 }
12345 }
12346
12347 /*
12348 * TEST : dm_set_inherit - invalid hanp
12349 * EXPECTED: rc = -1, errno = EFAULT
12350 */
12351 if (DMVAR_EXEC(SET_INHERIT_BASE + 2)) {
12352 int fd;
12353 void *hanp;
12354 size_t hlen;
12355 dm_attrname_t attrname;
12356
12357 /* Variation set up */
12358 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12359 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12360 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12361 if ((rc = system(command)) == -1) {
12362 /* No clean up */
12363 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12364 remove(DUMMY_FILE);
12365 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12366 == -1) {
12367 close(fd);
12368 remove(DUMMY_FILE);
12369 }
12370 if (fd == -1 || rc == -1) {
12371 DMLOG_PRINT(DMLVL_DEBUG,
12372 "Unable to set up variation! (errno = %d)\n",
12373 errno);
12374 DMVAR_SKIP();
12375 } else {
12376 /* Variation */
12377 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
12378 szFuncName);
12379 rc = dm_set_inherit(sid, (void *)INVALID_ADDR, hlen,
12380 DM_NO_TOKEN, &attrname, 0);
12381 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
12382
12383 /* Variation clean up */
12384 rc = close(fd);
12385 rc |= remove(DUMMY_FILE);
12386 if (rc == -1) {
12387 DMLOG_PRINT(DMLVL_DEBUG,
12388 "Unable to clean up variation! (errno = %d)\n",
12389 errno);
12390 }
12391 dm_handle_free(hanp, hlen);
12392 }
12393 }
12394
12395 /*
12396 * TEST : dm_set_inherit - invalid hlen
12397 * EXPECTED: rc = -1, errno = EBADF
12398 */
12399 if (DMVAR_EXEC(SET_INHERIT_BASE + 3)) {
12400 int fd;
12401 void *hanp;
12402 size_t hlen;
12403 dm_attrname_t attrname;
12404
12405 /* Variation set up */
12406 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12407 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12408 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12409 if ((rc = system(command)) == -1) {
12410 /* No clean up */
12411 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12412 remove(DUMMY_FILE);
12413 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12414 == -1) {
12415 close(fd);
12416 remove(DUMMY_FILE);
12417 }
12418 if (fd == -1 || rc == -1) {
12419 DMLOG_PRINT(DMLVL_DEBUG,
12420 "Unable to set up variation! (errno = %d)\n",
12421 errno);
12422 DMVAR_SKIP();
12423 } else {
12424 /* Variation */
12425 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
12426 szFuncName);
12427 rc = dm_set_inherit(sid, hanp, INVALID_ADDR,
12428 DM_NO_TOKEN, &attrname, 0);
12429 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
12430
12431 /* Variation clean up */
12432 rc = close(fd);
12433 rc |= remove(DUMMY_FILE);
12434 if (rc == -1) {
12435 DMLOG_PRINT(DMLVL_DEBUG,
12436 "Unable to clean up variation! (errno = %d)\n",
12437 errno);
12438 }
12439 dm_handle_free(hanp, hlen);
12440 }
12441 }
12442
12443 /*
12444 * TEST : dm_set_inherit - invalid token
12445 * EXPECTED: rc = -1, errno = EINVAL
12446 */
12447 if (DMVAR_EXEC(SET_INHERIT_BASE + 4)) {
12448 int fd;
12449 void *hanp;
12450 size_t hlen;
12451 dm_attrname_t attrname;
12452
12453 /* Variation set up */
12454 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12455 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12456 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12457 if ((rc = system(command)) == -1) {
12458 /* No clean up */
12459 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12460 remove(DUMMY_FILE);
12461 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12462 == -1) {
12463 close(fd);
12464 remove(DUMMY_FILE);
12465 }
12466 if (fd == -1 || rc == -1) {
12467 DMLOG_PRINT(DMLVL_DEBUG,
12468 "Unable to set up variation! (errno = %d)\n",
12469 errno);
12470 DMVAR_SKIP();
12471 } else {
12472 /* Variation */
12473 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
12474 szFuncName);
12475 rc = dm_set_inherit(sid, hanp, hlen, INVALID_ADDR,
12476 &attrname, 0);
12477 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12478
12479 /* Variation clean up */
12480 rc = close(fd);
12481 rc |= remove(DUMMY_FILE);
12482 if (rc == -1) {
12483 DMLOG_PRINT(DMLVL_DEBUG,
12484 "Unable to clean up variation! (errno = %d)\n",
12485 errno);
12486 }
12487 dm_handle_free(hanp, hlen);
12488 }
12489 }
12490
12491 /*
12492 * TEST : dm_set_inherit - invalid attrnamep
12493 * EXPECTED: rc = -1, errno = EFAULT
12494 */
12495 if (DMVAR_EXEC(SET_INHERIT_BASE + 5)) {
12496 int fd;
12497 void *hanp;
12498 size_t hlen;
12499 dm_attrname_t attrname;
12500
12501 /* Variation set up */
12502 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12503 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12504 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12505 if ((rc = system(command)) == -1) {
12506 /* No clean up */
12507 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12508 remove(DUMMY_FILE);
12509 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12510 == -1) {
12511 close(fd);
12512 remove(DUMMY_FILE);
12513 }
12514 if (fd == -1 || rc == -1) {
12515 DMLOG_PRINT(DMLVL_DEBUG,
12516 "Unable to set up variation! (errno = %d)\n",
12517 errno);
12518 DMVAR_SKIP();
12519 } else {
12520 /* Variation */
12521 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid attrnamep)\n",
12522 szFuncName);
12523 rc = dm_set_inherit(sid, hanp, hlen, DM_NO_TOKEN,
12524 (dm_attrname_t *) INVALID_ADDR, 0);
12525 DMVAR_ENDFAILEXP(szFuncName, -1, rc,
12526 persInheritAttr ? EFAULT : ENOSYS);
12527
12528 /* Variation clean up */
12529 rc = close(fd);
12530 rc |= remove(DUMMY_FILE);
12531 if (rc == -1) {
12532 DMLOG_PRINT(DMLVL_DEBUG,
12533 "Unable to clean up variation! (errno = %d)\n",
12534 errno);
12535 }
12536 dm_handle_free(hanp, hlen);
12537 }
12538 }
12539
12540 /*
12541 * TEST : dm_set_inherit - DM_NO_SESSION sid
12542 * EXPECTED: rc = -1, errno = EINVAL
12543 */
12544 if (DMVAR_EXEC(SET_INHERIT_BASE + 6)) {
12545 int fd;
12546 void *hanp;
12547 size_t hlen;
12548 dm_attrname_t attrname;
12549
12550 /* Variation set up */
12551 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12552 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12553 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12554 if ((rc = system(command)) == -1) {
12555 /* No clean up */
12556 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12557 remove(DUMMY_FILE);
12558 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12559 == -1) {
12560 close(fd);
12561 remove(DUMMY_FILE);
12562 }
12563 if (fd == -1 || rc == -1) {
12564 DMLOG_PRINT(DMLVL_DEBUG,
12565 "Unable to set up variation! (errno = %d)\n",
12566 errno);
12567 DMVAR_SKIP();
12568 } else {
12569 /* Variation */
12570 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
12571 szFuncName);
12572 rc = dm_set_inherit(DM_NO_SESSION, hanp, hlen,
12573 DM_NO_TOKEN, &attrname, 0);
12574 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12575
12576 /* Variation clean up */
12577 rc = close(fd);
12578 rc |= remove(DUMMY_FILE);
12579 if (rc == -1) {
12580 DMLOG_PRINT(DMLVL_DEBUG,
12581 "Unable to clean up variation! (errno = %d)\n",
12582 errno);
12583 }
12584 dm_handle_free(hanp, hlen);
12585 }
12586 }
12587
12588 /*
12589 * TEST : dm_set_inherit - global handle
12590 * EXPECTED: rc = -1, errno = EBADF
12591 */
12592 if (DMVAR_EXEC(SET_INHERIT_BASE + 7)) {
12593 dm_attrname_t attrname;
12594
12595 /* Variation set up */
12596 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12597 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12598
12599 /* Variation */
12600 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
12601 rc = dm_set_inherit(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
12602 DM_NO_TOKEN, &attrname, 0);
12603 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
12604
12605 /* Variation clean up */
12606 }
12607
12608 /*
12609 * TEST : dm_set_inherit - file handle
12610 * EXPECTED: rc = -1, errno = EINVAL
12611 */
12612 if (DMVAR_EXEC(SET_INHERIT_BASE + 8)) {
12613 int fd;
12614 void *hanp;
12615 size_t hlen;
12616 dm_attrname_t attrname;
12617
12618 /* Variation set up */
12619 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12620 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12621 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12622 if ((rc = system(command)) == -1) {
12623 /* No clean up */
12624 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12625 remove(DUMMY_FILE);
12626 } else if ((rc = dm_path_to_handle(DUMMY_FILE, &hanp, &hlen)) ==
12627 -1) {
12628 close(fd);
12629 remove(DUMMY_FILE);
12630 }
12631 if (fd == -1 || rc == -1) {
12632 DMLOG_PRINT(DMLVL_DEBUG,
12633 "Unable to set up variation! (errno = %d)\n",
12634 errno);
12635 DMVAR_SKIP();
12636 } else {
12637 /* Variation */
12638 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n",
12639 szFuncName);
12640 rc = dm_set_inherit(sid, hanp, hlen, DM_NO_TOKEN,
12641 &attrname, 0);
12642 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12643
12644 /* Variation clean up */
12645 rc = close(fd);
12646 rc |= remove(DUMMY_FILE);
12647 if (rc == -1) {
12648 DMLOG_PRINT(DMLVL_DEBUG,
12649 "Unable to clean up variation! (errno = %d)\n",
12650 errno);
12651 }
12652 dm_handle_free(hanp, hlen);
12653 }
12654 }
12655
12656 /*
12657 * TEST : dm_set_inherit - directory handle
12658 * EXPECTED: rc = -1, errno = EINVAL
12659 */
12660 if (DMVAR_EXEC(SET_INHERIT_BASE + 9)) {
12661 void *hanp;
12662 size_t hlen;
12663 dm_attrname_t attrname;
12664
12665 /* Variation set up */
12666 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12667 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12668 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
12669 /* No clean up */
12670 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
12671 == -1) {
12672 rmdir(DUMMY_SUBDIR);
12673 }
12674 if (rc == -1) {
12675 DMLOG_PRINT(DMLVL_DEBUG,
12676 "Unable to set up variation! (errno = %d)\n",
12677 errno);
12678 DMVAR_SKIP();
12679 } else {
12680 /* Variation */
12681 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir handle)\n",
12682 szFuncName);
12683 rc = dm_set_inherit(sid, hanp, hlen, DM_NO_TOKEN,
12684 &attrname, 0);
12685 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12686
12687 /* Variation clean up */
12688 rc = rmdir(DUMMY_SUBDIR);
12689 if (rc == -1) {
12690 DMLOG_PRINT(DMLVL_DEBUG,
12691 "Unable to clean up variation! (errno = %d)\n",
12692 errno);
12693 }
12694 dm_handle_free(hanp, hlen);
12695 }
12696 }
12697
12698 szFuncName = "dm_clear_inherit";
12699
12700 /*
12701 * TEST : dm_clear_inherit - invalid sid
12702 * EXPECTED: rc = -1, errno = EINVAL
12703 */
12704 if (DMVAR_EXEC(CLEAR_INHERIT_BASE + 1)) {
12705 int fd;
12706 void *hanp;
12707 size_t hlen;
12708 dm_attrname_t attrname;
12709
12710 /* Variation set up */
12711 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12712 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12713 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12714 if ((rc = system(command)) == -1) {
12715 /* No clean up */
12716 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12717 remove(DUMMY_FILE);
12718 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12719 == -1) {
12720 close(fd);
12721 remove(DUMMY_FILE);
12722 }
12723 if (fd == -1 || rc == -1) {
12724 DMLOG_PRINT(DMLVL_DEBUG,
12725 "Unable to set up variation! (errno = %d)\n",
12726 errno);
12727 DMVAR_SKIP();
12728 } else {
12729 /* Variation */
12730 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
12731 szFuncName);
12732 rc = dm_clear_inherit(INVALID_ADDR, hanp, hlen,
12733 DM_NO_TOKEN, &attrname);
12734 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12735
12736 /* Variation clean up */
12737 rc = close(fd);
12738 rc |= remove(DUMMY_FILE);
12739 if (rc == -1) {
12740 DMLOG_PRINT(DMLVL_DEBUG,
12741 "Unable to clean up variation! (errno = %d)\n",
12742 errno);
12743 }
12744 dm_handle_free(hanp, hlen);
12745 }
12746 }
12747
12748 /*
12749 * TEST : dm_clear_inherit - invalid hanp
12750 * EXPECTED: rc = -1, errno = EFAULT
12751 */
12752 if (DMVAR_EXEC(CLEAR_INHERIT_BASE + 2)) {
12753 int fd;
12754 void *hanp;
12755 size_t hlen;
12756 dm_attrname_t attrname;
12757
12758 /* Variation set up */
12759 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12760 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12761 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12762 if ((rc = system(command)) == -1) {
12763 /* No clean up */
12764 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12765 remove(DUMMY_FILE);
12766 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12767 == -1) {
12768 close(fd);
12769 remove(DUMMY_FILE);
12770 }
12771 if (fd == -1 || rc == -1) {
12772 DMLOG_PRINT(DMLVL_DEBUG,
12773 "Unable to set up variation! (errno = %d)\n",
12774 errno);
12775 DMVAR_SKIP();
12776 } else {
12777 /* Variation */
12778 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
12779 szFuncName);
12780 rc = dm_clear_inherit(sid, (void *)INVALID_ADDR, hlen,
12781 DM_NO_TOKEN, &attrname);
12782 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
12783
12784 /* Variation clean up */
12785 rc = close(fd);
12786 rc |= remove(DUMMY_FILE);
12787 if (rc == -1) {
12788 DMLOG_PRINT(DMLVL_DEBUG,
12789 "Unable to clean up variation! (errno = %d)\n",
12790 errno);
12791 }
12792 dm_handle_free(hanp, hlen);
12793 }
12794 }
12795
12796 /*
12797 * TEST : dm_clear_inherit - invalid hlen
12798 * EXPECTED: rc = -1, errno = EBADF
12799 */
12800 if (DMVAR_EXEC(CLEAR_INHERIT_BASE + 3)) {
12801 int fd;
12802 void *hanp;
12803 size_t hlen;
12804 dm_attrname_t attrname;
12805
12806 /* Variation set up */
12807 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12808 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12809 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12810 if ((rc = system(command)) == -1) {
12811 /* No clean up */
12812 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12813 remove(DUMMY_FILE);
12814 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12815 == -1) {
12816 close(fd);
12817 remove(DUMMY_FILE);
12818 }
12819 if (fd == -1 || rc == -1) {
12820 DMLOG_PRINT(DMLVL_DEBUG,
12821 "Unable to set up variation! (errno = %d)\n",
12822 errno);
12823 DMVAR_SKIP();
12824 } else {
12825 /* Variation */
12826 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
12827 szFuncName);
12828 rc = dm_clear_inherit(sid, hanp, INVALID_ADDR,
12829 DM_NO_TOKEN, &attrname);
12830 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
12831
12832 /* Variation clean up */
12833 rc = close(fd);
12834 rc |= remove(DUMMY_FILE);
12835 if (rc == -1) {
12836 DMLOG_PRINT(DMLVL_DEBUG,
12837 "Unable to clean up variation! (errno = %d)\n",
12838 errno);
12839 }
12840 dm_handle_free(hanp, hlen);
12841 }
12842 }
12843
12844 /*
12845 * TEST : dm_clear_inherit - invalid token
12846 * EXPECTED: rc = -1, errno = EINVAL
12847 */
12848 if (DMVAR_EXEC(CLEAR_INHERIT_BASE + 4)) {
12849 int fd;
12850 void *hanp;
12851 size_t hlen;
12852 dm_attrname_t attrname;
12853
12854 /* Variation set up */
12855 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12856 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12857 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12858 if ((rc = system(command)) == -1) {
12859 /* No clean up */
12860 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12861 remove(DUMMY_FILE);
12862 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12863 == -1) {
12864 close(fd);
12865 remove(DUMMY_FILE);
12866 }
12867 if (fd == -1 || rc == -1) {
12868 DMLOG_PRINT(DMLVL_DEBUG,
12869 "Unable to set up variation! (errno = %d)\n",
12870 errno);
12871 DMVAR_SKIP();
12872 } else {
12873 /* Variation */
12874 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
12875 szFuncName);
12876 rc = dm_clear_inherit(sid, hanp, hlen, INVALID_ADDR,
12877 &attrname);
12878 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12879
12880 /* Variation clean up */
12881 rc = close(fd);
12882 rc |= remove(DUMMY_FILE);
12883 if (rc == -1) {
12884 DMLOG_PRINT(DMLVL_DEBUG,
12885 "Unable to clean up variation! (errno = %d)\n",
12886 errno);
12887 }
12888 dm_handle_free(hanp, hlen);
12889 }
12890 }
12891
12892 /*
12893 * TEST : dm_clear_inherit - invalid attrnamep
12894 * EXPECTED: rc = -1, errno = EFAULT
12895 */
12896 if (DMVAR_EXEC(CLEAR_INHERIT_BASE + 5)) {
12897 int fd;
12898 void *hanp;
12899 size_t hlen;
12900 dm_attrname_t attrname;
12901
12902 /* Variation set up */
12903 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12904 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12905 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12906 if ((rc = system(command)) == -1) {
12907 /* No clean up */
12908 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12909 remove(DUMMY_FILE);
12910 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12911 == -1) {
12912 close(fd);
12913 remove(DUMMY_FILE);
12914 }
12915 if (fd == -1 || rc == -1) {
12916 DMLOG_PRINT(DMLVL_DEBUG,
12917 "Unable to set up variation! (errno = %d)\n",
12918 errno);
12919 DMVAR_SKIP();
12920 } else {
12921 /* Variation */
12922 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid attrnamep)\n",
12923 szFuncName);
12924 rc = dm_clear_inherit(sid, hanp, hlen, DM_NO_TOKEN,
12925 (dm_attrname_t *) INVALID_ADDR);
12926 DMVAR_ENDFAILEXP(szFuncName, -1, rc,
12927 persInheritAttr ? EFAULT : ENOSYS);
12928
12929 /* Variation clean up */
12930 rc = close(fd);
12931 rc |= remove(DUMMY_FILE);
12932 if (rc == -1) {
12933 DMLOG_PRINT(DMLVL_DEBUG,
12934 "Unable to clean up variation! (errno = %d)\n",
12935 errno);
12936 }
12937 dm_handle_free(hanp, hlen);
12938 }
12939 }
12940
12941 /*
12942 * TEST : dm_clear_inherit - DM_NO_SESSION sid
12943 * EXPECTED: rc = -1, errno = EINVAL
12944 */
12945 if (DMVAR_EXEC(CLEAR_INHERIT_BASE + 6)) {
12946 int fd;
12947 void *hanp;
12948 size_t hlen;
12949 dm_attrname_t attrname;
12950
12951 /* Variation set up */
12952 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12953 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12954 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
12955 if ((rc = system(command)) == -1) {
12956 /* No clean up */
12957 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
12958 remove(DUMMY_FILE);
12959 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
12960 == -1) {
12961 close(fd);
12962 remove(DUMMY_FILE);
12963 }
12964 if (fd == -1 || rc == -1) {
12965 DMLOG_PRINT(DMLVL_DEBUG,
12966 "Unable to set up variation! (errno = %d)\n",
12967 errno);
12968 DMVAR_SKIP();
12969 } else {
12970 /* Variation */
12971 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
12972 szFuncName);
12973 rc = dm_clear_inherit(DM_NO_SESSION, hanp, hlen,
12974 DM_NO_TOKEN, &attrname);
12975 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
12976
12977 /* Variation clean up */
12978 rc = close(fd);
12979 rc |= remove(DUMMY_FILE);
12980 if (rc == -1) {
12981 DMLOG_PRINT(DMLVL_DEBUG,
12982 "Unable to clean up variation! (errno = %d)\n",
12983 errno);
12984 }
12985 dm_handle_free(hanp, hlen);
12986 }
12987 }
12988
12989 /*
12990 * TEST : dm_clear_inherit - global handle
12991 * EXPECTED: rc = -1, errno = EBADF
12992 */
12993 if (DMVAR_EXEC(CLEAR_INHERIT_BASE + 7)) {
12994 dm_attrname_t attrname;
12995
12996 /* Variation set up */
12997 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
12998 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
12999
13000 /* Variation */
13001 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
13002 rc = dm_clear_inherit(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
13003 DM_NO_TOKEN, &attrname);
13004 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
13005
13006 /* Variation clean up */
13007 }
13008
13009 /*
13010 * TEST : dm_clear_inherit - file handle
13011 * EXPECTED: rc = -1, errno = EINVAL
13012 */
13013 if (DMVAR_EXEC(CLEAR_INHERIT_BASE + 8)) {
13014 int fd;
13015 void *hanp;
13016 size_t hlen;
13017 dm_attrname_t attrname;
13018
13019 /* Variation set up */
13020 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
13021 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
13022 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
13023 if ((rc = system(command)) == -1) {
13024 /* No clean up */
13025 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
13026 remove(DUMMY_FILE);
13027 } else if ((rc = dm_path_to_handle(DUMMY_FILE, &hanp, &hlen)) ==
13028 -1) {
13029 close(fd);
13030 remove(DUMMY_FILE);
13031 }
13032 if (fd == -1 || rc == -1) {
13033 DMLOG_PRINT(DMLVL_DEBUG,
13034 "Unable to set up variation! (errno = %d)\n",
13035 errno);
13036 DMVAR_SKIP();
13037 } else {
13038 /* Variation */
13039 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n",
13040 szFuncName);
13041 rc = dm_clear_inherit(sid, hanp, hlen, DM_NO_TOKEN,
13042 &attrname);
13043 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
13044
13045 /* Variation clean up */
13046 rc = close(fd);
13047 rc |= remove(DUMMY_FILE);
13048 if (rc == -1) {
13049 DMLOG_PRINT(DMLVL_DEBUG,
13050 "Unable to clean up variation! (errno = %d)\n",
13051 errno);
13052 }
13053 dm_handle_free(hanp, hlen);
13054 }
13055 }
13056
13057 /*
13058 * TEST : dm_clear_inherit - directory handle
13059 * EXPECTED: rc = -1, errno = EINVAL
13060 */
13061 if (DMVAR_EXEC(CLEAR_INHERIT_BASE + 9)) {
13062 void *hanp;
13063 size_t hlen;
13064 dm_attrname_t attrname;
13065
13066 /* Variation set up */
13067 memset(attrname.an_chars, 0, DM_ATTR_NAME_SIZE);
13068 memcpy(attrname.an_chars, ATTR_NAME, DM_ATTR_NAME_SIZE);
13069 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
13070 /* No clean up */
13071 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
13072 == -1) {
13073 rmdir(DUMMY_SUBDIR);
13074 }
13075 if (rc == -1) {
13076 DMLOG_PRINT(DMLVL_DEBUG,
13077 "Unable to set up variation! (errno = %d)\n",
13078 errno);
13079 DMVAR_SKIP();
13080 } else {
13081 /* Variation */
13082 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir handle)\n",
13083 szFuncName);
13084 rc = dm_clear_inherit(sid, hanp, hlen, DM_NO_TOKEN,
13085 &attrname);
13086 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
13087
13088 /* Variation clean up */
13089 rc = rmdir(DUMMY_SUBDIR);
13090 if (rc == -1) {
13091 DMLOG_PRINT(DMLVL_DEBUG,
13092 "Unable to clean up variation! (errno = %d)\n",
13093 errno);
13094 }
13095 dm_handle_free(hanp, hlen);
13096 }
13097 }
13098
13099 szFuncName = "dm_getall_inherit";
13100
13101 /*
13102 * TEST : dm_getall_inherit - invalid sid
13103 * EXPECTED: rc = -1, errno = EINVAL
13104 */
13105 if (DMVAR_EXEC(GETALL_INHERIT_BASE + 1)) {
13106 int fd;
13107 void *hanp;
13108 size_t hlen;
13109 dm_inherit_t inheritbuf;
13110 u_int nelem;
13111
13112 /* Variation set up */
13113 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
13114 if ((rc = system(command)) == -1) {
13115 /* No clean up */
13116 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
13117 remove(DUMMY_FILE);
13118 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
13119 == -1) {
13120 close(fd);
13121 remove(DUMMY_FILE);
13122 }
13123 if (fd == -1 || rc == -1) {
13124 DMLOG_PRINT(DMLVL_DEBUG,
13125 "Unable to set up variation! (errno = %d)\n",
13126 errno);
13127 DMVAR_SKIP();
13128 } else {
13129 /* Variation */
13130 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n",
13131 szFuncName);
13132 rc = dm_getall_inherit(INVALID_ADDR, hanp, hlen,
13133 DM_NO_TOKEN, 1, &inheritbuf,
13134 &nelem);
13135 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
13136
13137 /* Variation clean up */
13138 rc = close(fd);
13139 rc |= remove(DUMMY_FILE);
13140 if (rc == -1) {
13141 DMLOG_PRINT(DMLVL_DEBUG,
13142 "Unable to clean up variation! (errno = %d)\n",
13143 errno);
13144 }
13145 dm_handle_free(hanp, hlen);
13146 }
13147 }
13148
13149 /*
13150 * TEST : dm_getall_inherit - invalid hanp
13151 * EXPECTED: rc = -1, errno = EFAULT
13152 */
13153 if (DMVAR_EXEC(GETALL_INHERIT_BASE + 2)) {
13154 int fd;
13155 void *hanp;
13156 size_t hlen;
13157 dm_inherit_t inheritbuf;
13158 u_int nelem;
13159
13160 /* Variation set up */
13161 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
13162 if ((rc = system(command)) == -1) {
13163 /* No clean up */
13164 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
13165 remove(DUMMY_FILE);
13166 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
13167 == -1) {
13168 close(fd);
13169 remove(DUMMY_FILE);
13170 }
13171 if (fd == -1 || rc == -1) {
13172 DMLOG_PRINT(DMLVL_DEBUG,
13173 "Unable to set up variation! (errno = %d)\n",
13174 errno);
13175 DMVAR_SKIP();
13176 } else {
13177 /* Variation */
13178 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n",
13179 szFuncName);
13180 rc = dm_getall_inherit(sid, (void *)INVALID_ADDR, hlen,
13181 DM_NO_TOKEN, 1, &inheritbuf,
13182 &nelem);
13183 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT);
13184
13185 /* Variation clean up */
13186 rc = close(fd);
13187 rc |= remove(DUMMY_FILE);
13188 if (rc == -1) {
13189 DMLOG_PRINT(DMLVL_DEBUG,
13190 "Unable to clean up variation! (errno = %d)\n",
13191 errno);
13192 }
13193 dm_handle_free(hanp, hlen);
13194 }
13195 }
13196
13197 /*
13198 * TEST : dm_getall_inherit - invalid hlen
13199 * EXPECTED: rc = -1, errno = EBADF
13200 */
13201 if (DMVAR_EXEC(GETALL_INHERIT_BASE + 3)) {
13202 int fd;
13203 void *hanp;
13204 size_t hlen;
13205 dm_inherit_t inheritbuf;
13206 u_int nelem;
13207
13208 /* Variation set up */
13209 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
13210 if ((rc = system(command)) == -1) {
13211 /* No clean up */
13212 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
13213 remove(DUMMY_FILE);
13214 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
13215 == -1) {
13216 close(fd);
13217 remove(DUMMY_FILE);
13218 }
13219 if (fd == -1 || rc == -1) {
13220 DMLOG_PRINT(DMLVL_DEBUG,
13221 "Unable to set up variation! (errno = %d)\n",
13222 errno);
13223 DMVAR_SKIP();
13224 } else {
13225 /* Variation */
13226 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n",
13227 szFuncName);
13228 rc = dm_getall_inherit(sid, hanp, INVALID_ADDR,
13229 DM_NO_TOKEN, 1, &inheritbuf,
13230 &nelem);
13231 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
13232
13233 /* Variation clean up */
13234 rc = close(fd);
13235 rc |= remove(DUMMY_FILE);
13236 if (rc == -1) {
13237 DMLOG_PRINT(DMLVL_DEBUG,
13238 "Unable to clean up variation! (errno = %d)\n",
13239 errno);
13240 }
13241 dm_handle_free(hanp, hlen);
13242 }
13243 }
13244
13245 /*
13246 * TEST : dm_getall_inherit - invalid token
13247 * EXPECTED: rc = -1, errno = EINVAL
13248 */
13249 if (DMVAR_EXEC(GETALL_INHERIT_BASE + 4)) {
13250 int fd;
13251 void *hanp;
13252 size_t hlen;
13253 dm_inherit_t inheritbuf;
13254 u_int nelem;
13255
13256 /* Variation set up */
13257 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
13258 if ((rc = system(command)) == -1) {
13259 /* No clean up */
13260 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
13261 remove(DUMMY_FILE);
13262 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
13263 == -1) {
13264 close(fd);
13265 remove(DUMMY_FILE);
13266 }
13267 if (fd == -1 || rc == -1) {
13268 DMLOG_PRINT(DMLVL_DEBUG,
13269 "Unable to set up variation! (errno = %d)\n",
13270 errno);
13271 DMVAR_SKIP();
13272 } else {
13273 /* Variation */
13274 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n",
13275 szFuncName);
13276 rc = dm_getall_inherit(sid, hanp, hlen, INVALID_ADDR, 1,
13277 &inheritbuf, &nelem);
13278 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
13279
13280 /* Variation clean up */
13281 rc = close(fd);
13282 rc |= remove(DUMMY_FILE);
13283 if (rc == -1) {
13284 DMLOG_PRINT(DMLVL_DEBUG,
13285 "Unable to clean up variation! (errno = %d)\n",
13286 errno);
13287 }
13288 dm_handle_free(hanp, hlen);
13289 }
13290 }
13291
13292 /*
13293 * TEST : dm_getall_inherit - invalid inheritbufp
13294 * EXPECTED: rc = -1, errno = EFAULT
13295 */
13296 if (DMVAR_EXEC(GETALL_INHERIT_BASE + 5)) {
13297 int fd;
13298 void *hanp;
13299 size_t hlen;
13300 u_int nelem;
13301
13302 /* Variation set up */
13303 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
13304 if ((rc = system(command)) == -1) {
13305 /* No clean up */
13306 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
13307 remove(DUMMY_FILE);
13308 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
13309 == -1) {
13310 close(fd);
13311 remove(DUMMY_FILE);
13312 }
13313 if (fd == -1 || rc == -1) {
13314 DMLOG_PRINT(DMLVL_DEBUG,
13315 "Unable to set up variation! (errno = %d)\n",
13316 errno);
13317 DMVAR_SKIP();
13318 } else {
13319 /* Variation */
13320 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid inheritbufp)\n",
13321 szFuncName);
13322 rc = dm_getall_inherit(sid, hanp, hlen, DM_NO_TOKEN, 1,
13323 (dm_inherit_t *) INVALID_ADDR,
13324 &nelem);
13325 DMVAR_ENDFAILEXP(szFuncName, -1, rc,
13326 persInheritAttr ? EFAULT : ENOSYS);
13327
13328 /* Variation clean up */
13329 rc = close(fd);
13330 rc |= remove(DUMMY_FILE);
13331 if (rc == -1) {
13332 DMLOG_PRINT(DMLVL_DEBUG,
13333 "Unable to clean up variation! (errno = %d)\n",
13334 errno);
13335 }
13336 dm_handle_free(hanp, hlen);
13337 }
13338 }
13339
13340 /*
13341 * TEST : dm_getall_inherit - DM_NO_SESSION sid
13342 * EXPECTED: rc = -1, errno = EINVAL
13343 */
13344 if (DMVAR_EXEC(GETALL_INHERIT_BASE + 6)) {
13345 int fd;
13346 void *hanp;
13347 size_t hlen;
13348 dm_inherit_t inheritbuf;
13349 u_int nelem;
13350
13351 /* Variation set up */
13352 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
13353 if ((rc = system(command)) == -1) {
13354 /* No clean up */
13355 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
13356 remove(DUMMY_FILE);
13357 } else if ((rc = dm_path_to_fshandle(DUMMY_FILE, &hanp, &hlen))
13358 == -1) {
13359 close(fd);
13360 remove(DUMMY_FILE);
13361 }
13362 if (fd == -1 || rc == -1) {
13363 DMLOG_PRINT(DMLVL_DEBUG,
13364 "Unable to set up variation! (errno = %d)\n",
13365 errno);
13366 DMVAR_SKIP();
13367 } else {
13368 /* Variation */
13369 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n",
13370 szFuncName);
13371 rc = dm_getall_inherit(DM_NO_SESSION, hanp, hlen,
13372 DM_NO_TOKEN, 1, &inheritbuf,
13373 &nelem);
13374 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
13375
13376 /* Variation clean up */
13377 rc = close(fd);
13378 rc |= remove(DUMMY_FILE);
13379 if (rc == -1) {
13380 DMLOG_PRINT(DMLVL_DEBUG,
13381 "Unable to clean up variation! (errno = %d)\n",
13382 errno);
13383 }
13384 dm_handle_free(hanp, hlen);
13385 }
13386 }
13387
13388 /*
13389 * TEST : dm_getall_inherit - global handle
13390 * EXPECTED: rc = -1, errno = EBADF
13391 */
13392 if (DMVAR_EXEC(GETALL_INHERIT_BASE + 7)) {
13393 dm_inherit_t inheritbuf;
13394 u_int nelem;
13395
13396 /* Variation set up */
13397
13398 /* Variation */
13399 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName);
13400 rc = dm_getall_inherit(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN,
13401 DM_NO_TOKEN, 1, &inheritbuf, &nelem);
13402 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF);
13403
13404 /* Variation clean up */
13405 }
13406
13407 /*
13408 * TEST : dm_getall_inherit - file handle
13409 * EXPECTED: rc = -1, errno = EINVAL
13410 */
13411 if (DMVAR_EXEC(GETALL_INHERIT_BASE + 8)) {
13412 int fd;
13413 void *hanp;
13414 size_t hlen;
13415 dm_inherit_t inheritbuf;
13416 u_int nelem;
13417
13418 /* Variation set up */
13419 sprintf(command, "cp %s %s", DUMMY_TMP, DUMMY_FILE);
13420 if ((rc = system(command)) == -1) {
13421 /* No clean up */
13422 } else if ((fd = open(DUMMY_FILE, O_RDWR)) == -1) {
13423 remove(DUMMY_FILE);
13424 } else if ((rc = dm_path_to_handle(DUMMY_FILE, &hanp, &hlen)) ==
13425 -1) {
13426 close(fd);
13427 remove(DUMMY_FILE);
13428 }
13429 if (fd == -1 || rc == -1) {
13430 DMLOG_PRINT(DMLVL_DEBUG,
13431 "Unable to set up variation! (errno = %d)\n",
13432 errno);
13433 DMVAR_SKIP();
13434 } else {
13435 /* Variation */
13436 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n",
13437 szFuncName);
13438 rc = dm_getall_inherit(sid, hanp, hlen, DM_NO_TOKEN, 1,
13439 &inheritbuf, &nelem);
13440 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
13441
13442 /* Variation clean up */
13443 rc = close(fd);
13444 rc |= remove(DUMMY_FILE);
13445 if (rc == -1) {
13446 DMLOG_PRINT(DMLVL_DEBUG,
13447 "Unable to clean up variation! (errno = %d)\n",
13448 errno);
13449 }
13450 dm_handle_free(hanp, hlen);
13451 }
13452 }
13453
13454 /*
13455 * TEST : dm_getall_inherit - directory handle
13456 * EXPECTED: rc = -1, errno = EINVAL
13457 */
13458 if (DMVAR_EXEC(GETALL_INHERIT_BASE + 9)) {
13459 void *hanp;
13460 size_t hlen;
13461 dm_inherit_t inheritbuf;
13462 u_int nelem;
13463
13464 /* Variation set up */
13465 if ((rc = mkdir(DUMMY_SUBDIR, DUMMY_DIR_RW_MODE)) == -1) {
13466 /* No clean up */
13467 } else if ((rc = dm_path_to_handle(DUMMY_SUBDIR, &hanp, &hlen))
13468 == -1) {
13469 rmdir(DUMMY_SUBDIR);
13470 }
13471 if (rc == -1) {
13472 DMLOG_PRINT(DMLVL_DEBUG,
13473 "Unable to set up variation! (errno = %d)\n",
13474 errno);
13475 DMVAR_SKIP();
13476 } else {
13477 /* Variation */
13478 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir handle)\n",
13479 szFuncName);
13480 rc = dm_getall_inherit(sid, hanp, hlen, DM_NO_TOKEN, 1,
13481 &inheritbuf, &nelem);
13482 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL);
13483
13484 /* Variation clean up */
13485 rc = rmdir(DUMMY_SUBDIR);
13486 if (rc == -1) {
13487 DMLOG_PRINT(DMLVL_DEBUG,
13488 "Unable to clean up variation! (errno = %d)\n",
13489 errno);
13490 }
13491 dm_handle_free(hanp, hlen);
13492 }
13493 }
13494
13495 rc = dm_destroy_session(sid);
13496 if (rc == -1) {
13497 DMLOG_PRINT(DMLVL_ERR,
13498 "dm_destroy_session failed! (rc = %d, errno = %d)\n",
13499 rc, errno);
13500 }
13501
13502 remove(DUMMY_TMP);
13503
13504 DMLOG_STOP();
13505
13506 tst_exit();
13507 }
13508