1f86d6517SAlan Somers /*- 2f86d6517SAlan Somers * Copyright (c) 2018 Aniket Pandey 3f86d6517SAlan Somers * 4f86d6517SAlan Somers * Redistribution and use in source and binary forms, with or without 5f86d6517SAlan Somers * modification, are permitted provided that the following conditions 6f86d6517SAlan Somers * are met: 7f86d6517SAlan Somers * 1. Redistributions of source code must retain the above copyright 8f86d6517SAlan Somers * notice, this list of conditions and the following disclaimer. 9f86d6517SAlan Somers * 2. Redistributions in binary form must reproduce the above copyright 10f86d6517SAlan Somers * notice, this list of conditions and the following disclaimer in the 11f86d6517SAlan Somers * documentation and/or other materials provided with the distribution. 12f86d6517SAlan Somers * 13f86d6517SAlan Somers * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14f86d6517SAlan Somers * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15f86d6517SAlan Somers * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16f86d6517SAlan Somers * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17f86d6517SAlan Somers * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18f86d6517SAlan Somers * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19f86d6517SAlan Somers * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 20f86d6517SAlan Somers * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21f86d6517SAlan Somers * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22f86d6517SAlan Somers * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23f86d6517SAlan Somers * SUCH DAMAGE. 24f86d6517SAlan Somers * 25f86d6517SAlan Somers * $FreeBSD$ 26f86d6517SAlan Somers */ 27f86d6517SAlan Somers 28ae19b2efSAlan Somers #include <sys/param.h> 29ae19b2efSAlan Somers #include <sys/ucred.h> 30ae19b2efSAlan Somers #include <sys/mount.h> 31f86d6517SAlan Somers #include <sys/stat.h> 32f86d6517SAlan Somers #include <sys/syscall.h> 33f86d6517SAlan Somers 34f86d6517SAlan Somers #include <atf-c.h> 35f86d6517SAlan Somers #include <fcntl.h> 36f86d6517SAlan Somers #include <unistd.h> 37f86d6517SAlan Somers 38f86d6517SAlan Somers #include "utils.h" 39f86d6517SAlan Somers 40f86d6517SAlan Somers static struct pollfd fds[1]; 41f86d6517SAlan Somers static mode_t mode = 0777; 42ae19b2efSAlan Somers static pid_t pid; 43a56867b8SAlan Somers static fhandle_t fht; 44a56867b8SAlan Somers static int filedesc, fhdesc; 45f86d6517SAlan Somers static char extregex[80]; 46f86d6517SAlan Somers static struct stat statbuff; 47ae19b2efSAlan Somers static struct statfs statfsbuff; 48f86d6517SAlan Somers static const char *auclass = "fa"; 49f86d6517SAlan Somers static const char *path = "fileforaudit"; 50f86d6517SAlan Somers static const char *errpath = "dirdoesnotexist/fileforaudit"; 51f86d6517SAlan Somers static const char *successreg = "fileforaudit.*return,success"; 52f86d6517SAlan Somers static const char *failurereg = "fileforaudit.*return,failure"; 53f86d6517SAlan Somers 54f86d6517SAlan Somers 55f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(stat_success); 56f86d6517SAlan Somers ATF_TC_HEAD(stat_success, tc) 57f86d6517SAlan Somers { 58f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 59f86d6517SAlan Somers "stat(2) call"); 60f86d6517SAlan Somers } 61f86d6517SAlan Somers 62f86d6517SAlan Somers ATF_TC_BODY(stat_success, tc) 63f86d6517SAlan Somers { 64f86d6517SAlan Somers /* File needs to exist to call stat(2) */ 65b13a70d5SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 66f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 67f86d6517SAlan Somers ATF_REQUIRE_EQ(0, stat(path, &statbuff)); 68f86d6517SAlan Somers check_audit(fds, successreg, pipefd); 69b13a70d5SAlan Somers close(filedesc); 70f86d6517SAlan Somers } 71f86d6517SAlan Somers 72f86d6517SAlan Somers ATF_TC_CLEANUP(stat_success, tc) 73f86d6517SAlan Somers { 74f86d6517SAlan Somers cleanup(); 75f86d6517SAlan Somers } 76f86d6517SAlan Somers 77f86d6517SAlan Somers 78f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(stat_failure); 79f86d6517SAlan Somers ATF_TC_HEAD(stat_failure, tc) 80f86d6517SAlan Somers { 81f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 82f86d6517SAlan Somers "stat(2) call"); 83f86d6517SAlan Somers } 84f86d6517SAlan Somers 85f86d6517SAlan Somers ATF_TC_BODY(stat_failure, tc) 86f86d6517SAlan Somers { 87f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 88f86d6517SAlan Somers /* Failure reason: file does not exist */ 89f86d6517SAlan Somers ATF_REQUIRE_EQ(-1, stat(errpath, &statbuff)); 90f86d6517SAlan Somers check_audit(fds, failurereg, pipefd); 91f86d6517SAlan Somers } 92f86d6517SAlan Somers 93f86d6517SAlan Somers ATF_TC_CLEANUP(stat_failure, tc) 94f86d6517SAlan Somers { 95f86d6517SAlan Somers cleanup(); 96f86d6517SAlan Somers } 97f86d6517SAlan Somers 98f86d6517SAlan Somers 99f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(lstat_success); 100f86d6517SAlan Somers ATF_TC_HEAD(lstat_success, tc) 101f86d6517SAlan Somers { 102f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 103f86d6517SAlan Somers "lstat(2) call"); 104f86d6517SAlan Somers } 105f86d6517SAlan Somers 106f86d6517SAlan Somers ATF_TC_BODY(lstat_success, tc) 107f86d6517SAlan Somers { 108f86d6517SAlan Somers /* Symbolic link needs to exist to call lstat(2) */ 109f86d6517SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 110f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 111f86d6517SAlan Somers ATF_REQUIRE_EQ(0, lstat(path, &statbuff)); 112f86d6517SAlan Somers check_audit(fds, successreg, pipefd); 113f86d6517SAlan Somers } 114f86d6517SAlan Somers 115f86d6517SAlan Somers ATF_TC_CLEANUP(lstat_success, tc) 116f86d6517SAlan Somers { 117f86d6517SAlan Somers cleanup(); 118f86d6517SAlan Somers } 119f86d6517SAlan Somers 120f86d6517SAlan Somers 121f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(lstat_failure); 122f86d6517SAlan Somers ATF_TC_HEAD(lstat_failure, tc) 123f86d6517SAlan Somers { 124f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 125f86d6517SAlan Somers "lstat(2) call"); 126f86d6517SAlan Somers } 127f86d6517SAlan Somers 128f86d6517SAlan Somers ATF_TC_BODY(lstat_failure, tc) 129f86d6517SAlan Somers { 130f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 131f86d6517SAlan Somers /* Failure reason: symbolic link does not exist */ 132f86d6517SAlan Somers ATF_REQUIRE_EQ(-1, lstat(errpath, &statbuff)); 133f86d6517SAlan Somers check_audit(fds, failurereg, pipefd); 134f86d6517SAlan Somers } 135f86d6517SAlan Somers 136f86d6517SAlan Somers ATF_TC_CLEANUP(lstat_failure, tc) 137f86d6517SAlan Somers { 138f86d6517SAlan Somers cleanup(); 139f86d6517SAlan Somers } 140f86d6517SAlan Somers 141f86d6517SAlan Somers 142f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstat_success); 143f86d6517SAlan Somers ATF_TC_HEAD(fstat_success, tc) 144f86d6517SAlan Somers { 145f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 146f86d6517SAlan Somers "fstat(2) call"); 147f86d6517SAlan Somers } 148f86d6517SAlan Somers 149f86d6517SAlan Somers ATF_TC_BODY(fstat_success, tc) 150f86d6517SAlan Somers { 151f86d6517SAlan Somers /* File needs to exist to call fstat(2) */ 152f86d6517SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT | O_RDWR, mode)) != -1); 153f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 154f86d6517SAlan Somers ATF_REQUIRE_EQ(0, fstat(filedesc, &statbuff)); 155f86d6517SAlan Somers 156f86d6517SAlan Somers snprintf(extregex, sizeof(extregex), 157f86d6517SAlan Somers "fstat.*%jd.*return,success", (intmax_t)statbuff.st_ino); 158f86d6517SAlan Somers check_audit(fds, extregex, pipefd); 159b13a70d5SAlan Somers close(filedesc); 160f86d6517SAlan Somers } 161f86d6517SAlan Somers 162f86d6517SAlan Somers ATF_TC_CLEANUP(fstat_success, tc) 163f86d6517SAlan Somers { 164f86d6517SAlan Somers cleanup(); 165f86d6517SAlan Somers } 166f86d6517SAlan Somers 167f86d6517SAlan Somers 168f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstat_failure); 169f86d6517SAlan Somers ATF_TC_HEAD(fstat_failure, tc) 170f86d6517SAlan Somers { 171f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 172f86d6517SAlan Somers "fstat(2) call"); 173f86d6517SAlan Somers } 174f86d6517SAlan Somers 175f86d6517SAlan Somers ATF_TC_BODY(fstat_failure, tc) 176f86d6517SAlan Somers { 177f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 178f86d6517SAlan Somers const char *regex = "fstat.*return,failure : Bad file descriptor"; 179f86d6517SAlan Somers /* Failure reason: bad file descriptor */ 180f86d6517SAlan Somers ATF_REQUIRE_EQ(-1, fstat(-1, &statbuff)); 181f86d6517SAlan Somers check_audit(fds, regex, pipefd); 182f86d6517SAlan Somers } 183f86d6517SAlan Somers 184f86d6517SAlan Somers ATF_TC_CLEANUP(fstat_failure, tc) 185f86d6517SAlan Somers { 186f86d6517SAlan Somers cleanup(); 187f86d6517SAlan Somers } 188f86d6517SAlan Somers 189f86d6517SAlan Somers 190f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstatat_success); 191f86d6517SAlan Somers ATF_TC_HEAD(fstatat_success, tc) 192f86d6517SAlan Somers { 193f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 194f86d6517SAlan Somers "fstatat(2) call"); 195f86d6517SAlan Somers } 196f86d6517SAlan Somers 197f86d6517SAlan Somers ATF_TC_BODY(fstatat_success, tc) 198f86d6517SAlan Somers { 199f86d6517SAlan Somers /* File or Symbolic link needs to exist to call lstat(2) */ 200f86d6517SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 201f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 202f86d6517SAlan Somers ATF_REQUIRE_EQ(0, fstatat(AT_FDCWD, path, &statbuff, 203f86d6517SAlan Somers AT_SYMLINK_NOFOLLOW)); 204f86d6517SAlan Somers check_audit(fds, successreg, pipefd); 205f86d6517SAlan Somers } 206f86d6517SAlan Somers 207f86d6517SAlan Somers ATF_TC_CLEANUP(fstatat_success, tc) 208f86d6517SAlan Somers { 209f86d6517SAlan Somers cleanup(); 210f86d6517SAlan Somers } 211f86d6517SAlan Somers 212f86d6517SAlan Somers 213f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstatat_failure); 214f86d6517SAlan Somers ATF_TC_HEAD(fstatat_failure, tc) 215f86d6517SAlan Somers { 216f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 217f86d6517SAlan Somers "fstatat(2) call"); 218f86d6517SAlan Somers } 219f86d6517SAlan Somers 220f86d6517SAlan Somers ATF_TC_BODY(fstatat_failure, tc) 221f86d6517SAlan Somers { 222f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 223f86d6517SAlan Somers /* Failure reason: symbolic link does not exist */ 224f86d6517SAlan Somers ATF_REQUIRE_EQ(-1, fstatat(AT_FDCWD, path, &statbuff, 225f86d6517SAlan Somers AT_SYMLINK_NOFOLLOW)); 226f86d6517SAlan Somers check_audit(fds, failurereg, pipefd); 227f86d6517SAlan Somers } 228f86d6517SAlan Somers 229f86d6517SAlan Somers ATF_TC_CLEANUP(fstatat_failure, tc) 230f86d6517SAlan Somers { 231f86d6517SAlan Somers cleanup(); 232f86d6517SAlan Somers } 233f86d6517SAlan Somers 234f86d6517SAlan Somers 235ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(statfs_success); 236ae19b2efSAlan Somers ATF_TC_HEAD(statfs_success, tc) 237ae19b2efSAlan Somers { 238ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 239ae19b2efSAlan Somers "statfs(2) call"); 240ae19b2efSAlan Somers } 241ae19b2efSAlan Somers 242ae19b2efSAlan Somers ATF_TC_BODY(statfs_success, tc) 243ae19b2efSAlan Somers { 244ae19b2efSAlan Somers /* File needs to exist to call statfs(2) */ 245ae19b2efSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 246ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 247ae19b2efSAlan Somers ATF_REQUIRE_EQ(0, statfs(path, &statfsbuff)); 248ae19b2efSAlan Somers check_audit(fds, successreg, pipefd); 249ae19b2efSAlan Somers close(filedesc); 250ae19b2efSAlan Somers } 251ae19b2efSAlan Somers 252ae19b2efSAlan Somers ATF_TC_CLEANUP(statfs_success, tc) 253ae19b2efSAlan Somers { 254ae19b2efSAlan Somers cleanup(); 255ae19b2efSAlan Somers } 256ae19b2efSAlan Somers 257ae19b2efSAlan Somers 258ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(statfs_failure); 259ae19b2efSAlan Somers ATF_TC_HEAD(statfs_failure, tc) 260ae19b2efSAlan Somers { 261ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 262ae19b2efSAlan Somers "statfs(2) call"); 263ae19b2efSAlan Somers } 264ae19b2efSAlan Somers 265ae19b2efSAlan Somers ATF_TC_BODY(statfs_failure, tc) 266ae19b2efSAlan Somers { 267ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 268ae19b2efSAlan Somers /* Failure reason: file does not exist */ 269ae19b2efSAlan Somers ATF_REQUIRE_EQ(-1, statfs(errpath, &statfsbuff)); 270ae19b2efSAlan Somers check_audit(fds, failurereg, pipefd); 271ae19b2efSAlan Somers } 272ae19b2efSAlan Somers 273ae19b2efSAlan Somers ATF_TC_CLEANUP(statfs_failure, tc) 274ae19b2efSAlan Somers { 275ae19b2efSAlan Somers cleanup(); 276ae19b2efSAlan Somers } 277ae19b2efSAlan Somers 278ae19b2efSAlan Somers 279ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(fstatfs_success); 280ae19b2efSAlan Somers ATF_TC_HEAD(fstatfs_success, tc) 281ae19b2efSAlan Somers { 282ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 283ae19b2efSAlan Somers "fstatfs(2) call"); 284ae19b2efSAlan Somers } 285ae19b2efSAlan Somers 286ae19b2efSAlan Somers ATF_TC_BODY(fstatfs_success, tc) 287ae19b2efSAlan Somers { 288ae19b2efSAlan Somers /* File needs to exist to call fstat(2) */ 289ae19b2efSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT | O_RDWR, mode)) != -1); 290ae19b2efSAlan Somers /* Call stat(2) to store the Inode number of 'path' */ 291ae19b2efSAlan Somers ATF_REQUIRE_EQ(0, stat(path, &statbuff)); 292ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 293ae19b2efSAlan Somers ATF_REQUIRE_EQ(0, fstatfs(filedesc, &statfsbuff)); 294ae19b2efSAlan Somers 295ae19b2efSAlan Somers snprintf(extregex, sizeof(extregex), "fstatfs.*%jd.*return,success", 296ae19b2efSAlan Somers (intmax_t)statbuff.st_ino); 297ae19b2efSAlan Somers check_audit(fds, extregex, pipefd); 298ae19b2efSAlan Somers close(filedesc); 299ae19b2efSAlan Somers } 300ae19b2efSAlan Somers 301ae19b2efSAlan Somers ATF_TC_CLEANUP(fstatfs_success, tc) 302ae19b2efSAlan Somers { 303ae19b2efSAlan Somers cleanup(); 304ae19b2efSAlan Somers } 305ae19b2efSAlan Somers 306ae19b2efSAlan Somers 307ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(fstatfs_failure); 308ae19b2efSAlan Somers ATF_TC_HEAD(fstatfs_failure, tc) 309ae19b2efSAlan Somers { 310ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 311ae19b2efSAlan Somers "fstatfs(2) call"); 312ae19b2efSAlan Somers } 313ae19b2efSAlan Somers 314ae19b2efSAlan Somers ATF_TC_BODY(fstatfs_failure, tc) 315ae19b2efSAlan Somers { 316ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 317ae19b2efSAlan Somers const char *regex = "fstatfs.*return,failure : Bad file descriptor"; 318ae19b2efSAlan Somers /* Failure reason: bad file descriptor */ 319ae19b2efSAlan Somers ATF_REQUIRE_EQ(-1, fstatfs(-1, &statfsbuff)); 320ae19b2efSAlan Somers check_audit(fds, regex, pipefd); 321ae19b2efSAlan Somers } 322ae19b2efSAlan Somers 323ae19b2efSAlan Somers ATF_TC_CLEANUP(fstatfs_failure, tc) 324ae19b2efSAlan Somers { 325ae19b2efSAlan Somers cleanup(); 326ae19b2efSAlan Somers } 327ae19b2efSAlan Somers 328ae19b2efSAlan Somers 329ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(getfsstat_success); 330ae19b2efSAlan Somers ATF_TC_HEAD(getfsstat_success, tc) 331ae19b2efSAlan Somers { 332ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 333ae19b2efSAlan Somers "getfsstat(2) call"); 334ae19b2efSAlan Somers } 335ae19b2efSAlan Somers 336ae19b2efSAlan Somers ATF_TC_BODY(getfsstat_success, tc) 337ae19b2efSAlan Somers { 338ae19b2efSAlan Somers pid = getpid(); 339ae19b2efSAlan Somers snprintf(extregex, sizeof(extregex), "getfsstat.*%d.*success", pid); 340ae19b2efSAlan Somers 341ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 342ae19b2efSAlan Somers ATF_REQUIRE(getfsstat(NULL, 0, MNT_NOWAIT) != -1); 343ae19b2efSAlan Somers check_audit(fds, extregex, pipefd); 344ae19b2efSAlan Somers } 345ae19b2efSAlan Somers 346ae19b2efSAlan Somers ATF_TC_CLEANUP(getfsstat_success, tc) 347ae19b2efSAlan Somers { 348ae19b2efSAlan Somers cleanup(); 349ae19b2efSAlan Somers } 350ae19b2efSAlan Somers 351ae19b2efSAlan Somers 352ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(getfsstat_failure); 353ae19b2efSAlan Somers ATF_TC_HEAD(getfsstat_failure, tc) 354ae19b2efSAlan Somers { 355ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 356ae19b2efSAlan Somers "getfsstat(2) call"); 357ae19b2efSAlan Somers } 358ae19b2efSAlan Somers 359ae19b2efSAlan Somers ATF_TC_BODY(getfsstat_failure, tc) 360ae19b2efSAlan Somers { 361ae19b2efSAlan Somers const char *regex = "getfsstat.*return,failure : Invalid argument"; 362ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 363ae19b2efSAlan Somers /* Failure reason: Invalid value for mode */ 364ae19b2efSAlan Somers ATF_REQUIRE_EQ(-1, getfsstat(NULL, 0, -1)); 365ae19b2efSAlan Somers check_audit(fds, regex, pipefd); 366ae19b2efSAlan Somers } 367ae19b2efSAlan Somers 368ae19b2efSAlan Somers ATF_TC_CLEANUP(getfsstat_failure, tc) 369ae19b2efSAlan Somers { 370ae19b2efSAlan Somers cleanup(); 371ae19b2efSAlan Somers } 372ae19b2efSAlan Somers 373ae19b2efSAlan Somers 374a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhopen_success); 375a56867b8SAlan Somers ATF_TC_HEAD(fhopen_success, tc) 376a56867b8SAlan Somers { 377a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 378a56867b8SAlan Somers "fhopen(2) call"); 379a56867b8SAlan Somers } 380a56867b8SAlan Somers 381a56867b8SAlan Somers ATF_TC_BODY(fhopen_success, tc) 382a56867b8SAlan Somers { 383a56867b8SAlan Somers pid = getpid(); 384a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhopen.*%d.*return,success", pid); 385a56867b8SAlan Somers 386a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 387a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 388a56867b8SAlan Somers /* Get the file handle to be passed to fhopen(2) */ 389a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 390a56867b8SAlan Somers 391a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 392a56867b8SAlan Somers ATF_REQUIRE((fhdesc = fhopen(&fht, O_RDWR)) != -1); 393a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 394a56867b8SAlan Somers 395a56867b8SAlan Somers close(fhdesc); 396a56867b8SAlan Somers close(filedesc); 397a56867b8SAlan Somers } 398a56867b8SAlan Somers 399a56867b8SAlan Somers ATF_TC_CLEANUP(fhopen_success, tc) 400a56867b8SAlan Somers { 401a56867b8SAlan Somers cleanup(); 402a56867b8SAlan Somers } 403a56867b8SAlan Somers 404a56867b8SAlan Somers 405a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhopen_failure); 406a56867b8SAlan Somers ATF_TC_HEAD(fhopen_failure, tc) 407a56867b8SAlan Somers { 408a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 409a56867b8SAlan Somers "fhopen(2) call"); 410a56867b8SAlan Somers } 411a56867b8SAlan Somers 412a56867b8SAlan Somers ATF_TC_BODY(fhopen_failure, tc) 413a56867b8SAlan Somers { 414a56867b8SAlan Somers const char *regex = "fhopen.*return,failure : Invalid argument"; 415a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 416a56867b8SAlan Somers /* 417a56867b8SAlan Somers * Failure reason: NULL does not represent any file handle 418a56867b8SAlan Somers * and O_CREAT is not allowed as the flag for fhopen(2) 419a56867b8SAlan Somers */ 420a56867b8SAlan Somers ATF_REQUIRE_EQ(-1, fhopen(NULL, O_CREAT)); 421a56867b8SAlan Somers check_audit(fds, regex, pipefd); 422a56867b8SAlan Somers } 423a56867b8SAlan Somers 424a56867b8SAlan Somers ATF_TC_CLEANUP(fhopen_failure, tc) 425a56867b8SAlan Somers { 426a56867b8SAlan Somers cleanup(); 427a56867b8SAlan Somers } 428a56867b8SAlan Somers 429a56867b8SAlan Somers 430a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstat_success); 431a56867b8SAlan Somers ATF_TC_HEAD(fhstat_success, tc) 432a56867b8SAlan Somers { 433a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 434a56867b8SAlan Somers "fstat(2) call"); 435a56867b8SAlan Somers } 436a56867b8SAlan Somers 437a56867b8SAlan Somers ATF_TC_BODY(fhstat_success, tc) 438a56867b8SAlan Somers { 439a56867b8SAlan Somers pid = getpid(); 440a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhstat.*%d.*return,success", pid); 441a56867b8SAlan Somers 442a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 443a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 444a56867b8SAlan Somers /* Get the file handle to be passed to fhstat(2) */ 445a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 446a56867b8SAlan Somers 447a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 448a56867b8SAlan Somers ATF_REQUIRE_EQ(0, fhstat(&fht, &statbuff)); 449a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 450a56867b8SAlan Somers close(filedesc); 451a56867b8SAlan Somers } 452a56867b8SAlan Somers 453a56867b8SAlan Somers ATF_TC_CLEANUP(fhstat_success, tc) 454a56867b8SAlan Somers { 455a56867b8SAlan Somers cleanup(); 456a56867b8SAlan Somers } 457a56867b8SAlan Somers 458a56867b8SAlan Somers 459a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstat_failure); 460a56867b8SAlan Somers ATF_TC_HEAD(fhstat_failure, tc) 461a56867b8SAlan Somers { 462a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 463a56867b8SAlan Somers "fhstat(2) call"); 464a56867b8SAlan Somers } 465a56867b8SAlan Somers 466a56867b8SAlan Somers ATF_TC_BODY(fhstat_failure, tc) 467a56867b8SAlan Somers { 468a56867b8SAlan Somers const char *regex = "fhstat.*return,failure : Bad address"; 469a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 470a56867b8SAlan Somers /* Failure reason: NULL does not represent any file handle */ 471a56867b8SAlan Somers ATF_REQUIRE_EQ(-1, fhstat(NULL, NULL)); 472a56867b8SAlan Somers check_audit(fds, regex, pipefd); 473a56867b8SAlan Somers } 474a56867b8SAlan Somers 475a56867b8SAlan Somers ATF_TC_CLEANUP(fhstat_failure, tc) 476a56867b8SAlan Somers { 477a56867b8SAlan Somers cleanup(); 478a56867b8SAlan Somers } 479a56867b8SAlan Somers 480a56867b8SAlan Somers 481a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstatfs_success); 482a56867b8SAlan Somers ATF_TC_HEAD(fhstatfs_success, tc) 483a56867b8SAlan Somers { 484a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 485a56867b8SAlan Somers "fstatfs(2) call"); 486a56867b8SAlan Somers } 487a56867b8SAlan Somers 488a56867b8SAlan Somers ATF_TC_BODY(fhstatfs_success, tc) 489a56867b8SAlan Somers { 490a56867b8SAlan Somers pid = getpid(); 491a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhstatfs.*%d.*success", pid); 492a56867b8SAlan Somers 493a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 494a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 495a56867b8SAlan Somers /* Get the file handle to be passed to fhstatfs(2) */ 496a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 497a56867b8SAlan Somers 498a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 499a56867b8SAlan Somers ATF_REQUIRE_EQ(0, fhstatfs(&fht, &statfsbuff)); 500a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 501a56867b8SAlan Somers close(filedesc); 502a56867b8SAlan Somers } 503a56867b8SAlan Somers 504a56867b8SAlan Somers ATF_TC_CLEANUP(fhstatfs_success, tc) 505a56867b8SAlan Somers { 506a56867b8SAlan Somers cleanup(); 507a56867b8SAlan Somers } 508a56867b8SAlan Somers 509a56867b8SAlan Somers 510a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstatfs_failure); 511a56867b8SAlan Somers ATF_TC_HEAD(fhstatfs_failure, tc) 512a56867b8SAlan Somers { 513a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 514a56867b8SAlan Somers "fhstatfs(2) call"); 515a56867b8SAlan Somers } 516a56867b8SAlan Somers 517a56867b8SAlan Somers ATF_TC_BODY(fhstatfs_failure, tc) 518a56867b8SAlan Somers { 519a56867b8SAlan Somers const char *regex = "fhstatfs.*return,failure : Bad address"; 520a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 521a56867b8SAlan Somers /* Failure reason: NULL does not represent any file handle */ 522a56867b8SAlan Somers ATF_REQUIRE_EQ(-1, fhstatfs(NULL, NULL)); 523a56867b8SAlan Somers check_audit(fds, regex, pipefd); 524a56867b8SAlan Somers } 525a56867b8SAlan Somers 526a56867b8SAlan Somers ATF_TC_CLEANUP(fhstatfs_failure, tc) 527a56867b8SAlan Somers { 528a56867b8SAlan Somers cleanup(); 529a56867b8SAlan Somers } 530a56867b8SAlan Somers 531a56867b8SAlan Somers 53228845213SAlan Somers ATF_TC_WITH_CLEANUP(access_success); 53328845213SAlan Somers ATF_TC_HEAD(access_success, tc) 53428845213SAlan Somers { 53528845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 53628845213SAlan Somers "access(2) call"); 53728845213SAlan Somers } 53828845213SAlan Somers 53928845213SAlan Somers ATF_TC_BODY(access_success, tc) 54028845213SAlan Somers { 54128845213SAlan Somers /* File needs to exist to call access(2) */ 54228845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 54328845213SAlan Somers FILE *pipefd = setup(fds, auclass); 54428845213SAlan Somers ATF_REQUIRE_EQ(0, access(path, F_OK)); 54528845213SAlan Somers check_audit(fds, successreg, pipefd); 54628845213SAlan Somers close(filedesc); 54728845213SAlan Somers } 54828845213SAlan Somers 54928845213SAlan Somers ATF_TC_CLEANUP(access_success, tc) 55028845213SAlan Somers { 55128845213SAlan Somers cleanup(); 55228845213SAlan Somers } 55328845213SAlan Somers 55428845213SAlan Somers 55528845213SAlan Somers ATF_TC_WITH_CLEANUP(access_failure); 55628845213SAlan Somers ATF_TC_HEAD(access_failure, tc) 55728845213SAlan Somers { 55828845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 55928845213SAlan Somers "access(2) call"); 56028845213SAlan Somers } 56128845213SAlan Somers 56228845213SAlan Somers ATF_TC_BODY(access_failure, tc) 56328845213SAlan Somers { 56428845213SAlan Somers FILE *pipefd = setup(fds, auclass); 56528845213SAlan Somers /* Failure reason: file does not exist */ 56628845213SAlan Somers ATF_REQUIRE_EQ(-1, access(errpath, F_OK)); 56728845213SAlan Somers check_audit(fds, failurereg, pipefd); 56828845213SAlan Somers } 56928845213SAlan Somers 57028845213SAlan Somers ATF_TC_CLEANUP(access_failure, tc) 57128845213SAlan Somers { 57228845213SAlan Somers cleanup(); 57328845213SAlan Somers } 57428845213SAlan Somers 57528845213SAlan Somers 57628845213SAlan Somers ATF_TC_WITH_CLEANUP(eaccess_success); 57728845213SAlan Somers ATF_TC_HEAD(eaccess_success, tc) 57828845213SAlan Somers { 57928845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 58028845213SAlan Somers "eaccess(2) call"); 58128845213SAlan Somers } 58228845213SAlan Somers 58328845213SAlan Somers ATF_TC_BODY(eaccess_success, tc) 58428845213SAlan Somers { 58528845213SAlan Somers /* File needs to exist to call eaccess(2) */ 58628845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 58728845213SAlan Somers FILE *pipefd = setup(fds, auclass); 58828845213SAlan Somers ATF_REQUIRE_EQ(0, eaccess(path, F_OK)); 58928845213SAlan Somers check_audit(fds, successreg, pipefd); 59028845213SAlan Somers close(filedesc); 59128845213SAlan Somers } 59228845213SAlan Somers 59328845213SAlan Somers ATF_TC_CLEANUP(eaccess_success, tc) 59428845213SAlan Somers { 59528845213SAlan Somers cleanup(); 59628845213SAlan Somers } 59728845213SAlan Somers 59828845213SAlan Somers 59928845213SAlan Somers ATF_TC_WITH_CLEANUP(eaccess_failure); 60028845213SAlan Somers ATF_TC_HEAD(eaccess_failure, tc) 60128845213SAlan Somers { 60228845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 60328845213SAlan Somers "eaccess(2) call"); 60428845213SAlan Somers } 60528845213SAlan Somers 60628845213SAlan Somers ATF_TC_BODY(eaccess_failure, tc) 60728845213SAlan Somers { 60828845213SAlan Somers FILE *pipefd = setup(fds, auclass); 60928845213SAlan Somers /* Failure reason: file does not exist */ 61028845213SAlan Somers ATF_REQUIRE_EQ(-1, eaccess(errpath, F_OK)); 61128845213SAlan Somers check_audit(fds, failurereg, pipefd); 61228845213SAlan Somers } 61328845213SAlan Somers 61428845213SAlan Somers ATF_TC_CLEANUP(eaccess_failure, tc) 61528845213SAlan Somers { 61628845213SAlan Somers cleanup(); 61728845213SAlan Somers } 61828845213SAlan Somers 61928845213SAlan Somers 62028845213SAlan Somers ATF_TC_WITH_CLEANUP(faccessat_success); 62128845213SAlan Somers ATF_TC_HEAD(faccessat_success, tc) 62228845213SAlan Somers { 62328845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 62428845213SAlan Somers "faccessat(2) call"); 62528845213SAlan Somers } 62628845213SAlan Somers 62728845213SAlan Somers ATF_TC_BODY(faccessat_success, tc) 62828845213SAlan Somers { 62928845213SAlan Somers /* File needs to exist to call faccessat(2) */ 63028845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 63128845213SAlan Somers FILE *pipefd = setup(fds, auclass); 63228845213SAlan Somers ATF_REQUIRE_EQ(0, faccessat(AT_FDCWD, path, F_OK, AT_EACCESS)); 63328845213SAlan Somers check_audit(fds, successreg, pipefd); 63428845213SAlan Somers close(filedesc); 63528845213SAlan Somers } 63628845213SAlan Somers 63728845213SAlan Somers ATF_TC_CLEANUP(faccessat_success, tc) 63828845213SAlan Somers { 63928845213SAlan Somers cleanup(); 64028845213SAlan Somers } 64128845213SAlan Somers 64228845213SAlan Somers 64328845213SAlan Somers ATF_TC_WITH_CLEANUP(faccessat_failure); 64428845213SAlan Somers ATF_TC_HEAD(faccessat_failure, tc) 64528845213SAlan Somers { 64628845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 64728845213SAlan Somers "faccessat(2) call"); 64828845213SAlan Somers } 64928845213SAlan Somers 65028845213SAlan Somers ATF_TC_BODY(faccessat_failure, tc) 65128845213SAlan Somers { 65228845213SAlan Somers FILE *pipefd = setup(fds, auclass); 65328845213SAlan Somers /* Failure reason: file does not exist */ 65428845213SAlan Somers ATF_REQUIRE_EQ(-1, faccessat(AT_FDCWD, errpath, F_OK, AT_EACCESS)); 65528845213SAlan Somers check_audit(fds, failurereg, pipefd); 65628845213SAlan Somers } 65728845213SAlan Somers 65828845213SAlan Somers ATF_TC_CLEANUP(faccessat_failure, tc) 65928845213SAlan Somers { 66028845213SAlan Somers cleanup(); 66128845213SAlan Somers } 66228845213SAlan Somers 66328845213SAlan Somers 664*2c347e63SAlan Somers ATF_TC_WITH_CLEANUP(pathconf_success); 665*2c347e63SAlan Somers ATF_TC_HEAD(pathconf_success, tc) 666*2c347e63SAlan Somers { 667*2c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 668*2c347e63SAlan Somers "pathconf(2) call"); 669*2c347e63SAlan Somers } 670*2c347e63SAlan Somers 671*2c347e63SAlan Somers ATF_TC_BODY(pathconf_success, tc) 672*2c347e63SAlan Somers { 673*2c347e63SAlan Somers /* File needs to exist to call pathconf(2) */ 674*2c347e63SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 675*2c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 676*2c347e63SAlan Somers /* Get the maximum number of bytes of filename */ 677*2c347e63SAlan Somers ATF_REQUIRE(pathconf(path, _PC_NAME_MAX) != -1); 678*2c347e63SAlan Somers check_audit(fds, successreg, pipefd); 679*2c347e63SAlan Somers close(filedesc); 680*2c347e63SAlan Somers } 681*2c347e63SAlan Somers 682*2c347e63SAlan Somers ATF_TC_CLEANUP(pathconf_success, tc) 683*2c347e63SAlan Somers { 684*2c347e63SAlan Somers cleanup(); 685*2c347e63SAlan Somers } 686*2c347e63SAlan Somers 687*2c347e63SAlan Somers 688*2c347e63SAlan Somers ATF_TC_WITH_CLEANUP(pathconf_failure); 689*2c347e63SAlan Somers ATF_TC_HEAD(pathconf_failure, tc) 690*2c347e63SAlan Somers { 691*2c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 692*2c347e63SAlan Somers "pathconf(2) call"); 693*2c347e63SAlan Somers } 694*2c347e63SAlan Somers 695*2c347e63SAlan Somers ATF_TC_BODY(pathconf_failure, tc) 696*2c347e63SAlan Somers { 697*2c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 698*2c347e63SAlan Somers /* Failure reason: file does not exist */ 699*2c347e63SAlan Somers ATF_REQUIRE_EQ(-1, pathconf(errpath, _PC_NAME_MAX)); 700*2c347e63SAlan Somers check_audit(fds, failurereg, pipefd); 701*2c347e63SAlan Somers } 702*2c347e63SAlan Somers 703*2c347e63SAlan Somers ATF_TC_CLEANUP(pathconf_failure, tc) 704*2c347e63SAlan Somers { 705*2c347e63SAlan Somers cleanup(); 706*2c347e63SAlan Somers } 707*2c347e63SAlan Somers 708*2c347e63SAlan Somers 709*2c347e63SAlan Somers ATF_TC_WITH_CLEANUP(lpathconf_success); 710*2c347e63SAlan Somers ATF_TC_HEAD(lpathconf_success, tc) 711*2c347e63SAlan Somers { 712*2c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 713*2c347e63SAlan Somers "lpathconf(2) call"); 714*2c347e63SAlan Somers } 715*2c347e63SAlan Somers 716*2c347e63SAlan Somers ATF_TC_BODY(lpathconf_success, tc) 717*2c347e63SAlan Somers { 718*2c347e63SAlan Somers /* Symbolic link needs to exist to call lpathconf(2) */ 719*2c347e63SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 720*2c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 721*2c347e63SAlan Somers /* Get the maximum number of bytes of symlink's name */ 722*2c347e63SAlan Somers ATF_REQUIRE(lpathconf(path, _PC_SYMLINK_MAX) != -1); 723*2c347e63SAlan Somers check_audit(fds, successreg, pipefd); 724*2c347e63SAlan Somers } 725*2c347e63SAlan Somers 726*2c347e63SAlan Somers ATF_TC_CLEANUP(lpathconf_success, tc) 727*2c347e63SAlan Somers { 728*2c347e63SAlan Somers cleanup(); 729*2c347e63SAlan Somers } 730*2c347e63SAlan Somers 731*2c347e63SAlan Somers 732*2c347e63SAlan Somers ATF_TC_WITH_CLEANUP(lpathconf_failure); 733*2c347e63SAlan Somers ATF_TC_HEAD(lpathconf_failure, tc) 734*2c347e63SAlan Somers { 735*2c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 736*2c347e63SAlan Somers "lpathconf(2) call"); 737*2c347e63SAlan Somers } 738*2c347e63SAlan Somers 739*2c347e63SAlan Somers ATF_TC_BODY(lpathconf_failure, tc) 740*2c347e63SAlan Somers { 741*2c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 742*2c347e63SAlan Somers /* Failure reason: symbolic link does not exist */ 743*2c347e63SAlan Somers ATF_REQUIRE_EQ(-1, lpathconf(errpath, _PC_SYMLINK_MAX)); 744*2c347e63SAlan Somers check_audit(fds, failurereg, pipefd); 745*2c347e63SAlan Somers } 746*2c347e63SAlan Somers 747*2c347e63SAlan Somers ATF_TC_CLEANUP(lpathconf_failure, tc) 748*2c347e63SAlan Somers { 749*2c347e63SAlan Somers cleanup(); 750*2c347e63SAlan Somers } 751*2c347e63SAlan Somers 752*2c347e63SAlan Somers 753*2c347e63SAlan Somers ATF_TC_WITH_CLEANUP(fpathconf_success); 754*2c347e63SAlan Somers ATF_TC_HEAD(fpathconf_success, tc) 755*2c347e63SAlan Somers { 756*2c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 757*2c347e63SAlan Somers "fpathconf(2) call"); 758*2c347e63SAlan Somers } 759*2c347e63SAlan Somers 760*2c347e63SAlan Somers ATF_TC_BODY(fpathconf_success, tc) 761*2c347e63SAlan Somers { 762*2c347e63SAlan Somers pid = getpid(); 763*2c347e63SAlan Somers snprintf(extregex, sizeof(extregex), "fpathconf.*%d.*success", pid); 764*2c347e63SAlan Somers 765*2c347e63SAlan Somers /* File needs to exist to call fpathconf(2) */ 766*2c347e63SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 767*2c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 768*2c347e63SAlan Somers /* Get the maximum number of bytes of filename */ 769*2c347e63SAlan Somers ATF_REQUIRE(fpathconf(filedesc, _PC_NAME_MAX) != -1); 770*2c347e63SAlan Somers check_audit(fds, extregex, pipefd); 771*2c347e63SAlan Somers close(filedesc); 772*2c347e63SAlan Somers } 773*2c347e63SAlan Somers 774*2c347e63SAlan Somers ATF_TC_CLEANUP(fpathconf_success, tc) 775*2c347e63SAlan Somers { 776*2c347e63SAlan Somers cleanup(); 777*2c347e63SAlan Somers } 778*2c347e63SAlan Somers 779*2c347e63SAlan Somers 780*2c347e63SAlan Somers ATF_TC_WITH_CLEANUP(fpathconf_failure); 781*2c347e63SAlan Somers ATF_TC_HEAD(fpathconf_failure, tc) 782*2c347e63SAlan Somers { 783*2c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 784*2c347e63SAlan Somers "fpathconf(2) call"); 785*2c347e63SAlan Somers } 786*2c347e63SAlan Somers 787*2c347e63SAlan Somers ATF_TC_BODY(fpathconf_failure, tc) 788*2c347e63SAlan Somers { 789*2c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 790*2c347e63SAlan Somers const char *regex = "fpathconf.*return,failure : Bad file descriptor"; 791*2c347e63SAlan Somers /* Failure reason: Bad file descriptor */ 792*2c347e63SAlan Somers ATF_REQUIRE_EQ(-1, fpathconf(-1, _PC_NAME_MAX)); 793*2c347e63SAlan Somers check_audit(fds, regex, pipefd); 794*2c347e63SAlan Somers } 795*2c347e63SAlan Somers 796*2c347e63SAlan Somers ATF_TC_CLEANUP(fpathconf_failure, tc) 797*2c347e63SAlan Somers { 798*2c347e63SAlan Somers cleanup(); 799*2c347e63SAlan Somers } 800*2c347e63SAlan Somers 801*2c347e63SAlan Somers 802f86d6517SAlan Somers ATF_TP_ADD_TCS(tp) 803f86d6517SAlan Somers { 804f86d6517SAlan Somers ATF_TP_ADD_TC(tp, stat_success); 805f86d6517SAlan Somers ATF_TP_ADD_TC(tp, stat_failure); 806f86d6517SAlan Somers ATF_TP_ADD_TC(tp, lstat_success); 807f86d6517SAlan Somers ATF_TP_ADD_TC(tp, lstat_failure); 808f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstat_success); 809f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstat_failure); 810f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstatat_success); 811f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstatat_failure); 812f86d6517SAlan Somers 813ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, statfs_success); 814ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, statfs_failure); 815ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, fstatfs_success); 816ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, fstatfs_failure); 817ae19b2efSAlan Somers 818ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, getfsstat_success); 819ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, getfsstat_failure); 820ae19b2efSAlan Somers 821a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhopen_success); 822a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhopen_failure); 823a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstat_success); 824a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstat_failure); 825a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstatfs_success); 826a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstatfs_failure); 827a56867b8SAlan Somers 82828845213SAlan Somers ATF_TP_ADD_TC(tp, access_success); 82928845213SAlan Somers ATF_TP_ADD_TC(tp, access_failure); 83028845213SAlan Somers ATF_TP_ADD_TC(tp, eaccess_success); 83128845213SAlan Somers ATF_TP_ADD_TC(tp, eaccess_failure); 83228845213SAlan Somers ATF_TP_ADD_TC(tp, faccessat_success); 83328845213SAlan Somers ATF_TP_ADD_TC(tp, faccessat_failure); 83428845213SAlan Somers 835*2c347e63SAlan Somers ATF_TP_ADD_TC(tp, pathconf_success); 836*2c347e63SAlan Somers ATF_TP_ADD_TC(tp, pathconf_failure); 837*2c347e63SAlan Somers ATF_TP_ADD_TC(tp, lpathconf_success); 838*2c347e63SAlan Somers ATF_TP_ADD_TC(tp, lpathconf_failure); 839*2c347e63SAlan Somers ATF_TP_ADD_TC(tp, fpathconf_success); 840*2c347e63SAlan Somers ATF_TP_ADD_TC(tp, fpathconf_failure); 841*2c347e63SAlan Somers 842f86d6517SAlan Somers return (atf_no_error()); 843f86d6517SAlan Somers } 844