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> 36*40407d39SAlex Richardson #include <errno.h> 376d203d2dSAlan Somers #include <fcntl.h> 38d1fb351cSAlan Somers #include <stdint.h> 396d203d2dSAlan Somers #include <unistd.h> 406d203d2dSAlan Somers 416d203d2dSAlan Somers #include "utils.h" 426d203d2dSAlan Somers 436d203d2dSAlan Somers static pid_t pid; 445c9a4738SAlan Somers static uid_t uid = -1; 455c9a4738SAlan Somers static gid_t gid = -1; 46844fc5ebSAlan Somers static int filedesc, retval; 476d203d2dSAlan Somers static struct pollfd fds[1]; 486d203d2dSAlan Somers static mode_t mode = 0777; 496d203d2dSAlan Somers static char extregex[80]; 505641c23fSAlan Somers static char buff[] = "ezio"; 516d203d2dSAlan Somers static const char *auclass = "fm"; 52844fc5ebSAlan Somers static const char *name = "authorname"; 536d203d2dSAlan Somers static const char *path = "fileforaudit"; 5428845213SAlan Somers static const char *errpath = "adirhasnoname/fileforaudit"; 5528845213SAlan Somers static const char *successreg = "fileforaudit.*return,success"; 5628845213SAlan Somers static const char *failurereg = "fileforaudit.*return,failure"; 576d203d2dSAlan Somers 586d203d2dSAlan Somers 596d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(flock_success); 606d203d2dSAlan Somers ATF_TC_HEAD(flock_success, tc) 616d203d2dSAlan Somers { 626d203d2dSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 636d203d2dSAlan Somers "flock(2) call"); 646d203d2dSAlan Somers } 656d203d2dSAlan Somers 666d203d2dSAlan Somers ATF_TC_BODY(flock_success, tc) 676d203d2dSAlan Somers { 686d203d2dSAlan Somers pid = getpid(); 696d203d2dSAlan Somers snprintf(extregex, sizeof(extregex), "flock.*%d.*return,success", pid); 706d203d2dSAlan Somers 716d203d2dSAlan Somers /* File needs to exist to call flock(2) */ 726d203d2dSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 736d203d2dSAlan Somers FILE *pipefd = setup(fds, auclass); 746d203d2dSAlan Somers ATF_REQUIRE_EQ(0, flock(filedesc, LOCK_SH)); 756d203d2dSAlan Somers check_audit(fds, extregex, pipefd); 766d203d2dSAlan Somers close(filedesc); 776d203d2dSAlan Somers } 786d203d2dSAlan Somers 796d203d2dSAlan Somers ATF_TC_CLEANUP(flock_success, tc) 806d203d2dSAlan Somers { 816d203d2dSAlan Somers cleanup(); 826d203d2dSAlan Somers } 836d203d2dSAlan Somers 846d203d2dSAlan Somers 856d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(flock_failure); 866d203d2dSAlan Somers ATF_TC_HEAD(flock_failure, tc) 876d203d2dSAlan Somers { 886d203d2dSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 896d203d2dSAlan Somers "flock(2) call"); 906d203d2dSAlan Somers } 916d203d2dSAlan Somers 926d203d2dSAlan Somers ATF_TC_BODY(flock_failure, tc) 936d203d2dSAlan Somers { 946d203d2dSAlan Somers const char *regex = "flock.*return,failure : Bad file descriptor"; 956d203d2dSAlan Somers FILE *pipefd = setup(fds, auclass); 96*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, flock(-1, LOCK_SH) == -1); 976d203d2dSAlan Somers check_audit(fds, regex, pipefd); 986d203d2dSAlan Somers } 996d203d2dSAlan Somers 1006d203d2dSAlan Somers ATF_TC_CLEANUP(flock_failure, tc) 1016d203d2dSAlan Somers { 1026d203d2dSAlan Somers cleanup(); 1036d203d2dSAlan Somers } 1046d203d2dSAlan Somers 1056d203d2dSAlan Somers 1066d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fcntl_success); 1076d203d2dSAlan Somers ATF_TC_HEAD(fcntl_success, tc) 1086d203d2dSAlan Somers { 1096d203d2dSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 1106d203d2dSAlan Somers "fcntl(2) call"); 1116d203d2dSAlan Somers } 1126d203d2dSAlan Somers 1136d203d2dSAlan Somers ATF_TC_BODY(fcntl_success, tc) 1146d203d2dSAlan Somers { 1156d203d2dSAlan Somers int flagstatus; 1166d203d2dSAlan Somers /* File needs to exist to call fcntl(2) */ 1176d203d2dSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 1186d203d2dSAlan Somers FILE *pipefd = setup(fds, auclass); 1196d203d2dSAlan Somers 1206d203d2dSAlan Somers /* Retrieve the status flags of 'filedesc' and store it in flagstatus */ 1216d203d2dSAlan Somers ATF_REQUIRE((flagstatus = fcntl(filedesc, F_GETFL, 0)) != -1); 1226d203d2dSAlan Somers snprintf(extregex, sizeof(extregex), 1236d203d2dSAlan Somers "fcntl.*return,success,%d", flagstatus); 1246d203d2dSAlan Somers check_audit(fds, extregex, pipefd); 1256d203d2dSAlan Somers close(filedesc); 1266d203d2dSAlan Somers } 1276d203d2dSAlan Somers 1286d203d2dSAlan Somers ATF_TC_CLEANUP(fcntl_success, tc) 1296d203d2dSAlan Somers { 1306d203d2dSAlan Somers cleanup(); 1316d203d2dSAlan Somers } 1326d203d2dSAlan Somers 1336d203d2dSAlan Somers 1346d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fcntl_failure); 1356d203d2dSAlan Somers ATF_TC_HEAD(fcntl_failure, tc) 1366d203d2dSAlan Somers { 1376d203d2dSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1386d203d2dSAlan Somers "fcntl(2) call"); 1396d203d2dSAlan Somers } 1406d203d2dSAlan Somers 1416d203d2dSAlan Somers ATF_TC_BODY(fcntl_failure, tc) 1426d203d2dSAlan Somers { 1436d203d2dSAlan Somers const char *regex = "fcntl.*return,failure : Bad file descriptor"; 1446d203d2dSAlan Somers FILE *pipefd = setup(fds, auclass); 145*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, fcntl(-1, F_GETFL, 0) == -1); 1466d203d2dSAlan Somers check_audit(fds, regex, pipefd); 1476d203d2dSAlan Somers } 1486d203d2dSAlan Somers 1496d203d2dSAlan Somers ATF_TC_CLEANUP(fcntl_failure, tc) 1506d203d2dSAlan Somers { 1516d203d2dSAlan Somers cleanup(); 1526d203d2dSAlan Somers } 1536d203d2dSAlan Somers 1546d203d2dSAlan Somers 1556d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fsync_success); 1566d203d2dSAlan Somers ATF_TC_HEAD(fsync_success, tc) 1576d203d2dSAlan Somers { 1586d203d2dSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 1596d203d2dSAlan Somers "fsync(2) call"); 1606d203d2dSAlan Somers } 1616d203d2dSAlan Somers 1626d203d2dSAlan Somers ATF_TC_BODY(fsync_success, tc) 1636d203d2dSAlan Somers { 1646d203d2dSAlan Somers pid = getpid(); 1656d203d2dSAlan Somers snprintf(extregex, sizeof(extregex), "fsync.*%d.*return,success", pid); 1666d203d2dSAlan Somers 1676d203d2dSAlan Somers /* File needs to exist to call fsync(2) */ 1686d203d2dSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 1696d203d2dSAlan Somers FILE *pipefd = setup(fds, auclass); 1706d203d2dSAlan Somers ATF_REQUIRE_EQ(0, fsync(filedesc)); 1716d203d2dSAlan Somers check_audit(fds, extregex, pipefd); 1726d203d2dSAlan Somers close(filedesc); 1736d203d2dSAlan Somers } 1746d203d2dSAlan Somers 1756d203d2dSAlan Somers ATF_TC_CLEANUP(fsync_success, tc) 1766d203d2dSAlan Somers { 1776d203d2dSAlan Somers cleanup(); 1786d203d2dSAlan Somers } 1796d203d2dSAlan Somers 1806d203d2dSAlan Somers 1816d203d2dSAlan Somers ATF_TC_WITH_CLEANUP(fsync_failure); 1826d203d2dSAlan Somers ATF_TC_HEAD(fsync_failure, tc) 1836d203d2dSAlan Somers { 1846d203d2dSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1856d203d2dSAlan Somers "fsync(2) call"); 1866d203d2dSAlan Somers } 1876d203d2dSAlan Somers 1886d203d2dSAlan Somers ATF_TC_BODY(fsync_failure, tc) 1896d203d2dSAlan Somers { 1906d203d2dSAlan Somers const char *regex = "fsync.*return,failure : Bad file descriptor"; 1916d203d2dSAlan Somers FILE *pipefd = setup(fds, auclass); 1926d203d2dSAlan Somers /* Failure reason: Invalid file descriptor */ 193*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, fsync(-1) == -1); 1946d203d2dSAlan Somers check_audit(fds, regex, pipefd); 1956d203d2dSAlan Somers } 1966d203d2dSAlan Somers 1976d203d2dSAlan Somers ATF_TC_CLEANUP(fsync_failure, tc) 1986d203d2dSAlan Somers { 1996d203d2dSAlan Somers cleanup(); 2006d203d2dSAlan Somers } 2016d203d2dSAlan Somers 2026d203d2dSAlan Somers 20328845213SAlan Somers ATF_TC_WITH_CLEANUP(chmod_success); 20428845213SAlan Somers ATF_TC_HEAD(chmod_success, tc) 20528845213SAlan Somers { 20628845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 20728845213SAlan Somers "chmod(2) call"); 20828845213SAlan Somers } 20928845213SAlan Somers 21028845213SAlan Somers ATF_TC_BODY(chmod_success, tc) 21128845213SAlan Somers { 21228845213SAlan Somers /* File needs to exist to call chmod(2) */ 21328845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 21428845213SAlan Somers FILE *pipefd = setup(fds, auclass); 21528845213SAlan Somers ATF_REQUIRE_EQ(0, chmod(path, mode)); 21628845213SAlan Somers check_audit(fds, successreg, pipefd); 21728845213SAlan Somers close(filedesc); 21828845213SAlan Somers } 21928845213SAlan Somers 22028845213SAlan Somers ATF_TC_CLEANUP(chmod_success, tc) 22128845213SAlan Somers { 22228845213SAlan Somers cleanup(); 22328845213SAlan Somers } 22428845213SAlan Somers 22528845213SAlan Somers 22628845213SAlan Somers ATF_TC_WITH_CLEANUP(chmod_failure); 22728845213SAlan Somers ATF_TC_HEAD(chmod_failure, tc) 22828845213SAlan Somers { 22928845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 23028845213SAlan Somers "chmod(2) call"); 23128845213SAlan Somers } 23228845213SAlan Somers 23328845213SAlan Somers ATF_TC_BODY(chmod_failure, tc) 23428845213SAlan Somers { 23528845213SAlan Somers FILE *pipefd = setup(fds, auclass); 23628845213SAlan Somers /* Failure reason: file does not exist */ 237*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, chmod(errpath, mode) == -1); 23828845213SAlan Somers check_audit(fds, failurereg, pipefd); 23928845213SAlan Somers } 24028845213SAlan Somers 24128845213SAlan Somers ATF_TC_CLEANUP(chmod_failure, tc) 24228845213SAlan Somers { 24328845213SAlan Somers cleanup(); 24428845213SAlan Somers } 24528845213SAlan Somers 24628845213SAlan Somers 24728845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmod_success); 24828845213SAlan Somers ATF_TC_HEAD(fchmod_success, tc) 24928845213SAlan Somers { 25028845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 25128845213SAlan Somers "fchmod(2) call"); 25228845213SAlan Somers } 25328845213SAlan Somers 25428845213SAlan Somers ATF_TC_BODY(fchmod_success, tc) 25528845213SAlan Somers { 25628845213SAlan Somers pid = getpid(); 25728845213SAlan Somers snprintf(extregex, sizeof(extregex), "fchmod.*%d.*return,success", pid); 25828845213SAlan Somers 25928845213SAlan Somers /* File needs to exist to call fchmod(2) */ 26028845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 26128845213SAlan Somers FILE *pipefd = setup(fds, auclass); 26228845213SAlan Somers ATF_REQUIRE_EQ(0, fchmod(filedesc, mode)); 26328845213SAlan Somers check_audit(fds, extregex, pipefd); 26428845213SAlan Somers close(filedesc); 26528845213SAlan Somers } 26628845213SAlan Somers 26728845213SAlan Somers ATF_TC_CLEANUP(fchmod_success, tc) 26828845213SAlan Somers { 26928845213SAlan Somers cleanup(); 27028845213SAlan Somers } 27128845213SAlan Somers 27228845213SAlan Somers 27328845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmod_failure); 27428845213SAlan Somers ATF_TC_HEAD(fchmod_failure, tc) 27528845213SAlan Somers { 27628845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 27728845213SAlan Somers "fchmod(2) call"); 27828845213SAlan Somers } 27928845213SAlan Somers 28028845213SAlan Somers ATF_TC_BODY(fchmod_failure, tc) 28128845213SAlan Somers { 28228845213SAlan Somers const char *regex = "fchmod.*return,failure : Bad file descriptor"; 28328845213SAlan Somers FILE *pipefd = setup(fds, auclass); 28428845213SAlan Somers /* Failure reason: Invalid file descriptor */ 285*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, fchmod(-1, mode) == -1); 28628845213SAlan Somers check_audit(fds, regex, pipefd); 28728845213SAlan Somers } 28828845213SAlan Somers 28928845213SAlan Somers ATF_TC_CLEANUP(fchmod_failure, tc) 29028845213SAlan Somers { 29128845213SAlan Somers cleanup(); 29228845213SAlan Somers } 29328845213SAlan Somers 29428845213SAlan Somers 29528845213SAlan Somers ATF_TC_WITH_CLEANUP(lchmod_success); 29628845213SAlan Somers ATF_TC_HEAD(lchmod_success, tc) 29728845213SAlan Somers { 29828845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 29928845213SAlan Somers "lchmod(2) call"); 30028845213SAlan Somers } 30128845213SAlan Somers 30228845213SAlan Somers ATF_TC_BODY(lchmod_success, tc) 30328845213SAlan Somers { 30428845213SAlan Somers /* Symbolic link needs to exist to call lchmod(2) */ 30528845213SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 30628845213SAlan Somers FILE *pipefd = setup(fds, auclass); 30728845213SAlan Somers ATF_REQUIRE_EQ(0, lchmod(path, mode)); 30828845213SAlan Somers check_audit(fds, successreg, pipefd); 30928845213SAlan Somers } 31028845213SAlan Somers 31128845213SAlan Somers ATF_TC_CLEANUP(lchmod_success, tc) 31228845213SAlan Somers { 31328845213SAlan Somers cleanup(); 31428845213SAlan Somers } 31528845213SAlan Somers 31628845213SAlan Somers 31728845213SAlan Somers ATF_TC_WITH_CLEANUP(lchmod_failure); 31828845213SAlan Somers ATF_TC_HEAD(lchmod_failure, tc) 31928845213SAlan Somers { 32028845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 32128845213SAlan Somers "lchmod(2) call"); 32228845213SAlan Somers } 32328845213SAlan Somers 32428845213SAlan Somers ATF_TC_BODY(lchmod_failure, tc) 32528845213SAlan Somers { 32628845213SAlan Somers FILE *pipefd = setup(fds, auclass); 32728845213SAlan Somers /* Failure reason: file does not exist */ 328*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, lchmod(errpath, mode) == -1); 32928845213SAlan Somers check_audit(fds, failurereg, pipefd); 33028845213SAlan Somers } 33128845213SAlan Somers 33228845213SAlan Somers ATF_TC_CLEANUP(lchmod_failure, tc) 33328845213SAlan Somers { 33428845213SAlan Somers cleanup(); 33528845213SAlan Somers } 33628845213SAlan Somers 33728845213SAlan Somers 33828845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmodat_success); 33928845213SAlan Somers ATF_TC_HEAD(fchmodat_success, tc) 34028845213SAlan Somers { 34128845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 34228845213SAlan Somers "fchmodat(2) call"); 34328845213SAlan Somers } 34428845213SAlan Somers 34528845213SAlan Somers ATF_TC_BODY(fchmodat_success, tc) 34628845213SAlan Somers { 34728845213SAlan Somers /* File needs to exist to call fchmodat(2) */ 34828845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 34928845213SAlan Somers FILE *pipefd = setup(fds, auclass); 35028845213SAlan Somers ATF_REQUIRE_EQ(0, fchmodat(AT_FDCWD, path, mode, 0)); 35128845213SAlan Somers check_audit(fds, successreg, pipefd); 35228845213SAlan Somers close(filedesc); 35328845213SAlan Somers } 35428845213SAlan Somers 35528845213SAlan Somers ATF_TC_CLEANUP(fchmodat_success, tc) 35628845213SAlan Somers { 35728845213SAlan Somers cleanup(); 35828845213SAlan Somers } 35928845213SAlan Somers 36028845213SAlan Somers 36128845213SAlan Somers ATF_TC_WITH_CLEANUP(fchmodat_failure); 36228845213SAlan Somers ATF_TC_HEAD(fchmodat_failure, tc) 36328845213SAlan Somers { 36428845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 36528845213SAlan Somers "fchmodat(2) call"); 36628845213SAlan Somers } 36728845213SAlan Somers 36828845213SAlan Somers ATF_TC_BODY(fchmodat_failure, tc) 36928845213SAlan Somers { 37028845213SAlan Somers FILE *pipefd = setup(fds, auclass); 37128845213SAlan Somers /* Failure reason: file does not exist */ 372*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, fchmodat(AT_FDCWD, errpath, mode, 0) == -1); 37328845213SAlan Somers check_audit(fds, failurereg, pipefd); 37428845213SAlan Somers } 37528845213SAlan Somers 37628845213SAlan Somers ATF_TC_CLEANUP(fchmodat_failure, tc) 37728845213SAlan Somers { 37828845213SAlan Somers cleanup(); 37928845213SAlan Somers } 38028845213SAlan Somers 38128845213SAlan Somers 3825c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(chown_success); 3835c9a4738SAlan Somers ATF_TC_HEAD(chown_success, tc) 3845c9a4738SAlan Somers { 3855c9a4738SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 3865c9a4738SAlan Somers "chown(2) call"); 3875c9a4738SAlan Somers } 3885c9a4738SAlan Somers 3895c9a4738SAlan Somers ATF_TC_BODY(chown_success, tc) 3905c9a4738SAlan Somers { 3915c9a4738SAlan Somers /* File needs to exist to call chown(2) */ 3925c9a4738SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 3935c9a4738SAlan Somers FILE *pipefd = setup(fds, auclass); 3945c9a4738SAlan Somers ATF_REQUIRE_EQ(0, chown(path, uid, gid)); 3955c9a4738SAlan Somers check_audit(fds, successreg, pipefd); 3965c9a4738SAlan Somers close(filedesc); 3975c9a4738SAlan Somers } 3985c9a4738SAlan Somers 3995c9a4738SAlan Somers ATF_TC_CLEANUP(chown_success, tc) 4005c9a4738SAlan Somers { 4015c9a4738SAlan Somers cleanup(); 4025c9a4738SAlan Somers } 4035c9a4738SAlan Somers 4045c9a4738SAlan Somers 4055c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(chown_failure); 4065c9a4738SAlan Somers ATF_TC_HEAD(chown_failure, tc) 4075c9a4738SAlan Somers { 4085c9a4738SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 4095c9a4738SAlan Somers "chown(2) call"); 4105c9a4738SAlan Somers } 4115c9a4738SAlan Somers 4125c9a4738SAlan Somers ATF_TC_BODY(chown_failure, tc) 4135c9a4738SAlan Somers { 4145c9a4738SAlan Somers FILE *pipefd = setup(fds, auclass); 4155c9a4738SAlan Somers /* Failure reason: file does not exist */ 416*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, chown(errpath, uid, gid) == -1); 4175c9a4738SAlan Somers check_audit(fds, failurereg, pipefd); 4185c9a4738SAlan Somers } 4195c9a4738SAlan Somers 4205c9a4738SAlan Somers ATF_TC_CLEANUP(chown_failure, tc) 4215c9a4738SAlan Somers { 4225c9a4738SAlan Somers cleanup(); 4235c9a4738SAlan Somers } 4245c9a4738SAlan Somers 4255c9a4738SAlan Somers 4265c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchown_success); 4275c9a4738SAlan Somers ATF_TC_HEAD(fchown_success, tc) 4285c9a4738SAlan Somers { 4295c9a4738SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 4305c9a4738SAlan Somers "fchown(2) call"); 4315c9a4738SAlan Somers } 4325c9a4738SAlan Somers 4335c9a4738SAlan Somers ATF_TC_BODY(fchown_success, tc) 4345c9a4738SAlan Somers { 4355c9a4738SAlan Somers pid = getpid(); 4365c9a4738SAlan Somers snprintf(extregex, sizeof(extregex), "fchown.*%d.*return,success", pid); 4375c9a4738SAlan Somers 4385c9a4738SAlan Somers /* File needs to exist to call fchown(2) */ 4395c9a4738SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 4405c9a4738SAlan Somers FILE *pipefd = setup(fds, auclass); 4415c9a4738SAlan Somers ATF_REQUIRE_EQ(0, fchown(filedesc, uid, gid)); 4425c9a4738SAlan Somers check_audit(fds, extregex, pipefd); 4435c9a4738SAlan Somers close(filedesc); 4445c9a4738SAlan Somers } 4455c9a4738SAlan Somers 4465c9a4738SAlan Somers ATF_TC_CLEANUP(fchown_success, tc) 4475c9a4738SAlan Somers { 4485c9a4738SAlan Somers cleanup(); 4495c9a4738SAlan Somers } 4505c9a4738SAlan Somers 4515c9a4738SAlan Somers 4525c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchown_failure); 4535c9a4738SAlan Somers ATF_TC_HEAD(fchown_failure, tc) 4545c9a4738SAlan Somers { 4555c9a4738SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 4565c9a4738SAlan Somers "fchown(2) call"); 4575c9a4738SAlan Somers } 4585c9a4738SAlan Somers 4595c9a4738SAlan Somers ATF_TC_BODY(fchown_failure, tc) 4605c9a4738SAlan Somers { 4615c9a4738SAlan Somers const char *regex = "fchown.*return,failure : Bad file descriptor"; 4625c9a4738SAlan Somers FILE *pipefd = setup(fds, auclass); 4635c9a4738SAlan Somers /* Failure reason: Invalid file descriptor */ 464*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, fchown(-1, uid, gid) == -1); 4655c9a4738SAlan Somers check_audit(fds, regex, pipefd); 4665c9a4738SAlan Somers } 4675c9a4738SAlan Somers 4685c9a4738SAlan Somers ATF_TC_CLEANUP(fchown_failure, tc) 4695c9a4738SAlan Somers { 4705c9a4738SAlan Somers cleanup(); 4715c9a4738SAlan Somers } 4725c9a4738SAlan Somers 4735c9a4738SAlan Somers 4745c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(lchown_success); 4755c9a4738SAlan Somers ATF_TC_HEAD(lchown_success, tc) 4765c9a4738SAlan Somers { 4775c9a4738SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 4785c9a4738SAlan Somers "lchown(2) call"); 4795c9a4738SAlan Somers } 4805c9a4738SAlan Somers 4815c9a4738SAlan Somers ATF_TC_BODY(lchown_success, tc) 4825c9a4738SAlan Somers { 4835c9a4738SAlan Somers /* Symbolic link needs to exist to call lchown(2) */ 4845c9a4738SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 4855c9a4738SAlan Somers FILE *pipefd = setup(fds, auclass); 4865c9a4738SAlan Somers ATF_REQUIRE_EQ(0, lchown(path, uid, gid)); 4875c9a4738SAlan Somers check_audit(fds, successreg, pipefd); 4885c9a4738SAlan Somers } 4895c9a4738SAlan Somers 4905c9a4738SAlan Somers ATF_TC_CLEANUP(lchown_success, tc) 4915c9a4738SAlan Somers { 4925c9a4738SAlan Somers cleanup(); 4935c9a4738SAlan Somers } 4945c9a4738SAlan Somers 4955c9a4738SAlan Somers 4965c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(lchown_failure); 4975c9a4738SAlan Somers ATF_TC_HEAD(lchown_failure, tc) 4985c9a4738SAlan Somers { 4995c9a4738SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 5005c9a4738SAlan Somers "lchown(2) call"); 5015c9a4738SAlan Somers } 5025c9a4738SAlan Somers 5035c9a4738SAlan Somers ATF_TC_BODY(lchown_failure, tc) 5045c9a4738SAlan Somers { 5055c9a4738SAlan Somers FILE *pipefd = setup(fds, auclass); 5065c9a4738SAlan Somers /* Failure reason: Symbolic link does not exist */ 507*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, lchown(errpath, uid, gid) == -1); 5085c9a4738SAlan Somers check_audit(fds, failurereg, pipefd); 5095c9a4738SAlan Somers } 5105c9a4738SAlan Somers 5115c9a4738SAlan Somers ATF_TC_CLEANUP(lchown_failure, tc) 5125c9a4738SAlan Somers { 5135c9a4738SAlan Somers cleanup(); 5145c9a4738SAlan Somers } 5155c9a4738SAlan Somers 5165c9a4738SAlan Somers 5175c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchownat_success); 5185c9a4738SAlan Somers ATF_TC_HEAD(fchownat_success, tc) 5195c9a4738SAlan Somers { 5205c9a4738SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 5215c9a4738SAlan Somers "fchownat(2) call"); 5225c9a4738SAlan Somers } 5235c9a4738SAlan Somers 5245c9a4738SAlan Somers ATF_TC_BODY(fchownat_success, tc) 5255c9a4738SAlan Somers { 5265c9a4738SAlan Somers /* File needs to exist to call fchownat(2) */ 5275c9a4738SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 5285c9a4738SAlan Somers FILE *pipefd = setup(fds, auclass); 5295c9a4738SAlan Somers ATF_REQUIRE_EQ(0, fchownat(AT_FDCWD, path, uid, gid, 0)); 5305c9a4738SAlan Somers check_audit(fds, successreg, pipefd); 5315c9a4738SAlan Somers close(filedesc); 5325c9a4738SAlan Somers } 5335c9a4738SAlan Somers 5345c9a4738SAlan Somers ATF_TC_CLEANUP(fchownat_success, tc) 5355c9a4738SAlan Somers { 5365c9a4738SAlan Somers cleanup(); 5375c9a4738SAlan Somers } 5385c9a4738SAlan Somers 5395c9a4738SAlan Somers 5405c9a4738SAlan Somers ATF_TC_WITH_CLEANUP(fchownat_failure); 5415c9a4738SAlan Somers ATF_TC_HEAD(fchownat_failure, tc) 5425c9a4738SAlan Somers { 5435c9a4738SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 5445c9a4738SAlan Somers "fchownat(2) call"); 5455c9a4738SAlan Somers } 5465c9a4738SAlan Somers 5475c9a4738SAlan Somers ATF_TC_BODY(fchownat_failure, tc) 5485c9a4738SAlan Somers { 5495c9a4738SAlan Somers FILE *pipefd = setup(fds, auclass); 5505c9a4738SAlan Somers /* Failure reason: file does not exist */ 551*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 552*40407d39SAlex Richardson fchownat(AT_FDCWD, errpath, uid, gid, 0) == -1); 5535c9a4738SAlan Somers check_audit(fds, failurereg, pipefd); 5545c9a4738SAlan Somers } 5555c9a4738SAlan Somers 5565c9a4738SAlan Somers ATF_TC_CLEANUP(fchownat_failure, tc) 5575c9a4738SAlan Somers { 5585c9a4738SAlan Somers cleanup(); 5595c9a4738SAlan Somers } 5605c9a4738SAlan Somers 5615c9a4738SAlan Somers 56268e520feSAlan Somers ATF_TC_WITH_CLEANUP(chflags_success); 56368e520feSAlan Somers ATF_TC_HEAD(chflags_success, tc) 56468e520feSAlan Somers { 56568e520feSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 56668e520feSAlan Somers "chflags(2) call"); 56768e520feSAlan Somers } 56868e520feSAlan Somers 56968e520feSAlan Somers ATF_TC_BODY(chflags_success, tc) 57068e520feSAlan Somers { 57168e520feSAlan Somers /* File needs to exist to call chflags(2) */ 57268e520feSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 57368e520feSAlan Somers FILE *pipefd = setup(fds, auclass); 57468e520feSAlan Somers ATF_REQUIRE_EQ(0, chflags(path, UF_OFFLINE)); 57568e520feSAlan Somers check_audit(fds, successreg, pipefd); 57668e520feSAlan Somers close(filedesc); 57768e520feSAlan Somers } 57868e520feSAlan Somers 57968e520feSAlan Somers ATF_TC_CLEANUP(chflags_success, tc) 58068e520feSAlan Somers { 58168e520feSAlan Somers cleanup(); 58268e520feSAlan Somers } 58368e520feSAlan Somers 58468e520feSAlan Somers 58568e520feSAlan Somers ATF_TC_WITH_CLEANUP(chflags_failure); 58668e520feSAlan Somers ATF_TC_HEAD(chflags_failure, tc) 58768e520feSAlan Somers { 58868e520feSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 58968e520feSAlan Somers "chflags(2) call"); 59068e520feSAlan Somers } 59168e520feSAlan Somers 59268e520feSAlan Somers ATF_TC_BODY(chflags_failure, tc) 59368e520feSAlan Somers { 59468e520feSAlan Somers FILE *pipefd = setup(fds, auclass); 59568e520feSAlan Somers /* Failure reason: file does not exist */ 596*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, chflags(errpath, UF_OFFLINE) == -1); 59768e520feSAlan Somers check_audit(fds, failurereg, pipefd); 59868e520feSAlan Somers } 59968e520feSAlan Somers 60068e520feSAlan Somers ATF_TC_CLEANUP(chflags_failure, tc) 60168e520feSAlan Somers { 60268e520feSAlan Somers cleanup(); 60368e520feSAlan Somers } 60468e520feSAlan Somers 60568e520feSAlan Somers 60668e520feSAlan Somers ATF_TC_WITH_CLEANUP(fchflags_success); 60768e520feSAlan Somers ATF_TC_HEAD(fchflags_success, tc) 60868e520feSAlan Somers { 60968e520feSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 61068e520feSAlan Somers "fchflags(2) call"); 61168e520feSAlan Somers } 61268e520feSAlan Somers 61368e520feSAlan Somers ATF_TC_BODY(fchflags_success, tc) 61468e520feSAlan Somers { 61568e520feSAlan Somers pid = getpid(); 61668e520feSAlan Somers snprintf(extregex, sizeof(extregex), "fchflags.*%d.*ret.*success", pid); 61768e520feSAlan Somers /* File needs to exist to call fchflags(2) */ 61868e520feSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 61968e520feSAlan Somers 62068e520feSAlan Somers FILE *pipefd = setup(fds, auclass); 62168e520feSAlan Somers ATF_REQUIRE_EQ(0, fchflags(filedesc, UF_OFFLINE)); 62268e520feSAlan Somers check_audit(fds, extregex, pipefd); 62368e520feSAlan Somers close(filedesc); 62468e520feSAlan Somers } 62568e520feSAlan Somers 62668e520feSAlan Somers ATF_TC_CLEANUP(fchflags_success, tc) 62768e520feSAlan Somers { 62868e520feSAlan Somers cleanup(); 62968e520feSAlan Somers } 63068e520feSAlan Somers 63168e520feSAlan Somers 63268e520feSAlan Somers ATF_TC_WITH_CLEANUP(fchflags_failure); 63368e520feSAlan Somers ATF_TC_HEAD(fchflags_failure, tc) 63468e520feSAlan Somers { 63568e520feSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 63668e520feSAlan Somers "fchflags(2) call"); 63768e520feSAlan Somers } 63868e520feSAlan Somers 63968e520feSAlan Somers ATF_TC_BODY(fchflags_failure, tc) 64068e520feSAlan Somers { 64168e520feSAlan Somers const char *regex = "fchflags.*return,failure : Bad file descriptor"; 64268e520feSAlan Somers FILE *pipefd = setup(fds, auclass); 64368e520feSAlan Somers /* Failure reason: Invalid file descriptor */ 644*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, fchflags(-1, UF_OFFLINE) == -1); 64568e520feSAlan Somers check_audit(fds, regex, pipefd); 64668e520feSAlan Somers } 64768e520feSAlan Somers 64868e520feSAlan Somers ATF_TC_CLEANUP(fchflags_failure, tc) 64968e520feSAlan Somers { 65068e520feSAlan Somers cleanup(); 65168e520feSAlan Somers } 65268e520feSAlan Somers 65368e520feSAlan Somers 65468e520feSAlan Somers ATF_TC_WITH_CLEANUP(lchflags_success); 65568e520feSAlan Somers ATF_TC_HEAD(lchflags_success, tc) 65668e520feSAlan Somers { 65768e520feSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 65868e520feSAlan Somers "lchflags(2) call"); 65968e520feSAlan Somers } 66068e520feSAlan Somers 66168e520feSAlan Somers ATF_TC_BODY(lchflags_success, tc) 66268e520feSAlan Somers { 66368e520feSAlan Somers /* Symbolic link needs to exist to call lchflags(2) */ 66468e520feSAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 66568e520feSAlan Somers FILE *pipefd = setup(fds, auclass); 66668e520feSAlan Somers ATF_REQUIRE_EQ(0, lchflags(path, UF_OFFLINE)); 66768e520feSAlan Somers check_audit(fds, successreg, pipefd); 66868e520feSAlan Somers } 66968e520feSAlan Somers 67068e520feSAlan Somers ATF_TC_CLEANUP(lchflags_success, tc) 67168e520feSAlan Somers { 67268e520feSAlan Somers cleanup(); 67368e520feSAlan Somers } 67468e520feSAlan Somers 67568e520feSAlan Somers 67668e520feSAlan Somers ATF_TC_WITH_CLEANUP(lchflags_failure); 67768e520feSAlan Somers ATF_TC_HEAD(lchflags_failure, tc) 67868e520feSAlan Somers { 67968e520feSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 68068e520feSAlan Somers "lchflags(2) call"); 68168e520feSAlan Somers } 68268e520feSAlan Somers 68368e520feSAlan Somers ATF_TC_BODY(lchflags_failure, tc) 68468e520feSAlan Somers { 68568e520feSAlan Somers FILE *pipefd = setup(fds, auclass); 68668e520feSAlan Somers /* Failure reason: Symbolic link does not exist */ 687*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, lchflags(errpath, UF_OFFLINE) == -1); 68868e520feSAlan Somers check_audit(fds, failurereg, pipefd); 68968e520feSAlan Somers } 69068e520feSAlan Somers 69168e520feSAlan Somers ATF_TC_CLEANUP(lchflags_failure, tc) 69268e520feSAlan Somers { 69368e520feSAlan Somers cleanup(); 69468e520feSAlan Somers } 69568e520feSAlan Somers 69668e520feSAlan Somers 69755cd4523SAlan Somers ATF_TC_WITH_CLEANUP(chflagsat_success); 69855cd4523SAlan Somers ATF_TC_HEAD(chflagsat_success, tc) 69955cd4523SAlan Somers { 70055cd4523SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 70155cd4523SAlan Somers "chflagsat(2) call"); 70255cd4523SAlan Somers } 70355cd4523SAlan Somers 70455cd4523SAlan Somers ATF_TC_BODY(chflagsat_success, tc) 70555cd4523SAlan Somers { 70655cd4523SAlan Somers /* File needs to exist to call chflagsat(2) */ 70755cd4523SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 70855cd4523SAlan Somers FILE *pipefd = setup(fds, auclass); 709cdb9318eSEnji Cooper ATF_REQUIRE_EQ(0, chflagsat(AT_FDCWD, path, UF_OFFLINE, 0)); 71055cd4523SAlan Somers check_audit(fds, successreg, pipefd); 71155cd4523SAlan Somers close(filedesc); 71255cd4523SAlan Somers } 71355cd4523SAlan Somers 71455cd4523SAlan Somers ATF_TC_CLEANUP(chflagsat_success, tc) 71555cd4523SAlan Somers { 71655cd4523SAlan Somers cleanup(); 71755cd4523SAlan Somers } 71855cd4523SAlan Somers 71955cd4523SAlan Somers 72055cd4523SAlan Somers ATF_TC_WITH_CLEANUP(chflagsat_failure); 72155cd4523SAlan Somers ATF_TC_HEAD(chflagsat_failure, tc) 72255cd4523SAlan Somers { 72355cd4523SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 72455cd4523SAlan Somers "chflagsat(2) call"); 72555cd4523SAlan Somers } 72655cd4523SAlan Somers 72755cd4523SAlan Somers ATF_TC_BODY(chflagsat_failure, tc) 72855cd4523SAlan Somers { 72955cd4523SAlan Somers FILE *pipefd = setup(fds, auclass); 73055cd4523SAlan Somers /* Failure reason: file does not exist */ 731*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 732*40407d39SAlex Richardson chflagsat(AT_FDCWD, errpath, UF_OFFLINE, 0) == -1); 73355cd4523SAlan Somers check_audit(fds, failurereg, pipefd); 73455cd4523SAlan Somers } 73555cd4523SAlan Somers 73655cd4523SAlan Somers ATF_TC_CLEANUP(chflagsat_failure, tc) 73755cd4523SAlan Somers { 73855cd4523SAlan Somers cleanup(); 73955cd4523SAlan Somers } 74055cd4523SAlan Somers 74155cd4523SAlan Somers 742d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(utimes_success); 743d1fb351cSAlan Somers ATF_TC_HEAD(utimes_success, tc) 744d1fb351cSAlan Somers { 745d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 746d1fb351cSAlan Somers "utimes(2) call"); 747d1fb351cSAlan Somers } 748d1fb351cSAlan Somers 749d1fb351cSAlan Somers ATF_TC_BODY(utimes_success, tc) 750d1fb351cSAlan Somers { 751d1fb351cSAlan Somers /* File needs to exist to call utimes(2) */ 752d1fb351cSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 753d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 754d1fb351cSAlan Somers ATF_REQUIRE_EQ(0, utimes(path, NULL)); 755d1fb351cSAlan Somers check_audit(fds, successreg, pipefd); 756d1fb351cSAlan Somers close(filedesc); 757d1fb351cSAlan Somers } 758d1fb351cSAlan Somers 759d1fb351cSAlan Somers ATF_TC_CLEANUP(utimes_success, tc) 760d1fb351cSAlan Somers { 761d1fb351cSAlan Somers cleanup(); 762d1fb351cSAlan Somers } 763d1fb351cSAlan Somers 764d1fb351cSAlan Somers 765d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(utimes_failure); 766d1fb351cSAlan Somers ATF_TC_HEAD(utimes_failure, tc) 767d1fb351cSAlan Somers { 768d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 769d1fb351cSAlan Somers "utimes(2) call"); 770d1fb351cSAlan Somers } 771d1fb351cSAlan Somers 772d1fb351cSAlan Somers ATF_TC_BODY(utimes_failure, tc) 773d1fb351cSAlan Somers { 774d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 775d1fb351cSAlan Somers /* Failure reason: file does not exist */ 776*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, utimes(errpath, NULL) == -1); 777d1fb351cSAlan Somers check_audit(fds, failurereg, pipefd); 778d1fb351cSAlan Somers } 779d1fb351cSAlan Somers 780d1fb351cSAlan Somers ATF_TC_CLEANUP(utimes_failure, tc) 781d1fb351cSAlan Somers { 782d1fb351cSAlan Somers cleanup(); 783d1fb351cSAlan Somers } 784d1fb351cSAlan Somers 785d1fb351cSAlan Somers 786d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimes_success); 787d1fb351cSAlan Somers ATF_TC_HEAD(futimes_success, tc) 788d1fb351cSAlan Somers { 789d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 790d1fb351cSAlan Somers "futimes(2) call"); 791d1fb351cSAlan Somers } 792d1fb351cSAlan Somers 793d1fb351cSAlan Somers ATF_TC_BODY(futimes_success, tc) 794d1fb351cSAlan Somers { 795d1fb351cSAlan Somers pid = getpid(); 796d1fb351cSAlan Somers snprintf(extregex, sizeof(extregex), "futimes.*%d.*ret.*success", pid); 797d1fb351cSAlan Somers 798d1fb351cSAlan Somers /* File needs to exist to call futimes(2) */ 799d1fb351cSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 800d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 801d1fb351cSAlan Somers ATF_REQUIRE_EQ(0, futimes(filedesc, NULL)); 802d1fb351cSAlan Somers check_audit(fds, extregex, pipefd); 803d1fb351cSAlan Somers close(filedesc); 804d1fb351cSAlan Somers } 805d1fb351cSAlan Somers 806d1fb351cSAlan Somers ATF_TC_CLEANUP(futimes_success, tc) 807d1fb351cSAlan Somers { 808d1fb351cSAlan Somers cleanup(); 809d1fb351cSAlan Somers } 810d1fb351cSAlan Somers 811d1fb351cSAlan Somers 812d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimes_failure); 813d1fb351cSAlan Somers ATF_TC_HEAD(futimes_failure, tc) 814d1fb351cSAlan Somers { 815d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 816d1fb351cSAlan Somers "futimes(2) call"); 817d1fb351cSAlan Somers } 818d1fb351cSAlan Somers 819d1fb351cSAlan Somers ATF_TC_BODY(futimes_failure, tc) 820d1fb351cSAlan Somers { 821d1fb351cSAlan Somers const char *regex = "futimes.*return,failure : Bad file descriptor"; 822d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 823d1fb351cSAlan Somers /* Failure reason: Invalid file descriptor */ 824*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, futimes(-1, NULL) == -1); 825d1fb351cSAlan Somers check_audit(fds, regex, pipefd); 826d1fb351cSAlan Somers } 827d1fb351cSAlan Somers 828d1fb351cSAlan Somers ATF_TC_CLEANUP(futimes_failure, tc) 829d1fb351cSAlan Somers { 830d1fb351cSAlan Somers cleanup(); 831d1fb351cSAlan Somers } 832d1fb351cSAlan Somers 833d1fb351cSAlan Somers 834d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(lutimes_success); 835d1fb351cSAlan Somers ATF_TC_HEAD(lutimes_success, tc) 836d1fb351cSAlan Somers { 837d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 838d1fb351cSAlan Somers "lutimes(2) call"); 839d1fb351cSAlan Somers } 840d1fb351cSAlan Somers 841d1fb351cSAlan Somers ATF_TC_BODY(lutimes_success, tc) 842d1fb351cSAlan Somers { 843d1fb351cSAlan Somers /* Symbolic link needs to exist to call lutimes(2) */ 844d1fb351cSAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 845d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 846d1fb351cSAlan Somers ATF_REQUIRE_EQ(0, lutimes(path, NULL)); 847d1fb351cSAlan Somers check_audit(fds, successreg, pipefd); 848d1fb351cSAlan Somers } 849d1fb351cSAlan Somers 850d1fb351cSAlan Somers ATF_TC_CLEANUP(lutimes_success, tc) 851d1fb351cSAlan Somers { 852d1fb351cSAlan Somers cleanup(); 853d1fb351cSAlan Somers } 854d1fb351cSAlan Somers 855d1fb351cSAlan Somers 856d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(lutimes_failure); 857d1fb351cSAlan Somers ATF_TC_HEAD(lutimes_failure, tc) 858d1fb351cSAlan Somers { 859d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 860d1fb351cSAlan Somers "lutimes(2) call"); 861d1fb351cSAlan Somers } 862d1fb351cSAlan Somers 863d1fb351cSAlan Somers ATF_TC_BODY(lutimes_failure, tc) 864d1fb351cSAlan Somers { 865d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 866d1fb351cSAlan Somers /* Failure reason: symbolic link does not exist */ 867*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, lutimes(errpath, NULL) == -1); 868d1fb351cSAlan Somers check_audit(fds, failurereg, pipefd); 869d1fb351cSAlan Somers } 870d1fb351cSAlan Somers 871d1fb351cSAlan Somers ATF_TC_CLEANUP(lutimes_failure, tc) 872d1fb351cSAlan Somers { 873d1fb351cSAlan Somers cleanup(); 874d1fb351cSAlan Somers } 875d1fb351cSAlan Somers 876d1fb351cSAlan Somers 877d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimesat_success); 878d1fb351cSAlan Somers ATF_TC_HEAD(futimesat_success, tc) 879d1fb351cSAlan Somers { 880d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 881d1fb351cSAlan Somers "futimesat(2) call"); 882d1fb351cSAlan Somers } 883d1fb351cSAlan Somers 884d1fb351cSAlan Somers ATF_TC_BODY(futimesat_success, tc) 885d1fb351cSAlan Somers { 886d1fb351cSAlan Somers /* File needs to exist to call futimesat(2) */ 887d1fb351cSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 888d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 889d1fb351cSAlan Somers ATF_REQUIRE_EQ(0, futimesat(AT_FDCWD, path, NULL)); 890d1fb351cSAlan Somers check_audit(fds, successreg, pipefd); 891d1fb351cSAlan Somers close(filedesc); 892d1fb351cSAlan Somers } 893d1fb351cSAlan Somers 894d1fb351cSAlan Somers ATF_TC_CLEANUP(futimesat_success, tc) 895d1fb351cSAlan Somers { 896d1fb351cSAlan Somers cleanup(); 897d1fb351cSAlan Somers } 898d1fb351cSAlan Somers 899d1fb351cSAlan Somers 900d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(futimesat_failure); 901d1fb351cSAlan Somers ATF_TC_HEAD(futimesat_failure, tc) 902d1fb351cSAlan Somers { 903d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 904d1fb351cSAlan Somers "futimesat(2) call"); 905d1fb351cSAlan Somers } 906d1fb351cSAlan Somers 907d1fb351cSAlan Somers ATF_TC_BODY(futimesat_failure, tc) 908d1fb351cSAlan Somers { 909d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 910d1fb351cSAlan Somers /* Failure reason: file does not exist */ 911*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, futimesat(AT_FDCWD, errpath, NULL) == -1); 912d1fb351cSAlan Somers check_audit(fds, failurereg, pipefd); 913d1fb351cSAlan Somers } 914d1fb351cSAlan Somers 915d1fb351cSAlan Somers ATF_TC_CLEANUP(futimesat_failure, tc) 916d1fb351cSAlan Somers { 917d1fb351cSAlan Somers cleanup(); 918d1fb351cSAlan Somers } 919d1fb351cSAlan Somers 920d1fb351cSAlan Somers 921d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(mprotect_success); 922d1fb351cSAlan Somers ATF_TC_HEAD(mprotect_success, tc) 923d1fb351cSAlan Somers { 924d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 925d1fb351cSAlan Somers "mprotect(2) call"); 926d1fb351cSAlan Somers } 927d1fb351cSAlan Somers 928d1fb351cSAlan Somers ATF_TC_BODY(mprotect_success, tc) 929d1fb351cSAlan Somers { 930d1fb351cSAlan Somers pid = getpid(); 931d1fb351cSAlan Somers snprintf(extregex, sizeof(extregex), "mprotect.*%d.*ret.*success", pid); 932d1fb351cSAlan Somers 933d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 934d1fb351cSAlan Somers ATF_REQUIRE_EQ(0, mprotect(NULL, 0, PROT_NONE)); 935d1fb351cSAlan Somers check_audit(fds, extregex, pipefd); 936d1fb351cSAlan Somers } 937d1fb351cSAlan Somers 938d1fb351cSAlan Somers ATF_TC_CLEANUP(mprotect_success, tc) 939d1fb351cSAlan Somers { 940d1fb351cSAlan Somers cleanup(); 941d1fb351cSAlan Somers } 942d1fb351cSAlan Somers 943d1fb351cSAlan Somers 944d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(mprotect_failure); 945d1fb351cSAlan Somers ATF_TC_HEAD(mprotect_failure, tc) 946d1fb351cSAlan Somers { 947d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 948d1fb351cSAlan Somers "mprotect(2) call"); 949d1fb351cSAlan Somers } 950d1fb351cSAlan Somers 951d1fb351cSAlan Somers ATF_TC_BODY(mprotect_failure, tc) 952d1fb351cSAlan Somers { 953d1fb351cSAlan Somers const char *regex = "mprotect.*return,failure : Invalid argument"; 954d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 955*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EINVAL, 956*40407d39SAlex Richardson mprotect((void *)SIZE_MAX, -1, PROT_NONE) == -1); 957d1fb351cSAlan Somers check_audit(fds, regex, pipefd); 958d1fb351cSAlan Somers } 959d1fb351cSAlan Somers 960d1fb351cSAlan Somers ATF_TC_CLEANUP(mprotect_failure, tc) 961d1fb351cSAlan Somers { 962d1fb351cSAlan Somers cleanup(); 963d1fb351cSAlan Somers } 964d1fb351cSAlan Somers 965d1fb351cSAlan Somers /* 966d1fb351cSAlan Somers * undelete(2) only works on whiteout files in union file system. Hence, no 967d1fb351cSAlan Somers * test case for successful invocation. 968d1fb351cSAlan Somers */ 969d1fb351cSAlan Somers 970d1fb351cSAlan Somers ATF_TC_WITH_CLEANUP(undelete_failure); 971d1fb351cSAlan Somers ATF_TC_HEAD(undelete_failure, tc) 972d1fb351cSAlan Somers { 973d1fb351cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 974d1fb351cSAlan Somers "undelete(2) call"); 975d1fb351cSAlan Somers } 976d1fb351cSAlan Somers 977d1fb351cSAlan Somers ATF_TC_BODY(undelete_failure, tc) 978d1fb351cSAlan Somers { 979d1fb351cSAlan Somers pid = getpid(); 980d1fb351cSAlan Somers snprintf(extregex, sizeof(extregex), "undelete.*%d.*ret.*failure", pid); 981d1fb351cSAlan Somers 982d1fb351cSAlan Somers FILE *pipefd = setup(fds, auclass); 983d1fb351cSAlan Somers /* Failure reason: File does not exist */ 984*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, undelete(errpath) == -1); 985d1fb351cSAlan Somers check_audit(fds, extregex, pipefd); 986d1fb351cSAlan Somers } 987d1fb351cSAlan Somers 988d1fb351cSAlan Somers ATF_TC_CLEANUP(undelete_failure, tc) 989d1fb351cSAlan Somers { 990d1fb351cSAlan Somers cleanup(); 991d1fb351cSAlan Somers } 992d1fb351cSAlan Somers 993d1fb351cSAlan Somers 994844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_file_success); 995844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_file_success, tc) 996844fc5ebSAlan Somers { 997844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 998844fc5ebSAlan Somers "extattr_set_file(2) call"); 999844fc5ebSAlan Somers } 1000844fc5ebSAlan Somers 1001844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_file_success, tc) 1002844fc5ebSAlan Somers { 1003844fc5ebSAlan Somers /* File needs to exist to call extattr_set_file(2) */ 1004844fc5ebSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 1005*40407d39SAlex Richardson skip_if_extattr_not_supported(path); 1006*40407d39SAlex Richardson 1007844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1008844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1009844fc5ebSAlan Somers "extattr_set_file.*%s.*%s.*return,success", path, name); 1010844fc5ebSAlan Somers 1011844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1012*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_file(path, 1013844fc5ebSAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 1014844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1015844fc5ebSAlan Somers close(filedesc); 1016844fc5ebSAlan Somers } 1017844fc5ebSAlan Somers 1018844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_file_success, tc) 1019844fc5ebSAlan Somers { 1020844fc5ebSAlan Somers cleanup(); 1021844fc5ebSAlan Somers } 1022844fc5ebSAlan Somers 1023844fc5ebSAlan Somers 1024844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_file_failure); 1025844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_file_failure, tc) 1026844fc5ebSAlan Somers { 1027844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1028844fc5ebSAlan Somers "extattr_set_file(2) call"); 1029844fc5ebSAlan Somers } 1030844fc5ebSAlan Somers 1031844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_file_failure, tc) 1032844fc5ebSAlan Somers { 1033844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1034844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1035844fc5ebSAlan Somers "extattr_set_file.*%s.*%s.*failure", path, name); 1036844fc5ebSAlan Somers 1037844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1038844fc5ebSAlan Somers /* Failure reason: file does not exist */ 1039*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 1040*40407d39SAlex Richardson extattr_set_file(path, EXTATTR_NAMESPACE_USER, name, NULL, 0) == 1041*40407d39SAlex Richardson -1); 1042844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1043844fc5ebSAlan Somers } 1044844fc5ebSAlan Somers 1045844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_file_failure, tc) 1046844fc5ebSAlan Somers { 1047844fc5ebSAlan Somers cleanup(); 1048844fc5ebSAlan Somers } 1049844fc5ebSAlan Somers 1050844fc5ebSAlan Somers 1051844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_fd_success); 1052844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_fd_success, tc) 1053844fc5ebSAlan Somers { 1054844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 1055844fc5ebSAlan Somers "extattr_set_fd(2) call"); 1056844fc5ebSAlan Somers } 1057844fc5ebSAlan Somers 1058844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_fd_success, tc) 1059844fc5ebSAlan Somers { 1060844fc5ebSAlan Somers /* File needs to exist to call extattr_set_fd(2) */ 1061844fc5ebSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 1062*40407d39SAlex Richardson skip_if_extattr_not_supported(path); 1063844fc5ebSAlan Somers 1064844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1065844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1066844fc5ebSAlan Somers "extattr_set_fd.*%s.*return,success", name); 1067844fc5ebSAlan Somers 1068844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1069*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_fd(filedesc, 1070844fc5ebSAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 1071844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1072844fc5ebSAlan Somers close(filedesc); 1073844fc5ebSAlan Somers } 1074844fc5ebSAlan Somers 1075844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_fd_success, tc) 1076844fc5ebSAlan Somers { 1077844fc5ebSAlan Somers cleanup(); 1078844fc5ebSAlan Somers } 1079844fc5ebSAlan Somers 1080844fc5ebSAlan Somers 1081844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_fd_failure); 1082844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_fd_failure, tc) 1083844fc5ebSAlan Somers { 1084844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1085844fc5ebSAlan Somers "extattr_set_fd(2) call"); 1086844fc5ebSAlan Somers } 1087844fc5ebSAlan Somers 1088844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_fd_failure, tc) 1089844fc5ebSAlan Somers { 1090844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1091844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1092844fc5ebSAlan Somers "extattr_set_fd.*%s.*return,failure : Bad file descriptor", name); 1093844fc5ebSAlan Somers 1094844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1095844fc5ebSAlan Somers /* Failure reason: Invalid file descriptor */ 1096*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, 1097*40407d39SAlex Richardson extattr_set_fd(-1, EXTATTR_NAMESPACE_USER, name, NULL, 0) == -1); 1098844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1099844fc5ebSAlan Somers } 1100844fc5ebSAlan Somers 1101844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_fd_failure, tc) 1102844fc5ebSAlan Somers { 1103844fc5ebSAlan Somers cleanup(); 1104844fc5ebSAlan Somers } 1105844fc5ebSAlan Somers 1106844fc5ebSAlan Somers 1107844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_link_success); 1108844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_link_success, tc) 1109844fc5ebSAlan Somers { 1110844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 1111844fc5ebSAlan Somers "extattr_set_link(2) call"); 1112844fc5ebSAlan Somers } 1113844fc5ebSAlan Somers 1114844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_link_success, tc) 1115844fc5ebSAlan Somers { 1116844fc5ebSAlan Somers /* Symbolic link needs to exist to call extattr_set_link(2) */ 1117844fc5ebSAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 1118*40407d39SAlex Richardson skip_if_extattr_not_supported("."); 1119*40407d39SAlex Richardson 1120844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1121844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1122844fc5ebSAlan Somers "extattr_set_link.*%s.*%s.*return,success", path, name); 1123844fc5ebSAlan Somers 1124844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1125*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_link(path, 1126844fc5ebSAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 1127844fc5ebSAlan Somers 1128844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1129844fc5ebSAlan Somers } 1130844fc5ebSAlan Somers 1131844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_link_success, tc) 1132844fc5ebSAlan Somers { 1133844fc5ebSAlan Somers cleanup(); 1134844fc5ebSAlan Somers } 1135844fc5ebSAlan Somers 1136844fc5ebSAlan Somers 1137844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_set_link_failure); 1138844fc5ebSAlan Somers ATF_TC_HEAD(extattr_set_link_failure, tc) 1139844fc5ebSAlan Somers { 1140844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1141844fc5ebSAlan Somers "extattr_set_link(2) call"); 1142844fc5ebSAlan Somers } 1143844fc5ebSAlan Somers 1144844fc5ebSAlan Somers ATF_TC_BODY(extattr_set_link_failure, tc) 1145844fc5ebSAlan Somers { 1146844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1147844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1148844fc5ebSAlan Somers "extattr_set_link.*%s.*%s.*failure", path, name); 1149844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1150844fc5ebSAlan Somers /* Failure reason: symbolic link does not exist */ 1151*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 1152*40407d39SAlex Richardson extattr_set_link(path, EXTATTR_NAMESPACE_USER, name, NULL, 0) == 1153*40407d39SAlex Richardson -1); 1154844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1155844fc5ebSAlan Somers } 1156844fc5ebSAlan Somers 1157844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_set_link_failure, tc) 1158844fc5ebSAlan Somers { 1159844fc5ebSAlan Somers cleanup(); 1160844fc5ebSAlan Somers } 1161844fc5ebSAlan Somers 1162844fc5ebSAlan Somers 1163844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_file_success); 1164844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_file_success, tc) 1165844fc5ebSAlan Somers { 1166844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 1167844fc5ebSAlan Somers "extattr_delete_file(2) call"); 1168844fc5ebSAlan Somers } 1169844fc5ebSAlan Somers 1170844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_file_success, tc) 1171844fc5ebSAlan Somers { 1172844fc5ebSAlan Somers /* File needs to exist to call extattr_delete_file(2) */ 1173844fc5ebSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 1174*40407d39SAlex Richardson skip_if_extattr_not_supported(path); 1175*40407d39SAlex Richardson 1176*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_file(path, 1177844fc5ebSAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 1178844fc5ebSAlan Somers 1179844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1180*40407d39SAlex Richardson retval = REQUIRE_EXTATTR_SUCCESS( 1181*40407d39SAlex Richardson extattr_delete_file(path, EXTATTR_NAMESPACE_USER, name)); 1182844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1183844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1184844fc5ebSAlan Somers "extattr_delete_file.*%s.*return,success,%d", path, retval); 1185844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1186844fc5ebSAlan Somers close(filedesc); 1187844fc5ebSAlan Somers } 1188844fc5ebSAlan Somers 1189844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_file_success, tc) 1190844fc5ebSAlan Somers { 1191844fc5ebSAlan Somers cleanup(); 1192844fc5ebSAlan Somers } 1193844fc5ebSAlan Somers 1194844fc5ebSAlan Somers 1195844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_file_failure); 1196844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_file_failure, tc) 1197844fc5ebSAlan Somers { 1198844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1199844fc5ebSAlan Somers "extattr_delete_file(2) call"); 1200844fc5ebSAlan Somers } 1201844fc5ebSAlan Somers 1202844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_file_failure, tc) 1203844fc5ebSAlan Somers { 1204844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1205844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1206844fc5ebSAlan Somers "extattr_delete_file.*%s.*return,failure", path); 1207844fc5ebSAlan Somers 1208844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1209844fc5ebSAlan Somers /* Failure reason: file does not exist */ 1210*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 1211*40407d39SAlex Richardson extattr_delete_file(path, EXTATTR_NAMESPACE_USER, name) == -1); 1212844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1213844fc5ebSAlan Somers } 1214844fc5ebSAlan Somers 1215844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_file_failure, tc) 1216844fc5ebSAlan Somers { 1217844fc5ebSAlan Somers cleanup(); 1218844fc5ebSAlan Somers } 1219844fc5ebSAlan Somers 1220844fc5ebSAlan Somers 1221844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_fd_success); 1222844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_fd_success, tc) 1223844fc5ebSAlan Somers { 1224844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 1225844fc5ebSAlan Somers "extattr_delete_fd(2) call"); 1226844fc5ebSAlan Somers } 1227844fc5ebSAlan Somers 1228844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_fd_success, tc) 1229844fc5ebSAlan Somers { 1230844fc5ebSAlan Somers /* File needs to exist to call extattr_delete_fd(2) */ 1231844fc5ebSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 1232*40407d39SAlex Richardson skip_if_extattr_not_supported(path); 1233*40407d39SAlex Richardson 1234*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_file(path, 1235844fc5ebSAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 1236844fc5ebSAlan Somers 1237844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1238*40407d39SAlex Richardson retval = REQUIRE_EXTATTR_SUCCESS(extattr_delete_fd(filedesc, 1239*40407d39SAlex Richardson EXTATTR_NAMESPACE_USER, name)); 1240844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1241844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1242844fc5ebSAlan Somers "extattr_delete_fd.*return,success,%d", retval); 1243844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1244844fc5ebSAlan Somers close(filedesc); 1245844fc5ebSAlan Somers } 1246844fc5ebSAlan Somers 1247844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_fd_success, tc) 1248844fc5ebSAlan Somers { 1249844fc5ebSAlan Somers cleanup(); 1250844fc5ebSAlan Somers } 1251844fc5ebSAlan Somers 1252844fc5ebSAlan Somers 1253844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_fd_failure); 1254844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_fd_failure, tc) 1255844fc5ebSAlan Somers { 1256844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1257844fc5ebSAlan Somers "extattr_delete_fd(2) call"); 1258844fc5ebSAlan Somers } 1259844fc5ebSAlan Somers 1260844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_fd_failure, tc) 1261844fc5ebSAlan Somers { 1262844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1263844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1264844fc5ebSAlan Somers "extattr_delete_fd.*return,failure : Bad file descriptor"); 1265844fc5ebSAlan Somers 1266844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1267844fc5ebSAlan Somers /* Failure reason: Invalid file descriptor */ 1268*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, 1269*40407d39SAlex Richardson extattr_delete_fd(-1, EXTATTR_NAMESPACE_USER, name) == -1); 1270844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1271844fc5ebSAlan Somers } 1272844fc5ebSAlan Somers 1273844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_fd_failure, tc) 1274844fc5ebSAlan Somers { 1275844fc5ebSAlan Somers cleanup(); 1276844fc5ebSAlan Somers } 1277844fc5ebSAlan Somers 1278844fc5ebSAlan Somers 1279844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_link_success); 1280844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_link_success, tc) 1281844fc5ebSAlan Somers { 1282844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 1283844fc5ebSAlan Somers "extattr_delete_link(2) call"); 1284844fc5ebSAlan Somers } 1285844fc5ebSAlan Somers 1286844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_link_success, tc) 1287844fc5ebSAlan Somers { 1288844fc5ebSAlan Somers /* Symbolic link needs to exist to call extattr_delete_link(2) */ 1289844fc5ebSAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 1290*40407d39SAlex Richardson skip_if_extattr_not_supported("."); 1291*40407d39SAlex Richardson 1292*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), extattr_set_link(path, 1293844fc5ebSAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 1294844fc5ebSAlan Somers 1295844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1296*40407d39SAlex Richardson retval = REQUIRE_EXTATTR_SUCCESS(extattr_delete_link(path, 1297*40407d39SAlex Richardson EXTATTR_NAMESPACE_USER, name)); 1298844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1299844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1300844fc5ebSAlan Somers "extattr_delete_link.*%s.*return,success,%d", path, retval); 1301844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1302844fc5ebSAlan Somers } 1303844fc5ebSAlan Somers 1304844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_link_success, tc) 1305844fc5ebSAlan Somers { 1306844fc5ebSAlan Somers cleanup(); 1307844fc5ebSAlan Somers } 1308844fc5ebSAlan Somers 1309844fc5ebSAlan Somers 1310844fc5ebSAlan Somers ATF_TC_WITH_CLEANUP(extattr_delete_link_failure); 1311844fc5ebSAlan Somers ATF_TC_HEAD(extattr_delete_link_failure, tc) 1312844fc5ebSAlan Somers { 1313844fc5ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1314844fc5ebSAlan Somers "extattr_delete_link(2) call"); 1315844fc5ebSAlan Somers } 1316844fc5ebSAlan Somers 1317844fc5ebSAlan Somers ATF_TC_BODY(extattr_delete_link_failure, tc) 1318844fc5ebSAlan Somers { 1319844fc5ebSAlan Somers /* Prepare the regex to be checked in the audit record */ 1320844fc5ebSAlan Somers snprintf(extregex, sizeof(extregex), 1321844fc5ebSAlan Somers "extattr_delete_link.*%s.*failure", path); 1322844fc5ebSAlan Somers FILE *pipefd = setup(fds, auclass); 1323844fc5ebSAlan Somers /* Failure reason: symbolic link does not exist */ 1324*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 1325*40407d39SAlex Richardson extattr_delete_link(path, EXTATTR_NAMESPACE_USER, name) == -1); 1326844fc5ebSAlan Somers check_audit(fds, extregex, pipefd); 1327844fc5ebSAlan Somers } 1328844fc5ebSAlan Somers 1329844fc5ebSAlan Somers ATF_TC_CLEANUP(extattr_delete_link_failure, tc) 1330844fc5ebSAlan Somers { 1331844fc5ebSAlan Somers cleanup(); 1332844fc5ebSAlan Somers } 1333844fc5ebSAlan Somers 1334844fc5ebSAlan Somers 13356d203d2dSAlan Somers ATF_TP_ADD_TCS(tp) 13366d203d2dSAlan Somers { 13376d203d2dSAlan Somers ATF_TP_ADD_TC(tp, flock_success); 13386d203d2dSAlan Somers ATF_TP_ADD_TC(tp, flock_failure); 13396d203d2dSAlan Somers ATF_TP_ADD_TC(tp, fcntl_success); 13406d203d2dSAlan Somers ATF_TP_ADD_TC(tp, fcntl_failure); 13416d203d2dSAlan Somers ATF_TP_ADD_TC(tp, fsync_success); 13426d203d2dSAlan Somers ATF_TP_ADD_TC(tp, fsync_failure); 13436d203d2dSAlan Somers 134428845213SAlan Somers ATF_TP_ADD_TC(tp, chmod_success); 134528845213SAlan Somers ATF_TP_ADD_TC(tp, chmod_failure); 134628845213SAlan Somers ATF_TP_ADD_TC(tp, fchmod_success); 134728845213SAlan Somers ATF_TP_ADD_TC(tp, fchmod_failure); 134828845213SAlan Somers ATF_TP_ADD_TC(tp, lchmod_success); 134928845213SAlan Somers ATF_TP_ADD_TC(tp, lchmod_failure); 135028845213SAlan Somers ATF_TP_ADD_TC(tp, fchmodat_success); 135128845213SAlan Somers ATF_TP_ADD_TC(tp, fchmodat_failure); 135228845213SAlan Somers 13535c9a4738SAlan Somers ATF_TP_ADD_TC(tp, chown_success); 13545c9a4738SAlan Somers ATF_TP_ADD_TC(tp, chown_failure); 13555c9a4738SAlan Somers ATF_TP_ADD_TC(tp, fchown_success); 13565c9a4738SAlan Somers ATF_TP_ADD_TC(tp, fchown_failure); 13575c9a4738SAlan Somers ATF_TP_ADD_TC(tp, lchown_success); 13585c9a4738SAlan Somers ATF_TP_ADD_TC(tp, lchown_failure); 13595c9a4738SAlan Somers ATF_TP_ADD_TC(tp, fchownat_success); 13605c9a4738SAlan Somers ATF_TP_ADD_TC(tp, fchownat_failure); 13615c9a4738SAlan Somers 136268e520feSAlan Somers ATF_TP_ADD_TC(tp, chflags_success); 136368e520feSAlan Somers ATF_TP_ADD_TC(tp, chflags_failure); 136468e520feSAlan Somers ATF_TP_ADD_TC(tp, fchflags_success); 136568e520feSAlan Somers ATF_TP_ADD_TC(tp, fchflags_failure); 136668e520feSAlan Somers ATF_TP_ADD_TC(tp, lchflags_success); 136768e520feSAlan Somers ATF_TP_ADD_TC(tp, lchflags_failure); 136855cd4523SAlan Somers ATF_TP_ADD_TC(tp, chflagsat_success); 136955cd4523SAlan Somers ATF_TP_ADD_TC(tp, chflagsat_failure); 137068e520feSAlan Somers 1371d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, utimes_success); 1372d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, utimes_failure); 1373d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, futimes_success); 1374d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, futimes_failure); 1375d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, lutimes_success); 1376d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, lutimes_failure); 1377d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, futimesat_success); 1378d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, futimesat_failure); 1379d1fb351cSAlan Somers 1380d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, mprotect_success); 1381d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, mprotect_failure); 1382d1fb351cSAlan Somers ATF_TP_ADD_TC(tp, undelete_failure); 1383d1fb351cSAlan Somers 1384844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_set_file_success); 1385844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_set_file_failure); 1386844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_set_fd_success); 1387844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_set_fd_failure); 1388844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_set_link_success); 1389844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_set_link_failure); 1390844fc5ebSAlan Somers 1391844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_delete_file_success); 1392844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_delete_file_failure); 1393844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_delete_fd_success); 1394844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_delete_fd_failure); 1395844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_delete_link_success); 1396844fc5ebSAlan Somers ATF_TP_ADD_TC(tp, extattr_delete_link_failure); 1397844fc5ebSAlan Somers 13986d203d2dSAlan Somers return (atf_no_error()); 13996d203d2dSAlan Somers } 1400