xref: /freebsd/tests/sys/audit/file-attribute-modify.c (revision d1fb351c689d0fc77729408b509a0986ba98c097)
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>
31*d1fb351cSAlan Somers #include <sys/mman.h>
3228845213SAlan Somers #include <sys/stat.h>
33*d1fb351cSAlan Somers #include <sys/time.h>
346d203d2dSAlan Somers 
356d203d2dSAlan Somers #include <atf-c.h>
366d203d2dSAlan Somers #include <fcntl.h>
37*d1fb351cSAlan 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];
49844fc5ebSAlan Somers static const 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 
695*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(utimes_success);
696*d1fb351cSAlan Somers ATF_TC_HEAD(utimes_success, tc)
697*d1fb351cSAlan Somers {
698*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
699*d1fb351cSAlan Somers 					"utimes(2) call");
700*d1fb351cSAlan Somers }
701*d1fb351cSAlan Somers 
702*d1fb351cSAlan Somers ATF_TC_BODY(utimes_success, tc)
703*d1fb351cSAlan Somers {
704*d1fb351cSAlan Somers 	/* File needs to exist to call utimes(2) */
705*d1fb351cSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
706*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
707*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, utimes(path, NULL));
708*d1fb351cSAlan Somers 	check_audit(fds, successreg, pipefd);
709*d1fb351cSAlan Somers 	close(filedesc);
710*d1fb351cSAlan Somers }
711*d1fb351cSAlan Somers 
712*d1fb351cSAlan Somers ATF_TC_CLEANUP(utimes_success, tc)
713*d1fb351cSAlan Somers {
714*d1fb351cSAlan Somers 	cleanup();
715*d1fb351cSAlan Somers }
716*d1fb351cSAlan Somers 
717*d1fb351cSAlan Somers 
718*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(utimes_failure);
719*d1fb351cSAlan Somers ATF_TC_HEAD(utimes_failure, tc)
720*d1fb351cSAlan Somers {
721*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
722*d1fb351cSAlan Somers 					"utimes(2) call");
723*d1fb351cSAlan Somers }
724*d1fb351cSAlan Somers 
725*d1fb351cSAlan Somers ATF_TC_BODY(utimes_failure, tc)
726*d1fb351cSAlan Somers {
727*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
728*d1fb351cSAlan Somers 	/* Failure reason: file does not exist */
729*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, utimes(errpath, NULL));
730*d1fb351cSAlan Somers 	check_audit(fds, failurereg, pipefd);
731*d1fb351cSAlan Somers }
732*d1fb351cSAlan Somers 
733*d1fb351cSAlan Somers ATF_TC_CLEANUP(utimes_failure, tc)
734*d1fb351cSAlan Somers {
735*d1fb351cSAlan Somers 	cleanup();
736*d1fb351cSAlan Somers }
737*d1fb351cSAlan Somers 
738*d1fb351cSAlan Somers 
739*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimes_success);
740*d1fb351cSAlan Somers ATF_TC_HEAD(futimes_success, tc)
741*d1fb351cSAlan Somers {
742*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
743*d1fb351cSAlan Somers 					"futimes(2) call");
744*d1fb351cSAlan Somers }
745*d1fb351cSAlan Somers 
746*d1fb351cSAlan Somers ATF_TC_BODY(futimes_success, tc)
747*d1fb351cSAlan Somers {
748*d1fb351cSAlan Somers 	pid = getpid();
749*d1fb351cSAlan Somers 	snprintf(extregex, sizeof(extregex), "futimes.*%d.*ret.*success", pid);
750*d1fb351cSAlan Somers 
751*d1fb351cSAlan Somers 	/* File needs to exist to call futimes(2) */
752*d1fb351cSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
753*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
754*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, futimes(filedesc, NULL));
755*d1fb351cSAlan Somers 	check_audit(fds, extregex, pipefd);
756*d1fb351cSAlan Somers 	close(filedesc);
757*d1fb351cSAlan Somers }
758*d1fb351cSAlan Somers 
759*d1fb351cSAlan Somers ATF_TC_CLEANUP(futimes_success, tc)
760*d1fb351cSAlan Somers {
761*d1fb351cSAlan Somers 	cleanup();
762*d1fb351cSAlan Somers }
763*d1fb351cSAlan Somers 
764*d1fb351cSAlan Somers 
765*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimes_failure);
766*d1fb351cSAlan Somers ATF_TC_HEAD(futimes_failure, tc)
767*d1fb351cSAlan Somers {
768*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
769*d1fb351cSAlan Somers 					"futimes(2) call");
770*d1fb351cSAlan Somers }
771*d1fb351cSAlan Somers 
772*d1fb351cSAlan Somers ATF_TC_BODY(futimes_failure, tc)
773*d1fb351cSAlan Somers {
774*d1fb351cSAlan Somers 	const char *regex = "futimes.*return,failure : Bad file descriptor";
775*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
776*d1fb351cSAlan Somers 	/* Failure reason: Invalid file descriptor */
777*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, futimes(-1, NULL));
778*d1fb351cSAlan Somers 	check_audit(fds, regex, pipefd);
779*d1fb351cSAlan Somers }
780*d1fb351cSAlan Somers 
781*d1fb351cSAlan Somers ATF_TC_CLEANUP(futimes_failure, tc)
782*d1fb351cSAlan Somers {
783*d1fb351cSAlan Somers 	cleanup();
784*d1fb351cSAlan Somers }
785*d1fb351cSAlan Somers 
786*d1fb351cSAlan Somers 
787*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(lutimes_success);
788*d1fb351cSAlan Somers ATF_TC_HEAD(lutimes_success, tc)
789*d1fb351cSAlan Somers {
790*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
791*d1fb351cSAlan Somers 					"lutimes(2) call");
792*d1fb351cSAlan Somers }
793*d1fb351cSAlan Somers 
794*d1fb351cSAlan Somers ATF_TC_BODY(lutimes_success, tc)
795*d1fb351cSAlan Somers {
796*d1fb351cSAlan Somers 	/* Symbolic link needs to exist to call lutimes(2) */
797*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
798*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
799*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, lutimes(path, NULL));
800*d1fb351cSAlan Somers 	check_audit(fds, successreg, pipefd);
801*d1fb351cSAlan Somers }
802*d1fb351cSAlan Somers 
803*d1fb351cSAlan Somers ATF_TC_CLEANUP(lutimes_success, tc)
804*d1fb351cSAlan Somers {
805*d1fb351cSAlan Somers 	cleanup();
806*d1fb351cSAlan Somers }
807*d1fb351cSAlan Somers 
808*d1fb351cSAlan Somers 
809*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(lutimes_failure);
810*d1fb351cSAlan Somers ATF_TC_HEAD(lutimes_failure, tc)
811*d1fb351cSAlan Somers {
812*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
813*d1fb351cSAlan Somers 					"lutimes(2) call");
814*d1fb351cSAlan Somers }
815*d1fb351cSAlan Somers 
816*d1fb351cSAlan Somers ATF_TC_BODY(lutimes_failure, tc)
817*d1fb351cSAlan Somers {
818*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
819*d1fb351cSAlan Somers 	/* Failure reason: symbolic link does not exist */
820*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, lutimes(errpath, NULL));
821*d1fb351cSAlan Somers 	check_audit(fds, failurereg, pipefd);
822*d1fb351cSAlan Somers }
823*d1fb351cSAlan Somers 
824*d1fb351cSAlan Somers ATF_TC_CLEANUP(lutimes_failure, tc)
825*d1fb351cSAlan Somers {
826*d1fb351cSAlan Somers 	cleanup();
827*d1fb351cSAlan Somers }
828*d1fb351cSAlan Somers 
829*d1fb351cSAlan Somers 
830*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimesat_success);
831*d1fb351cSAlan Somers ATF_TC_HEAD(futimesat_success, tc)
832*d1fb351cSAlan Somers {
833*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
834*d1fb351cSAlan Somers 					"futimesat(2) call");
835*d1fb351cSAlan Somers }
836*d1fb351cSAlan Somers 
837*d1fb351cSAlan Somers ATF_TC_BODY(futimesat_success, tc)
838*d1fb351cSAlan Somers {
839*d1fb351cSAlan Somers 	/* File needs to exist to call futimesat(2) */
840*d1fb351cSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
841*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
842*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, futimesat(AT_FDCWD, path, NULL));
843*d1fb351cSAlan Somers 	check_audit(fds, successreg, pipefd);
844*d1fb351cSAlan Somers 	close(filedesc);
845*d1fb351cSAlan Somers }
846*d1fb351cSAlan Somers 
847*d1fb351cSAlan Somers ATF_TC_CLEANUP(futimesat_success, tc)
848*d1fb351cSAlan Somers {
849*d1fb351cSAlan Somers 	cleanup();
850*d1fb351cSAlan Somers }
851*d1fb351cSAlan Somers 
852*d1fb351cSAlan Somers 
853*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimesat_failure);
854*d1fb351cSAlan Somers ATF_TC_HEAD(futimesat_failure, tc)
855*d1fb351cSAlan Somers {
856*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
857*d1fb351cSAlan Somers 					"futimesat(2) call");
858*d1fb351cSAlan Somers }
859*d1fb351cSAlan Somers 
860*d1fb351cSAlan Somers ATF_TC_BODY(futimesat_failure, tc)
861*d1fb351cSAlan Somers {
862*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
863*d1fb351cSAlan Somers 	/* Failure reason: file does not exist */
864*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, futimesat(AT_FDCWD, errpath, NULL));
865*d1fb351cSAlan Somers 	check_audit(fds, failurereg, pipefd);
866*d1fb351cSAlan Somers }
867*d1fb351cSAlan Somers 
868*d1fb351cSAlan Somers ATF_TC_CLEANUP(futimesat_failure, tc)
869*d1fb351cSAlan Somers {
870*d1fb351cSAlan Somers 	cleanup();
871*d1fb351cSAlan Somers }
872*d1fb351cSAlan Somers 
873*d1fb351cSAlan Somers 
874*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(mprotect_success);
875*d1fb351cSAlan Somers ATF_TC_HEAD(mprotect_success, tc)
876*d1fb351cSAlan Somers {
877*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
878*d1fb351cSAlan Somers 					"mprotect(2) call");
879*d1fb351cSAlan Somers }
880*d1fb351cSAlan Somers 
881*d1fb351cSAlan Somers ATF_TC_BODY(mprotect_success, tc)
882*d1fb351cSAlan Somers {
883*d1fb351cSAlan Somers 	pid = getpid();
884*d1fb351cSAlan Somers 	snprintf(extregex, sizeof(extregex), "mprotect.*%d.*ret.*success", pid);
885*d1fb351cSAlan Somers 
886*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
887*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(0, mprotect(NULL, 0, PROT_NONE));
888*d1fb351cSAlan Somers 	check_audit(fds, extregex, pipefd);
889*d1fb351cSAlan Somers }
890*d1fb351cSAlan Somers 
891*d1fb351cSAlan Somers ATF_TC_CLEANUP(mprotect_success, tc)
892*d1fb351cSAlan Somers {
893*d1fb351cSAlan Somers 	cleanup();
894*d1fb351cSAlan Somers }
895*d1fb351cSAlan Somers 
896*d1fb351cSAlan Somers 
897*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(mprotect_failure);
898*d1fb351cSAlan Somers ATF_TC_HEAD(mprotect_failure, tc)
899*d1fb351cSAlan Somers {
900*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
901*d1fb351cSAlan Somers 					"mprotect(2) call");
902*d1fb351cSAlan Somers }
903*d1fb351cSAlan Somers 
904*d1fb351cSAlan Somers ATF_TC_BODY(mprotect_failure, tc)
905*d1fb351cSAlan Somers {
906*d1fb351cSAlan Somers 	const char *regex = "mprotect.*return,failure : Invalid argument";
907*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
908*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, mprotect((void *)SIZE_MAX, -1, PROT_NONE));
909*d1fb351cSAlan Somers 	check_audit(fds, regex, pipefd);
910*d1fb351cSAlan Somers }
911*d1fb351cSAlan Somers 
912*d1fb351cSAlan Somers ATF_TC_CLEANUP(mprotect_failure, tc)
913*d1fb351cSAlan Somers {
914*d1fb351cSAlan Somers 	cleanup();
915*d1fb351cSAlan Somers }
916*d1fb351cSAlan Somers 
917*d1fb351cSAlan Somers /*
918*d1fb351cSAlan Somers  * undelete(2) only works on whiteout files in union file system. Hence, no
919*d1fb351cSAlan Somers  * test case for successful invocation.
920*d1fb351cSAlan Somers  */
921*d1fb351cSAlan Somers 
922*d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(undelete_failure);
923*d1fb351cSAlan Somers ATF_TC_HEAD(undelete_failure, tc)
924*d1fb351cSAlan Somers {
925*d1fb351cSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
926*d1fb351cSAlan Somers 					"undelete(2) call");
927*d1fb351cSAlan Somers }
928*d1fb351cSAlan Somers 
929*d1fb351cSAlan Somers ATF_TC_BODY(undelete_failure, tc)
930*d1fb351cSAlan Somers {
931*d1fb351cSAlan Somers 	pid = getpid();
932*d1fb351cSAlan Somers 	snprintf(extregex, sizeof(extregex), "undelete.*%d.*ret.*failure", pid);
933*d1fb351cSAlan Somers 
934*d1fb351cSAlan Somers 	FILE *pipefd = setup(fds, auclass);
935*d1fb351cSAlan Somers 	/* Failure reason: File does not exist */
936*d1fb351cSAlan Somers 	ATF_REQUIRE_EQ(-1, undelete(errpath));
937*d1fb351cSAlan Somers 	check_audit(fds, extregex, pipefd);
938*d1fb351cSAlan Somers }
939*d1fb351cSAlan Somers 
940*d1fb351cSAlan Somers ATF_TC_CLEANUP(undelete_failure, tc)
941*d1fb351cSAlan Somers {
942*d1fb351cSAlan Somers 	cleanup();
943*d1fb351cSAlan Somers }
944*d1fb351cSAlan Somers 
945*d1fb351cSAlan Somers 
946844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_file_success);
947844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_file_success, tc)
948844fc5ebSAlan Somers {
949844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
950844fc5ebSAlan Somers 					"extattr_set_file(2) call");
951844fc5ebSAlan Somers }
952844fc5ebSAlan Somers 
953844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_file_success, tc)
954844fc5ebSAlan Somers {
955844fc5ebSAlan Somers 	/* File needs to exist to call extattr_set_file(2) */
956844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
957844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
958844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
959844fc5ebSAlan Somers 		"extattr_set_file.*%s.*%s.*return,success", path, name);
960844fc5ebSAlan Somers 
961844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
962844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path,
963844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
964844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
965844fc5ebSAlan Somers 	close(filedesc);
966844fc5ebSAlan Somers }
967844fc5ebSAlan Somers 
968844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_file_success, tc)
969844fc5ebSAlan Somers {
970844fc5ebSAlan Somers 	cleanup();
971844fc5ebSAlan Somers }
972844fc5ebSAlan Somers 
973844fc5ebSAlan Somers 
974844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_file_failure);
975844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_file_failure, tc)
976844fc5ebSAlan Somers {
977844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
978844fc5ebSAlan Somers 					"extattr_set_file(2) call");
979844fc5ebSAlan Somers }
980844fc5ebSAlan Somers 
981844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_file_failure, tc)
982844fc5ebSAlan Somers {
983844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
984844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
985844fc5ebSAlan Somers 		"extattr_set_file.*%s.*%s.*failure", path, name);
986844fc5ebSAlan Somers 
987844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
988844fc5ebSAlan Somers 	/* Failure reason: file does not exist */
989844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_set_file(path,
990844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, NULL, 0));
991844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
992844fc5ebSAlan Somers }
993844fc5ebSAlan Somers 
994844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_file_failure, tc)
995844fc5ebSAlan Somers {
996844fc5ebSAlan Somers 	cleanup();
997844fc5ebSAlan Somers }
998844fc5ebSAlan Somers 
999844fc5ebSAlan Somers 
1000844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_fd_success);
1001844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_fd_success, tc)
1002844fc5ebSAlan Somers {
1003844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1004844fc5ebSAlan Somers 					"extattr_set_fd(2) call");
1005844fc5ebSAlan Somers }
1006844fc5ebSAlan Somers 
1007844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_fd_success, tc)
1008844fc5ebSAlan Somers {
1009844fc5ebSAlan Somers 	/* File needs to exist to call extattr_set_fd(2) */
1010844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1011844fc5ebSAlan Somers 
1012844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1013844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1014844fc5ebSAlan Somers 		"extattr_set_fd.*%s.*return,success", name);
1015844fc5ebSAlan Somers 
1016844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1017844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_fd(filedesc,
1018844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1019844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1020844fc5ebSAlan Somers 	close(filedesc);
1021844fc5ebSAlan Somers }
1022844fc5ebSAlan Somers 
1023844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_fd_success, tc)
1024844fc5ebSAlan Somers {
1025844fc5ebSAlan Somers 	cleanup();
1026844fc5ebSAlan Somers }
1027844fc5ebSAlan Somers 
1028844fc5ebSAlan Somers 
1029844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_fd_failure);
1030844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_fd_failure, tc)
1031844fc5ebSAlan Somers {
1032844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1033844fc5ebSAlan Somers 					"extattr_set_fd(2) call");
1034844fc5ebSAlan Somers }
1035844fc5ebSAlan Somers 
1036844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_fd_failure, tc)
1037844fc5ebSAlan Somers {
1038844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1039844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1040844fc5ebSAlan Somers 	"extattr_set_fd.*%s.*return,failure : Bad file descriptor", name);
1041844fc5ebSAlan Somers 
1042844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1043844fc5ebSAlan Somers 	/* Failure reason: Invalid file descriptor */
1044844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_set_fd(-1,
1045844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, NULL, 0));
1046844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1047844fc5ebSAlan Somers }
1048844fc5ebSAlan Somers 
1049844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_fd_failure, tc)
1050844fc5ebSAlan Somers {
1051844fc5ebSAlan Somers 	cleanup();
1052844fc5ebSAlan Somers }
1053844fc5ebSAlan Somers 
1054844fc5ebSAlan Somers 
1055844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_link_success);
1056844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_link_success, tc)
1057844fc5ebSAlan Somers {
1058844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1059844fc5ebSAlan Somers 					"extattr_set_link(2) call");
1060844fc5ebSAlan Somers }
1061844fc5ebSAlan Somers 
1062844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_link_success, tc)
1063844fc5ebSAlan Somers {
1064844fc5ebSAlan Somers 	/* Symbolic link needs to exist to call extattr_set_link(2) */
1065844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
1066844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1067844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1068844fc5ebSAlan Somers 		"extattr_set_link.*%s.*%s.*return,success", path, name);
1069844fc5ebSAlan Somers 
1070844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1071844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_link(path,
1072844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1073844fc5ebSAlan Somers 
1074844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1075844fc5ebSAlan Somers }
1076844fc5ebSAlan Somers 
1077844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_link_success, tc)
1078844fc5ebSAlan Somers {
1079844fc5ebSAlan Somers 	cleanup();
1080844fc5ebSAlan Somers }
1081844fc5ebSAlan Somers 
1082844fc5ebSAlan Somers 
1083844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_link_failure);
1084844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_link_failure, tc)
1085844fc5ebSAlan Somers {
1086844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1087844fc5ebSAlan Somers 					"extattr_set_link(2) call");
1088844fc5ebSAlan Somers }
1089844fc5ebSAlan Somers 
1090844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_link_failure, tc)
1091844fc5ebSAlan Somers {
1092844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1093844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1094844fc5ebSAlan Somers 		"extattr_set_link.*%s.*%s.*failure", path, name);
1095844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1096844fc5ebSAlan Somers 	/* Failure reason: symbolic link does not exist */
1097844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_set_link(path,
1098844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, NULL, 0));
1099844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1100844fc5ebSAlan Somers }
1101844fc5ebSAlan Somers 
1102844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_link_failure, tc)
1103844fc5ebSAlan Somers {
1104844fc5ebSAlan Somers 	cleanup();
1105844fc5ebSAlan Somers }
1106844fc5ebSAlan Somers 
1107844fc5ebSAlan Somers 
1108844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_file_success);
1109844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_file_success, tc)
1110844fc5ebSAlan Somers {
1111844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1112844fc5ebSAlan Somers 					"extattr_delete_file(2) call");
1113844fc5ebSAlan Somers }
1114844fc5ebSAlan Somers 
1115844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_file_success, tc)
1116844fc5ebSAlan Somers {
1117844fc5ebSAlan Somers 	/* File needs to exist to call extattr_delete_file(2) */
1118844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1119844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path,
1120844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1121844fc5ebSAlan Somers 
1122844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1123844fc5ebSAlan Somers 	ATF_REQUIRE((retval = extattr_delete_file(path,
1124844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name)) != -1);
1125844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1126844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1127844fc5ebSAlan Somers 	"extattr_delete_file.*%s.*return,success,%d", path, retval);
1128844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1129844fc5ebSAlan Somers 	close(filedesc);
1130844fc5ebSAlan Somers }
1131844fc5ebSAlan Somers 
1132844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_file_success, tc)
1133844fc5ebSAlan Somers {
1134844fc5ebSAlan Somers 	cleanup();
1135844fc5ebSAlan Somers }
1136844fc5ebSAlan Somers 
1137844fc5ebSAlan Somers 
1138844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_file_failure);
1139844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_file_failure, tc)
1140844fc5ebSAlan Somers {
1141844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1142844fc5ebSAlan Somers 					"extattr_delete_file(2) call");
1143844fc5ebSAlan Somers }
1144844fc5ebSAlan Somers 
1145844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_file_failure, tc)
1146844fc5ebSAlan Somers {
1147844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1148844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1149844fc5ebSAlan Somers 		"extattr_delete_file.*%s.*return,failure", path);
1150844fc5ebSAlan Somers 
1151844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1152844fc5ebSAlan Somers 	/* Failure reason: file does not exist */
1153844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_delete_file(path,
1154844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name));
1155844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1156844fc5ebSAlan Somers }
1157844fc5ebSAlan Somers 
1158844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_file_failure, tc)
1159844fc5ebSAlan Somers {
1160844fc5ebSAlan Somers 	cleanup();
1161844fc5ebSAlan Somers }
1162844fc5ebSAlan Somers 
1163844fc5ebSAlan Somers 
1164844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_fd_success);
1165844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_fd_success, tc)
1166844fc5ebSAlan Somers {
1167844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1168844fc5ebSAlan Somers 					"extattr_delete_fd(2) call");
1169844fc5ebSAlan Somers }
1170844fc5ebSAlan Somers 
1171844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_fd_success, tc)
1172844fc5ebSAlan Somers {
1173844fc5ebSAlan Somers 	/* File needs to exist to call extattr_delete_fd(2) */
1174844fc5ebSAlan Somers 	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
1175844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path,
1176844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1177844fc5ebSAlan Somers 
1178844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1179844fc5ebSAlan Somers 	ATF_REQUIRE((retval = extattr_delete_fd(filedesc,
1180844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name)) != -1);
1181844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1182844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1183844fc5ebSAlan Somers 		"extattr_delete_fd.*return,success,%d", retval);
1184844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1185844fc5ebSAlan Somers 	close(filedesc);
1186844fc5ebSAlan Somers }
1187844fc5ebSAlan Somers 
1188844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_fd_success, tc)
1189844fc5ebSAlan Somers {
1190844fc5ebSAlan Somers 	cleanup();
1191844fc5ebSAlan Somers }
1192844fc5ebSAlan Somers 
1193844fc5ebSAlan Somers 
1194844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_fd_failure);
1195844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_fd_failure, tc)
1196844fc5ebSAlan Somers {
1197844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1198844fc5ebSAlan Somers 					"extattr_delete_fd(2) call");
1199844fc5ebSAlan Somers }
1200844fc5ebSAlan Somers 
1201844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_fd_failure, tc)
1202844fc5ebSAlan Somers {
1203844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1204844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1205844fc5ebSAlan Somers 		"extattr_delete_fd.*return,failure : Bad file descriptor");
1206844fc5ebSAlan Somers 
1207844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1208844fc5ebSAlan Somers 	/* Failure reason: Invalid file descriptor */
1209844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_delete_fd(-1, EXTATTR_NAMESPACE_USER, name));
1210844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1211844fc5ebSAlan Somers }
1212844fc5ebSAlan Somers 
1213844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_fd_failure, tc)
1214844fc5ebSAlan Somers {
1215844fc5ebSAlan Somers 	cleanup();
1216844fc5ebSAlan Somers }
1217844fc5ebSAlan Somers 
1218844fc5ebSAlan Somers 
1219844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_link_success);
1220844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_link_success, tc)
1221844fc5ebSAlan Somers {
1222844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1223844fc5ebSAlan Somers 					"extattr_delete_link(2) call");
1224844fc5ebSAlan Somers }
1225844fc5ebSAlan Somers 
1226844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_link_success, tc)
1227844fc5ebSAlan Somers {
1228844fc5ebSAlan Somers 	/* Symbolic link needs to exist to call extattr_delete_link(2) */
1229844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(0, symlink("symlink", path));
1230844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(sizeof(buff), extattr_set_link(path,
1231844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff)));
1232844fc5ebSAlan Somers 
1233844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1234844fc5ebSAlan Somers 	ATF_REQUIRE((retval = extattr_delete_link(path,
1235844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name)) != -1);
1236844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1237844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1238844fc5ebSAlan Somers 	"extattr_delete_link.*%s.*return,success,%d", path, retval);
1239844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1240844fc5ebSAlan Somers }
1241844fc5ebSAlan Somers 
1242844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_link_success, tc)
1243844fc5ebSAlan Somers {
1244844fc5ebSAlan Somers 	cleanup();
1245844fc5ebSAlan Somers }
1246844fc5ebSAlan Somers 
1247844fc5ebSAlan Somers 
1248844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_link_failure);
1249844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_link_failure, tc)
1250844fc5ebSAlan Somers {
1251844fc5ebSAlan Somers 	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1252844fc5ebSAlan Somers 					"extattr_delete_link(2) call");
1253844fc5ebSAlan Somers }
1254844fc5ebSAlan Somers 
1255844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_link_failure, tc)
1256844fc5ebSAlan Somers {
1257844fc5ebSAlan Somers 	/* Prepare the regex to be checked in the audit record */
1258844fc5ebSAlan Somers 	snprintf(extregex, sizeof(extregex),
1259844fc5ebSAlan Somers 		"extattr_delete_link.*%s.*failure", path);
1260844fc5ebSAlan Somers 	FILE *pipefd = setup(fds, auclass);
1261844fc5ebSAlan Somers 	/* Failure reason: symbolic link does not exist */
1262844fc5ebSAlan Somers 	ATF_REQUIRE_EQ(-1, extattr_delete_link(path,
1263844fc5ebSAlan Somers 		EXTATTR_NAMESPACE_USER, name));
1264844fc5ebSAlan Somers 	check_audit(fds, extregex, pipefd);
1265844fc5ebSAlan Somers }
1266844fc5ebSAlan Somers 
1267844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_link_failure, tc)
1268844fc5ebSAlan Somers {
1269844fc5ebSAlan Somers 	cleanup();
1270844fc5ebSAlan Somers }
1271844fc5ebSAlan Somers 
1272844fc5ebSAlan Somers 
12736d203d2dSAlan Somers ATF_TP_ADD_TCS(tp)
12746d203d2dSAlan Somers {
12756d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, flock_success);
12766d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, flock_failure);
12776d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fcntl_success);
12786d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fcntl_failure);
12796d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fsync_success);
12806d203d2dSAlan Somers 	ATF_TP_ADD_TC(tp, fsync_failure);
12816d203d2dSAlan Somers 
128228845213SAlan Somers 	ATF_TP_ADD_TC(tp, chmod_success);
128328845213SAlan Somers 	ATF_TP_ADD_TC(tp, chmod_failure);
128428845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmod_success);
128528845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmod_failure);
128628845213SAlan Somers 	ATF_TP_ADD_TC(tp, lchmod_success);
128728845213SAlan Somers 	ATF_TP_ADD_TC(tp, lchmod_failure);
128828845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmodat_success);
128928845213SAlan Somers 	ATF_TP_ADD_TC(tp, fchmodat_failure);
129028845213SAlan Somers 
12915c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, chown_success);
12925c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, chown_failure);
12935c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchown_success);
12945c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchown_failure);
12955c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, lchown_success);
12965c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, lchown_failure);
12975c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchownat_success);
12985c9a4738SAlan Somers 	ATF_TP_ADD_TC(tp, fchownat_failure);
12995c9a4738SAlan Somers 
130068e520feSAlan Somers 	ATF_TP_ADD_TC(tp, chflags_success);
130168e520feSAlan Somers 	ATF_TP_ADD_TC(tp, chflags_failure);
130268e520feSAlan Somers 	ATF_TP_ADD_TC(tp, fchflags_success);
130368e520feSAlan Somers 	ATF_TP_ADD_TC(tp, fchflags_failure);
130468e520feSAlan Somers 	ATF_TP_ADD_TC(tp, lchflags_success);
130568e520feSAlan Somers 	ATF_TP_ADD_TC(tp, lchflags_failure);
130668e520feSAlan Somers 
1307*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, utimes_success);
1308*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, utimes_failure);
1309*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimes_success);
1310*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimes_failure);
1311*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, lutimes_success);
1312*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, lutimes_failure);
1313*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimesat_success);
1314*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, futimesat_failure);
1315*d1fb351cSAlan Somers 
1316*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, mprotect_success);
1317*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, mprotect_failure);
1318*d1fb351cSAlan Somers 	ATF_TP_ADD_TC(tp, undelete_failure);
1319*d1fb351cSAlan Somers 
1320844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_file_success);
1321844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_file_failure);
1322844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_fd_success);
1323844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_fd_failure);
1324844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_link_success);
1325844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_set_link_failure);
1326844fc5ebSAlan Somers 
1327844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_file_success);
1328844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_file_failure);
1329844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_fd_success);
1330844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_fd_failure);
1331844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_link_success);
1332844fc5ebSAlan Somers 	ATF_TP_ADD_TC(tp, extattr_delete_link_failure);
1333844fc5ebSAlan Somers 
13346d203d2dSAlan Somers 	return (atf_no_error());
13356d203d2dSAlan Somers }
1336