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