1 /*-
2 * Copyright 2018 Aniket Pandey
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * SUCH DAMAGE.
24 */
25
26 #include <sys/types.h>
27 #include <sys/stat.h>
28
29 #include <atf-c.h>
30 #include <fcntl.h>
31 #include <stdlib.h>
32 #include <unistd.h>
33
34 #include "utils.h"
35
36 static struct pollfd fds[1];
37 static mode_t mode = 0777;
38 static int filedesc;
39 static dev_t dev = 0;
40 static const char *auclass = "fc";
41 static const char *path = "fileforaudit";
42 static const char *successreg = "fileforaudit.*return,success";
43 static const char *failurereg = "fileforaudit.*return,failure";
44
45
46 ATF_TC_WITH_CLEANUP(mkdir_success);
ATF_TC_HEAD(mkdir_success,tc)47 ATF_TC_HEAD(mkdir_success, tc)
48 {
49 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
50 "mkdir(2) call");
51 }
52
ATF_TC_BODY(mkdir_success,tc)53 ATF_TC_BODY(mkdir_success, tc)
54 {
55 FILE *pipefd = setup(fds, auclass);
56 ATF_REQUIRE_EQ(0, mkdir(path, mode));
57 check_audit(fds, successreg, pipefd);
58 }
59
ATF_TC_CLEANUP(mkdir_success,tc)60 ATF_TC_CLEANUP(mkdir_success, tc)
61 {
62 cleanup();
63 }
64
65
66 ATF_TC_WITH_CLEANUP(mkdir_failure);
ATF_TC_HEAD(mkdir_failure,tc)67 ATF_TC_HEAD(mkdir_failure, tc)
68 {
69 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
70 "mkdir(2) call");
71 }
72
ATF_TC_BODY(mkdir_failure,tc)73 ATF_TC_BODY(mkdir_failure, tc)
74 {
75 ATF_REQUIRE_EQ(0, mkdir(path, mode));
76 FILE *pipefd = setup(fds, auclass);
77 /* Failure reason: directory already exists */
78 ATF_REQUIRE_EQ(-1, mkdir(path, mode));
79 check_audit(fds, failurereg, pipefd);
80 }
81
ATF_TC_CLEANUP(mkdir_failure,tc)82 ATF_TC_CLEANUP(mkdir_failure, tc)
83 {
84 cleanup();
85 }
86
87
88 ATF_TC_WITH_CLEANUP(mkdirat_success);
ATF_TC_HEAD(mkdirat_success,tc)89 ATF_TC_HEAD(mkdirat_success, tc)
90 {
91 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
92 "mkdirat(2) call");
93 }
94
ATF_TC_BODY(mkdirat_success,tc)95 ATF_TC_BODY(mkdirat_success, tc)
96 {
97 FILE *pipefd = setup(fds, auclass);
98 ATF_REQUIRE_EQ(0, mkdirat(AT_FDCWD, path, mode));
99 check_audit(fds, successreg, pipefd);
100 }
101
ATF_TC_CLEANUP(mkdirat_success,tc)102 ATF_TC_CLEANUP(mkdirat_success, tc)
103 {
104 cleanup();
105 }
106
107
108 ATF_TC_WITH_CLEANUP(mkdirat_failure);
ATF_TC_HEAD(mkdirat_failure,tc)109 ATF_TC_HEAD(mkdirat_failure, tc)
110 {
111 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
112 "mkdirat(2) call");
113 }
114
ATF_TC_BODY(mkdirat_failure,tc)115 ATF_TC_BODY(mkdirat_failure, tc)
116 {
117 ATF_REQUIRE_EQ(0, mkdirat(AT_FDCWD, path, mode));
118 FILE *pipefd = setup(fds, auclass);
119 /* Failure reason: directory already exists */
120 ATF_REQUIRE_EQ(-1, mkdirat(AT_FDCWD, path, mode));
121 check_audit(fds, failurereg, pipefd);
122 }
123
ATF_TC_CLEANUP(mkdirat_failure,tc)124 ATF_TC_CLEANUP(mkdirat_failure, tc)
125 {
126 cleanup();
127 }
128
129
130 ATF_TC_WITH_CLEANUP(mkfifo_success);
ATF_TC_HEAD(mkfifo_success,tc)131 ATF_TC_HEAD(mkfifo_success, tc)
132 {
133 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
134 "mkfifo(2) call");
135 }
136
ATF_TC_BODY(mkfifo_success,tc)137 ATF_TC_BODY(mkfifo_success, tc)
138 {
139 FILE *pipefd = setup(fds, auclass);
140 ATF_REQUIRE_EQ(0, mkfifo(path, mode));
141 check_audit(fds, successreg, pipefd);
142 }
143
ATF_TC_CLEANUP(mkfifo_success,tc)144 ATF_TC_CLEANUP(mkfifo_success, tc)
145 {
146 cleanup();
147 }
148
149
150 ATF_TC_WITH_CLEANUP(mkfifo_failure);
ATF_TC_HEAD(mkfifo_failure,tc)151 ATF_TC_HEAD(mkfifo_failure, tc)
152 {
153 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
154 "mkfifo(2) call");
155 }
156
ATF_TC_BODY(mkfifo_failure,tc)157 ATF_TC_BODY(mkfifo_failure, tc)
158 {
159 ATF_REQUIRE_EQ(0, mkfifo(path, mode));
160 FILE *pipefd = setup(fds, auclass);
161 /* Failure reason: FIFO already exists */
162 ATF_REQUIRE_EQ(-1, mkfifo(path, mode));
163 check_audit(fds, failurereg, pipefd);
164 }
165
ATF_TC_CLEANUP(mkfifo_failure,tc)166 ATF_TC_CLEANUP(mkfifo_failure, tc)
167 {
168 cleanup();
169 }
170
171
172 ATF_TC_WITH_CLEANUP(mkfifoat_success);
ATF_TC_HEAD(mkfifoat_success,tc)173 ATF_TC_HEAD(mkfifoat_success, tc)
174 {
175 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
176 "mkfifoat(2) call");
177 }
178
ATF_TC_BODY(mkfifoat_success,tc)179 ATF_TC_BODY(mkfifoat_success, tc)
180 {
181 FILE *pipefd = setup(fds, auclass);
182 ATF_REQUIRE_EQ(0, mkfifoat(AT_FDCWD, path, mode));
183 check_audit(fds, successreg, pipefd);
184 }
185
ATF_TC_CLEANUP(mkfifoat_success,tc)186 ATF_TC_CLEANUP(mkfifoat_success, tc)
187 {
188 cleanup();
189 }
190
191
192 ATF_TC_WITH_CLEANUP(mkfifoat_failure);
ATF_TC_HEAD(mkfifoat_failure,tc)193 ATF_TC_HEAD(mkfifoat_failure, tc)
194 {
195 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
196 "mkfifoat(2) call");
197 }
198
ATF_TC_BODY(mkfifoat_failure,tc)199 ATF_TC_BODY(mkfifoat_failure, tc)
200 {
201 ATF_REQUIRE_EQ(0, mkfifoat(AT_FDCWD, path, mode));
202 FILE *pipefd = setup(fds, auclass);
203 /* Failure reason: FIFO already exists */
204 ATF_REQUIRE_EQ(-1, mkfifoat(AT_FDCWD, path, mode));
205 check_audit(fds, failurereg, pipefd);
206 }
207
ATF_TC_CLEANUP(mkfifoat_failure,tc)208 ATF_TC_CLEANUP(mkfifoat_failure, tc)
209 {
210 cleanup();
211 }
212
213
214 ATF_TC_WITH_CLEANUP(mknod_success);
ATF_TC_HEAD(mknod_success,tc)215 ATF_TC_HEAD(mknod_success, tc)
216 {
217 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
218 "mknod(2) call");
219 }
220
ATF_TC_BODY(mknod_success,tc)221 ATF_TC_BODY(mknod_success, tc)
222 {
223 FILE *pipefd = setup(fds, auclass);
224 ATF_REQUIRE_EQ(0, mknod(path, S_IFIFO | S_IRWXO, dev));
225 check_audit(fds, successreg, pipefd);
226 }
227
ATF_TC_CLEANUP(mknod_success,tc)228 ATF_TC_CLEANUP(mknod_success, tc)
229 {
230 cleanup();
231 }
232
233
234 ATF_TC_WITH_CLEANUP(mknod_failure);
ATF_TC_HEAD(mknod_failure,tc)235 ATF_TC_HEAD(mknod_failure, tc)
236 {
237 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
238 "mknod(2) call");
239 }
240
ATF_TC_BODY(mknod_failure,tc)241 ATF_TC_BODY(mknod_failure, tc)
242 {
243 ATF_REQUIRE_EQ(0, mknod(path, S_IFIFO | S_IRWXO, dev));
244 FILE *pipefd = setup(fds, auclass);
245 /* Failure reason: FIFO node already exists */
246 ATF_REQUIRE_EQ(-1, mknod(path, S_IFIFO | S_IRWXO, dev));
247 check_audit(fds, failurereg, pipefd);
248 }
249
ATF_TC_CLEANUP(mknod_failure,tc)250 ATF_TC_CLEANUP(mknod_failure, tc)
251 {
252 cleanup();
253 }
254
255
256 ATF_TC_WITH_CLEANUP(mknodat_success);
ATF_TC_HEAD(mknodat_success,tc)257 ATF_TC_HEAD(mknodat_success, tc)
258 {
259 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
260 "mknodat(2) call");
261 }
262
ATF_TC_BODY(mknodat_success,tc)263 ATF_TC_BODY(mknodat_success, tc)
264 {
265 FILE *pipefd = setup(fds, auclass);
266 ATF_REQUIRE_EQ(0, mknodat(AT_FDCWD, path, S_IFIFO | S_IRWXO, dev));
267 check_audit(fds, successreg, pipefd);
268 }
269
ATF_TC_CLEANUP(mknodat_success,tc)270 ATF_TC_CLEANUP(mknodat_success, tc)
271 {
272 cleanup();
273 }
274
275
276 ATF_TC_WITH_CLEANUP(mknodat_failure);
ATF_TC_HEAD(mknodat_failure,tc)277 ATF_TC_HEAD(mknodat_failure, tc)
278 {
279 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
280 "mknodat(2) call");
281 }
282
ATF_TC_BODY(mknodat_failure,tc)283 ATF_TC_BODY(mknodat_failure, tc)
284 {
285 ATF_REQUIRE_EQ(0, mknodat(AT_FDCWD, path, S_IFIFO | S_IRWXO, dev));
286 FILE *pipefd = setup(fds, auclass);
287 /* Failure reason: FIFO node already exists */
288 ATF_REQUIRE_EQ(-1, mknodat(AT_FDCWD, path, S_IFIFO | S_IRWXO, dev));
289 check_audit(fds, failurereg, pipefd);
290 }
291
ATF_TC_CLEANUP(mknodat_failure,tc)292 ATF_TC_CLEANUP(mknodat_failure, tc)
293 {
294 cleanup();
295 }
296
297
298 ATF_TC_WITH_CLEANUP(rename_success);
ATF_TC_HEAD(rename_success,tc)299 ATF_TC_HEAD(rename_success, tc)
300 {
301 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
302 "rename(2) call");
303 }
304
ATF_TC_BODY(rename_success,tc)305 ATF_TC_BODY(rename_success, tc)
306 {
307 ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
308 FILE *pipefd = setup(fds, auclass);
309 ATF_REQUIRE_EQ(0, rename(path, "renamed"));
310 check_audit(fds, successreg, pipefd);
311 close(filedesc);
312 }
313
ATF_TC_CLEANUP(rename_success,tc)314 ATF_TC_CLEANUP(rename_success, tc)
315 {
316 cleanup();
317 }
318
319
320 ATF_TC_WITH_CLEANUP(rename_failure);
ATF_TC_HEAD(rename_failure,tc)321 ATF_TC_HEAD(rename_failure, tc)
322 {
323 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
324 "rename(2) call");
325 }
326
ATF_TC_BODY(rename_failure,tc)327 ATF_TC_BODY(rename_failure, tc)
328 {
329 FILE *pipefd = setup(fds, auclass);
330 /* Failure reason: file does not exist */
331 ATF_REQUIRE_EQ(-1, rename(path, "renamed"));
332 check_audit(fds, failurereg, pipefd);
333 }
334
ATF_TC_CLEANUP(rename_failure,tc)335 ATF_TC_CLEANUP(rename_failure, tc)
336 {
337 cleanup();
338 }
339
340
341 ATF_TC_WITH_CLEANUP(renameat_success);
ATF_TC_HEAD(renameat_success,tc)342 ATF_TC_HEAD(renameat_success, tc)
343 {
344 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
345 "renameat(2) call");
346 }
347
ATF_TC_BODY(renameat_success,tc)348 ATF_TC_BODY(renameat_success, tc)
349 {
350 ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
351 FILE *pipefd = setup(fds, auclass);
352 ATF_REQUIRE_EQ(0, renameat(AT_FDCWD, path, AT_FDCWD, "renamed"));
353 check_audit(fds, successreg, pipefd);
354 close(filedesc);
355 }
356
ATF_TC_CLEANUP(renameat_success,tc)357 ATF_TC_CLEANUP(renameat_success, tc)
358 {
359 cleanup();
360 }
361
362
363 ATF_TC_WITH_CLEANUP(renameat_failure);
ATF_TC_HEAD(renameat_failure,tc)364 ATF_TC_HEAD(renameat_failure, tc)
365 {
366 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
367 "renameat(2) call");
368 }
369
ATF_TC_BODY(renameat_failure,tc)370 ATF_TC_BODY(renameat_failure, tc)
371 {
372 FILE *pipefd = setup(fds, auclass);
373 /* Failure reason: file does not exist */
374 ATF_REQUIRE_EQ(-1, renameat(AT_FDCWD, path, AT_FDCWD, "renamed"));
375 check_audit(fds, failurereg, pipefd);
376 }
377
ATF_TC_CLEANUP(renameat_failure,tc)378 ATF_TC_CLEANUP(renameat_failure, tc)
379 {
380 cleanup();
381 }
382
383
384 ATF_TC_WITH_CLEANUP(link_success);
ATF_TC_HEAD(link_success,tc)385 ATF_TC_HEAD(link_success, tc)
386 {
387 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
388 "link(2) call");
389 }
390
ATF_TC_BODY(link_success,tc)391 ATF_TC_BODY(link_success, tc)
392 {
393 ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
394 FILE *pipefd = setup(fds, auclass);
395 ATF_REQUIRE_EQ(0, link(path, "hardlink"));
396 check_audit(fds, successreg, pipefd);
397 close(filedesc);
398 }
399
ATF_TC_CLEANUP(link_success,tc)400 ATF_TC_CLEANUP(link_success, tc)
401 {
402 cleanup();
403 }
404
405
406 ATF_TC_WITH_CLEANUP(link_failure);
ATF_TC_HEAD(link_failure,tc)407 ATF_TC_HEAD(link_failure, tc)
408 {
409 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
410 "link(2) call");
411 }
412
ATF_TC_BODY(link_failure,tc)413 ATF_TC_BODY(link_failure, tc)
414 {
415 FILE *pipefd = setup(fds, auclass);
416 /* Failure reason: file does not exist */
417 ATF_REQUIRE_EQ(-1, link(path, "hardlink"));
418 check_audit(fds, failurereg, pipefd);
419 }
420
ATF_TC_CLEANUP(link_failure,tc)421 ATF_TC_CLEANUP(link_failure, tc)
422 {
423 cleanup();
424 }
425
426
427 ATF_TC_WITH_CLEANUP(linkat_success);
ATF_TC_HEAD(linkat_success,tc)428 ATF_TC_HEAD(linkat_success, tc)
429 {
430 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
431 "linkat(2) call");
432 }
433
ATF_TC_BODY(linkat_success,tc)434 ATF_TC_BODY(linkat_success, tc)
435 {
436 ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
437 FILE *pipefd = setup(fds, auclass);
438 ATF_REQUIRE_EQ(0, linkat(AT_FDCWD, path, AT_FDCWD, "hardlink", 0));
439 check_audit(fds, successreg, pipefd);
440 close(filedesc);
441 }
442
ATF_TC_CLEANUP(linkat_success,tc)443 ATF_TC_CLEANUP(linkat_success, tc)
444 {
445 cleanup();
446 }
447
448
449 ATF_TC_WITH_CLEANUP(linkat_failure);
ATF_TC_HEAD(linkat_failure,tc)450 ATF_TC_HEAD(linkat_failure, tc)
451 {
452 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
453 "linkat(2) call");
454 }
455
ATF_TC_BODY(linkat_failure,tc)456 ATF_TC_BODY(linkat_failure, tc)
457 {
458 FILE *pipefd = setup(fds, auclass);
459 /* Failure reason: file does not exist */
460 ATF_REQUIRE_EQ(-1, linkat(AT_FDCWD, path, AT_FDCWD, "hardlink", 0));
461 check_audit(fds, failurereg, pipefd);
462 }
463
ATF_TC_CLEANUP(linkat_failure,tc)464 ATF_TC_CLEANUP(linkat_failure, tc)
465 {
466 cleanup();
467 }
468
469
470 ATF_TC_WITH_CLEANUP(symlink_success);
ATF_TC_HEAD(symlink_success,tc)471 ATF_TC_HEAD(symlink_success, tc)
472 {
473 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
474 "symlink(2) call");
475 }
476
ATF_TC_BODY(symlink_success,tc)477 ATF_TC_BODY(symlink_success, tc)
478 {
479 FILE *pipefd = setup(fds, auclass);
480 ATF_REQUIRE_EQ(0, symlink(path, "symlink"));
481 check_audit(fds, successreg, pipefd);
482 }
483
ATF_TC_CLEANUP(symlink_success,tc)484 ATF_TC_CLEANUP(symlink_success, tc)
485 {
486 cleanup();
487 }
488
489
490 ATF_TC_WITH_CLEANUP(symlink_failure);
ATF_TC_HEAD(symlink_failure,tc)491 ATF_TC_HEAD(symlink_failure, tc)
492 {
493 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
494 "symlink(2) call");
495 }
496
ATF_TC_BODY(symlink_failure,tc)497 ATF_TC_BODY(symlink_failure, tc)
498 {
499 ATF_REQUIRE_EQ(0, symlink(path, "symlink"));
500 FILE *pipefd = setup(fds, auclass);
501 /* Failure reason: symbolic link already exists */
502 ATF_REQUIRE_EQ(-1, symlink(path, "symlink"));
503 check_audit(fds, failurereg, pipefd);
504 }
505
ATF_TC_CLEANUP(symlink_failure,tc)506 ATF_TC_CLEANUP(symlink_failure, tc)
507 {
508 cleanup();
509 }
510
511
512 ATF_TC_WITH_CLEANUP(symlinkat_success);
ATF_TC_HEAD(symlinkat_success,tc)513 ATF_TC_HEAD(symlinkat_success, tc)
514 {
515 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
516 "symlinkat(2) call");
517 }
518
ATF_TC_BODY(symlinkat_success,tc)519 ATF_TC_BODY(symlinkat_success, tc)
520 {
521 FILE *pipefd = setup(fds, auclass);
522 ATF_REQUIRE_EQ(0, symlinkat(path, AT_FDCWD, "symlink"));
523 check_audit(fds, successreg, pipefd);
524 }
525
ATF_TC_CLEANUP(symlinkat_success,tc)526 ATF_TC_CLEANUP(symlinkat_success, tc)
527 {
528 cleanup();
529 }
530
531
532 ATF_TC_WITH_CLEANUP(symlinkat_failure);
ATF_TC_HEAD(symlinkat_failure,tc)533 ATF_TC_HEAD(symlinkat_failure, tc)
534 {
535 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
536 "symlinkat(2) call");
537 }
538
ATF_TC_BODY(symlinkat_failure,tc)539 ATF_TC_BODY(symlinkat_failure, tc)
540 {
541 ATF_REQUIRE_EQ(0, symlinkat(path, AT_FDCWD, "symlink"));
542 FILE *pipefd = setup(fds, auclass);
543 /* Failure reason: symbolic link already exists */
544 ATF_REQUIRE_EQ(-1, symlinkat(path, AT_FDCWD, "symlink"));
545 check_audit(fds, failurereg, pipefd);
546 }
547
ATF_TC_CLEANUP(symlinkat_failure,tc)548 ATF_TC_CLEANUP(symlinkat_failure, tc)
549 {
550 cleanup();
551 }
552
553
ATF_TP_ADD_TCS(tp)554 ATF_TP_ADD_TCS(tp)
555 {
556 ATF_TP_ADD_TC(tp, mkdir_success);
557 ATF_TP_ADD_TC(tp, mkdir_failure);
558 ATF_TP_ADD_TC(tp, mkdirat_success);
559 ATF_TP_ADD_TC(tp, mkdirat_failure);
560
561 ATF_TP_ADD_TC(tp, mkfifo_success);
562 ATF_TP_ADD_TC(tp, mkfifo_failure);
563 ATF_TP_ADD_TC(tp, mkfifoat_success);
564 ATF_TP_ADD_TC(tp, mkfifoat_failure);
565
566 ATF_TP_ADD_TC(tp, mknod_success);
567 ATF_TP_ADD_TC(tp, mknod_failure);
568 ATF_TP_ADD_TC(tp, mknodat_success);
569 ATF_TP_ADD_TC(tp, mknodat_failure);
570
571 ATF_TP_ADD_TC(tp, rename_success);
572 ATF_TP_ADD_TC(tp, rename_failure);
573 ATF_TP_ADD_TC(tp, renameat_success);
574 ATF_TP_ADD_TC(tp, renameat_failure);
575
576 ATF_TP_ADD_TC(tp, link_success);
577 ATF_TP_ADD_TC(tp, link_failure);
578 ATF_TP_ADD_TC(tp, linkat_success);
579 ATF_TP_ADD_TC(tp, linkat_failure);
580
581 ATF_TP_ADD_TC(tp, symlink_success);
582 ATF_TP_ADD_TC(tp, symlink_failure);
583 ATF_TP_ADD_TC(tp, symlinkat_success);
584 ATF_TP_ADD_TC(tp, symlinkat_failure);
585
586 return (atf_no_error());
587 }
588