xref: /freebsd/tests/sys/audit/file-attribute-modify.c (revision cdb9318eed3852fbedc75e1cfba969ec161e2daa)
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  * $FreeBSD$
266d203d2dSAlan Somers  */
276d203d2dSAlan Somers 
28844fc5ebSAlan Somers #include <sys/types.h>
29844fc5ebSAlan Somers #include <sys/extattr.h>
306d203d2dSAlan Somers #include <sys/file.h>
31d1fb351cSAlan Somers #include <sys/mman.h>
3228845213SAlan Somers #include <sys/stat.h>
33d1fb351cSAlan Somers #include <sys/time.h>
346d203d2dSAlan Somers 
356d203d2dSAlan Somers #include <atf-c.h>
366d203d2dSAlan Somers #include <fcntl.h>
37d1fb351cSAlan Somers #include <stdint.h>
386d203d2dSAlan Somers #include <unistd.h>
396d203d2dSAlan Somers 
406d203d2dSAlan Somers #include "utils.h"
416d203d2dSAlan Somers 
426d203d2dSAlan Somers static pid_t pid;
435c9a4738SAlan Somers static uid_t uid = -1;
445c9a4738SAlan Somers static gid_t gid = -1;
45844fc5ebSAlan Somers static int filedesc, retval;
466d203d2dSAlan Somers static struct pollfd fds[1];
476d203d2dSAlan Somers static mode_t mode = 0777;
486d203d2dSAlan Somers static char extregex[80];
495641c23fSAlan Somers static char buff[] = "ezio";
506d203d2dSAlan Somers static const char *auclass = "fm";
51844fc5ebSAlan Somers static const char *name = "authorname";
526d203d2dSAlan Somers static const char *path = "fileforaudit";
5328845213SAlan Somers static const char *errpath = "adirhasnoname/fileforaudit";
5428845213SAlan Somers static const char *successreg = "fileforaudit.*return,success";
5528845213SAlan Somers static const char *failurereg = "fileforaudit.*return,failure";
566d203d2dSAlan Somers 
576d203d2dSAlan Somers 
586d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(flock_success);
596d203d2dSAlan Somers ATF_TC_HEAD(flock_success, tc)
606d203d2dSAlan Somers {
616d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
626d203d2dSAlan Somers 					"flock(2) call");
636d203d2dSAlan Somers }
646d203d2dSAlan Somers 
656d203d2dSAlan Somers ATF_TC_BODY(flock_success, tc)
666d203d2dSAlan Somers {
676d203d2dSAlan Somers 	pid = getpid();
686d203d2dSAlan Somers 	snprintf(extregex, sizeof(extregex), "flock.*%d.*return,success", pid);
696d203d2dSAlan Somers 
706d203d2dSAlan Somers 	/* File needs to exist to call flock(2) */
716d203d2dSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
726d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
736d203d2dSAlan Somers 	ATF_REQUIRE_EQ(0, flock(filedesc, LOCK_SH));
746d203d2dSAlan Somers 	check_audit(fds, extregex, pipefd);
756d203d2dSAlan Somers 	close(filedesc);
766d203d2dSAlan Somers }
776d203d2dSAlan Somers 
786d203d2dSAlan Somers ATF_TC_CLEANUP(flock_success, tc)
796d203d2dSAlan Somers {
806d203d2dSAlan Somers 	cleanup();
816d203d2dSAlan Somers }
826d203d2dSAlan Somers 
836d203d2dSAlan Somers 
846d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(flock_failure);
856d203d2dSAlan Somers ATF_TC_HEAD(flock_failure, tc)
866d203d2dSAlan Somers {
876d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
886d203d2dSAlan Somers 					"flock(2) call");
896d203d2dSAlan Somers }
906d203d2dSAlan Somers 
916d203d2dSAlan Somers ATF_TC_BODY(flock_failure, tc)
926d203d2dSAlan Somers {
936d203d2dSAlan Somers 	const char *regex = "flock.*return,failure : Bad file descriptor";
946d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
956d203d2dSAlan Somers 	ATF_REQUIRE_EQ(-1, flock(-1, LOCK_SH));
966d203d2dSAlan Somers 	check_audit(fds, regex, pipefd);
976d203d2dSAlan Somers }
986d203d2dSAlan Somers 
996d203d2dSAlan Somers ATF_TC_CLEANUP(flock_failure, tc)
1006d203d2dSAlan Somers {
1016d203d2dSAlan Somers 	cleanup();
1026d203d2dSAlan Somers }
1036d203d2dSAlan Somers 
1046d203d2dSAlan Somers 
1056d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fcntl_success);
1066d203d2dSAlan Somers ATF_TC_HEAD(fcntl_success, tc)
1076d203d2dSAlan Somers {
1086d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1096d203d2dSAlan Somers 					"fcntl(2) call");
1106d203d2dSAlan Somers }
1116d203d2dSAlan Somers 
1126d203d2dSAlan Somers ATF_TC_BODY(fcntl_success, tc)
1136d203d2dSAlan Somers {
1146d203d2dSAlan Somers 	int flagstatus;
1156d203d2dSAlan Somers 	/* File needs to exist to call fcntl(2) */
1166d203d2dSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1176d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1186d203d2dSAlan Somers 
1196d203d2dSAlan Somers 	/* Retrieve the status flags of 'filedesc' and store it in flagstatus */
1206d203d2dSAlan Somers 	ATF_REQUIRE((flagstatus = fcntl(filedesc, F_GETFL, 0)) != -1);
1216d203d2dSAlan Somers 	snprintf(extregex, sizeof(extregex),
1226d203d2dSAlan Somers 			"fcntl.*return,success,%d", flagstatus);
1236d203d2dSAlan Somers 	check_audit(fds, extregex, pipefd);
1246d203d2dSAlan Somers 	close(filedesc);
1256d203d2dSAlan Somers }
1266d203d2dSAlan Somers 
1276d203d2dSAlan Somers ATF_TC_CLEANUP(fcntl_success, tc)
1286d203d2dSAlan Somers {
1296d203d2dSAlan Somers 	cleanup();
1306d203d2dSAlan Somers }
1316d203d2dSAlan Somers 
1326d203d2dSAlan Somers 
1336d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fcntl_failure);
1346d203d2dSAlan Somers ATF_TC_HEAD(fcntl_failure, tc)
1356d203d2dSAlan Somers {
1366d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1376d203d2dSAlan Somers 					"fcntl(2) call");
1386d203d2dSAlan Somers }
1396d203d2dSAlan Somers 
1406d203d2dSAlan Somers ATF_TC_BODY(fcntl_failure, tc)
1416d203d2dSAlan Somers {
1426d203d2dSAlan Somers 	const char *regex = "fcntl.*return,failure : Bad file descriptor";
1436d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1446d203d2dSAlan Somers 	ATF_REQUIRE_EQ(-1, fcntl(-1, F_GETFL, 0));
1456d203d2dSAlan Somers 	check_audit(fds, regex, pipefd);
1466d203d2dSAlan Somers }
1476d203d2dSAlan Somers 
1486d203d2dSAlan Somers ATF_TC_CLEANUP(fcntl_failure, tc)
1496d203d2dSAlan Somers {
1506d203d2dSAlan Somers 	cleanup();
1516d203d2dSAlan Somers }
1526d203d2dSAlan Somers 
1536d203d2dSAlan Somers 
1546d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fsync_success);
1556d203d2dSAlan Somers ATF_TC_HEAD(fsync_success, tc)
1566d203d2dSAlan Somers {
1576d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1586d203d2dSAlan Somers 					"fsync(2) call");
1596d203d2dSAlan Somers }
1606d203d2dSAlan Somers 
1616d203d2dSAlan Somers ATF_TC_BODY(fsync_success, tc)
1626d203d2dSAlan Somers {
1636d203d2dSAlan Somers 	pid = getpid();
1646d203d2dSAlan Somers 	snprintf(extregex, sizeof(extregex), "fsync.*%d.*return,success", pid);
1656d203d2dSAlan Somers 
1666d203d2dSAlan Somers 	/* File needs to exist to call fsync(2) */
1676d203d2dSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1686d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1696d203d2dSAlan Somers 	ATF_REQUIRE_EQ(0, fsync(filedesc));
1706d203d2dSAlan Somers 	check_audit(fds, extregex, pipefd);
1716d203d2dSAlan Somers 	close(filedesc);
1726d203d2dSAlan Somers }
1736d203d2dSAlan Somers 
1746d203d2dSAlan Somers ATF_TC_CLEANUP(fsync_success, tc)
1756d203d2dSAlan Somers {
1766d203d2dSAlan Somers 	cleanup();
1776d203d2dSAlan Somers }
1786d203d2dSAlan Somers 
1796d203d2dSAlan Somers 
1806d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fsync_failure);
1816d203d2dSAlan Somers ATF_TC_HEAD(fsync_failure, tc)
1826d203d2dSAlan Somers {
1836d203d2dSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1846d203d2dSAlan Somers 					"fsync(2) call");
1856d203d2dSAlan Somers }
1866d203d2dSAlan Somers 
1876d203d2dSAlan Somers ATF_TC_BODY(fsync_failure, tc)
1886d203d2dSAlan Somers {
1896d203d2dSAlan Somers 	const char *regex = "fsync.*return,failure : Bad file descriptor";
1906d203d2dSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1916d203d2dSAlan Somers 	/* Failure reason: Invalid file descriptor */
1926d203d2dSAlan Somers 	ATF_REQUIRE_EQ(-1, fsync(-1));
1936d203d2dSAlan Somers 	check_audit(fds, regex, pipefd);
1946d203d2dSAlan Somers }
1956d203d2dSAlan Somers 
1966d203d2dSAlan Somers ATF_TC_CLEANUP(fsync_failure, tc)
1976d203d2dSAlan Somers {
1986d203d2dSAlan Somers 	cleanup();
1996d203d2dSAlan Somers }
2006d203d2dSAlan Somers 
2016d203d2dSAlan Somers 
20228845213SAlan Somers ATF_TC_WITH_CLEANUP(chmod_success);
20328845213SAlan Somers ATF_TC_HEAD(chmod_success, tc)
20428845213SAlan Somers {
20528845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
20628845213SAlan Somers 					"chmod(2) call");
20728845213SAlan Somers }
20828845213SAlan Somers 
20928845213SAlan Somers ATF_TC_BODY(chmod_success, tc)
21028845213SAlan Somers {
21128845213SAlan Somers 	/* File needs to exist to call chmod(2) */
21228845213SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
21328845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
21428845213SAlan Somers 	ATF_REQUIRE_EQ(0, chmod(path, mode));
21528845213SAlan Somers 	check_audit(fds, successreg, pipefd);
21628845213SAlan Somers 	close(filedesc);
21728845213SAlan Somers }
21828845213SAlan Somers 
21928845213SAlan Somers ATF_TC_CLEANUP(chmod_success, tc)
22028845213SAlan Somers {
22128845213SAlan Somers 	cleanup();
22228845213SAlan Somers }
22328845213SAlan Somers 
22428845213SAlan Somers 
22528845213SAlan Somers ATF_TC_WITH_CLEANUP(chmod_failure);
22628845213SAlan Somers ATF_TC_HEAD(chmod_failure, tc)
22728845213SAlan Somers {
22828845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
22928845213SAlan Somers 					"chmod(2) call");
23028845213SAlan Somers }
23128845213SAlan Somers 
23228845213SAlan Somers ATF_TC_BODY(chmod_failure, tc)
23328845213SAlan Somers {
23428845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
23528845213SAlan Somers 	/* Failure reason: file does not exist */
23628845213SAlan Somers 	ATF_REQUIRE_EQ(-1, chmod(errpath, mode));
23728845213SAlan Somers 	check_audit(fds, failurereg, pipefd);
23828845213SAlan Somers }
23928845213SAlan Somers 
24028845213SAlan Somers ATF_TC_CLEANUP(chmod_failure, tc)
24128845213SAlan Somers {
24228845213SAlan Somers 	cleanup();
24328845213SAlan Somers }
24428845213SAlan Somers 
24528845213SAlan Somers 
24628845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmod_success);
24728845213SAlan Somers ATF_TC_HEAD(fchmod_success, tc)
24828845213SAlan Somers {
24928845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
25028845213SAlan Somers 					"fchmod(2) call");
25128845213SAlan Somers }
25228845213SAlan Somers 
25328845213SAlan Somers ATF_TC_BODY(fchmod_success, tc)
25428845213SAlan Somers {
25528845213SAlan Somers 	pid = getpid();
25628845213SAlan Somers 	snprintf(extregex, sizeof(extregex), "fchmod.*%d.*return,success", pid);
25728845213SAlan Somers 
25828845213SAlan Somers 	/* File needs to exist to call fchmod(2) */
25928845213SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
26028845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
26128845213SAlan Somers 	ATF_REQUIRE_EQ(0, fchmod(filedesc, mode));
26228845213SAlan Somers 	check_audit(fds, extregex, pipefd);
26328845213SAlan Somers 	close(filedesc);
26428845213SAlan Somers }
26528845213SAlan Somers 
26628845213SAlan Somers ATF_TC_CLEANUP(fchmod_success, tc)
26728845213SAlan Somers {
26828845213SAlan Somers 	cleanup();
26928845213SAlan Somers }
27028845213SAlan Somers 
27128845213SAlan Somers 
27228845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmod_failure);
27328845213SAlan Somers ATF_TC_HEAD(fchmod_failure, tc)
27428845213SAlan Somers {
27528845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
27628845213SAlan Somers 					"fchmod(2) call");
27728845213SAlan Somers }
27828845213SAlan Somers 
27928845213SAlan Somers ATF_TC_BODY(fchmod_failure, tc)
28028845213SAlan Somers {
28128845213SAlan Somers 	const char *regex = "fchmod.*return,failure : Bad file descriptor";
28228845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
28328845213SAlan Somers 	/* Failure reason: Invalid file descriptor */
28428845213SAlan Somers 	ATF_REQUIRE_EQ(-1, fchmod(-1, mode));
28528845213SAlan Somers 	check_audit(fds, regex, pipefd);
28628845213SAlan Somers }
28728845213SAlan Somers 
28828845213SAlan Somers ATF_TC_CLEANUP(fchmod_failure, tc)
28928845213SAlan Somers {
29028845213SAlan Somers 	cleanup();
29128845213SAlan Somers }
29228845213SAlan Somers 
29328845213SAlan Somers 
29428845213SAlan Somers ATF_TC_WITH_CLEANUP(lchmod_success);
29528845213SAlan Somers ATF_TC_HEAD(lchmod_success, tc)
29628845213SAlan Somers {
29728845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
29828845213SAlan Somers 					"lchmod(2) call");
29928845213SAlan Somers }
30028845213SAlan Somers 
30128845213SAlan Somers ATF_TC_BODY(lchmod_success, tc)
30228845213SAlan Somers {
30328845213SAlan Somers 	/* Symbolic link needs to exist to call lchmod(2) */
30428845213SAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
30528845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
30628845213SAlan Somers 	ATF_REQUIRE_EQ(0, lchmod(path, mode));
30728845213SAlan Somers 	check_audit(fds, successreg, pipefd);
30828845213SAlan Somers }
30928845213SAlan Somers 
31028845213SAlan Somers ATF_TC_CLEANUP(lchmod_success, tc)
31128845213SAlan Somers {
31228845213SAlan Somers 	cleanup();
31328845213SAlan Somers }
31428845213SAlan Somers 
31528845213SAlan Somers 
31628845213SAlan Somers ATF_TC_WITH_CLEANUP(lchmod_failure);
31728845213SAlan Somers ATF_TC_HEAD(lchmod_failure, tc)
31828845213SAlan Somers {
31928845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
32028845213SAlan Somers 					"lchmod(2) call");
32128845213SAlan Somers }
32228845213SAlan Somers 
32328845213SAlan Somers ATF_TC_BODY(lchmod_failure, tc)
32428845213SAlan Somers {
32528845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
32628845213SAlan Somers 	/* Failure reason: file does not exist */
32728845213SAlan Somers 	ATF_REQUIRE_EQ(-1, lchmod(errpath, mode));
32828845213SAlan Somers 	check_audit(fds, failurereg, pipefd);
32928845213SAlan Somers }
33028845213SAlan Somers 
33128845213SAlan Somers ATF_TC_CLEANUP(lchmod_failure, tc)
33228845213SAlan Somers {
33328845213SAlan Somers 	cleanup();
33428845213SAlan Somers }
33528845213SAlan Somers 
33628845213SAlan Somers 
33728845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmodat_success);
33828845213SAlan Somers ATF_TC_HEAD(fchmodat_success, tc)
33928845213SAlan Somers {
34028845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
34128845213SAlan Somers 					"fchmodat(2) call");
34228845213SAlan Somers }
34328845213SAlan Somers 
34428845213SAlan Somers ATF_TC_BODY(fchmodat_success, tc)
34528845213SAlan Somers {
34628845213SAlan Somers 	/* File needs to exist to call fchmodat(2) */
34728845213SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
34828845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
34928845213SAlan Somers 	ATF_REQUIRE_EQ(0, fchmodat(AT_FDCWD, path, mode, 0));
35028845213SAlan Somers 	check_audit(fds, successreg, pipefd);
35128845213SAlan Somers 	close(filedesc);
35228845213SAlan Somers }
35328845213SAlan Somers 
35428845213SAlan Somers ATF_TC_CLEANUP(fchmodat_success, tc)
35528845213SAlan Somers {
35628845213SAlan Somers 	cleanup();
35728845213SAlan Somers }
35828845213SAlan Somers 
35928845213SAlan Somers 
36028845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmodat_failure);
36128845213SAlan Somers ATF_TC_HEAD(fchmodat_failure, tc)
36228845213SAlan Somers {
36328845213SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
36428845213SAlan Somers 					"fchmodat(2) call");
36528845213SAlan Somers }
36628845213SAlan Somers 
36728845213SAlan Somers ATF_TC_BODY(fchmodat_failure, tc)
36828845213SAlan Somers {
36928845213SAlan Somers 	FILE *pipefd = setup(fds, auclass);
37028845213SAlan Somers 	/* Failure reason: file does not exist */
37128845213SAlan Somers 	ATF_REQUIRE_EQ(-1, fchmodat(AT_FDCWD, errpath, mode, 0));
37228845213SAlan Somers 	check_audit(fds, failurereg, pipefd);
37328845213SAlan Somers }
37428845213SAlan Somers 
37528845213SAlan Somers ATF_TC_CLEANUP(fchmodat_failure, tc)
37628845213SAlan Somers {
37728845213SAlan Somers 	cleanup();
37828845213SAlan Somers }
37928845213SAlan Somers 
38028845213SAlan Somers 
3815c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(chown_success);
3825c9a4738SAlan Somers ATF_TC_HEAD(chown_success, tc)
3835c9a4738SAlan Somers {
3845c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
3855c9a4738SAlan Somers 					"chown(2) call");
3865c9a4738SAlan Somers }
3875c9a4738SAlan Somers 
3885c9a4738SAlan Somers ATF_TC_BODY(chown_success, tc)
3895c9a4738SAlan Somers {
3905c9a4738SAlan Somers 	/* File needs to exist to call chown(2) */
3915c9a4738SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
3925c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
3935c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, chown(path, uid, gid));
3945c9a4738SAlan Somers 	check_audit(fds, successreg, pipefd);
3955c9a4738SAlan Somers 	close(filedesc);
3965c9a4738SAlan Somers }
3975c9a4738SAlan Somers 
3985c9a4738SAlan Somers ATF_TC_CLEANUP(chown_success, tc)
3995c9a4738SAlan Somers {
4005c9a4738SAlan Somers 	cleanup();
4015c9a4738SAlan Somers }
4025c9a4738SAlan Somers 
4035c9a4738SAlan Somers 
4045c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(chown_failure);
4055c9a4738SAlan Somers ATF_TC_HEAD(chown_failure, tc)
4065c9a4738SAlan Somers {
4075c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
4085c9a4738SAlan Somers 					"chown(2) call");
4095c9a4738SAlan Somers }
4105c9a4738SAlan Somers 
4115c9a4738SAlan Somers ATF_TC_BODY(chown_failure, tc)
4125c9a4738SAlan Somers {
4135c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
4145c9a4738SAlan Somers 	/* Failure reason: file does not exist */
4155c9a4738SAlan Somers 	ATF_REQUIRE_EQ(-1, chown(errpath, uid, gid));
4165c9a4738SAlan Somers 	check_audit(fds, failurereg, pipefd);
4175c9a4738SAlan Somers }
4185c9a4738SAlan Somers 
4195c9a4738SAlan Somers ATF_TC_CLEANUP(chown_failure, tc)
4205c9a4738SAlan Somers {
4215c9a4738SAlan Somers 	cleanup();
4225c9a4738SAlan Somers }
4235c9a4738SAlan Somers 
4245c9a4738SAlan Somers 
4255c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchown_success);
4265c9a4738SAlan Somers ATF_TC_HEAD(fchown_success, tc)
4275c9a4738SAlan Somers {
4285c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
4295c9a4738SAlan Somers 					"fchown(2) call");
4305c9a4738SAlan Somers }
4315c9a4738SAlan Somers 
4325c9a4738SAlan Somers ATF_TC_BODY(fchown_success, tc)
4335c9a4738SAlan Somers {
4345c9a4738SAlan Somers 	pid = getpid();
4355c9a4738SAlan Somers 	snprintf(extregex, sizeof(extregex), "fchown.*%d.*return,success", pid);
4365c9a4738SAlan Somers 
4375c9a4738SAlan Somers 	/* File needs to exist to call fchown(2) */
4385c9a4738SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
4395c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
4405c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, fchown(filedesc, uid, gid));
4415c9a4738SAlan Somers 	check_audit(fds, extregex, pipefd);
4425c9a4738SAlan Somers 	close(filedesc);
4435c9a4738SAlan Somers }
4445c9a4738SAlan Somers 
4455c9a4738SAlan Somers ATF_TC_CLEANUP(fchown_success, tc)
4465c9a4738SAlan Somers {
4475c9a4738SAlan Somers 	cleanup();
4485c9a4738SAlan Somers }
4495c9a4738SAlan Somers 
4505c9a4738SAlan Somers 
4515c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchown_failure);
4525c9a4738SAlan Somers ATF_TC_HEAD(fchown_failure, tc)
4535c9a4738SAlan Somers {
4545c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
4555c9a4738SAlan Somers 					"fchown(2) call");
4565c9a4738SAlan Somers }
4575c9a4738SAlan Somers 
4585c9a4738SAlan Somers ATF_TC_BODY(fchown_failure, tc)
4595c9a4738SAlan Somers {
4605c9a4738SAlan Somers 	const char *regex = "fchown.*return,failure : Bad file descriptor";
4615c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
4625c9a4738SAlan Somers 	/* Failure reason: Invalid file descriptor */
4635c9a4738SAlan Somers 	ATF_REQUIRE_EQ(-1, fchown(-1, uid, gid));
4645c9a4738SAlan Somers 	check_audit(fds, regex, pipefd);
4655c9a4738SAlan Somers }
4665c9a4738SAlan Somers 
4675c9a4738SAlan Somers ATF_TC_CLEANUP(fchown_failure, tc)
4685c9a4738SAlan Somers {
4695c9a4738SAlan Somers 	cleanup();
4705c9a4738SAlan Somers }
4715c9a4738SAlan Somers 
4725c9a4738SAlan Somers 
4735c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(lchown_success);
4745c9a4738SAlan Somers ATF_TC_HEAD(lchown_success, tc)
4755c9a4738SAlan Somers {
4765c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
4775c9a4738SAlan Somers 					"lchown(2) call");
4785c9a4738SAlan Somers }
4795c9a4738SAlan Somers 
4805c9a4738SAlan Somers ATF_TC_BODY(lchown_success, tc)
4815c9a4738SAlan Somers {
4825c9a4738SAlan Somers 	/* Symbolic link needs to exist to call lchown(2) */
4835c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
4845c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
4855c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, lchown(path, uid, gid));
4865c9a4738SAlan Somers 	check_audit(fds, successreg, pipefd);
4875c9a4738SAlan Somers }
4885c9a4738SAlan Somers 
4895c9a4738SAlan Somers ATF_TC_CLEANUP(lchown_success, tc)
4905c9a4738SAlan Somers {
4915c9a4738SAlan Somers 	cleanup();
4925c9a4738SAlan Somers }
4935c9a4738SAlan Somers 
4945c9a4738SAlan Somers 
4955c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(lchown_failure);
4965c9a4738SAlan Somers ATF_TC_HEAD(lchown_failure, tc)
4975c9a4738SAlan Somers {
4985c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
4995c9a4738SAlan Somers 					"lchown(2) call");
5005c9a4738SAlan Somers }
5015c9a4738SAlan Somers 
5025c9a4738SAlan Somers ATF_TC_BODY(lchown_failure, tc)
5035c9a4738SAlan Somers {
5045c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
5055c9a4738SAlan Somers 	/* Failure reason: Symbolic link does not exist */
5065c9a4738SAlan Somers 	ATF_REQUIRE_EQ(-1, lchown(errpath, uid, gid));
5075c9a4738SAlan Somers 	check_audit(fds, failurereg, pipefd);
5085c9a4738SAlan Somers }
5095c9a4738SAlan Somers 
5105c9a4738SAlan Somers ATF_TC_CLEANUP(lchown_failure, tc)
5115c9a4738SAlan Somers {
5125c9a4738SAlan Somers 	cleanup();
5135c9a4738SAlan Somers }
5145c9a4738SAlan Somers 
5155c9a4738SAlan Somers 
5165c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchownat_success);
5175c9a4738SAlan Somers ATF_TC_HEAD(fchownat_success, tc)
5185c9a4738SAlan Somers {
5195c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
5205c9a4738SAlan Somers 					"fchownat(2) call");
5215c9a4738SAlan Somers }
5225c9a4738SAlan Somers 
5235c9a4738SAlan Somers ATF_TC_BODY(fchownat_success, tc)
5245c9a4738SAlan Somers {
5255c9a4738SAlan Somers 	/* File needs to exist to call fchownat(2) */
5265c9a4738SAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
5275c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
5285c9a4738SAlan Somers 	ATF_REQUIRE_EQ(0, fchownat(AT_FDCWD, path, uid, gid, 0));
5295c9a4738SAlan Somers 	check_audit(fds, successreg, pipefd);
5305c9a4738SAlan Somers 	close(filedesc);
5315c9a4738SAlan Somers }
5325c9a4738SAlan Somers 
5335c9a4738SAlan Somers ATF_TC_CLEANUP(fchownat_success, tc)
5345c9a4738SAlan Somers {
5355c9a4738SAlan Somers 	cleanup();
5365c9a4738SAlan Somers }
5375c9a4738SAlan Somers 
5385c9a4738SAlan Somers 
5395c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchownat_failure);
5405c9a4738SAlan Somers ATF_TC_HEAD(fchownat_failure, tc)
5415c9a4738SAlan Somers {
5425c9a4738SAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
5435c9a4738SAlan Somers 					"fchownat(2) call");
5445c9a4738SAlan Somers }
5455c9a4738SAlan Somers 
5465c9a4738SAlan Somers ATF_TC_BODY(fchownat_failure, tc)
5475c9a4738SAlan Somers {
5485c9a4738SAlan Somers 	FILE *pipefd = setup(fds, auclass);
5495c9a4738SAlan Somers 	/* Failure reason: file does not exist */
5505c9a4738SAlan Somers 	ATF_REQUIRE_EQ(-1, fchownat(AT_FDCWD, errpath, uid, gid, 0));
5515c9a4738SAlan Somers 	check_audit(fds, failurereg, pipefd);
5525c9a4738SAlan Somers }
5535c9a4738SAlan Somers 
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);
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 
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 
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);
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 
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 */
59468e520feSAlan Somers 	ATF_REQUIRE_EQ(-1, chflags(errpath, UF_OFFLINE));
59568e520feSAlan Somers 	check_audit(fds, failurereg, pipefd);
59668e520feSAlan Somers }
59768e520feSAlan Somers 
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);
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 
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 
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);
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 
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 */
64268e520feSAlan Somers 	ATF_REQUIRE_EQ(-1, fchflags(-1, UF_OFFLINE));
64368e520feSAlan Somers 	check_audit(fds, regex, pipefd);
64468e520feSAlan Somers }
64568e520feSAlan Somers 
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);
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 
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 
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);
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 
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 */
68568e520feSAlan Somers 	ATF_REQUIRE_EQ(-1, lchflags(errpath, UF_OFFLINE));
68668e520feSAlan Somers 	check_audit(fds, failurereg, pipefd);
68768e520feSAlan Somers }
68868e520feSAlan Somers 
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);
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 
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);
707*cdb9318eSEnji 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 
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);
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 
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*cdb9318eSEnji Cooper 	ATF_REQUIRE_EQ(-1, chflagsat(AT_FDCWD, errpath, UF_OFFLINE, 0));
73055cd4523SAlan Somers 	check_audit(fds, failurereg, pipefd);
73155cd4523SAlan Somers }
73255cd4523SAlan Somers 
73355cd4523SAlan Somers ATF_TC_CLEANUP(chflagsat_failure, tc)
73455cd4523SAlan Somers {
73555cd4523SAlan Somers 	cleanup();
73655cd4523SAlan Somers }
73755cd4523SAlan Somers 
73855cd4523SAlan Somers 
739d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(utimes_success);
740d1fb351cSAlan Somers ATF_TC_HEAD(utimes_success, tc)
741d1fb351cSAlan Somers {
742d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
743d1fb351cSAlan Somers 					"utimes(2) call");
744d1fb351cSAlan Somers }
745d1fb351cSAlan Somers 
746d1fb351cSAlan Somers ATF_TC_BODY(utimes_success, tc)
747d1fb351cSAlan Somers {
748d1fb351cSAlan Somers 	/* File needs to exist to call utimes(2) */
749d1fb351cSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
750d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
751d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, utimes(path, NULL));
752d1fb351cSAlan Somers 	check_audit(fds, successreg, pipefd);
753d1fb351cSAlan Somers 	close(filedesc);
754d1fb351cSAlan Somers }
755d1fb351cSAlan Somers 
756d1fb351cSAlan Somers ATF_TC_CLEANUP(utimes_success, tc)
757d1fb351cSAlan Somers {
758d1fb351cSAlan Somers 	cleanup();
759d1fb351cSAlan Somers }
760d1fb351cSAlan Somers 
761d1fb351cSAlan Somers 
762d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(utimes_failure);
763d1fb351cSAlan Somers ATF_TC_HEAD(utimes_failure, tc)
764d1fb351cSAlan Somers {
765d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
766d1fb351cSAlan Somers 					"utimes(2) call");
767d1fb351cSAlan Somers }
768d1fb351cSAlan Somers 
769d1fb351cSAlan Somers ATF_TC_BODY(utimes_failure, tc)
770d1fb351cSAlan Somers {
771d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
772d1fb351cSAlan Somers 	/* Failure reason: file does not exist */
773d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, utimes(errpath, NULL));
774d1fb351cSAlan Somers 	check_audit(fds, failurereg, pipefd);
775d1fb351cSAlan Somers }
776d1fb351cSAlan Somers 
777d1fb351cSAlan Somers ATF_TC_CLEANUP(utimes_failure, tc)
778d1fb351cSAlan Somers {
779d1fb351cSAlan Somers 	cleanup();
780d1fb351cSAlan Somers }
781d1fb351cSAlan Somers 
782d1fb351cSAlan Somers 
783d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimes_success);
784d1fb351cSAlan Somers ATF_TC_HEAD(futimes_success, tc)
785d1fb351cSAlan Somers {
786d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
787d1fb351cSAlan Somers 					"futimes(2) call");
788d1fb351cSAlan Somers }
789d1fb351cSAlan Somers 
790d1fb351cSAlan Somers ATF_TC_BODY(futimes_success, tc)
791d1fb351cSAlan Somers {
792d1fb351cSAlan Somers 	pid = getpid();
793d1fb351cSAlan Somers 	snprintf(extregex, sizeof(extregex), "futimes.*%d.*ret.*success", pid);
794d1fb351cSAlan Somers 
795d1fb351cSAlan Somers 	/* File needs to exist to call futimes(2) */
796d1fb351cSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
797d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
798d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, futimes(filedesc, NULL));
799d1fb351cSAlan Somers 	check_audit(fds, extregex, pipefd);
800d1fb351cSAlan Somers 	close(filedesc);
801d1fb351cSAlan Somers }
802d1fb351cSAlan Somers 
803d1fb351cSAlan Somers ATF_TC_CLEANUP(futimes_success, tc)
804d1fb351cSAlan Somers {
805d1fb351cSAlan Somers 	cleanup();
806d1fb351cSAlan Somers }
807d1fb351cSAlan Somers 
808d1fb351cSAlan Somers 
809d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimes_failure);
810d1fb351cSAlan Somers ATF_TC_HEAD(futimes_failure, tc)
811d1fb351cSAlan Somers {
812d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
813d1fb351cSAlan Somers 					"futimes(2) call");
814d1fb351cSAlan Somers }
815d1fb351cSAlan Somers 
816d1fb351cSAlan Somers ATF_TC_BODY(futimes_failure, tc)
817d1fb351cSAlan Somers {
818d1fb351cSAlan Somers 	const char *regex = "futimes.*return,failure : Bad file descriptor";
819d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
820d1fb351cSAlan Somers 	/* Failure reason: Invalid file descriptor */
821d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, futimes(-1, NULL));
822d1fb351cSAlan Somers 	check_audit(fds, regex, pipefd);
823d1fb351cSAlan Somers }
824d1fb351cSAlan Somers 
825d1fb351cSAlan Somers ATF_TC_CLEANUP(futimes_failure, tc)
826d1fb351cSAlan Somers {
827d1fb351cSAlan Somers 	cleanup();
828d1fb351cSAlan Somers }
829d1fb351cSAlan Somers 
830d1fb351cSAlan Somers 
831d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(lutimes_success);
832d1fb351cSAlan Somers ATF_TC_HEAD(lutimes_success, tc)
833d1fb351cSAlan Somers {
834d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
835d1fb351cSAlan Somers 					"lutimes(2) call");
836d1fb351cSAlan Somers }
837d1fb351cSAlan Somers 
838d1fb351cSAlan Somers ATF_TC_BODY(lutimes_success, tc)
839d1fb351cSAlan Somers {
840d1fb351cSAlan Somers 	/* Symbolic link needs to exist to call lutimes(2) */
841d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
842d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
843d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, lutimes(path, NULL));
844d1fb351cSAlan Somers 	check_audit(fds, successreg, pipefd);
845d1fb351cSAlan Somers }
846d1fb351cSAlan Somers 
847d1fb351cSAlan Somers ATF_TC_CLEANUP(lutimes_success, tc)
848d1fb351cSAlan Somers {
849d1fb351cSAlan Somers 	cleanup();
850d1fb351cSAlan Somers }
851d1fb351cSAlan Somers 
852d1fb351cSAlan Somers 
853d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(lutimes_failure);
854d1fb351cSAlan Somers ATF_TC_HEAD(lutimes_failure, tc)
855d1fb351cSAlan Somers {
856d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
857d1fb351cSAlan Somers 					"lutimes(2) call");
858d1fb351cSAlan Somers }
859d1fb351cSAlan Somers 
860d1fb351cSAlan Somers ATF_TC_BODY(lutimes_failure, tc)
861d1fb351cSAlan Somers {
862d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
863d1fb351cSAlan Somers 	/* Failure reason: symbolic link does not exist */
864d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, lutimes(errpath, NULL));
865d1fb351cSAlan Somers 	check_audit(fds, failurereg, pipefd);
866d1fb351cSAlan Somers }
867d1fb351cSAlan Somers 
868d1fb351cSAlan Somers ATF_TC_CLEANUP(lutimes_failure, tc)
869d1fb351cSAlan Somers {
870d1fb351cSAlan Somers 	cleanup();
871d1fb351cSAlan Somers }
872d1fb351cSAlan Somers 
873d1fb351cSAlan Somers 
874d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimesat_success);
875d1fb351cSAlan Somers ATF_TC_HEAD(futimesat_success, tc)
876d1fb351cSAlan Somers {
877d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
878d1fb351cSAlan Somers 					"futimesat(2) call");
879d1fb351cSAlan Somers }
880d1fb351cSAlan Somers 
881d1fb351cSAlan Somers ATF_TC_BODY(futimesat_success, tc)
882d1fb351cSAlan Somers {
883d1fb351cSAlan Somers 	/* File needs to exist to call futimesat(2) */
884d1fb351cSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
885d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
886d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, futimesat(AT_FDCWD, path, NULL));
887d1fb351cSAlan Somers 	check_audit(fds, successreg, pipefd);
888d1fb351cSAlan Somers 	close(filedesc);
889d1fb351cSAlan Somers }
890d1fb351cSAlan Somers 
891d1fb351cSAlan Somers ATF_TC_CLEANUP(futimesat_success, tc)
892d1fb351cSAlan Somers {
893d1fb351cSAlan Somers 	cleanup();
894d1fb351cSAlan Somers }
895d1fb351cSAlan Somers 
896d1fb351cSAlan Somers 
897d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimesat_failure);
898d1fb351cSAlan Somers ATF_TC_HEAD(futimesat_failure, tc)
899d1fb351cSAlan Somers {
900d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
901d1fb351cSAlan Somers 					"futimesat(2) call");
902d1fb351cSAlan Somers }
903d1fb351cSAlan Somers 
904d1fb351cSAlan Somers ATF_TC_BODY(futimesat_failure, tc)
905d1fb351cSAlan Somers {
906d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
907d1fb351cSAlan Somers 	/* Failure reason: file does not exist */
908d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, futimesat(AT_FDCWD, errpath, NULL));
909d1fb351cSAlan Somers 	check_audit(fds, failurereg, pipefd);
910d1fb351cSAlan Somers }
911d1fb351cSAlan Somers 
912d1fb351cSAlan Somers ATF_TC_CLEANUP(futimesat_failure, tc)
913d1fb351cSAlan Somers {
914d1fb351cSAlan Somers 	cleanup();
915d1fb351cSAlan Somers }
916d1fb351cSAlan Somers 
917d1fb351cSAlan Somers 
918d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(mprotect_success);
919d1fb351cSAlan Somers ATF_TC_HEAD(mprotect_success, tc)
920d1fb351cSAlan Somers {
921d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
922d1fb351cSAlan Somers 					"mprotect(2) call");
923d1fb351cSAlan Somers }
924d1fb351cSAlan Somers 
925d1fb351cSAlan Somers ATF_TC_BODY(mprotect_success, tc)
926d1fb351cSAlan Somers {
927d1fb351cSAlan Somers 	pid = getpid();
928d1fb351cSAlan Somers 	snprintf(extregex, sizeof(extregex), "mprotect.*%d.*ret.*success", pid);
929d1fb351cSAlan Somers 
930d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
931d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, mprotect(NULL, 0, PROT_NONE));
932d1fb351cSAlan Somers 	check_audit(fds, extregex, pipefd);
933d1fb351cSAlan Somers }
934d1fb351cSAlan Somers 
935d1fb351cSAlan Somers ATF_TC_CLEANUP(mprotect_success, tc)
936d1fb351cSAlan Somers {
937d1fb351cSAlan Somers 	cleanup();
938d1fb351cSAlan Somers }
939d1fb351cSAlan Somers 
940d1fb351cSAlan Somers 
941d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(mprotect_failure);
942d1fb351cSAlan Somers ATF_TC_HEAD(mprotect_failure, tc)
943d1fb351cSAlan Somers {
944d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
945d1fb351cSAlan Somers 					"mprotect(2) call");
946d1fb351cSAlan Somers }
947d1fb351cSAlan Somers 
948d1fb351cSAlan Somers ATF_TC_BODY(mprotect_failure, tc)
949d1fb351cSAlan Somers {
950d1fb351cSAlan Somers 	const char *regex = "mprotect.*return,failure : Invalid argument";
951d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
952d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, mprotect((void *)SIZE_MAX, -1, PROT_NONE));
953d1fb351cSAlan Somers 	check_audit(fds, regex, pipefd);
954d1fb351cSAlan Somers }
955d1fb351cSAlan Somers 
956d1fb351cSAlan Somers ATF_TC_CLEANUP(mprotect_failure, tc)
957d1fb351cSAlan Somers {
958d1fb351cSAlan Somers 	cleanup();
959d1fb351cSAlan Somers }
960d1fb351cSAlan Somers 
961d1fb351cSAlan Somers /*
962d1fb351cSAlan Somers  * undelete(2) only works on whiteout files in union file system. Hence, no
963d1fb351cSAlan Somers  * test case for successful invocation.
964d1fb351cSAlan Somers  */
965d1fb351cSAlan Somers 
966d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(undelete_failure);
967d1fb351cSAlan Somers ATF_TC_HEAD(undelete_failure, tc)
968d1fb351cSAlan Somers {
969d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
970d1fb351cSAlan Somers 					"undelete(2) call");
971d1fb351cSAlan Somers }
972d1fb351cSAlan Somers 
973d1fb351cSAlan Somers ATF_TC_BODY(undelete_failure, tc)
974d1fb351cSAlan Somers {
975d1fb351cSAlan Somers 	pid = getpid();
976d1fb351cSAlan Somers 	snprintf(extregex, sizeof(extregex), "undelete.*%d.*ret.*failure", pid);
977d1fb351cSAlan Somers 
978d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
979d1fb351cSAlan Somers 	/* Failure reason: File does not exist */
980d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, undelete(errpath));
981d1fb351cSAlan Somers 	check_audit(fds, extregex, pipefd);
982d1fb351cSAlan Somers }
983d1fb351cSAlan Somers 
984d1fb351cSAlan Somers ATF_TC_CLEANUP(undelete_failure, tc)
985d1fb351cSAlan Somers {
986d1fb351cSAlan Somers 	cleanup();
987d1fb351cSAlan Somers }
988d1fb351cSAlan Somers 
989d1fb351cSAlan Somers 
990844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_file_success);
991844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_file_success, tc)
992844fc5ebSAlan Somers {
993844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
994844fc5ebSAlan Somers 					"extattr_set_file(2) call");
995844fc5ebSAlan Somers }
996844fc5ebSAlan Somers 
997844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_file_success, tc)
998844fc5ebSAlan Somers {
999844fc5ebSAlan Somers 	/* File needs to exist to call extattr_set_file(2) */
1000844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1001844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1002844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1003844fc5ebSAlan Somers 		"extattr_set_file.*%s.*%s.*return,success", path, name);
1004844fc5ebSAlan Somers 
1005844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1006844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path,
1007844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1008844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1009844fc5ebSAlan Somers 	close(filedesc);
1010844fc5ebSAlan Somers }
1011844fc5ebSAlan Somers 
1012844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_file_success, tc)
1013844fc5ebSAlan Somers {
1014844fc5ebSAlan Somers 	cleanup();
1015844fc5ebSAlan Somers }
1016844fc5ebSAlan Somers 
1017844fc5ebSAlan Somers 
1018844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_file_failure);
1019844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_file_failure, tc)
1020844fc5ebSAlan Somers {
1021844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1022844fc5ebSAlan Somers 					"extattr_set_file(2) call");
1023844fc5ebSAlan Somers }
1024844fc5ebSAlan Somers 
1025844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_file_failure, tc)
1026844fc5ebSAlan Somers {
1027844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1028844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1029844fc5ebSAlan Somers 		"extattr_set_file.*%s.*%s.*failure", path, name);
1030844fc5ebSAlan Somers 
1031844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1032844fc5ebSAlan Somers 	/* Failure reason: file does not exist */
1033844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_set_file(path,
1034844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, NULL, 0));
1035844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1036844fc5ebSAlan Somers }
1037844fc5ebSAlan Somers 
1038844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_file_failure, tc)
1039844fc5ebSAlan Somers {
1040844fc5ebSAlan Somers 	cleanup();
1041844fc5ebSAlan Somers }
1042844fc5ebSAlan Somers 
1043844fc5ebSAlan Somers 
1044844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_fd_success);
1045844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_fd_success, tc)
1046844fc5ebSAlan Somers {
1047844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1048844fc5ebSAlan Somers 					"extattr_set_fd(2) call");
1049844fc5ebSAlan Somers }
1050844fc5ebSAlan Somers 
1051844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_fd_success, tc)
1052844fc5ebSAlan Somers {
1053844fc5ebSAlan Somers 	/* File needs to exist to call extattr_set_fd(2) */
1054844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1055844fc5ebSAlan Somers 
1056844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1057844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1058844fc5ebSAlan Somers 		"extattr_set_fd.*%s.*return,success", name);
1059844fc5ebSAlan Somers 
1060844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1061844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_fd(filedesc,
1062844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1063844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1064844fc5ebSAlan Somers 	close(filedesc);
1065844fc5ebSAlan Somers }
1066844fc5ebSAlan Somers 
1067844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_fd_success, tc)
1068844fc5ebSAlan Somers {
1069844fc5ebSAlan Somers 	cleanup();
1070844fc5ebSAlan Somers }
1071844fc5ebSAlan Somers 
1072844fc5ebSAlan Somers 
1073844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_fd_failure);
1074844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_fd_failure, tc)
1075844fc5ebSAlan Somers {
1076844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1077844fc5ebSAlan Somers 					"extattr_set_fd(2) call");
1078844fc5ebSAlan Somers }
1079844fc5ebSAlan Somers 
1080844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_fd_failure, tc)
1081844fc5ebSAlan Somers {
1082844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1083844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1084844fc5ebSAlan Somers 	"extattr_set_fd.*%s.*return,failure : Bad file descriptor", name);
1085844fc5ebSAlan Somers 
1086844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1087844fc5ebSAlan Somers 	/* Failure reason: Invalid file descriptor */
1088844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_set_fd(-1,
1089844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, NULL, 0));
1090844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1091844fc5ebSAlan Somers }
1092844fc5ebSAlan Somers 
1093844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_fd_failure, tc)
1094844fc5ebSAlan Somers {
1095844fc5ebSAlan Somers 	cleanup();
1096844fc5ebSAlan Somers }
1097844fc5ebSAlan Somers 
1098844fc5ebSAlan Somers 
1099844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_link_success);
1100844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_link_success, tc)
1101844fc5ebSAlan Somers {
1102844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1103844fc5ebSAlan Somers 					"extattr_set_link(2) call");
1104844fc5ebSAlan Somers }
1105844fc5ebSAlan Somers 
1106844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_link_success, tc)
1107844fc5ebSAlan Somers {
1108844fc5ebSAlan Somers 	/* Symbolic link needs to exist to call extattr_set_link(2) */
1109844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
1110844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1111844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1112844fc5ebSAlan Somers 		"extattr_set_link.*%s.*%s.*return,success", path, name);
1113844fc5ebSAlan Somers 
1114844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1115844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_link(path,
1116844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1117844fc5ebSAlan Somers 
1118844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1119844fc5ebSAlan Somers }
1120844fc5ebSAlan Somers 
1121844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_link_success, tc)
1122844fc5ebSAlan Somers {
1123844fc5ebSAlan Somers 	cleanup();
1124844fc5ebSAlan Somers }
1125844fc5ebSAlan Somers 
1126844fc5ebSAlan Somers 
1127844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_link_failure);
1128844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_link_failure, tc)
1129844fc5ebSAlan Somers {
1130844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1131844fc5ebSAlan Somers 					"extattr_set_link(2) call");
1132844fc5ebSAlan Somers }
1133844fc5ebSAlan Somers 
1134844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_link_failure, tc)
1135844fc5ebSAlan Somers {
1136844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1137844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1138844fc5ebSAlan Somers 		"extattr_set_link.*%s.*%s.*failure", path, name);
1139844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1140844fc5ebSAlan Somers 	/* Failure reason: symbolic link does not exist */
1141844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_set_link(path,
1142844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, NULL, 0));
1143844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1144844fc5ebSAlan Somers }
1145844fc5ebSAlan Somers 
1146844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_link_failure, tc)
1147844fc5ebSAlan Somers {
1148844fc5ebSAlan Somers 	cleanup();
1149844fc5ebSAlan Somers }
1150844fc5ebSAlan Somers 
1151844fc5ebSAlan Somers 
1152844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_file_success);
1153844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_file_success, tc)
1154844fc5ebSAlan Somers {
1155844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1156844fc5ebSAlan Somers 					"extattr_delete_file(2) call");
1157844fc5ebSAlan Somers }
1158844fc5ebSAlan Somers 
1159844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_file_success, tc)
1160844fc5ebSAlan Somers {
1161844fc5ebSAlan Somers 	/* File needs to exist to call extattr_delete_file(2) */
1162844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1163844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path,
1164844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1165844fc5ebSAlan Somers 
1166844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1167844fc5ebSAlan Somers 	ATF_REQUIRE((retval = extattr_delete_file(path,
1168844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name)) != -1);
1169844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1170844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1171844fc5ebSAlan Somers 	"extattr_delete_file.*%s.*return,success,%d", path, retval);
1172844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1173844fc5ebSAlan Somers 	close(filedesc);
1174844fc5ebSAlan Somers }
1175844fc5ebSAlan Somers 
1176844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_file_success, tc)
1177844fc5ebSAlan Somers {
1178844fc5ebSAlan Somers 	cleanup();
1179844fc5ebSAlan Somers }
1180844fc5ebSAlan Somers 
1181844fc5ebSAlan Somers 
1182844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_file_failure);
1183844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_file_failure, tc)
1184844fc5ebSAlan Somers {
1185844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1186844fc5ebSAlan Somers 					"extattr_delete_file(2) call");
1187844fc5ebSAlan Somers }
1188844fc5ebSAlan Somers 
1189844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_file_failure, tc)
1190844fc5ebSAlan Somers {
1191844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1192844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1193844fc5ebSAlan Somers 		"extattr_delete_file.*%s.*return,failure", path);
1194844fc5ebSAlan Somers 
1195844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1196844fc5ebSAlan Somers 	/* Failure reason: file does not exist */
1197844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_delete_file(path,
1198844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name));
1199844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1200844fc5ebSAlan Somers }
1201844fc5ebSAlan Somers 
1202844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_file_failure, tc)
1203844fc5ebSAlan Somers {
1204844fc5ebSAlan Somers 	cleanup();
1205844fc5ebSAlan Somers }
1206844fc5ebSAlan Somers 
1207844fc5ebSAlan Somers 
1208844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_fd_success);
1209844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_fd_success, tc)
1210844fc5ebSAlan Somers {
1211844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1212844fc5ebSAlan Somers 					"extattr_delete_fd(2) call");
1213844fc5ebSAlan Somers }
1214844fc5ebSAlan Somers 
1215844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_fd_success, tc)
1216844fc5ebSAlan Somers {
1217844fc5ebSAlan Somers 	/* File needs to exist to call extattr_delete_fd(2) */
1218844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1219844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path,
1220844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1221844fc5ebSAlan Somers 
1222844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1223844fc5ebSAlan Somers 	ATF_REQUIRE((retval = extattr_delete_fd(filedesc,
1224844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name)) != -1);
1225844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1226844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1227844fc5ebSAlan Somers 		"extattr_delete_fd.*return,success,%d", retval);
1228844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1229844fc5ebSAlan Somers 	close(filedesc);
1230844fc5ebSAlan Somers }
1231844fc5ebSAlan Somers 
1232844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_fd_success, tc)
1233844fc5ebSAlan Somers {
1234844fc5ebSAlan Somers 	cleanup();
1235844fc5ebSAlan Somers }
1236844fc5ebSAlan Somers 
1237844fc5ebSAlan Somers 
1238844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_fd_failure);
1239844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_fd_failure, tc)
1240844fc5ebSAlan Somers {
1241844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1242844fc5ebSAlan Somers 					"extattr_delete_fd(2) call");
1243844fc5ebSAlan Somers }
1244844fc5ebSAlan Somers 
1245844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_fd_failure, tc)
1246844fc5ebSAlan Somers {
1247844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1248844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1249844fc5ebSAlan Somers 		"extattr_delete_fd.*return,failure : Bad file descriptor");
1250844fc5ebSAlan Somers 
1251844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1252844fc5ebSAlan Somers 	/* Failure reason: Invalid file descriptor */
1253844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_delete_fd(-1, EXTATTR_NAMESPACE_USER, name));
1254844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1255844fc5ebSAlan Somers }
1256844fc5ebSAlan Somers 
1257844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_fd_failure, tc)
1258844fc5ebSAlan Somers {
1259844fc5ebSAlan Somers 	cleanup();
1260844fc5ebSAlan Somers }
1261844fc5ebSAlan Somers 
1262844fc5ebSAlan Somers 
1263844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_link_success);
1264844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_link_success, tc)
1265844fc5ebSAlan Somers {
1266844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1267844fc5ebSAlan Somers 					"extattr_delete_link(2) call");
1268844fc5ebSAlan Somers }
1269844fc5ebSAlan Somers 
1270844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_link_success, tc)
1271844fc5ebSAlan Somers {
1272844fc5ebSAlan Somers 	/* Symbolic link needs to exist to call extattr_delete_link(2) */
1273844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
1274844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_link(path,
1275844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1276844fc5ebSAlan Somers 
1277844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1278844fc5ebSAlan Somers 	ATF_REQUIRE((retval = extattr_delete_link(path,
1279844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name)) != -1);
1280844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1281844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1282844fc5ebSAlan Somers 	"extattr_delete_link.*%s.*return,success,%d", path, retval);
1283844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1284844fc5ebSAlan Somers }
1285844fc5ebSAlan Somers 
1286844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_link_success, tc)
1287844fc5ebSAlan Somers {
1288844fc5ebSAlan Somers 	cleanup();
1289844fc5ebSAlan Somers }
1290844fc5ebSAlan Somers 
1291844fc5ebSAlan Somers 
1292844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_link_failure);
1293844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_link_failure, tc)
1294844fc5ebSAlan Somers {
1295844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1296844fc5ebSAlan Somers 					"extattr_delete_link(2) call");
1297844fc5ebSAlan Somers }
1298844fc5ebSAlan Somers 
1299844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_link_failure, tc)
1300844fc5ebSAlan Somers {
1301844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1302844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1303844fc5ebSAlan Somers 		"extattr_delete_link.*%s.*failure", path);
1304844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1305844fc5ebSAlan Somers 	/* Failure reason: symbolic link does not exist */
1306844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_delete_link(path,
1307844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name));
1308844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1309844fc5ebSAlan Somers }
1310844fc5ebSAlan Somers 
1311844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_link_failure, tc)
1312844fc5ebSAlan Somers {
1313844fc5ebSAlan Somers 	cleanup();
1314844fc5ebSAlan Somers }
1315844fc5ebSAlan Somers 
1316844fc5ebSAlan Somers 
13176d203d2dSAlan Somers ATF_TP_ADD_TCS(tp)
13186d203d2dSAlan Somers {
13196d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, flock_success);
13206d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, flock_failure);
13216d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fcntl_success);
13226d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fcntl_failure);
13236d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fsync_success);
13246d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fsync_failure);
13256d203d2dSAlan Somers 
132628845213SAlan Somers 	ATF_TP_ADD_TC(tp, chmod_success);
132728845213SAlan Somers 	ATF_TP_ADD_TC(tp, chmod_failure);
132828845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmod_success);
132928845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmod_failure);
133028845213SAlan Somers 	ATF_TP_ADD_TC(tp, lchmod_success);
133128845213SAlan Somers 	ATF_TP_ADD_TC(tp, lchmod_failure);
133228845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmodat_success);
133328845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmodat_failure);
133428845213SAlan Somers 
13355c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, chown_success);
13365c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, chown_failure);
13375c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchown_success);
13385c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchown_failure);
13395c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, lchown_success);
13405c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, lchown_failure);
13415c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchownat_success);
13425c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchownat_failure);
13435c9a4738SAlan Somers 
134468e520feSAlan Somers 	ATF_TP_ADD_TC(tp, chflags_success);
134568e520feSAlan Somers 	ATF_TP_ADD_TC(tp, chflags_failure);
134668e520feSAlan Somers 	ATF_TP_ADD_TC(tp, fchflags_success);
134768e520feSAlan Somers 	ATF_TP_ADD_TC(tp, fchflags_failure);
134868e520feSAlan Somers 	ATF_TP_ADD_TC(tp, lchflags_success);
134968e520feSAlan Somers 	ATF_TP_ADD_TC(tp, lchflags_failure);
135055cd4523SAlan Somers 	ATF_TP_ADD_TC(tp, chflagsat_success);
135155cd4523SAlan Somers 	ATF_TP_ADD_TC(tp, chflagsat_failure);
135268e520feSAlan Somers 
1353d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, utimes_success);
1354d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, utimes_failure);
1355d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimes_success);
1356d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimes_failure);
1357d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, lutimes_success);
1358d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, lutimes_failure);
1359d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimesat_success);
1360d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimesat_failure);
1361d1fb351cSAlan Somers 
1362d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, mprotect_success);
1363d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, mprotect_failure);
1364d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, undelete_failure);
1365d1fb351cSAlan Somers 
1366844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_file_success);
1367844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_file_failure);
1368844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_fd_success);
1369844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_fd_failure);
1370844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_link_success);
1371844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_link_failure);
1372844fc5ebSAlan Somers 
1373844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_file_success);
1374844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_file_failure);
1375844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_fd_success);
1376844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_fd_failure);
1377844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_link_success);
1378844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_link_failure);
1379844fc5ebSAlan Somers 
13806d203d2dSAlan Somers 	return (atf_no_error());
13816d203d2dSAlan Somers }
1382