xref: /freebsd/tests/sys/audit/file-attribute-modify.c (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
16d203d2dSAlan Somers /*-
26d203d2dSAlan Somers  * Copyright (c) 2018 Aniket Pandey
36d203d2dSAlan Somers  *
46d203d2dSAlan Somers  * Redistribution and use in source and binary forms, with or without
56d203d2dSAlan Somers  * modification, are permitted provided that the following conditions
66d203d2dSAlan Somers  * are met:
76d203d2dSAlan Somers  * 1. Redistributions of source code must retain the above copyright
86d203d2dSAlan Somers  *    notice, this list of conditions and the following disclaimer.
96d203d2dSAlan Somers  * 2. Redistributions in binary form must reproduce the above copyright
106d203d2dSAlan Somers  *    notice, this list of conditions and the following disclaimer in the
116d203d2dSAlan Somers  *    documentation and/or other materials provided with the distribution.
126d203d2dSAlan Somers  *
136d203d2dSAlan Somers  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
146d203d2dSAlan Somers  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
156d203d2dSAlan Somers  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
166d203d2dSAlan Somers  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
176d203d2dSAlan Somers  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
186d203d2dSAlan Somers  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
196d203d2dSAlan Somers  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
206d203d2dSAlan Somers  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
216d203d2dSAlan Somers  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
226d203d2dSAlan Somers  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
236d203d2dSAlan Somers  * SUCH DAMAGE.
246d203d2dSAlan Somers  */
256d203d2dSAlan Somers 
26844fc5ebSAlan Somers #include <sys/types.h>
27844fc5ebSAlan Somers #include <sys/extattr.h>
286d203d2dSAlan Somers #include <sys/file.h>
29d1fb351cSAlan Somers #include <sys/mman.h>
3028845213SAlan Somers #include <sys/stat.h>
31d1fb351cSAlan Somers #include <sys/time.h>
326d203d2dSAlan Somers 
336d203d2dSAlan Somers #include <atf-c.h>
34*40407d39SAlex Richardson #include <errno.h>
356d203d2dSAlan Somers #include <fcntl.h>
36d1fb351cSAlan Somers #include <stdint.h>
376d203d2dSAlan Somers #include <unistd.h>
386d203d2dSAlan Somers 
396d203d2dSAlan Somers #include "utils.h"
406d203d2dSAlan Somers 
416d203d2dSAlan Somers static pid_t pid;
425c9a4738SAlan Somers static uid_t uid = -1;
435c9a4738SAlan Somers static gid_t gid = -1;
44844fc5ebSAlan Somers static int filedesc, retval;
456d203d2dSAlan Somers static struct pollfd fds[1];
466d203d2dSAlan Somers static mode_t mode = 0777;
476d203d2dSAlan Somers static char extregex[80];
485641c23fSAlan Somers static char buff[] = "ezio";
496d203d2dSAlan Somers static const char *auclass = "fm";
50844fc5ebSAlan Somers static const char *name = "authorname";
516d203d2dSAlan Somers static const char *path = "fileforaudit";
5228845213SAlan Somers static const char *errpath = "adirhasnoname/fileforaudit";
5328845213SAlan Somers static const char *successreg = "fileforaudit.*return,success";
5428845213SAlan Somers static const char *failurereg = "fileforaudit.*return,failure";
556d203d2dSAlan Somers 
566d203d2dSAlan Somers 
576d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(flock_success);
ATF_TC_HEAD(flock_success,tc)586d203d2dSAlan Somers ATF_TC_HEAD(flock_success, tc)
596d203d2dSAlan Somers {
606d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
616d203d2dSAlan Somers 					"flock(2) call");
626d203d2dSAlan Somers }
636d203d2dSAlan Somers 
ATF_TC_BODY(flock_success,tc)646d203d2dSAlan Somers ATF_TC_BODY(flock_success, tc)
656d203d2dSAlan Somers {
666d203d2dSAlan Somers 	pid = getpid();
676d203d2dSAlan Somers 	snprintf(extregex, sizeof(extregex), "flock.*%d.*return,success", pid);
686d203d2dSAlan Somers 
696d203d2dSAlan Somers 	/* File needs to exist to call flock(2) */
706d203d2dSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
716d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
726d203d2dSAlan Somers 	ATF_REQUIRE_EQ(0, flock(filedesc, LOCK_SH));
736d203d2dSAlan Somers 	check_audit(fds, extregex, pipefd);
746d203d2dSAlan Somers 	close(filedesc);
756d203d2dSAlan Somers }
766d203d2dSAlan Somers 
ATF_TC_CLEANUP(flock_success,tc)776d203d2dSAlan Somers ATF_TC_CLEANUP(flock_success, tc)
786d203d2dSAlan Somers {
796d203d2dSAlan Somers 	cleanup();
806d203d2dSAlan Somers }
816d203d2dSAlan Somers 
826d203d2dSAlan Somers 
836d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(flock_failure);
ATF_TC_HEAD(flock_failure,tc)846d203d2dSAlan Somers ATF_TC_HEAD(flock_failure, tc)
856d203d2dSAlan Somers {
866d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
876d203d2dSAlan Somers 					"flock(2) call");
886d203d2dSAlan Somers }
896d203d2dSAlan Somers 
ATF_TC_BODY(flock_failure,tc)906d203d2dSAlan Somers ATF_TC_BODY(flock_failure, tc)
916d203d2dSAlan Somers {
926d203d2dSAlan Somers 	const char *regex = "flock.*return,failure : Bad file descriptor";
936d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
94*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EBADF, flock(-1, LOCK_SH) == -1);
956d203d2dSAlan Somers 	check_audit(fds, regex, pipefd);
966d203d2dSAlan Somers }
976d203d2dSAlan Somers 
ATF_TC_CLEANUP(flock_failure,tc)986d203d2dSAlan Somers ATF_TC_CLEANUP(flock_failure, tc)
996d203d2dSAlan Somers {
1006d203d2dSAlan Somers 	cleanup();
1016d203d2dSAlan Somers }
1026d203d2dSAlan Somers 
1036d203d2dSAlan Somers 
1046d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fcntl_success);
ATF_TC_HEAD(fcntl_success,tc)1056d203d2dSAlan Somers ATF_TC_HEAD(fcntl_success, tc)
1066d203d2dSAlan Somers {
1076d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1086d203d2dSAlan Somers 					"fcntl(2) call");
1096d203d2dSAlan Somers }
1106d203d2dSAlan Somers 
ATF_TC_BODY(fcntl_success,tc)1116d203d2dSAlan Somers ATF_TC_BODY(fcntl_success, tc)
1126d203d2dSAlan Somers {
1136d203d2dSAlan Somers 	int flagstatus;
1146d203d2dSAlan Somers 	/* File needs to exist to call fcntl(2) */
1156d203d2dSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1166d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1176d203d2dSAlan Somers 
1186d203d2dSAlan Somers 	/* Retrieve the status flags of 'filedesc' and store it in flagstatus */
1196d203d2dSAlan Somers 	ATF_REQUIRE((flagstatus = fcntl(filedesc, F_GETFL, 0)) != -1);
1206d203d2dSAlan Somers 	snprintf(extregex, sizeof(extregex),
1216d203d2dSAlan Somers 			"fcntl.*return,success,%d", flagstatus);
1226d203d2dSAlan Somers 	check_audit(fds, extregex, pipefd);
1236d203d2dSAlan Somers 	close(filedesc);
1246d203d2dSAlan Somers }
1256d203d2dSAlan Somers 
ATF_TC_CLEANUP(fcntl_success,tc)1266d203d2dSAlan Somers ATF_TC_CLEANUP(fcntl_success, tc)
1276d203d2dSAlan Somers {
1286d203d2dSAlan Somers 	cleanup();
1296d203d2dSAlan Somers }
1306d203d2dSAlan Somers 
1316d203d2dSAlan Somers 
1326d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fcntl_failure);
ATF_TC_HEAD(fcntl_failure,tc)1336d203d2dSAlan Somers ATF_TC_HEAD(fcntl_failure, tc)
1346d203d2dSAlan Somers {
1356d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1366d203d2dSAlan Somers 					"fcntl(2) call");
1376d203d2dSAlan Somers }
1386d203d2dSAlan Somers 
ATF_TC_BODY(fcntl_failure,tc)1396d203d2dSAlan Somers ATF_TC_BODY(fcntl_failure, tc)
1406d203d2dSAlan Somers {
1416d203d2dSAlan Somers 	const char *regex = "fcntl.*return,failure : Bad file descriptor";
1426d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
143*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EBADF, fcntl(-1, F_GETFL, 0) == -1);
1446d203d2dSAlan Somers 	check_audit(fds, regex, pipefd);
1456d203d2dSAlan Somers }
1466d203d2dSAlan Somers 
ATF_TC_CLEANUP(fcntl_failure,tc)1476d203d2dSAlan Somers ATF_TC_CLEANUP(fcntl_failure, tc)
1486d203d2dSAlan Somers {
1496d203d2dSAlan Somers 	cleanup();
1506d203d2dSAlan Somers }
1516d203d2dSAlan Somers 
1526d203d2dSAlan Somers 
1536d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fsync_success);
ATF_TC_HEAD(fsync_success,tc)1546d203d2dSAlan Somers ATF_TC_HEAD(fsync_success, tc)
1556d203d2dSAlan Somers {
1566d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1576d203d2dSAlan Somers 					"fsync(2) call");
1586d203d2dSAlan Somers }
1596d203d2dSAlan Somers 
ATF_TC_BODY(fsync_success,tc)1606d203d2dSAlan Somers ATF_TC_BODY(fsync_success, tc)
1616d203d2dSAlan Somers {
1626d203d2dSAlan Somers 	pid = getpid();
1636d203d2dSAlan Somers 	snprintf(extregex, sizeof(extregex), "fsync.*%d.*return,success", pid);
1646d203d2dSAlan Somers 
1656d203d2dSAlan Somers 	/* File needs to exist to call fsync(2) */
1666d203d2dSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1676d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1686d203d2dSAlan Somers 	ATF_REQUIRE_EQ(0, fsync(filedesc));
1696d203d2dSAlan Somers 	check_audit(fds, extregex, pipefd);
1706d203d2dSAlan Somers 	close(filedesc);
1716d203d2dSAlan Somers }
1726d203d2dSAlan Somers 
ATF_TC_CLEANUP(fsync_success,tc)1736d203d2dSAlan Somers ATF_TC_CLEANUP(fsync_success, tc)
1746d203d2dSAlan Somers {
1756d203d2dSAlan Somers 	cleanup();
1766d203d2dSAlan Somers }
1776d203d2dSAlan Somers 
1786d203d2dSAlan Somers 
1796d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fsync_failure);
ATF_TC_HEAD(fsync_failure,tc)1806d203d2dSAlan Somers ATF_TC_HEAD(fsync_failure, tc)
1816d203d2dSAlan Somers {
1826d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1836d203d2dSAlan Somers 					"fsync(2) call");
1846d203d2dSAlan Somers }
1856d203d2dSAlan Somers 
ATF_TC_BODY(fsync_failure,tc)1866d203d2dSAlan Somers ATF_TC_BODY(fsync_failure, tc)
1876d203d2dSAlan Somers {
1886d203d2dSAlan Somers 	const char *regex = "fsync.*return,failure : Bad file descriptor";
1896d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1906d203d2dSAlan Somers 	/* Failure reason: Invalid file descriptor */
191*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EBADF, fsync(-1) == -1);
1926d203d2dSAlan Somers 	check_audit(fds, regex, pipefd);
1936d203d2dSAlan Somers }
1946d203d2dSAlan Somers 
ATF_TC_CLEANUP(fsync_failure,tc)1956d203d2dSAlan Somers ATF_TC_CLEANUP(fsync_failure, tc)
1966d203d2dSAlan Somers {
1976d203d2dSAlan Somers 	cleanup();
1986d203d2dSAlan Somers }
1996d203d2dSAlan Somers 
2006d203d2dSAlan Somers 
20128845213SAlan Somers ATF_TC_WITH_CLEANUP(chmod_success);
ATF_TC_HEAD(chmod_success,tc)20228845213SAlan Somers ATF_TC_HEAD(chmod_success, tc)
20328845213SAlan Somers {
20428845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
20528845213SAlan Somers 					"chmod(2) call");
20628845213SAlan Somers }
20728845213SAlan Somers 
ATF_TC_BODY(chmod_success,tc)20828845213SAlan Somers ATF_TC_BODY(chmod_success, tc)
20928845213SAlan Somers {
21028845213SAlan Somers 	/* File needs to exist to call chmod(2) */
21128845213SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
21228845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
21328845213SAlan Somers 	ATF_REQUIRE_EQ(0, chmod(path, mode));
21428845213SAlan Somers 	check_audit(fds, successreg, pipefd);
21528845213SAlan Somers 	close(filedesc);
21628845213SAlan Somers }
21728845213SAlan Somers 
ATF_TC_CLEANUP(chmod_success,tc)21828845213SAlan Somers ATF_TC_CLEANUP(chmod_success, tc)
21928845213SAlan Somers {
22028845213SAlan Somers 	cleanup();
22128845213SAlan Somers }
22228845213SAlan Somers 
22328845213SAlan Somers 
22428845213SAlan Somers ATF_TC_WITH_CLEANUP(chmod_failure);
ATF_TC_HEAD(chmod_failure,tc)22528845213SAlan Somers ATF_TC_HEAD(chmod_failure, tc)
22628845213SAlan Somers {
22728845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
22828845213SAlan Somers 					"chmod(2) call");
22928845213SAlan Somers }
23028845213SAlan Somers 
ATF_TC_BODY(chmod_failure,tc)23128845213SAlan Somers ATF_TC_BODY(chmod_failure, tc)
23228845213SAlan Somers {
23328845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
23428845213SAlan Somers 	/* Failure reason: file does not exist */
235*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, chmod(errpath, mode) == -1);
23628845213SAlan Somers 	check_audit(fds, failurereg, pipefd);
23728845213SAlan Somers }
23828845213SAlan Somers 
ATF_TC_CLEANUP(chmod_failure,tc)23928845213SAlan Somers ATF_TC_CLEANUP(chmod_failure, tc)
24028845213SAlan Somers {
24128845213SAlan Somers 	cleanup();
24228845213SAlan Somers }
24328845213SAlan Somers 
24428845213SAlan Somers 
24528845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmod_success);
ATF_TC_HEAD(fchmod_success,tc)24628845213SAlan Somers ATF_TC_HEAD(fchmod_success, tc)
24728845213SAlan Somers {
24828845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
24928845213SAlan Somers 					"fchmod(2) call");
25028845213SAlan Somers }
25128845213SAlan Somers 
ATF_TC_BODY(fchmod_success,tc)25228845213SAlan Somers ATF_TC_BODY(fchmod_success, tc)
25328845213SAlan Somers {
25428845213SAlan Somers 	pid = getpid();
25528845213SAlan Somers 	snprintf(extregex, sizeof(extregex), "fchmod.*%d.*return,success", pid);
25628845213SAlan Somers 
25728845213SAlan Somers 	/* File needs to exist to call fchmod(2) */
25828845213SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
25928845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
26028845213SAlan Somers 	ATF_REQUIRE_EQ(0, fchmod(filedesc, mode));
26128845213SAlan Somers 	check_audit(fds, extregex, pipefd);
26228845213SAlan Somers 	close(filedesc);
26328845213SAlan Somers }
26428845213SAlan Somers 
ATF_TC_CLEANUP(fchmod_success,tc)26528845213SAlan Somers ATF_TC_CLEANUP(fchmod_success, tc)
26628845213SAlan Somers {
26728845213SAlan Somers 	cleanup();
26828845213SAlan Somers }
26928845213SAlan Somers 
27028845213SAlan Somers 
27128845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmod_failure);
ATF_TC_HEAD(fchmod_failure,tc)27228845213SAlan Somers ATF_TC_HEAD(fchmod_failure, tc)
27328845213SAlan Somers {
27428845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
27528845213SAlan Somers 					"fchmod(2) call");
27628845213SAlan Somers }
27728845213SAlan Somers 
ATF_TC_BODY(fchmod_failure,tc)27828845213SAlan Somers ATF_TC_BODY(fchmod_failure, tc)
27928845213SAlan Somers {
28028845213SAlan Somers 	const char *regex = "fchmod.*return,failure : Bad file descriptor";
28128845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
28228845213SAlan Somers 	/* Failure reason: Invalid file descriptor */
283*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EBADF, fchmod(-1, mode) == -1);
28428845213SAlan Somers 	check_audit(fds, regex, pipefd);
28528845213SAlan Somers }
28628845213SAlan Somers 
ATF_TC_CLEANUP(fchmod_failure,tc)28728845213SAlan Somers ATF_TC_CLEANUP(fchmod_failure, tc)
28828845213SAlan Somers {
28928845213SAlan Somers 	cleanup();
29028845213SAlan Somers }
29128845213SAlan Somers 
29228845213SAlan Somers 
29328845213SAlan Somers ATF_TC_WITH_CLEANUP(lchmod_success);
ATF_TC_HEAD(lchmod_success,tc)29428845213SAlan Somers ATF_TC_HEAD(lchmod_success, tc)
29528845213SAlan Somers {
29628845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
29728845213SAlan Somers 					"lchmod(2) call");
29828845213SAlan Somers }
29928845213SAlan Somers 
ATF_TC_BODY(lchmod_success,tc)30028845213SAlan Somers ATF_TC_BODY(lchmod_success, tc)
30128845213SAlan Somers {
30228845213SAlan Somers 	/* Symbolic link needs to exist to call lchmod(2) */
30328845213SAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
30428845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
30528845213SAlan Somers 	ATF_REQUIRE_EQ(0, lchmod(path, mode));
30628845213SAlan Somers 	check_audit(fds, successreg, pipefd);
30728845213SAlan Somers }
30828845213SAlan Somers 
ATF_TC_CLEANUP(lchmod_success,tc)30928845213SAlan Somers ATF_TC_CLEANUP(lchmod_success, tc)
31028845213SAlan Somers {
31128845213SAlan Somers 	cleanup();
31228845213SAlan Somers }
31328845213SAlan Somers 
31428845213SAlan Somers 
31528845213SAlan Somers ATF_TC_WITH_CLEANUP(lchmod_failure);
ATF_TC_HEAD(lchmod_failure,tc)31628845213SAlan Somers ATF_TC_HEAD(lchmod_failure, tc)
31728845213SAlan Somers {
31828845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
31928845213SAlan Somers 					"lchmod(2) call");
32028845213SAlan Somers }
32128845213SAlan Somers 
ATF_TC_BODY(lchmod_failure,tc)32228845213SAlan Somers ATF_TC_BODY(lchmod_failure, tc)
32328845213SAlan Somers {
32428845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
32528845213SAlan Somers 	/* Failure reason: file does not exist */
326*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, lchmod(errpath, mode) == -1);
32728845213SAlan Somers 	check_audit(fds, failurereg, pipefd);
32828845213SAlan Somers }
32928845213SAlan Somers 
ATF_TC_CLEANUP(lchmod_failure,tc)33028845213SAlan Somers ATF_TC_CLEANUP(lchmod_failure, tc)
33128845213SAlan Somers {
33228845213SAlan Somers 	cleanup();
33328845213SAlan Somers }
33428845213SAlan Somers 
33528845213SAlan Somers 
33628845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmodat_success);
ATF_TC_HEAD(fchmodat_success,tc)33728845213SAlan Somers ATF_TC_HEAD(fchmodat_success, tc)
33828845213SAlan Somers {
33928845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
34028845213SAlan Somers 					"fchmodat(2) call");
34128845213SAlan Somers }
34228845213SAlan Somers 
ATF_TC_BODY(fchmodat_success,tc)34328845213SAlan Somers ATF_TC_BODY(fchmodat_success, tc)
34428845213SAlan Somers {
34528845213SAlan Somers 	/* File needs to exist to call fchmodat(2) */
34628845213SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
34728845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
34828845213SAlan Somers 	ATF_REQUIRE_EQ(0, fchmodat(AT_FDCWD, path, mode, 0));
34928845213SAlan Somers 	check_audit(fds, successreg, pipefd);
35028845213SAlan Somers 	close(filedesc);
35128845213SAlan Somers }
35228845213SAlan Somers 
ATF_TC_CLEANUP(fchmodat_success,tc)35328845213SAlan Somers ATF_TC_CLEANUP(fchmodat_success, tc)
35428845213SAlan Somers {
35528845213SAlan Somers 	cleanup();
35628845213SAlan Somers }
35728845213SAlan Somers 
35828845213SAlan Somers 
35928845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmodat_failure);
ATF_TC_HEAD(fchmodat_failure,tc)36028845213SAlan Somers ATF_TC_HEAD(fchmodat_failure, tc)
36128845213SAlan Somers {
36228845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
36328845213SAlan Somers 					"fchmodat(2) call");
36428845213SAlan Somers }
36528845213SAlan Somers 
ATF_TC_BODY(fchmodat_failure,tc)36628845213SAlan Somers ATF_TC_BODY(fchmodat_failure, tc)
36728845213SAlan Somers {
36828845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
36928845213SAlan Somers 	/* Failure reason: file does not exist */
370*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, fchmodat(AT_FDCWD, errpath, mode, 0) == -1);
37128845213SAlan Somers 	check_audit(fds, failurereg, pipefd);
37228845213SAlan Somers }
37328845213SAlan Somers 
ATF_TC_CLEANUP(fchmodat_failure,tc)37428845213SAlan Somers ATF_TC_CLEANUP(fchmodat_failure, tc)
37528845213SAlan Somers {
37628845213SAlan Somers 	cleanup();
37728845213SAlan Somers }
37828845213SAlan Somers 
37928845213SAlan Somers 
3805c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(chown_success);
ATF_TC_HEAD(chown_success,tc)3815c9a4738SAlan Somers ATF_TC_HEAD(chown_success, tc)
3825c9a4738SAlan Somers {
3835c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
3845c9a4738SAlan Somers 					"chown(2) call");
3855c9a4738SAlan Somers }
3865c9a4738SAlan Somers 
ATF_TC_BODY(chown_success,tc)3875c9a4738SAlan Somers ATF_TC_BODY(chown_success, tc)
3885c9a4738SAlan Somers {
3895c9a4738SAlan Somers 	/* File needs to exist to call chown(2) */
3905c9a4738SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
3915c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
3925c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, chown(path, uid, gid));
3935c9a4738SAlan Somers 	check_audit(fds, successreg, pipefd);
3945c9a4738SAlan Somers 	close(filedesc);
3955c9a4738SAlan Somers }
3965c9a4738SAlan Somers 
ATF_TC_CLEANUP(chown_success,tc)3975c9a4738SAlan Somers ATF_TC_CLEANUP(chown_success, tc)
3985c9a4738SAlan Somers {
3995c9a4738SAlan Somers 	cleanup();
4005c9a4738SAlan Somers }
4015c9a4738SAlan Somers 
4025c9a4738SAlan Somers 
4035c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(chown_failure);
ATF_TC_HEAD(chown_failure,tc)4045c9a4738SAlan Somers ATF_TC_HEAD(chown_failure, tc)
4055c9a4738SAlan Somers {
4065c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
4075c9a4738SAlan Somers 					"chown(2) call");
4085c9a4738SAlan Somers }
4095c9a4738SAlan Somers 
ATF_TC_BODY(chown_failure,tc)4105c9a4738SAlan Somers ATF_TC_BODY(chown_failure, tc)
4115c9a4738SAlan Somers {
4125c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
4135c9a4738SAlan Somers 	/* Failure reason: file does not exist */
414*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, chown(errpath, uid, gid) == -1);
4155c9a4738SAlan Somers 	check_audit(fds, failurereg, pipefd);
4165c9a4738SAlan Somers }
4175c9a4738SAlan Somers 
ATF_TC_CLEANUP(chown_failure,tc)4185c9a4738SAlan Somers ATF_TC_CLEANUP(chown_failure, tc)
4195c9a4738SAlan Somers {
4205c9a4738SAlan Somers 	cleanup();
4215c9a4738SAlan Somers }
4225c9a4738SAlan Somers 
4235c9a4738SAlan Somers 
4245c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchown_success);
ATF_TC_HEAD(fchown_success,tc)4255c9a4738SAlan Somers ATF_TC_HEAD(fchown_success, tc)
4265c9a4738SAlan Somers {
4275c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
4285c9a4738SAlan Somers 					"fchown(2) call");
4295c9a4738SAlan Somers }
4305c9a4738SAlan Somers 
ATF_TC_BODY(fchown_success,tc)4315c9a4738SAlan Somers ATF_TC_BODY(fchown_success, tc)
4325c9a4738SAlan Somers {
4335c9a4738SAlan Somers 	pid = getpid();
4345c9a4738SAlan Somers 	snprintf(extregex, sizeof(extregex), "fchown.*%d.*return,success", pid);
4355c9a4738SAlan Somers 
4365c9a4738SAlan Somers 	/* File needs to exist to call fchown(2) */
4375c9a4738SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
4385c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
4395c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, fchown(filedesc, uid, gid));
4405c9a4738SAlan Somers 	check_audit(fds, extregex, pipefd);
4415c9a4738SAlan Somers 	close(filedesc);
4425c9a4738SAlan Somers }
4435c9a4738SAlan Somers 
ATF_TC_CLEANUP(fchown_success,tc)4445c9a4738SAlan Somers ATF_TC_CLEANUP(fchown_success, tc)
4455c9a4738SAlan Somers {
4465c9a4738SAlan Somers 	cleanup();
4475c9a4738SAlan Somers }
4485c9a4738SAlan Somers 
4495c9a4738SAlan Somers 
4505c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchown_failure);
ATF_TC_HEAD(fchown_failure,tc)4515c9a4738SAlan Somers ATF_TC_HEAD(fchown_failure, tc)
4525c9a4738SAlan Somers {
4535c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
4545c9a4738SAlan Somers 					"fchown(2) call");
4555c9a4738SAlan Somers }
4565c9a4738SAlan Somers 
ATF_TC_BODY(fchown_failure,tc)4575c9a4738SAlan Somers ATF_TC_BODY(fchown_failure, tc)
4585c9a4738SAlan Somers {
4595c9a4738SAlan Somers 	const char *regex = "fchown.*return,failure : Bad file descriptor";
4605c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
4615c9a4738SAlan Somers 	/* Failure reason: Invalid file descriptor */
462*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EBADF, fchown(-1, uid, gid) == -1);
4635c9a4738SAlan Somers 	check_audit(fds, regex, pipefd);
4645c9a4738SAlan Somers }
4655c9a4738SAlan Somers 
ATF_TC_CLEANUP(fchown_failure,tc)4665c9a4738SAlan Somers ATF_TC_CLEANUP(fchown_failure, tc)
4675c9a4738SAlan Somers {
4685c9a4738SAlan Somers 	cleanup();
4695c9a4738SAlan Somers }
4705c9a4738SAlan Somers 
4715c9a4738SAlan Somers 
4725c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(lchown_success);
ATF_TC_HEAD(lchown_success,tc)4735c9a4738SAlan Somers ATF_TC_HEAD(lchown_success, tc)
4745c9a4738SAlan Somers {
4755c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
4765c9a4738SAlan Somers 					"lchown(2) call");
4775c9a4738SAlan Somers }
4785c9a4738SAlan Somers 
ATF_TC_BODY(lchown_success,tc)4795c9a4738SAlan Somers ATF_TC_BODY(lchown_success, tc)
4805c9a4738SAlan Somers {
4815c9a4738SAlan Somers 	/* Symbolic link needs to exist to call lchown(2) */
4825c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
4835c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
4845c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, lchown(path, uid, gid));
4855c9a4738SAlan Somers 	check_audit(fds, successreg, pipefd);
4865c9a4738SAlan Somers }
4875c9a4738SAlan Somers 
ATF_TC_CLEANUP(lchown_success,tc)4885c9a4738SAlan Somers ATF_TC_CLEANUP(lchown_success, tc)
4895c9a4738SAlan Somers {
4905c9a4738SAlan Somers 	cleanup();
4915c9a4738SAlan Somers }
4925c9a4738SAlan Somers 
4935c9a4738SAlan Somers 
4945c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(lchown_failure);
ATF_TC_HEAD(lchown_failure,tc)4955c9a4738SAlan Somers ATF_TC_HEAD(lchown_failure, tc)
4965c9a4738SAlan Somers {
4975c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
4985c9a4738SAlan Somers 					"lchown(2) call");
4995c9a4738SAlan Somers }
5005c9a4738SAlan Somers 
ATF_TC_BODY(lchown_failure,tc)5015c9a4738SAlan Somers ATF_TC_BODY(lchown_failure, tc)
5025c9a4738SAlan Somers {
5035c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
5045c9a4738SAlan Somers 	/* Failure reason: Symbolic link does not exist */
505*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, lchown(errpath, uid, gid) == -1);
5065c9a4738SAlan Somers 	check_audit(fds, failurereg, pipefd);
5075c9a4738SAlan Somers }
5085c9a4738SAlan Somers 
ATF_TC_CLEANUP(lchown_failure,tc)5095c9a4738SAlan Somers ATF_TC_CLEANUP(lchown_failure, tc)
5105c9a4738SAlan Somers {
5115c9a4738SAlan Somers 	cleanup();
5125c9a4738SAlan Somers }
5135c9a4738SAlan Somers 
5145c9a4738SAlan Somers 
5155c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchownat_success);
ATF_TC_HEAD(fchownat_success,tc)5165c9a4738SAlan Somers ATF_TC_HEAD(fchownat_success, tc)
5175c9a4738SAlan Somers {
5185c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
5195c9a4738SAlan Somers 					"fchownat(2) call");
5205c9a4738SAlan Somers }
5215c9a4738SAlan Somers 
ATF_TC_BODY(fchownat_success,tc)5225c9a4738SAlan Somers ATF_TC_BODY(fchownat_success, tc)
5235c9a4738SAlan Somers {
5245c9a4738SAlan Somers 	/* File needs to exist to call fchownat(2) */
5255c9a4738SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
5265c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
5275c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, fchownat(AT_FDCWD, path, uid, gid, 0));
5285c9a4738SAlan Somers 	check_audit(fds, successreg, pipefd);
5295c9a4738SAlan Somers 	close(filedesc);
5305c9a4738SAlan Somers }
5315c9a4738SAlan Somers 
ATF_TC_CLEANUP(fchownat_success,tc)5325c9a4738SAlan Somers ATF_TC_CLEANUP(fchownat_success, tc)
5335c9a4738SAlan Somers {
5345c9a4738SAlan Somers 	cleanup();
5355c9a4738SAlan Somers }
5365c9a4738SAlan Somers 
5375c9a4738SAlan Somers 
5385c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchownat_failure);
ATF_TC_HEAD(fchownat_failure,tc)5395c9a4738SAlan Somers ATF_TC_HEAD(fchownat_failure, tc)
5405c9a4738SAlan Somers {
5415c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
5425c9a4738SAlan Somers 					"fchownat(2) call");
5435c9a4738SAlan Somers }
5445c9a4738SAlan Somers 
ATF_TC_BODY(fchownat_failure,tc)5455c9a4738SAlan Somers ATF_TC_BODY(fchownat_failure, tc)
5465c9a4738SAlan Somers {
5475c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
5485c9a4738SAlan Somers 	/* Failure reason: file does not exist */
549*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT,
550*40407d39SAlex Richardson 	    fchownat(AT_FDCWD, errpath, uid, gid, 0) == -1);
5515c9a4738SAlan Somers 	check_audit(fds, failurereg, pipefd);
5525c9a4738SAlan Somers }
5535c9a4738SAlan Somers 
ATF_TC_CLEANUP(fchownat_failure,tc)5545c9a4738SAlan Somers ATF_TC_CLEANUP(fchownat_failure, tc)
5555c9a4738SAlan Somers {
5565c9a4738SAlan Somers 	cleanup();
5575c9a4738SAlan Somers }
5585c9a4738SAlan Somers 
5595c9a4738SAlan Somers 
56068e520feSAlan Somers ATF_TC_WITH_CLEANUP(chflags_success);
ATF_TC_HEAD(chflags_success,tc)56168e520feSAlan Somers ATF_TC_HEAD(chflags_success, tc)
56268e520feSAlan Somers {
56368e520feSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
56468e520feSAlan Somers 					"chflags(2) call");
56568e520feSAlan Somers }
56668e520feSAlan Somers 
ATF_TC_BODY(chflags_success,tc)56768e520feSAlan Somers ATF_TC_BODY(chflags_success, tc)
56868e520feSAlan Somers {
56968e520feSAlan Somers 	/* File needs to exist to call chflags(2) */
57068e520feSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
57168e520feSAlan Somers 	FILE *pipefd = setup(fds, auclass);
57268e520feSAlan Somers 	ATF_REQUIRE_EQ(0, chflags(path, UF_OFFLINE));
57368e520feSAlan Somers 	check_audit(fds, successreg, pipefd);
57468e520feSAlan Somers 	close(filedesc);
57568e520feSAlan Somers }
57668e520feSAlan Somers 
ATF_TC_CLEANUP(chflags_success,tc)57768e520feSAlan Somers ATF_TC_CLEANUP(chflags_success, tc)
57868e520feSAlan Somers {
57968e520feSAlan Somers 	cleanup();
58068e520feSAlan Somers }
58168e520feSAlan Somers 
58268e520feSAlan Somers 
58368e520feSAlan Somers ATF_TC_WITH_CLEANUP(chflags_failure);
ATF_TC_HEAD(chflags_failure,tc)58468e520feSAlan Somers ATF_TC_HEAD(chflags_failure, tc)
58568e520feSAlan Somers {
58668e520feSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
58768e520feSAlan Somers 					"chflags(2) call");
58868e520feSAlan Somers }
58968e520feSAlan Somers 
ATF_TC_BODY(chflags_failure,tc)59068e520feSAlan Somers ATF_TC_BODY(chflags_failure, tc)
59168e520feSAlan Somers {
59268e520feSAlan Somers 	FILE *pipefd = setup(fds, auclass);
59368e520feSAlan Somers 	/* Failure reason: file does not exist */
594*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, chflags(errpath, UF_OFFLINE) == -1);
59568e520feSAlan Somers 	check_audit(fds, failurereg, pipefd);
59668e520feSAlan Somers }
59768e520feSAlan Somers 
ATF_TC_CLEANUP(chflags_failure,tc)59868e520feSAlan Somers ATF_TC_CLEANUP(chflags_failure, tc)
59968e520feSAlan Somers {
60068e520feSAlan Somers 	cleanup();
60168e520feSAlan Somers }
60268e520feSAlan Somers 
60368e520feSAlan Somers 
60468e520feSAlan Somers ATF_TC_WITH_CLEANUP(fchflags_success);
ATF_TC_HEAD(fchflags_success,tc)60568e520feSAlan Somers ATF_TC_HEAD(fchflags_success, tc)
60668e520feSAlan Somers {
60768e520feSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
60868e520feSAlan Somers 					"fchflags(2) call");
60968e520feSAlan Somers }
61068e520feSAlan Somers 
ATF_TC_BODY(fchflags_success,tc)61168e520feSAlan Somers ATF_TC_BODY(fchflags_success, tc)
61268e520feSAlan Somers {
61368e520feSAlan Somers 	pid = getpid();
61468e520feSAlan Somers 	snprintf(extregex, sizeof(extregex), "fchflags.*%d.*ret.*success", pid);
61568e520feSAlan Somers 	/* File needs to exist to call fchflags(2) */
61668e520feSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
61768e520feSAlan Somers 
61868e520feSAlan Somers 	FILE *pipefd = setup(fds, auclass);
61968e520feSAlan Somers 	ATF_REQUIRE_EQ(0, fchflags(filedesc, UF_OFFLINE));
62068e520feSAlan Somers 	check_audit(fds, extregex, pipefd);
62168e520feSAlan Somers 	close(filedesc);
62268e520feSAlan Somers }
62368e520feSAlan Somers 
ATF_TC_CLEANUP(fchflags_success,tc)62468e520feSAlan Somers ATF_TC_CLEANUP(fchflags_success, tc)
62568e520feSAlan Somers {
62668e520feSAlan Somers 	cleanup();
62768e520feSAlan Somers }
62868e520feSAlan Somers 
62968e520feSAlan Somers 
63068e520feSAlan Somers ATF_TC_WITH_CLEANUP(fchflags_failure);
ATF_TC_HEAD(fchflags_failure,tc)63168e520feSAlan Somers ATF_TC_HEAD(fchflags_failure, tc)
63268e520feSAlan Somers {
63368e520feSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
63468e520feSAlan Somers 					"fchflags(2) call");
63568e520feSAlan Somers }
63668e520feSAlan Somers 
ATF_TC_BODY(fchflags_failure,tc)63768e520feSAlan Somers ATF_TC_BODY(fchflags_failure, tc)
63868e520feSAlan Somers {
63968e520feSAlan Somers 	const char *regex = "fchflags.*return,failure : Bad file descriptor";
64068e520feSAlan Somers 	FILE *pipefd = setup(fds, auclass);
64168e520feSAlan Somers 	/* Failure reason: Invalid file descriptor */
642*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EBADF, fchflags(-1, UF_OFFLINE) == -1);
64368e520feSAlan Somers 	check_audit(fds, regex, pipefd);
64468e520feSAlan Somers }
64568e520feSAlan Somers 
ATF_TC_CLEANUP(fchflags_failure,tc)64668e520feSAlan Somers ATF_TC_CLEANUP(fchflags_failure, tc)
64768e520feSAlan Somers {
64868e520feSAlan Somers 	cleanup();
64968e520feSAlan Somers }
65068e520feSAlan Somers 
65168e520feSAlan Somers 
65268e520feSAlan Somers ATF_TC_WITH_CLEANUP(lchflags_success);
ATF_TC_HEAD(lchflags_success,tc)65368e520feSAlan Somers ATF_TC_HEAD(lchflags_success, tc)
65468e520feSAlan Somers {
65568e520feSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
65668e520feSAlan Somers 					"lchflags(2) call");
65768e520feSAlan Somers }
65868e520feSAlan Somers 
ATF_TC_BODY(lchflags_success,tc)65968e520feSAlan Somers ATF_TC_BODY(lchflags_success, tc)
66068e520feSAlan Somers {
66168e520feSAlan Somers 	/* Symbolic link needs to exist to call lchflags(2) */
66268e520feSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
66368e520feSAlan Somers 	FILE *pipefd = setup(fds, auclass);
66468e520feSAlan Somers 	ATF_REQUIRE_EQ(0, lchflags(path, UF_OFFLINE));
66568e520feSAlan Somers 	check_audit(fds, successreg, pipefd);
66668e520feSAlan Somers }
66768e520feSAlan Somers 
ATF_TC_CLEANUP(lchflags_success,tc)66868e520feSAlan Somers ATF_TC_CLEANUP(lchflags_success, tc)
66968e520feSAlan Somers {
67068e520feSAlan Somers 	cleanup();
67168e520feSAlan Somers }
67268e520feSAlan Somers 
67368e520feSAlan Somers 
67468e520feSAlan Somers ATF_TC_WITH_CLEANUP(lchflags_failure);
ATF_TC_HEAD(lchflags_failure,tc)67568e520feSAlan Somers ATF_TC_HEAD(lchflags_failure, tc)
67668e520feSAlan Somers {
67768e520feSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
67868e520feSAlan Somers 					"lchflags(2) call");
67968e520feSAlan Somers }
68068e520feSAlan Somers 
ATF_TC_BODY(lchflags_failure,tc)68168e520feSAlan Somers ATF_TC_BODY(lchflags_failure, tc)
68268e520feSAlan Somers {
68368e520feSAlan Somers 	FILE *pipefd = setup(fds, auclass);
68468e520feSAlan Somers 	/* Failure reason: Symbolic link does not exist */
685*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, lchflags(errpath, UF_OFFLINE) == -1);
68668e520feSAlan Somers 	check_audit(fds, failurereg, pipefd);
68768e520feSAlan Somers }
68868e520feSAlan Somers 
ATF_TC_CLEANUP(lchflags_failure,tc)68968e520feSAlan Somers ATF_TC_CLEANUP(lchflags_failure, tc)
69068e520feSAlan Somers {
69168e520feSAlan Somers 	cleanup();
69268e520feSAlan Somers }
69368e520feSAlan Somers 
69468e520feSAlan Somers 
69555cd4523SAlan Somers ATF_TC_WITH_CLEANUP(chflagsat_success);
ATF_TC_HEAD(chflagsat_success,tc)69655cd4523SAlan Somers ATF_TC_HEAD(chflagsat_success, tc)
69755cd4523SAlan Somers {
69855cd4523SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
69955cd4523SAlan Somers 					"chflagsat(2) call");
70055cd4523SAlan Somers }
70155cd4523SAlan Somers 
ATF_TC_BODY(chflagsat_success,tc)70255cd4523SAlan Somers ATF_TC_BODY(chflagsat_success, tc)
70355cd4523SAlan Somers {
70455cd4523SAlan Somers 	/* File needs to exist to call chflagsat(2) */
70555cd4523SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
70655cd4523SAlan Somers 	FILE *pipefd = setup(fds, auclass);
707cdb9318eSEnji Cooper 	ATF_REQUIRE_EQ(0, chflagsat(AT_FDCWD, path, UF_OFFLINE, 0));
70855cd4523SAlan Somers 	check_audit(fds, successreg, pipefd);
70955cd4523SAlan Somers 	close(filedesc);
71055cd4523SAlan Somers }
71155cd4523SAlan Somers 
ATF_TC_CLEANUP(chflagsat_success,tc)71255cd4523SAlan Somers ATF_TC_CLEANUP(chflagsat_success, tc)
71355cd4523SAlan Somers {
71455cd4523SAlan Somers 	cleanup();
71555cd4523SAlan Somers }
71655cd4523SAlan Somers 
71755cd4523SAlan Somers 
71855cd4523SAlan Somers ATF_TC_WITH_CLEANUP(chflagsat_failure);
ATF_TC_HEAD(chflagsat_failure,tc)71955cd4523SAlan Somers ATF_TC_HEAD(chflagsat_failure, tc)
72055cd4523SAlan Somers {
72155cd4523SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
72255cd4523SAlan Somers 					"chflagsat(2) call");
72355cd4523SAlan Somers }
72455cd4523SAlan Somers 
ATF_TC_BODY(chflagsat_failure,tc)72555cd4523SAlan Somers ATF_TC_BODY(chflagsat_failure, tc)
72655cd4523SAlan Somers {
72755cd4523SAlan Somers 	FILE *pipefd = setup(fds, auclass);
72855cd4523SAlan Somers 	/* Failure reason: file does not exist */
729*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT,
730*40407d39SAlex Richardson 	    chflagsat(AT_FDCWD, errpath, UF_OFFLINE, 0) == -1);
73155cd4523SAlan Somers 	check_audit(fds, failurereg, pipefd);
73255cd4523SAlan Somers }
73355cd4523SAlan Somers 
ATF_TC_CLEANUP(chflagsat_failure,tc)73455cd4523SAlan Somers ATF_TC_CLEANUP(chflagsat_failure, tc)
73555cd4523SAlan Somers {
73655cd4523SAlan Somers 	cleanup();
73755cd4523SAlan Somers }
73855cd4523SAlan Somers 
73955cd4523SAlan Somers 
740d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(utimes_success);
ATF_TC_HEAD(utimes_success,tc)741d1fb351cSAlan Somers ATF_TC_HEAD(utimes_success, tc)
742d1fb351cSAlan Somers {
743d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
744d1fb351cSAlan Somers 					"utimes(2) call");
745d1fb351cSAlan Somers }
746d1fb351cSAlan Somers 
ATF_TC_BODY(utimes_success,tc)747d1fb351cSAlan Somers ATF_TC_BODY(utimes_success, tc)
748d1fb351cSAlan Somers {
749d1fb351cSAlan Somers 	/* File needs to exist to call utimes(2) */
750d1fb351cSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
751d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
752d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, utimes(path, NULL));
753d1fb351cSAlan Somers 	check_audit(fds, successreg, pipefd);
754d1fb351cSAlan Somers 	close(filedesc);
755d1fb351cSAlan Somers }
756d1fb351cSAlan Somers 
ATF_TC_CLEANUP(utimes_success,tc)757d1fb351cSAlan Somers ATF_TC_CLEANUP(utimes_success, tc)
758d1fb351cSAlan Somers {
759d1fb351cSAlan Somers 	cleanup();
760d1fb351cSAlan Somers }
761d1fb351cSAlan Somers 
762d1fb351cSAlan Somers 
763d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(utimes_failure);
ATF_TC_HEAD(utimes_failure,tc)764d1fb351cSAlan Somers ATF_TC_HEAD(utimes_failure, tc)
765d1fb351cSAlan Somers {
766d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
767d1fb351cSAlan Somers 					"utimes(2) call");
768d1fb351cSAlan Somers }
769d1fb351cSAlan Somers 
ATF_TC_BODY(utimes_failure,tc)770d1fb351cSAlan Somers ATF_TC_BODY(utimes_failure, tc)
771d1fb351cSAlan Somers {
772d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
773d1fb351cSAlan Somers 	/* Failure reason: file does not exist */
774*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, utimes(errpath, NULL) == -1);
775d1fb351cSAlan Somers 	check_audit(fds, failurereg, pipefd);
776d1fb351cSAlan Somers }
777d1fb351cSAlan Somers 
ATF_TC_CLEANUP(utimes_failure,tc)778d1fb351cSAlan Somers ATF_TC_CLEANUP(utimes_failure, tc)
779d1fb351cSAlan Somers {
780d1fb351cSAlan Somers 	cleanup();
781d1fb351cSAlan Somers }
782d1fb351cSAlan Somers 
783d1fb351cSAlan Somers 
784d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimes_success);
ATF_TC_HEAD(futimes_success,tc)785d1fb351cSAlan Somers ATF_TC_HEAD(futimes_success, tc)
786d1fb351cSAlan Somers {
787d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
788d1fb351cSAlan Somers 					"futimes(2) call");
789d1fb351cSAlan Somers }
790d1fb351cSAlan Somers 
ATF_TC_BODY(futimes_success,tc)791d1fb351cSAlan Somers ATF_TC_BODY(futimes_success, tc)
792d1fb351cSAlan Somers {
793d1fb351cSAlan Somers 	pid = getpid();
794d1fb351cSAlan Somers 	snprintf(extregex, sizeof(extregex), "futimes.*%d.*ret.*success", pid);
795d1fb351cSAlan Somers 
796d1fb351cSAlan Somers 	/* File needs to exist to call futimes(2) */
797d1fb351cSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
798d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
799d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, futimes(filedesc, NULL));
800d1fb351cSAlan Somers 	check_audit(fds, extregex, pipefd);
801d1fb351cSAlan Somers 	close(filedesc);
802d1fb351cSAlan Somers }
803d1fb351cSAlan Somers 
ATF_TC_CLEANUP(futimes_success,tc)804d1fb351cSAlan Somers ATF_TC_CLEANUP(futimes_success, tc)
805d1fb351cSAlan Somers {
806d1fb351cSAlan Somers 	cleanup();
807d1fb351cSAlan Somers }
808d1fb351cSAlan Somers 
809d1fb351cSAlan Somers 
810d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimes_failure);
ATF_TC_HEAD(futimes_failure,tc)811d1fb351cSAlan Somers ATF_TC_HEAD(futimes_failure, tc)
812d1fb351cSAlan Somers {
813d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
814d1fb351cSAlan Somers 					"futimes(2) call");
815d1fb351cSAlan Somers }
816d1fb351cSAlan Somers 
ATF_TC_BODY(futimes_failure,tc)817d1fb351cSAlan Somers ATF_TC_BODY(futimes_failure, tc)
818d1fb351cSAlan Somers {
819d1fb351cSAlan Somers 	const char *regex = "futimes.*return,failure : Bad file descriptor";
820d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
821d1fb351cSAlan Somers 	/* Failure reason: Invalid file descriptor */
822*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EBADF, futimes(-1, NULL) == -1);
823d1fb351cSAlan Somers 	check_audit(fds, regex, pipefd);
824d1fb351cSAlan Somers }
825d1fb351cSAlan Somers 
ATF_TC_CLEANUP(futimes_failure,tc)826d1fb351cSAlan Somers ATF_TC_CLEANUP(futimes_failure, tc)
827d1fb351cSAlan Somers {
828d1fb351cSAlan Somers 	cleanup();
829d1fb351cSAlan Somers }
830d1fb351cSAlan Somers 
831d1fb351cSAlan Somers 
832d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(lutimes_success);
ATF_TC_HEAD(lutimes_success,tc)833d1fb351cSAlan Somers ATF_TC_HEAD(lutimes_success, tc)
834d1fb351cSAlan Somers {
835d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
836d1fb351cSAlan Somers 					"lutimes(2) call");
837d1fb351cSAlan Somers }
838d1fb351cSAlan Somers 
ATF_TC_BODY(lutimes_success,tc)839d1fb351cSAlan Somers ATF_TC_BODY(lutimes_success, tc)
840d1fb351cSAlan Somers {
841d1fb351cSAlan Somers 	/* Symbolic link needs to exist to call lutimes(2) */
842d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
843d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
844d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, lutimes(path, NULL));
845d1fb351cSAlan Somers 	check_audit(fds, successreg, pipefd);
846d1fb351cSAlan Somers }
847d1fb351cSAlan Somers 
ATF_TC_CLEANUP(lutimes_success,tc)848d1fb351cSAlan Somers ATF_TC_CLEANUP(lutimes_success, tc)
849d1fb351cSAlan Somers {
850d1fb351cSAlan Somers 	cleanup();
851d1fb351cSAlan Somers }
852d1fb351cSAlan Somers 
853d1fb351cSAlan Somers 
854d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(lutimes_failure);
ATF_TC_HEAD(lutimes_failure,tc)855d1fb351cSAlan Somers ATF_TC_HEAD(lutimes_failure, tc)
856d1fb351cSAlan Somers {
857d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
858d1fb351cSAlan Somers 					"lutimes(2) call");
859d1fb351cSAlan Somers }
860d1fb351cSAlan Somers 
ATF_TC_BODY(lutimes_failure,tc)861d1fb351cSAlan Somers ATF_TC_BODY(lutimes_failure, tc)
862d1fb351cSAlan Somers {
863d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
864d1fb351cSAlan Somers 	/* Failure reason: symbolic link does not exist */
865*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, lutimes(errpath, NULL) == -1);
866d1fb351cSAlan Somers 	check_audit(fds, failurereg, pipefd);
867d1fb351cSAlan Somers }
868d1fb351cSAlan Somers 
ATF_TC_CLEANUP(lutimes_failure,tc)869d1fb351cSAlan Somers ATF_TC_CLEANUP(lutimes_failure, tc)
870d1fb351cSAlan Somers {
871d1fb351cSAlan Somers 	cleanup();
872d1fb351cSAlan Somers }
873d1fb351cSAlan Somers 
874d1fb351cSAlan Somers 
875d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimesat_success);
ATF_TC_HEAD(futimesat_success,tc)876d1fb351cSAlan Somers ATF_TC_HEAD(futimesat_success, tc)
877d1fb351cSAlan Somers {
878d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
879d1fb351cSAlan Somers 					"futimesat(2) call");
880d1fb351cSAlan Somers }
881d1fb351cSAlan Somers 
ATF_TC_BODY(futimesat_success,tc)882d1fb351cSAlan Somers ATF_TC_BODY(futimesat_success, tc)
883d1fb351cSAlan Somers {
884d1fb351cSAlan Somers 	/* File needs to exist to call futimesat(2) */
885d1fb351cSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
886d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
887d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, futimesat(AT_FDCWD, path, NULL));
888d1fb351cSAlan Somers 	check_audit(fds, successreg, pipefd);
889d1fb351cSAlan Somers 	close(filedesc);
890d1fb351cSAlan Somers }
891d1fb351cSAlan Somers 
ATF_TC_CLEANUP(futimesat_success,tc)892d1fb351cSAlan Somers ATF_TC_CLEANUP(futimesat_success, tc)
893d1fb351cSAlan Somers {
894d1fb351cSAlan Somers 	cleanup();
895d1fb351cSAlan Somers }
896d1fb351cSAlan Somers 
897d1fb351cSAlan Somers 
898d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimesat_failure);
ATF_TC_HEAD(futimesat_failure,tc)899d1fb351cSAlan Somers ATF_TC_HEAD(futimesat_failure, tc)
900d1fb351cSAlan Somers {
901d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
902d1fb351cSAlan Somers 					"futimesat(2) call");
903d1fb351cSAlan Somers }
904d1fb351cSAlan Somers 
ATF_TC_BODY(futimesat_failure,tc)905d1fb351cSAlan Somers ATF_TC_BODY(futimesat_failure, tc)
906d1fb351cSAlan Somers {
907d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
908d1fb351cSAlan Somers 	/* Failure reason: file does not exist */
909*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, futimesat(AT_FDCWD, errpath, NULL) == -1);
910d1fb351cSAlan Somers 	check_audit(fds, failurereg, pipefd);
911d1fb351cSAlan Somers }
912d1fb351cSAlan Somers 
ATF_TC_CLEANUP(futimesat_failure,tc)913d1fb351cSAlan Somers ATF_TC_CLEANUP(futimesat_failure, tc)
914d1fb351cSAlan Somers {
915d1fb351cSAlan Somers 	cleanup();
916d1fb351cSAlan Somers }
917d1fb351cSAlan Somers 
918d1fb351cSAlan Somers 
919d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(mprotect_success);
ATF_TC_HEAD(mprotect_success,tc)920d1fb351cSAlan Somers ATF_TC_HEAD(mprotect_success, tc)
921d1fb351cSAlan Somers {
922d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
923d1fb351cSAlan Somers 					"mprotect(2) call");
924d1fb351cSAlan Somers }
925d1fb351cSAlan Somers 
ATF_TC_BODY(mprotect_success,tc)926d1fb351cSAlan Somers ATF_TC_BODY(mprotect_success, tc)
927d1fb351cSAlan Somers {
928d1fb351cSAlan Somers 	pid = getpid();
929d1fb351cSAlan Somers 	snprintf(extregex, sizeof(extregex), "mprotect.*%d.*ret.*success", pid);
930d1fb351cSAlan Somers 
931d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
932d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, mprotect(NULL, 0, PROT_NONE));
933d1fb351cSAlan Somers 	check_audit(fds, extregex, pipefd);
934d1fb351cSAlan Somers }
935d1fb351cSAlan Somers 
ATF_TC_CLEANUP(mprotect_success,tc)936d1fb351cSAlan Somers ATF_TC_CLEANUP(mprotect_success, tc)
937d1fb351cSAlan Somers {
938d1fb351cSAlan Somers 	cleanup();
939d1fb351cSAlan Somers }
940d1fb351cSAlan Somers 
941d1fb351cSAlan Somers 
942d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(mprotect_failure);
ATF_TC_HEAD(mprotect_failure,tc)943d1fb351cSAlan Somers ATF_TC_HEAD(mprotect_failure, tc)
944d1fb351cSAlan Somers {
945d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
946d1fb351cSAlan Somers 					"mprotect(2) call");
947d1fb351cSAlan Somers }
948d1fb351cSAlan Somers 
ATF_TC_BODY(mprotect_failure,tc)949d1fb351cSAlan Somers ATF_TC_BODY(mprotect_failure, tc)
950d1fb351cSAlan Somers {
951d1fb351cSAlan Somers 	const char *regex = "mprotect.*return,failure : Invalid argument";
952d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
953*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EINVAL,
954*40407d39SAlex Richardson 	    mprotect((void *)SIZE_MAX, -1, PROT_NONE) == -1);
955d1fb351cSAlan Somers 	check_audit(fds, regex, pipefd);
956d1fb351cSAlan Somers }
957d1fb351cSAlan Somers 
ATF_TC_CLEANUP(mprotect_failure,tc)958d1fb351cSAlan Somers ATF_TC_CLEANUP(mprotect_failure, tc)
959d1fb351cSAlan Somers {
960d1fb351cSAlan Somers 	cleanup();
961d1fb351cSAlan Somers }
962d1fb351cSAlan Somers 
963d1fb351cSAlan Somers /*
964d1fb351cSAlan Somers  * undelete(2) only works on whiteout files in union file system. Hence, no
965d1fb351cSAlan Somers  * test case for successful invocation.
966d1fb351cSAlan Somers  */
967d1fb351cSAlan Somers 
968d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(undelete_failure);
ATF_TC_HEAD(undelete_failure,tc)969d1fb351cSAlan Somers ATF_TC_HEAD(undelete_failure, tc)
970d1fb351cSAlan Somers {
971d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
972d1fb351cSAlan Somers 					"undelete(2) call");
973d1fb351cSAlan Somers }
974d1fb351cSAlan Somers 
ATF_TC_BODY(undelete_failure,tc)975d1fb351cSAlan Somers ATF_TC_BODY(undelete_failure, tc)
976d1fb351cSAlan Somers {
977d1fb351cSAlan Somers 	pid = getpid();
978d1fb351cSAlan Somers 	snprintf(extregex, sizeof(extregex), "undelete.*%d.*ret.*failure", pid);
979d1fb351cSAlan Somers 
980d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
981d1fb351cSAlan Somers 	/* Failure reason: File does not exist */
982*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT, undelete(errpath) == -1);
983d1fb351cSAlan Somers 	check_audit(fds, extregex, pipefd);
984d1fb351cSAlan Somers }
985d1fb351cSAlan Somers 
ATF_TC_CLEANUP(undelete_failure,tc)986d1fb351cSAlan Somers ATF_TC_CLEANUP(undelete_failure, tc)
987d1fb351cSAlan Somers {
988d1fb351cSAlan Somers 	cleanup();
989d1fb351cSAlan Somers }
990d1fb351cSAlan Somers 
991d1fb351cSAlan Somers 
992844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_file_success);
ATF_TC_HEAD(extattr_set_file_success,tc)993844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_file_success, tc)
994844fc5ebSAlan Somers {
995844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
996844fc5ebSAlan Somers 					"extattr_set_file(2) call");
997844fc5ebSAlan Somers }
998844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_set_file_success,tc)999844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_file_success, tc)
1000844fc5ebSAlan Somers {
1001844fc5ebSAlan Somers 	/* File needs to exist to call extattr_set_file(2) */
1002844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1003*40407d39SAlex Richardson 	skip_if_extattr_not_supported(path);
1004*40407d39SAlex Richardson 
1005844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1006844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1007844fc5ebSAlan Somers 		"extattr_set_file.*%s.*%s.*return,success", path, name);
1008844fc5ebSAlan Somers 
1009844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1010*40407d39SAlex Richardson 	REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_file(path,
1011844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1012844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1013844fc5ebSAlan Somers 	close(filedesc);
1014844fc5ebSAlan Somers }
1015844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_set_file_success,tc)1016844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_file_success, tc)
1017844fc5ebSAlan Somers {
1018844fc5ebSAlan Somers 	cleanup();
1019844fc5ebSAlan Somers }
1020844fc5ebSAlan Somers 
1021844fc5ebSAlan Somers 
1022844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_file_failure);
ATF_TC_HEAD(extattr_set_file_failure,tc)1023844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_file_failure, tc)
1024844fc5ebSAlan Somers {
1025844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1026844fc5ebSAlan Somers 					"extattr_set_file(2) call");
1027844fc5ebSAlan Somers }
1028844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_set_file_failure,tc)1029844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_file_failure, tc)
1030844fc5ebSAlan Somers {
1031844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1032844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1033844fc5ebSAlan Somers 		"extattr_set_file.*%s.*%s.*failure", path, name);
1034844fc5ebSAlan Somers 
1035844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1036844fc5ebSAlan Somers 	/* Failure reason: file does not exist */
1037*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT,
1038*40407d39SAlex Richardson 	    extattr_set_file(path, EXTATTR_NAMESPACE_USER, name, NULL, 0) ==
1039*40407d39SAlex Richardson 		-1);
1040844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1041844fc5ebSAlan Somers }
1042844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_set_file_failure,tc)1043844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_file_failure, tc)
1044844fc5ebSAlan Somers {
1045844fc5ebSAlan Somers 	cleanup();
1046844fc5ebSAlan Somers }
1047844fc5ebSAlan Somers 
1048844fc5ebSAlan Somers 
1049844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_fd_success);
ATF_TC_HEAD(extattr_set_fd_success,tc)1050844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_fd_success, tc)
1051844fc5ebSAlan Somers {
1052844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1053844fc5ebSAlan Somers 					"extattr_set_fd(2) call");
1054844fc5ebSAlan Somers }
1055844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_set_fd_success,tc)1056844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_fd_success, tc)
1057844fc5ebSAlan Somers {
1058844fc5ebSAlan Somers 	/* File needs to exist to call extattr_set_fd(2) */
1059844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1060*40407d39SAlex Richardson 	skip_if_extattr_not_supported(path);
1061844fc5ebSAlan Somers 
1062844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1063844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1064844fc5ebSAlan Somers 		"extattr_set_fd.*%s.*return,success", name);
1065844fc5ebSAlan Somers 
1066844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1067*40407d39SAlex Richardson 	REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_fd(filedesc,
1068844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1069844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1070844fc5ebSAlan Somers 	close(filedesc);
1071844fc5ebSAlan Somers }
1072844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_set_fd_success,tc)1073844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_fd_success, tc)
1074844fc5ebSAlan Somers {
1075844fc5ebSAlan Somers 	cleanup();
1076844fc5ebSAlan Somers }
1077844fc5ebSAlan Somers 
1078844fc5ebSAlan Somers 
1079844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_fd_failure);
ATF_TC_HEAD(extattr_set_fd_failure,tc)1080844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_fd_failure, tc)
1081844fc5ebSAlan Somers {
1082844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1083844fc5ebSAlan Somers 					"extattr_set_fd(2) call");
1084844fc5ebSAlan Somers }
1085844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_set_fd_failure,tc)1086844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_fd_failure, tc)
1087844fc5ebSAlan Somers {
1088844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1089844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1090844fc5ebSAlan Somers 	"extattr_set_fd.*%s.*return,failure : Bad file descriptor", name);
1091844fc5ebSAlan Somers 
1092844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1093844fc5ebSAlan Somers 	/* Failure reason: Invalid file descriptor */
1094*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EBADF,
1095*40407d39SAlex Richardson 	    extattr_set_fd(-1, EXTATTR_NAMESPACE_USER, name, NULL, 0) == -1);
1096844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1097844fc5ebSAlan Somers }
1098844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_set_fd_failure,tc)1099844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_fd_failure, tc)
1100844fc5ebSAlan Somers {
1101844fc5ebSAlan Somers 	cleanup();
1102844fc5ebSAlan Somers }
1103844fc5ebSAlan Somers 
1104844fc5ebSAlan Somers 
1105844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_link_success);
ATF_TC_HEAD(extattr_set_link_success,tc)1106844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_link_success, tc)
1107844fc5ebSAlan Somers {
1108844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1109844fc5ebSAlan Somers 					"extattr_set_link(2) call");
1110844fc5ebSAlan Somers }
1111844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_set_link_success,tc)1112844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_link_success, tc)
1113844fc5ebSAlan Somers {
1114844fc5ebSAlan Somers 	/* Symbolic link needs to exist to call extattr_set_link(2) */
1115844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
1116*40407d39SAlex Richardson 	skip_if_extattr_not_supported(".");
1117*40407d39SAlex Richardson 
1118844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1119844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1120844fc5ebSAlan Somers 		"extattr_set_link.*%s.*%s.*return,success", path, name);
1121844fc5ebSAlan Somers 
1122844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1123*40407d39SAlex Richardson 	REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_link(path,
1124844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1125844fc5ebSAlan Somers 
1126844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1127844fc5ebSAlan Somers }
1128844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_set_link_success,tc)1129844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_link_success, tc)
1130844fc5ebSAlan Somers {
1131844fc5ebSAlan Somers 	cleanup();
1132844fc5ebSAlan Somers }
1133844fc5ebSAlan Somers 
1134844fc5ebSAlan Somers 
1135844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_link_failure);
ATF_TC_HEAD(extattr_set_link_failure,tc)1136844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_link_failure, tc)
1137844fc5ebSAlan Somers {
1138844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1139844fc5ebSAlan Somers 					"extattr_set_link(2) call");
1140844fc5ebSAlan Somers }
1141844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_set_link_failure,tc)1142844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_link_failure, tc)
1143844fc5ebSAlan Somers {
1144844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1145844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1146844fc5ebSAlan Somers 		"extattr_set_link.*%s.*%s.*failure", path, name);
1147844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1148844fc5ebSAlan Somers 	/* Failure reason: symbolic link does not exist */
1149*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT,
1150*40407d39SAlex Richardson 	    extattr_set_link(path, EXTATTR_NAMESPACE_USER, name, NULL, 0) ==
1151*40407d39SAlex Richardson 		-1);
1152844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1153844fc5ebSAlan Somers }
1154844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_set_link_failure,tc)1155844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_link_failure, tc)
1156844fc5ebSAlan Somers {
1157844fc5ebSAlan Somers 	cleanup();
1158844fc5ebSAlan Somers }
1159844fc5ebSAlan Somers 
1160844fc5ebSAlan Somers 
1161844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_file_success);
ATF_TC_HEAD(extattr_delete_file_success,tc)1162844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_file_success, tc)
1163844fc5ebSAlan Somers {
1164844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1165844fc5ebSAlan Somers 					"extattr_delete_file(2) call");
1166844fc5ebSAlan Somers }
1167844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_delete_file_success,tc)1168844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_file_success, tc)
1169844fc5ebSAlan Somers {
1170844fc5ebSAlan Somers 	/* File needs to exist to call extattr_delete_file(2) */
1171844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1172*40407d39SAlex Richardson 	skip_if_extattr_not_supported(path);
1173*40407d39SAlex Richardson 
1174*40407d39SAlex Richardson 	REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_file(path,
1175844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1176844fc5ebSAlan Somers 
1177844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1178*40407d39SAlex Richardson 	retval = REQUIRE_EXTATTR_SUCCESS(
1179*40407d39SAlex Richardson 	    extattr_delete_file(path, EXTATTR_NAMESPACE_USER, name));
1180844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1181844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1182844fc5ebSAlan Somers 	"extattr_delete_file.*%s.*return,success,%d", path, retval);
1183844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1184844fc5ebSAlan Somers 	close(filedesc);
1185844fc5ebSAlan Somers }
1186844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_delete_file_success,tc)1187844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_file_success, tc)
1188844fc5ebSAlan Somers {
1189844fc5ebSAlan Somers 	cleanup();
1190844fc5ebSAlan Somers }
1191844fc5ebSAlan Somers 
1192844fc5ebSAlan Somers 
1193844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_file_failure);
ATF_TC_HEAD(extattr_delete_file_failure,tc)1194844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_file_failure, tc)
1195844fc5ebSAlan Somers {
1196844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1197844fc5ebSAlan Somers 					"extattr_delete_file(2) call");
1198844fc5ebSAlan Somers }
1199844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_delete_file_failure,tc)1200844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_file_failure, tc)
1201844fc5ebSAlan Somers {
1202844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1203844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1204844fc5ebSAlan Somers 		"extattr_delete_file.*%s.*return,failure", path);
1205844fc5ebSAlan Somers 
1206844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1207844fc5ebSAlan Somers 	/* Failure reason: file does not exist */
1208*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT,
1209*40407d39SAlex Richardson 	    extattr_delete_file(path, EXTATTR_NAMESPACE_USER, name) == -1);
1210844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1211844fc5ebSAlan Somers }
1212844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_delete_file_failure,tc)1213844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_file_failure, tc)
1214844fc5ebSAlan Somers {
1215844fc5ebSAlan Somers 	cleanup();
1216844fc5ebSAlan Somers }
1217844fc5ebSAlan Somers 
1218844fc5ebSAlan Somers 
1219844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_fd_success);
ATF_TC_HEAD(extattr_delete_fd_success,tc)1220844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_fd_success, tc)
1221844fc5ebSAlan Somers {
1222844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1223844fc5ebSAlan Somers 					"extattr_delete_fd(2) call");
1224844fc5ebSAlan Somers }
1225844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_delete_fd_success,tc)1226844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_fd_success, tc)
1227844fc5ebSAlan Somers {
1228844fc5ebSAlan Somers 	/* File needs to exist to call extattr_delete_fd(2) */
1229844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1230*40407d39SAlex Richardson 	skip_if_extattr_not_supported(path);
1231*40407d39SAlex Richardson 
1232*40407d39SAlex Richardson 	REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_file(path,
1233844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1234844fc5ebSAlan Somers 
1235844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1236*40407d39SAlex Richardson 	retval = REQUIRE_EXTATTR_SUCCESS(extattr_delete_fd(filedesc,
1237*40407d39SAlex Richardson 		EXTATTR_NAMESPACE_USER, name));
1238844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1239844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1240844fc5ebSAlan Somers 		"extattr_delete_fd.*return,success,%d", retval);
1241844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1242844fc5ebSAlan Somers 	close(filedesc);
1243844fc5ebSAlan Somers }
1244844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_delete_fd_success,tc)1245844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_fd_success, tc)
1246844fc5ebSAlan Somers {
1247844fc5ebSAlan Somers 	cleanup();
1248844fc5ebSAlan Somers }
1249844fc5ebSAlan Somers 
1250844fc5ebSAlan Somers 
1251844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_fd_failure);
ATF_TC_HEAD(extattr_delete_fd_failure,tc)1252844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_fd_failure, tc)
1253844fc5ebSAlan Somers {
1254844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1255844fc5ebSAlan Somers 					"extattr_delete_fd(2) call");
1256844fc5ebSAlan Somers }
1257844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_delete_fd_failure,tc)1258844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_fd_failure, tc)
1259844fc5ebSAlan Somers {
1260844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1261844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1262844fc5ebSAlan Somers 		"extattr_delete_fd.*return,failure : Bad file descriptor");
1263844fc5ebSAlan Somers 
1264844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1265844fc5ebSAlan Somers 	/* Failure reason: Invalid file descriptor */
1266*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(EBADF,
1267*40407d39SAlex Richardson 	    extattr_delete_fd(-1, EXTATTR_NAMESPACE_USER, name) == -1);
1268844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1269844fc5ebSAlan Somers }
1270844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_delete_fd_failure,tc)1271844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_fd_failure, tc)
1272844fc5ebSAlan Somers {
1273844fc5ebSAlan Somers 	cleanup();
1274844fc5ebSAlan Somers }
1275844fc5ebSAlan Somers 
1276844fc5ebSAlan Somers 
1277844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_link_success);
ATF_TC_HEAD(extattr_delete_link_success,tc)1278844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_link_success, tc)
1279844fc5ebSAlan Somers {
1280844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1281844fc5ebSAlan Somers 					"extattr_delete_link(2) call");
1282844fc5ebSAlan Somers }
1283844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_delete_link_success,tc)1284844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_link_success, tc)
1285844fc5ebSAlan Somers {
1286844fc5ebSAlan Somers 	/* Symbolic link needs to exist to call extattr_delete_link(2) */
1287844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
1288*40407d39SAlex Richardson 	skip_if_extattr_not_supported(".");
1289*40407d39SAlex Richardson 
1290*40407d39SAlex Richardson 	REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_link(path,
1291844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1292844fc5ebSAlan Somers 
1293844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1294*40407d39SAlex Richardson 	retval = REQUIRE_EXTATTR_SUCCESS(extattr_delete_link(path,
1295*40407d39SAlex Richardson 		EXTATTR_NAMESPACE_USER, name));
1296844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1297844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1298844fc5ebSAlan Somers 	"extattr_delete_link.*%s.*return,success,%d", path, retval);
1299844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1300844fc5ebSAlan Somers }
1301844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_delete_link_success,tc)1302844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_link_success, tc)
1303844fc5ebSAlan Somers {
1304844fc5ebSAlan Somers 	cleanup();
1305844fc5ebSAlan Somers }
1306844fc5ebSAlan Somers 
1307844fc5ebSAlan Somers 
1308844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_link_failure);
ATF_TC_HEAD(extattr_delete_link_failure,tc)1309844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_link_failure, tc)
1310844fc5ebSAlan Somers {
1311844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1312844fc5ebSAlan Somers 					"extattr_delete_link(2) call");
1313844fc5ebSAlan Somers }
1314844fc5ebSAlan Somers 
ATF_TC_BODY(extattr_delete_link_failure,tc)1315844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_link_failure, tc)
1316844fc5ebSAlan Somers {
1317844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1318844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1319844fc5ebSAlan Somers 		"extattr_delete_link.*%s.*failure", path);
1320844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1321844fc5ebSAlan Somers 	/* Failure reason: symbolic link does not exist */
1322*40407d39SAlex Richardson 	ATF_REQUIRE_ERRNO(ENOENT,
1323*40407d39SAlex Richardson 	    extattr_delete_link(path, EXTATTR_NAMESPACE_USER, name) == -1);
1324844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1325844fc5ebSAlan Somers }
1326844fc5ebSAlan Somers 
ATF_TC_CLEANUP(extattr_delete_link_failure,tc)1327844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_link_failure, tc)
1328844fc5ebSAlan Somers {
1329844fc5ebSAlan Somers 	cleanup();
1330844fc5ebSAlan Somers }
1331844fc5ebSAlan Somers 
1332844fc5ebSAlan Somers 
ATF_TP_ADD_TCS(tp)13336d203d2dSAlan Somers ATF_TP_ADD_TCS(tp)
13346d203d2dSAlan Somers {
13356d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, flock_success);
13366d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, flock_failure);
13376d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fcntl_success);
13386d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fcntl_failure);
13396d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fsync_success);
13406d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fsync_failure);
13416d203d2dSAlan Somers 
134228845213SAlan Somers 	ATF_TP_ADD_TC(tp, chmod_success);
134328845213SAlan Somers 	ATF_TP_ADD_TC(tp, chmod_failure);
134428845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmod_success);
134528845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmod_failure);
134628845213SAlan Somers 	ATF_TP_ADD_TC(tp, lchmod_success);
134728845213SAlan Somers 	ATF_TP_ADD_TC(tp, lchmod_failure);
134828845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmodat_success);
134928845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmodat_failure);
135028845213SAlan Somers 
13515c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, chown_success);
13525c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, chown_failure);
13535c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchown_success);
13545c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchown_failure);
13555c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, lchown_success);
13565c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, lchown_failure);
13575c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchownat_success);
13585c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchownat_failure);
13595c9a4738SAlan Somers 
136068e520feSAlan Somers 	ATF_TP_ADD_TC(tp, chflags_success);
136168e520feSAlan Somers 	ATF_TP_ADD_TC(tp, chflags_failure);
136268e520feSAlan Somers 	ATF_TP_ADD_TC(tp, fchflags_success);
136368e520feSAlan Somers 	ATF_TP_ADD_TC(tp, fchflags_failure);
136468e520feSAlan Somers 	ATF_TP_ADD_TC(tp, lchflags_success);
136568e520feSAlan Somers 	ATF_TP_ADD_TC(tp, lchflags_failure);
136655cd4523SAlan Somers 	ATF_TP_ADD_TC(tp, chflagsat_success);
136755cd4523SAlan Somers 	ATF_TP_ADD_TC(tp, chflagsat_failure);
136868e520feSAlan Somers 
1369d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, utimes_success);
1370d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, utimes_failure);
1371d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimes_success);
1372d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimes_failure);
1373d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, lutimes_success);
1374d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, lutimes_failure);
1375d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimesat_success);
1376d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimesat_failure);
1377d1fb351cSAlan Somers 
1378d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, mprotect_success);
1379d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, mprotect_failure);
1380d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, undelete_failure);
1381d1fb351cSAlan Somers 
1382844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_file_success);
1383844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_file_failure);
1384844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_fd_success);
1385844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_fd_failure);
1386844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_link_success);
1387844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_link_failure);
1388844fc5ebSAlan Somers 
1389844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_file_success);
1390844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_file_failure);
1391844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_fd_success);
1392844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_fd_failure);
1393844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_link_success);
1394844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_link_failure);
1395844fc5ebSAlan Somers 
13966d203d2dSAlan Somers 	return (atf_no_error());
13976d203d2dSAlan Somers }
1398