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