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> 297d951cc2SAlan Somers #include <sys/extattr.h> 30ae19b2efSAlan Somers #include <sys/ucred.h> 31ae19b2efSAlan Somers #include <sys/mount.h> 32f86d6517SAlan Somers #include <sys/stat.h> 33f86d6517SAlan Somers #include <sys/syscall.h> 34f86d6517SAlan Somers 35f86d6517SAlan Somers #include <atf-c.h> 36f86d6517SAlan Somers #include <fcntl.h> 37f86d6517SAlan Somers #include <unistd.h> 38f86d6517SAlan Somers 39f86d6517SAlan Somers #include "utils.h" 40f86d6517SAlan Somers 41f86d6517SAlan Somers static struct pollfd fds[1]; 42f86d6517SAlan Somers static mode_t mode = 0777; 43ae19b2efSAlan Somers static pid_t pid; 44a56867b8SAlan Somers static fhandle_t fht; 45a56867b8SAlan Somers static int filedesc, fhdesc; 46f86d6517SAlan Somers static char extregex[80]; 47*5641c23fSAlan Somers static char buff[] = "ezio"; 48f86d6517SAlan Somers static struct stat statbuff; 49ae19b2efSAlan Somers static struct statfs statfsbuff; 50f86d6517SAlan Somers static const char *auclass = "fa"; 517d951cc2SAlan Somers static const char *name = "authorname"; 52f86d6517SAlan Somers static const char *path = "fileforaudit"; 53f86d6517SAlan Somers static const char *errpath = "dirdoesnotexist/fileforaudit"; 54f86d6517SAlan Somers static const char *successreg = "fileforaudit.*return,success"; 55f86d6517SAlan Somers static const char *failurereg = "fileforaudit.*return,failure"; 56f86d6517SAlan Somers 57f86d6517SAlan Somers 58f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(stat_success); 59f86d6517SAlan Somers ATF_TC_HEAD(stat_success, tc) 60f86d6517SAlan Somers { 61f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 62f86d6517SAlan Somers "stat(2) call"); 63f86d6517SAlan Somers } 64f86d6517SAlan Somers 65f86d6517SAlan Somers ATF_TC_BODY(stat_success, tc) 66f86d6517SAlan Somers { 67f86d6517SAlan Somers /* File needs to exist to call stat(2) */ 68b13a70d5SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 69f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 70f86d6517SAlan Somers ATF_REQUIRE_EQ(0, stat(path, &statbuff)); 71f86d6517SAlan Somers check_audit(fds, successreg, pipefd); 72b13a70d5SAlan Somers close(filedesc); 73f86d6517SAlan Somers } 74f86d6517SAlan Somers 75f86d6517SAlan Somers ATF_TC_CLEANUP(stat_success, tc) 76f86d6517SAlan Somers { 77f86d6517SAlan Somers cleanup(); 78f86d6517SAlan Somers } 79f86d6517SAlan Somers 80f86d6517SAlan Somers 81f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(stat_failure); 82f86d6517SAlan Somers ATF_TC_HEAD(stat_failure, tc) 83f86d6517SAlan Somers { 84f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 85f86d6517SAlan Somers "stat(2) call"); 86f86d6517SAlan Somers } 87f86d6517SAlan Somers 88f86d6517SAlan Somers ATF_TC_BODY(stat_failure, tc) 89f86d6517SAlan Somers { 90f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 91f86d6517SAlan Somers /* Failure reason: file does not exist */ 92f86d6517SAlan Somers ATF_REQUIRE_EQ(-1, stat(errpath, &statbuff)); 93f86d6517SAlan Somers check_audit(fds, failurereg, pipefd); 94f86d6517SAlan Somers } 95f86d6517SAlan Somers 96f86d6517SAlan Somers ATF_TC_CLEANUP(stat_failure, tc) 97f86d6517SAlan Somers { 98f86d6517SAlan Somers cleanup(); 99f86d6517SAlan Somers } 100f86d6517SAlan Somers 101f86d6517SAlan Somers 102f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(lstat_success); 103f86d6517SAlan Somers ATF_TC_HEAD(lstat_success, tc) 104f86d6517SAlan Somers { 105f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 106f86d6517SAlan Somers "lstat(2) call"); 107f86d6517SAlan Somers } 108f86d6517SAlan Somers 109f86d6517SAlan Somers ATF_TC_BODY(lstat_success, tc) 110f86d6517SAlan Somers { 111f86d6517SAlan Somers /* Symbolic link needs to exist to call lstat(2) */ 112f86d6517SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 113f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 114f86d6517SAlan Somers ATF_REQUIRE_EQ(0, lstat(path, &statbuff)); 115f86d6517SAlan Somers check_audit(fds, successreg, pipefd); 116f86d6517SAlan Somers } 117f86d6517SAlan Somers 118f86d6517SAlan Somers ATF_TC_CLEANUP(lstat_success, tc) 119f86d6517SAlan Somers { 120f86d6517SAlan Somers cleanup(); 121f86d6517SAlan Somers } 122f86d6517SAlan Somers 123f86d6517SAlan Somers 124f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(lstat_failure); 125f86d6517SAlan Somers ATF_TC_HEAD(lstat_failure, tc) 126f86d6517SAlan Somers { 127f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 128f86d6517SAlan Somers "lstat(2) call"); 129f86d6517SAlan Somers } 130f86d6517SAlan Somers 131f86d6517SAlan Somers ATF_TC_BODY(lstat_failure, tc) 132f86d6517SAlan Somers { 133f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 134f86d6517SAlan Somers /* Failure reason: symbolic link does not exist */ 135f86d6517SAlan Somers ATF_REQUIRE_EQ(-1, lstat(errpath, &statbuff)); 136f86d6517SAlan Somers check_audit(fds, failurereg, pipefd); 137f86d6517SAlan Somers } 138f86d6517SAlan Somers 139f86d6517SAlan Somers ATF_TC_CLEANUP(lstat_failure, tc) 140f86d6517SAlan Somers { 141f86d6517SAlan Somers cleanup(); 142f86d6517SAlan Somers } 143f86d6517SAlan Somers 144f86d6517SAlan Somers 145f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstat_success); 146f86d6517SAlan Somers ATF_TC_HEAD(fstat_success, tc) 147f86d6517SAlan Somers { 148f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 149f86d6517SAlan Somers "fstat(2) call"); 150f86d6517SAlan Somers } 151f86d6517SAlan Somers 152f86d6517SAlan Somers ATF_TC_BODY(fstat_success, tc) 153f86d6517SAlan Somers { 154f86d6517SAlan Somers /* File needs to exist to call fstat(2) */ 155f86d6517SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT | O_RDWR, mode)) != -1); 156f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 157f86d6517SAlan Somers ATF_REQUIRE_EQ(0, fstat(filedesc, &statbuff)); 158f86d6517SAlan Somers 159f86d6517SAlan Somers snprintf(extregex, sizeof(extregex), 160f86d6517SAlan Somers "fstat.*%jd.*return,success", (intmax_t)statbuff.st_ino); 161f86d6517SAlan Somers check_audit(fds, extregex, pipefd); 162b13a70d5SAlan Somers close(filedesc); 163f86d6517SAlan Somers } 164f86d6517SAlan Somers 165f86d6517SAlan Somers ATF_TC_CLEANUP(fstat_success, tc) 166f86d6517SAlan Somers { 167f86d6517SAlan Somers cleanup(); 168f86d6517SAlan Somers } 169f86d6517SAlan Somers 170f86d6517SAlan Somers 171f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstat_failure); 172f86d6517SAlan Somers ATF_TC_HEAD(fstat_failure, tc) 173f86d6517SAlan Somers { 174f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 175f86d6517SAlan Somers "fstat(2) call"); 176f86d6517SAlan Somers } 177f86d6517SAlan Somers 178f86d6517SAlan Somers ATF_TC_BODY(fstat_failure, tc) 179f86d6517SAlan Somers { 180f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 181f86d6517SAlan Somers const char *regex = "fstat.*return,failure : Bad file descriptor"; 182f86d6517SAlan Somers /* Failure reason: bad file descriptor */ 183f86d6517SAlan Somers ATF_REQUIRE_EQ(-1, fstat(-1, &statbuff)); 184f86d6517SAlan Somers check_audit(fds, regex, pipefd); 185f86d6517SAlan Somers } 186f86d6517SAlan Somers 187f86d6517SAlan Somers ATF_TC_CLEANUP(fstat_failure, tc) 188f86d6517SAlan Somers { 189f86d6517SAlan Somers cleanup(); 190f86d6517SAlan Somers } 191f86d6517SAlan Somers 192f86d6517SAlan Somers 193f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstatat_success); 194f86d6517SAlan Somers ATF_TC_HEAD(fstatat_success, tc) 195f86d6517SAlan Somers { 196f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 197f86d6517SAlan Somers "fstatat(2) call"); 198f86d6517SAlan Somers } 199f86d6517SAlan Somers 200f86d6517SAlan Somers ATF_TC_BODY(fstatat_success, tc) 201f86d6517SAlan Somers { 202f86d6517SAlan Somers /* File or Symbolic link needs to exist to call lstat(2) */ 203f86d6517SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 204f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 205f86d6517SAlan Somers ATF_REQUIRE_EQ(0, fstatat(AT_FDCWD, path, &statbuff, 206f86d6517SAlan Somers AT_SYMLINK_NOFOLLOW)); 207f86d6517SAlan Somers check_audit(fds, successreg, pipefd); 208f86d6517SAlan Somers } 209f86d6517SAlan Somers 210f86d6517SAlan Somers ATF_TC_CLEANUP(fstatat_success, tc) 211f86d6517SAlan Somers { 212f86d6517SAlan Somers cleanup(); 213f86d6517SAlan Somers } 214f86d6517SAlan Somers 215f86d6517SAlan Somers 216f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstatat_failure); 217f86d6517SAlan Somers ATF_TC_HEAD(fstatat_failure, tc) 218f86d6517SAlan Somers { 219f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 220f86d6517SAlan Somers "fstatat(2) call"); 221f86d6517SAlan Somers } 222f86d6517SAlan Somers 223f86d6517SAlan Somers ATF_TC_BODY(fstatat_failure, tc) 224f86d6517SAlan Somers { 225f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 226f86d6517SAlan Somers /* Failure reason: symbolic link does not exist */ 227f86d6517SAlan Somers ATF_REQUIRE_EQ(-1, fstatat(AT_FDCWD, path, &statbuff, 228f86d6517SAlan Somers AT_SYMLINK_NOFOLLOW)); 229f86d6517SAlan Somers check_audit(fds, failurereg, pipefd); 230f86d6517SAlan Somers } 231f86d6517SAlan Somers 232f86d6517SAlan Somers ATF_TC_CLEANUP(fstatat_failure, tc) 233f86d6517SAlan Somers { 234f86d6517SAlan Somers cleanup(); 235f86d6517SAlan Somers } 236f86d6517SAlan Somers 237f86d6517SAlan Somers 238ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(statfs_success); 239ae19b2efSAlan Somers ATF_TC_HEAD(statfs_success, tc) 240ae19b2efSAlan Somers { 241ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 242ae19b2efSAlan Somers "statfs(2) call"); 243ae19b2efSAlan Somers } 244ae19b2efSAlan Somers 245ae19b2efSAlan Somers ATF_TC_BODY(statfs_success, tc) 246ae19b2efSAlan Somers { 247ae19b2efSAlan Somers /* File needs to exist to call statfs(2) */ 248ae19b2efSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 249ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 250ae19b2efSAlan Somers ATF_REQUIRE_EQ(0, statfs(path, &statfsbuff)); 251ae19b2efSAlan Somers check_audit(fds, successreg, pipefd); 252ae19b2efSAlan Somers close(filedesc); 253ae19b2efSAlan Somers } 254ae19b2efSAlan Somers 255ae19b2efSAlan Somers ATF_TC_CLEANUP(statfs_success, tc) 256ae19b2efSAlan Somers { 257ae19b2efSAlan Somers cleanup(); 258ae19b2efSAlan Somers } 259ae19b2efSAlan Somers 260ae19b2efSAlan Somers 261ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(statfs_failure); 262ae19b2efSAlan Somers ATF_TC_HEAD(statfs_failure, tc) 263ae19b2efSAlan Somers { 264ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 265ae19b2efSAlan Somers "statfs(2) call"); 266ae19b2efSAlan Somers } 267ae19b2efSAlan Somers 268ae19b2efSAlan Somers ATF_TC_BODY(statfs_failure, tc) 269ae19b2efSAlan Somers { 270ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 271ae19b2efSAlan Somers /* Failure reason: file does not exist */ 272ae19b2efSAlan Somers ATF_REQUIRE_EQ(-1, statfs(errpath, &statfsbuff)); 273ae19b2efSAlan Somers check_audit(fds, failurereg, pipefd); 274ae19b2efSAlan Somers } 275ae19b2efSAlan Somers 276ae19b2efSAlan Somers ATF_TC_CLEANUP(statfs_failure, tc) 277ae19b2efSAlan Somers { 278ae19b2efSAlan Somers cleanup(); 279ae19b2efSAlan Somers } 280ae19b2efSAlan Somers 281ae19b2efSAlan Somers 282ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(fstatfs_success); 283ae19b2efSAlan Somers ATF_TC_HEAD(fstatfs_success, tc) 284ae19b2efSAlan Somers { 285ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 286ae19b2efSAlan Somers "fstatfs(2) call"); 287ae19b2efSAlan Somers } 288ae19b2efSAlan Somers 289ae19b2efSAlan Somers ATF_TC_BODY(fstatfs_success, tc) 290ae19b2efSAlan Somers { 291ae19b2efSAlan Somers /* File needs to exist to call fstat(2) */ 292ae19b2efSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT | O_RDWR, mode)) != -1); 293ae19b2efSAlan Somers /* Call stat(2) to store the Inode number of 'path' */ 294ae19b2efSAlan Somers ATF_REQUIRE_EQ(0, stat(path, &statbuff)); 295ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 296ae19b2efSAlan Somers ATF_REQUIRE_EQ(0, fstatfs(filedesc, &statfsbuff)); 297ae19b2efSAlan Somers 298ae19b2efSAlan Somers snprintf(extregex, sizeof(extregex), "fstatfs.*%jd.*return,success", 299ae19b2efSAlan Somers (intmax_t)statbuff.st_ino); 300ae19b2efSAlan Somers check_audit(fds, extregex, pipefd); 301ae19b2efSAlan Somers close(filedesc); 302ae19b2efSAlan Somers } 303ae19b2efSAlan Somers 304ae19b2efSAlan Somers ATF_TC_CLEANUP(fstatfs_success, tc) 305ae19b2efSAlan Somers { 306ae19b2efSAlan Somers cleanup(); 307ae19b2efSAlan Somers } 308ae19b2efSAlan Somers 309ae19b2efSAlan Somers 310ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(fstatfs_failure); 311ae19b2efSAlan Somers ATF_TC_HEAD(fstatfs_failure, tc) 312ae19b2efSAlan Somers { 313ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 314ae19b2efSAlan Somers "fstatfs(2) call"); 315ae19b2efSAlan Somers } 316ae19b2efSAlan Somers 317ae19b2efSAlan Somers ATF_TC_BODY(fstatfs_failure, tc) 318ae19b2efSAlan Somers { 319ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 320ae19b2efSAlan Somers const char *regex = "fstatfs.*return,failure : Bad file descriptor"; 321ae19b2efSAlan Somers /* Failure reason: bad file descriptor */ 322ae19b2efSAlan Somers ATF_REQUIRE_EQ(-1, fstatfs(-1, &statfsbuff)); 323ae19b2efSAlan Somers check_audit(fds, regex, pipefd); 324ae19b2efSAlan Somers } 325ae19b2efSAlan Somers 326ae19b2efSAlan Somers ATF_TC_CLEANUP(fstatfs_failure, tc) 327ae19b2efSAlan Somers { 328ae19b2efSAlan Somers cleanup(); 329ae19b2efSAlan Somers } 330ae19b2efSAlan Somers 331ae19b2efSAlan Somers 332ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(getfsstat_success); 333ae19b2efSAlan Somers ATF_TC_HEAD(getfsstat_success, tc) 334ae19b2efSAlan Somers { 335ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 336ae19b2efSAlan Somers "getfsstat(2) call"); 337ae19b2efSAlan Somers } 338ae19b2efSAlan Somers 339ae19b2efSAlan Somers ATF_TC_BODY(getfsstat_success, tc) 340ae19b2efSAlan Somers { 341ae19b2efSAlan Somers pid = getpid(); 342ae19b2efSAlan Somers snprintf(extregex, sizeof(extregex), "getfsstat.*%d.*success", pid); 343ae19b2efSAlan Somers 344ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 345ae19b2efSAlan Somers ATF_REQUIRE(getfsstat(NULL, 0, MNT_NOWAIT) != -1); 346ae19b2efSAlan Somers check_audit(fds, extregex, pipefd); 347ae19b2efSAlan Somers } 348ae19b2efSAlan Somers 349ae19b2efSAlan Somers ATF_TC_CLEANUP(getfsstat_success, tc) 350ae19b2efSAlan Somers { 351ae19b2efSAlan Somers cleanup(); 352ae19b2efSAlan Somers } 353ae19b2efSAlan Somers 354ae19b2efSAlan Somers 355ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(getfsstat_failure); 356ae19b2efSAlan Somers ATF_TC_HEAD(getfsstat_failure, tc) 357ae19b2efSAlan Somers { 358ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 359ae19b2efSAlan Somers "getfsstat(2) call"); 360ae19b2efSAlan Somers } 361ae19b2efSAlan Somers 362ae19b2efSAlan Somers ATF_TC_BODY(getfsstat_failure, tc) 363ae19b2efSAlan Somers { 364ae19b2efSAlan Somers const char *regex = "getfsstat.*return,failure : Invalid argument"; 365ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 366ae19b2efSAlan Somers /* Failure reason: Invalid value for mode */ 367ae19b2efSAlan Somers ATF_REQUIRE_EQ(-1, getfsstat(NULL, 0, -1)); 368ae19b2efSAlan Somers check_audit(fds, regex, pipefd); 369ae19b2efSAlan Somers } 370ae19b2efSAlan Somers 371ae19b2efSAlan Somers ATF_TC_CLEANUP(getfsstat_failure, tc) 372ae19b2efSAlan Somers { 373ae19b2efSAlan Somers cleanup(); 374ae19b2efSAlan Somers } 375ae19b2efSAlan Somers 376ae19b2efSAlan Somers 377a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhopen_success); 378a56867b8SAlan Somers ATF_TC_HEAD(fhopen_success, tc) 379a56867b8SAlan Somers { 380a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 381a56867b8SAlan Somers "fhopen(2) call"); 382a56867b8SAlan Somers } 383a56867b8SAlan Somers 384a56867b8SAlan Somers ATF_TC_BODY(fhopen_success, tc) 385a56867b8SAlan Somers { 386a56867b8SAlan Somers pid = getpid(); 387a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhopen.*%d.*return,success", pid); 388a56867b8SAlan Somers 389a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 390a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 391a56867b8SAlan Somers /* Get the file handle to be passed to fhopen(2) */ 392a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 393a56867b8SAlan Somers 394a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 395a56867b8SAlan Somers ATF_REQUIRE((fhdesc = fhopen(&fht, O_RDWR)) != -1); 396a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 397a56867b8SAlan Somers 398a56867b8SAlan Somers close(fhdesc); 399a56867b8SAlan Somers close(filedesc); 400a56867b8SAlan Somers } 401a56867b8SAlan Somers 402a56867b8SAlan Somers ATF_TC_CLEANUP(fhopen_success, tc) 403a56867b8SAlan Somers { 404a56867b8SAlan Somers cleanup(); 405a56867b8SAlan Somers } 406a56867b8SAlan Somers 407a56867b8SAlan Somers 408a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhopen_failure); 409a56867b8SAlan Somers ATF_TC_HEAD(fhopen_failure, tc) 410a56867b8SAlan Somers { 411a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 412a56867b8SAlan Somers "fhopen(2) call"); 413a56867b8SAlan Somers } 414a56867b8SAlan Somers 415a56867b8SAlan Somers ATF_TC_BODY(fhopen_failure, tc) 416a56867b8SAlan Somers { 417a56867b8SAlan Somers const char *regex = "fhopen.*return,failure : Invalid argument"; 418a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 419a56867b8SAlan Somers /* 420a56867b8SAlan Somers * Failure reason: NULL does not represent any file handle 421a56867b8SAlan Somers * and O_CREAT is not allowed as the flag for fhopen(2) 422a56867b8SAlan Somers */ 423a56867b8SAlan Somers ATF_REQUIRE_EQ(-1, fhopen(NULL, O_CREAT)); 424a56867b8SAlan Somers check_audit(fds, regex, pipefd); 425a56867b8SAlan Somers } 426a56867b8SAlan Somers 427a56867b8SAlan Somers ATF_TC_CLEANUP(fhopen_failure, tc) 428a56867b8SAlan Somers { 429a56867b8SAlan Somers cleanup(); 430a56867b8SAlan Somers } 431a56867b8SAlan Somers 432a56867b8SAlan Somers 433a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstat_success); 434a56867b8SAlan Somers ATF_TC_HEAD(fhstat_success, tc) 435a56867b8SAlan Somers { 436a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 437a56867b8SAlan Somers "fstat(2) call"); 438a56867b8SAlan Somers } 439a56867b8SAlan Somers 440a56867b8SAlan Somers ATF_TC_BODY(fhstat_success, tc) 441a56867b8SAlan Somers { 442a56867b8SAlan Somers pid = getpid(); 443a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhstat.*%d.*return,success", pid); 444a56867b8SAlan Somers 445a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 446a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 447a56867b8SAlan Somers /* Get the file handle to be passed to fhstat(2) */ 448a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 449a56867b8SAlan Somers 450a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 451a56867b8SAlan Somers ATF_REQUIRE_EQ(0, fhstat(&fht, &statbuff)); 452a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 453a56867b8SAlan Somers close(filedesc); 454a56867b8SAlan Somers } 455a56867b8SAlan Somers 456a56867b8SAlan Somers ATF_TC_CLEANUP(fhstat_success, tc) 457a56867b8SAlan Somers { 458a56867b8SAlan Somers cleanup(); 459a56867b8SAlan Somers } 460a56867b8SAlan Somers 461a56867b8SAlan Somers 462a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstat_failure); 463a56867b8SAlan Somers ATF_TC_HEAD(fhstat_failure, tc) 464a56867b8SAlan Somers { 465a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 466a56867b8SAlan Somers "fhstat(2) call"); 467a56867b8SAlan Somers } 468a56867b8SAlan Somers 469a56867b8SAlan Somers ATF_TC_BODY(fhstat_failure, tc) 470a56867b8SAlan Somers { 471a56867b8SAlan Somers const char *regex = "fhstat.*return,failure : Bad address"; 472a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 473a56867b8SAlan Somers /* Failure reason: NULL does not represent any file handle */ 474a56867b8SAlan Somers ATF_REQUIRE_EQ(-1, fhstat(NULL, NULL)); 475a56867b8SAlan Somers check_audit(fds, regex, pipefd); 476a56867b8SAlan Somers } 477a56867b8SAlan Somers 478a56867b8SAlan Somers ATF_TC_CLEANUP(fhstat_failure, tc) 479a56867b8SAlan Somers { 480a56867b8SAlan Somers cleanup(); 481a56867b8SAlan Somers } 482a56867b8SAlan Somers 483a56867b8SAlan Somers 484a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstatfs_success); 485a56867b8SAlan Somers ATF_TC_HEAD(fhstatfs_success, tc) 486a56867b8SAlan Somers { 487a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 488a56867b8SAlan Somers "fstatfs(2) call"); 489a56867b8SAlan Somers } 490a56867b8SAlan Somers 491a56867b8SAlan Somers ATF_TC_BODY(fhstatfs_success, tc) 492a56867b8SAlan Somers { 493a56867b8SAlan Somers pid = getpid(); 494a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhstatfs.*%d.*success", pid); 495a56867b8SAlan Somers 496a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 497a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 498a56867b8SAlan Somers /* Get the file handle to be passed to fhstatfs(2) */ 499a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 500a56867b8SAlan Somers 501a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 502a56867b8SAlan Somers ATF_REQUIRE_EQ(0, fhstatfs(&fht, &statfsbuff)); 503a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 504a56867b8SAlan Somers close(filedesc); 505a56867b8SAlan Somers } 506a56867b8SAlan Somers 507a56867b8SAlan Somers ATF_TC_CLEANUP(fhstatfs_success, tc) 508a56867b8SAlan Somers { 509a56867b8SAlan Somers cleanup(); 510a56867b8SAlan Somers } 511a56867b8SAlan Somers 512a56867b8SAlan Somers 513a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstatfs_failure); 514a56867b8SAlan Somers ATF_TC_HEAD(fhstatfs_failure, tc) 515a56867b8SAlan Somers { 516a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 517a56867b8SAlan Somers "fhstatfs(2) call"); 518a56867b8SAlan Somers } 519a56867b8SAlan Somers 520a56867b8SAlan Somers ATF_TC_BODY(fhstatfs_failure, tc) 521a56867b8SAlan Somers { 522a56867b8SAlan Somers const char *regex = "fhstatfs.*return,failure : Bad address"; 523a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 524a56867b8SAlan Somers /* Failure reason: NULL does not represent any file handle */ 525a56867b8SAlan Somers ATF_REQUIRE_EQ(-1, fhstatfs(NULL, NULL)); 526a56867b8SAlan Somers check_audit(fds, regex, pipefd); 527a56867b8SAlan Somers } 528a56867b8SAlan Somers 529a56867b8SAlan Somers ATF_TC_CLEANUP(fhstatfs_failure, tc) 530a56867b8SAlan Somers { 531a56867b8SAlan Somers cleanup(); 532a56867b8SAlan Somers } 533a56867b8SAlan Somers 534a56867b8SAlan Somers 53528845213SAlan Somers ATF_TC_WITH_CLEANUP(access_success); 53628845213SAlan Somers ATF_TC_HEAD(access_success, tc) 53728845213SAlan Somers { 53828845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 53928845213SAlan Somers "access(2) call"); 54028845213SAlan Somers } 54128845213SAlan Somers 54228845213SAlan Somers ATF_TC_BODY(access_success, tc) 54328845213SAlan Somers { 54428845213SAlan Somers /* File needs to exist to call access(2) */ 54528845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 54628845213SAlan Somers FILE *pipefd = setup(fds, auclass); 54728845213SAlan Somers ATF_REQUIRE_EQ(0, access(path, F_OK)); 54828845213SAlan Somers check_audit(fds, successreg, pipefd); 54928845213SAlan Somers close(filedesc); 55028845213SAlan Somers } 55128845213SAlan Somers 55228845213SAlan Somers ATF_TC_CLEANUP(access_success, tc) 55328845213SAlan Somers { 55428845213SAlan Somers cleanup(); 55528845213SAlan Somers } 55628845213SAlan Somers 55728845213SAlan Somers 55828845213SAlan Somers ATF_TC_WITH_CLEANUP(access_failure); 55928845213SAlan Somers ATF_TC_HEAD(access_failure, tc) 56028845213SAlan Somers { 56128845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 56228845213SAlan Somers "access(2) call"); 56328845213SAlan Somers } 56428845213SAlan Somers 56528845213SAlan Somers ATF_TC_BODY(access_failure, tc) 56628845213SAlan Somers { 56728845213SAlan Somers FILE *pipefd = setup(fds, auclass); 56828845213SAlan Somers /* Failure reason: file does not exist */ 56928845213SAlan Somers ATF_REQUIRE_EQ(-1, access(errpath, F_OK)); 57028845213SAlan Somers check_audit(fds, failurereg, pipefd); 57128845213SAlan Somers } 57228845213SAlan Somers 57328845213SAlan Somers ATF_TC_CLEANUP(access_failure, tc) 57428845213SAlan Somers { 57528845213SAlan Somers cleanup(); 57628845213SAlan Somers } 57728845213SAlan Somers 57828845213SAlan Somers 57928845213SAlan Somers ATF_TC_WITH_CLEANUP(eaccess_success); 58028845213SAlan Somers ATF_TC_HEAD(eaccess_success, tc) 58128845213SAlan Somers { 58228845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 58328845213SAlan Somers "eaccess(2) call"); 58428845213SAlan Somers } 58528845213SAlan Somers 58628845213SAlan Somers ATF_TC_BODY(eaccess_success, tc) 58728845213SAlan Somers { 58828845213SAlan Somers /* File needs to exist to call eaccess(2) */ 58928845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 59028845213SAlan Somers FILE *pipefd = setup(fds, auclass); 59128845213SAlan Somers ATF_REQUIRE_EQ(0, eaccess(path, F_OK)); 59228845213SAlan Somers check_audit(fds, successreg, pipefd); 59328845213SAlan Somers close(filedesc); 59428845213SAlan Somers } 59528845213SAlan Somers 59628845213SAlan Somers ATF_TC_CLEANUP(eaccess_success, tc) 59728845213SAlan Somers { 59828845213SAlan Somers cleanup(); 59928845213SAlan Somers } 60028845213SAlan Somers 60128845213SAlan Somers 60228845213SAlan Somers ATF_TC_WITH_CLEANUP(eaccess_failure); 60328845213SAlan Somers ATF_TC_HEAD(eaccess_failure, tc) 60428845213SAlan Somers { 60528845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 60628845213SAlan Somers "eaccess(2) call"); 60728845213SAlan Somers } 60828845213SAlan Somers 60928845213SAlan Somers ATF_TC_BODY(eaccess_failure, tc) 61028845213SAlan Somers { 61128845213SAlan Somers FILE *pipefd = setup(fds, auclass); 61228845213SAlan Somers /* Failure reason: file does not exist */ 61328845213SAlan Somers ATF_REQUIRE_EQ(-1, eaccess(errpath, F_OK)); 61428845213SAlan Somers check_audit(fds, failurereg, pipefd); 61528845213SAlan Somers } 61628845213SAlan Somers 61728845213SAlan Somers ATF_TC_CLEANUP(eaccess_failure, tc) 61828845213SAlan Somers { 61928845213SAlan Somers cleanup(); 62028845213SAlan Somers } 62128845213SAlan Somers 62228845213SAlan Somers 62328845213SAlan Somers ATF_TC_WITH_CLEANUP(faccessat_success); 62428845213SAlan Somers ATF_TC_HEAD(faccessat_success, tc) 62528845213SAlan Somers { 62628845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 62728845213SAlan Somers "faccessat(2) call"); 62828845213SAlan Somers } 62928845213SAlan Somers 63028845213SAlan Somers ATF_TC_BODY(faccessat_success, tc) 63128845213SAlan Somers { 63228845213SAlan Somers /* File needs to exist to call faccessat(2) */ 63328845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 63428845213SAlan Somers FILE *pipefd = setup(fds, auclass); 63528845213SAlan Somers ATF_REQUIRE_EQ(0, faccessat(AT_FDCWD, path, F_OK, AT_EACCESS)); 63628845213SAlan Somers check_audit(fds, successreg, pipefd); 63728845213SAlan Somers close(filedesc); 63828845213SAlan Somers } 63928845213SAlan Somers 64028845213SAlan Somers ATF_TC_CLEANUP(faccessat_success, tc) 64128845213SAlan Somers { 64228845213SAlan Somers cleanup(); 64328845213SAlan Somers } 64428845213SAlan Somers 64528845213SAlan Somers 64628845213SAlan Somers ATF_TC_WITH_CLEANUP(faccessat_failure); 64728845213SAlan Somers ATF_TC_HEAD(faccessat_failure, tc) 64828845213SAlan Somers { 64928845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 65028845213SAlan Somers "faccessat(2) call"); 65128845213SAlan Somers } 65228845213SAlan Somers 65328845213SAlan Somers ATF_TC_BODY(faccessat_failure, tc) 65428845213SAlan Somers { 65528845213SAlan Somers FILE *pipefd = setup(fds, auclass); 65628845213SAlan Somers /* Failure reason: file does not exist */ 65728845213SAlan Somers ATF_REQUIRE_EQ(-1, faccessat(AT_FDCWD, errpath, F_OK, AT_EACCESS)); 65828845213SAlan Somers check_audit(fds, failurereg, pipefd); 65928845213SAlan Somers } 66028845213SAlan Somers 66128845213SAlan Somers ATF_TC_CLEANUP(faccessat_failure, tc) 66228845213SAlan Somers { 66328845213SAlan Somers cleanup(); 66428845213SAlan Somers } 66528845213SAlan Somers 66628845213SAlan Somers 6672c347e63SAlan Somers ATF_TC_WITH_CLEANUP(pathconf_success); 6682c347e63SAlan Somers ATF_TC_HEAD(pathconf_success, tc) 6692c347e63SAlan Somers { 6702c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 6712c347e63SAlan Somers "pathconf(2) call"); 6722c347e63SAlan Somers } 6732c347e63SAlan Somers 6742c347e63SAlan Somers ATF_TC_BODY(pathconf_success, tc) 6752c347e63SAlan Somers { 6762c347e63SAlan Somers /* File needs to exist to call pathconf(2) */ 6772c347e63SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 6782c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 6792c347e63SAlan Somers /* Get the maximum number of bytes of filename */ 6802c347e63SAlan Somers ATF_REQUIRE(pathconf(path, _PC_NAME_MAX) != -1); 6812c347e63SAlan Somers check_audit(fds, successreg, pipefd); 6822c347e63SAlan Somers close(filedesc); 6832c347e63SAlan Somers } 6842c347e63SAlan Somers 6852c347e63SAlan Somers ATF_TC_CLEANUP(pathconf_success, tc) 6862c347e63SAlan Somers { 6872c347e63SAlan Somers cleanup(); 6882c347e63SAlan Somers } 6892c347e63SAlan Somers 6902c347e63SAlan Somers 6912c347e63SAlan Somers ATF_TC_WITH_CLEANUP(pathconf_failure); 6922c347e63SAlan Somers ATF_TC_HEAD(pathconf_failure, tc) 6932c347e63SAlan Somers { 6942c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 6952c347e63SAlan Somers "pathconf(2) call"); 6962c347e63SAlan Somers } 6972c347e63SAlan Somers 6982c347e63SAlan Somers ATF_TC_BODY(pathconf_failure, tc) 6992c347e63SAlan Somers { 7002c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7012c347e63SAlan Somers /* Failure reason: file does not exist */ 7022c347e63SAlan Somers ATF_REQUIRE_EQ(-1, pathconf(errpath, _PC_NAME_MAX)); 7032c347e63SAlan Somers check_audit(fds, failurereg, pipefd); 7042c347e63SAlan Somers } 7052c347e63SAlan Somers 7062c347e63SAlan Somers ATF_TC_CLEANUP(pathconf_failure, tc) 7072c347e63SAlan Somers { 7082c347e63SAlan Somers cleanup(); 7092c347e63SAlan Somers } 7102c347e63SAlan Somers 7112c347e63SAlan Somers 7122c347e63SAlan Somers ATF_TC_WITH_CLEANUP(lpathconf_success); 7132c347e63SAlan Somers ATF_TC_HEAD(lpathconf_success, tc) 7142c347e63SAlan Somers { 7152c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 7162c347e63SAlan Somers "lpathconf(2) call"); 7172c347e63SAlan Somers } 7182c347e63SAlan Somers 7192c347e63SAlan Somers ATF_TC_BODY(lpathconf_success, tc) 7202c347e63SAlan Somers { 7212c347e63SAlan Somers /* Symbolic link needs to exist to call lpathconf(2) */ 7222c347e63SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 7232c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7242c347e63SAlan Somers /* Get the maximum number of bytes of symlink's name */ 7252c347e63SAlan Somers ATF_REQUIRE(lpathconf(path, _PC_SYMLINK_MAX) != -1); 7262c347e63SAlan Somers check_audit(fds, successreg, pipefd); 7272c347e63SAlan Somers } 7282c347e63SAlan Somers 7292c347e63SAlan Somers ATF_TC_CLEANUP(lpathconf_success, tc) 7302c347e63SAlan Somers { 7312c347e63SAlan Somers cleanup(); 7322c347e63SAlan Somers } 7332c347e63SAlan Somers 7342c347e63SAlan Somers 7352c347e63SAlan Somers ATF_TC_WITH_CLEANUP(lpathconf_failure); 7362c347e63SAlan Somers ATF_TC_HEAD(lpathconf_failure, tc) 7372c347e63SAlan Somers { 7382c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 7392c347e63SAlan Somers "lpathconf(2) call"); 7402c347e63SAlan Somers } 7412c347e63SAlan Somers 7422c347e63SAlan Somers ATF_TC_BODY(lpathconf_failure, tc) 7432c347e63SAlan Somers { 7442c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7452c347e63SAlan Somers /* Failure reason: symbolic link does not exist */ 7462c347e63SAlan Somers ATF_REQUIRE_EQ(-1, lpathconf(errpath, _PC_SYMLINK_MAX)); 7472c347e63SAlan Somers check_audit(fds, failurereg, pipefd); 7482c347e63SAlan Somers } 7492c347e63SAlan Somers 7502c347e63SAlan Somers ATF_TC_CLEANUP(lpathconf_failure, tc) 7512c347e63SAlan Somers { 7522c347e63SAlan Somers cleanup(); 7532c347e63SAlan Somers } 7542c347e63SAlan Somers 7552c347e63SAlan Somers 7562c347e63SAlan Somers ATF_TC_WITH_CLEANUP(fpathconf_success); 7572c347e63SAlan Somers ATF_TC_HEAD(fpathconf_success, tc) 7582c347e63SAlan Somers { 7592c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 7602c347e63SAlan Somers "fpathconf(2) call"); 7612c347e63SAlan Somers } 7622c347e63SAlan Somers 7632c347e63SAlan Somers ATF_TC_BODY(fpathconf_success, tc) 7642c347e63SAlan Somers { 7652c347e63SAlan Somers pid = getpid(); 7662c347e63SAlan Somers snprintf(extregex, sizeof(extregex), "fpathconf.*%d.*success", pid); 7672c347e63SAlan Somers 7682c347e63SAlan Somers /* File needs to exist to call fpathconf(2) */ 7692c347e63SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 7702c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7712c347e63SAlan Somers /* Get the maximum number of bytes of filename */ 7722c347e63SAlan Somers ATF_REQUIRE(fpathconf(filedesc, _PC_NAME_MAX) != -1); 7732c347e63SAlan Somers check_audit(fds, extregex, pipefd); 7742c347e63SAlan Somers close(filedesc); 7752c347e63SAlan Somers } 7762c347e63SAlan Somers 7772c347e63SAlan Somers ATF_TC_CLEANUP(fpathconf_success, tc) 7782c347e63SAlan Somers { 7792c347e63SAlan Somers cleanup(); 7802c347e63SAlan Somers } 7812c347e63SAlan Somers 7822c347e63SAlan Somers 7832c347e63SAlan Somers ATF_TC_WITH_CLEANUP(fpathconf_failure); 7842c347e63SAlan Somers ATF_TC_HEAD(fpathconf_failure, tc) 7852c347e63SAlan Somers { 7862c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 7872c347e63SAlan Somers "fpathconf(2) call"); 7882c347e63SAlan Somers } 7892c347e63SAlan Somers 7902c347e63SAlan Somers ATF_TC_BODY(fpathconf_failure, tc) 7912c347e63SAlan Somers { 7922c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7932c347e63SAlan Somers const char *regex = "fpathconf.*return,failure : Bad file descriptor"; 7942c347e63SAlan Somers /* Failure reason: Bad file descriptor */ 7952c347e63SAlan Somers ATF_REQUIRE_EQ(-1, fpathconf(-1, _PC_NAME_MAX)); 7962c347e63SAlan Somers check_audit(fds, regex, pipefd); 7972c347e63SAlan Somers } 7982c347e63SAlan Somers 7992c347e63SAlan Somers ATF_TC_CLEANUP(fpathconf_failure, tc) 8002c347e63SAlan Somers { 8012c347e63SAlan Somers cleanup(); 8022c347e63SAlan Somers } 8032c347e63SAlan Somers 8042c347e63SAlan Somers 8057d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_file_success); 8067d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_file_success, tc) 8077d951cc2SAlan Somers { 8087d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 8097d951cc2SAlan Somers "extattr_get_file(2) call"); 8107d951cc2SAlan Somers } 8117d951cc2SAlan Somers 8127d951cc2SAlan Somers ATF_TC_BODY(extattr_get_file_success, tc) 8137d951cc2SAlan Somers { 8147d951cc2SAlan Somers /* File needs to exist to call extattr_get_file(2) */ 8157d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 8167d951cc2SAlan Somers /* Set an extended attribute to be retrieved later on */ 8177d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path, 8187d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 8197d951cc2SAlan Somers 8207d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 8217d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 8227d951cc2SAlan Somers "extattr_get_file.*%s.*%s.*return,success", path, name); 8237d951cc2SAlan Somers 8247d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 8257d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_get_file(path, 8267d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 8277d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 8287d951cc2SAlan Somers close(filedesc); 8297d951cc2SAlan Somers } 8307d951cc2SAlan Somers 8317d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_file_success, tc) 8327d951cc2SAlan Somers { 8337d951cc2SAlan Somers cleanup(); 8347d951cc2SAlan Somers } 8357d951cc2SAlan Somers 8367d951cc2SAlan Somers 8377d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_file_failure); 8387d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_file_failure, tc) 8397d951cc2SAlan Somers { 8407d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 8417d951cc2SAlan Somers "extattr_get_file(2) call"); 8427d951cc2SAlan Somers } 8437d951cc2SAlan Somers 8447d951cc2SAlan Somers ATF_TC_BODY(extattr_get_file_failure, tc) 8457d951cc2SAlan Somers { 8467d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 8477d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 8487d951cc2SAlan Somers "extattr_get_file.*%s.*%s.*failure", path, name); 8497d951cc2SAlan Somers 8507d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 8517d951cc2SAlan Somers /* Failure reason: file does not exist */ 8527d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_get_file(path, 8537d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 8547d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 8557d951cc2SAlan Somers } 8567d951cc2SAlan Somers 8577d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_file_failure, tc) 8587d951cc2SAlan Somers { 8597d951cc2SAlan Somers cleanup(); 8607d951cc2SAlan Somers } 8617d951cc2SAlan Somers 8627d951cc2SAlan Somers 8637d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_fd_success); 8647d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_fd_success, tc) 8657d951cc2SAlan Somers { 8667d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 8677d951cc2SAlan Somers "extattr_get_fd(2) call"); 8687d951cc2SAlan Somers } 8697d951cc2SAlan Somers 8707d951cc2SAlan Somers ATF_TC_BODY(extattr_get_fd_success, tc) 8717d951cc2SAlan Somers { 8727d951cc2SAlan Somers /* File needs to exist to call extattr_get_fd(2) */ 8737d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 8747d951cc2SAlan Somers /* Set an extended attribute to be retrieved later on */ 8757d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path, 8767d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 8777d951cc2SAlan Somers 8787d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 8797d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 8807d951cc2SAlan Somers "extattr_get_fd.*%s.*return,success", name); 8817d951cc2SAlan Somers 8827d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 8837d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_get_fd(filedesc, 8847d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 8857d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 8867d951cc2SAlan Somers close(filedesc); 8877d951cc2SAlan Somers } 8887d951cc2SAlan Somers 8897d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_fd_success, tc) 8907d951cc2SAlan Somers { 8917d951cc2SAlan Somers cleanup(); 8927d951cc2SAlan Somers } 8937d951cc2SAlan Somers 8947d951cc2SAlan Somers 8957d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_fd_failure); 8967d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_fd_failure, tc) 8977d951cc2SAlan Somers { 8987d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 8997d951cc2SAlan Somers "extattr_get_fd(2) call"); 9007d951cc2SAlan Somers } 9017d951cc2SAlan Somers 9027d951cc2SAlan Somers ATF_TC_BODY(extattr_get_fd_failure, tc) 9037d951cc2SAlan Somers { 9047d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9057d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9067d951cc2SAlan Somers "extattr_get_fd.*%s.*return,failure : Bad file descriptor", name); 9077d951cc2SAlan Somers 9087d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 9097d951cc2SAlan Somers /* Failure reason: Invalid file descriptor */ 9107d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_get_fd(-1, 9117d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 9127d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9137d951cc2SAlan Somers } 9147d951cc2SAlan Somers 9157d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_fd_failure, tc) 9167d951cc2SAlan Somers { 9177d951cc2SAlan Somers cleanup(); 9187d951cc2SAlan Somers } 9197d951cc2SAlan Somers 9207d951cc2SAlan Somers 9217d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_link_success); 9227d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_link_success, tc) 9237d951cc2SAlan Somers { 9247d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 9257d951cc2SAlan Somers "extattr_get_link(2) call"); 9267d951cc2SAlan Somers } 9277d951cc2SAlan Somers 9287d951cc2SAlan Somers ATF_TC_BODY(extattr_get_link_success, tc) 9297d951cc2SAlan Somers { 9307d951cc2SAlan Somers /* Symbolic link needs to exist to call extattr_get_link(2) */ 9317d951cc2SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 9327d951cc2SAlan Somers /* Set an extended attribute to be retrieved later on */ 9337d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_set_link(path, 9347d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 9357d951cc2SAlan Somers 9367d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9377d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9387d951cc2SAlan Somers "extattr_get_link.*%s.*%s.*return,success", path, name); 9397d951cc2SAlan Somers 9407d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 9417d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_get_link(path, 9427d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 9437d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9447d951cc2SAlan Somers } 9457d951cc2SAlan Somers 9467d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_link_success, tc) 9477d951cc2SAlan Somers { 9487d951cc2SAlan Somers cleanup(); 9497d951cc2SAlan Somers } 9507d951cc2SAlan Somers 9517d951cc2SAlan Somers 9527d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_link_failure); 9537d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_link_failure, tc) 9547d951cc2SAlan Somers { 9557d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 9567d951cc2SAlan Somers "extattr_get_link(2) call"); 9577d951cc2SAlan Somers } 9587d951cc2SAlan Somers 9597d951cc2SAlan Somers ATF_TC_BODY(extattr_get_link_failure, tc) 9607d951cc2SAlan Somers { 9617d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9627d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9637d951cc2SAlan Somers "extattr_get_link.*%s.*%s.*failure", path, name); 9647d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 9657d951cc2SAlan Somers /* Failure reason: symbolic link does not exist */ 9667d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_get_link(path, 9677d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 9687d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9697d951cc2SAlan Somers } 9707d951cc2SAlan Somers 9717d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_link_failure, tc) 9727d951cc2SAlan Somers { 9737d951cc2SAlan Somers cleanup(); 9747d951cc2SAlan Somers } 9757d951cc2SAlan Somers 9767d951cc2SAlan Somers 9777d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_file_success); 9787d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_file_success, tc) 9797d951cc2SAlan Somers { 9807d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 9817d951cc2SAlan Somers "extattr_list_file(2) call"); 9827d951cc2SAlan Somers } 9837d951cc2SAlan Somers 9847d951cc2SAlan Somers ATF_TC_BODY(extattr_list_file_success, tc) 9857d951cc2SAlan Somers { 9867d951cc2SAlan Somers int readbuff; 9877d951cc2SAlan Somers /* File needs to exist to call extattr_list_file(2) */ 9887d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 9897d951cc2SAlan Somers 9907d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 9917d951cc2SAlan Somers ATF_REQUIRE((readbuff = extattr_list_file(path, 9927d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)) != -1); 9937d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9947d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9957d951cc2SAlan Somers "extattr_list_file.*%s.*return,success,%d", path, readbuff); 9967d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9977d951cc2SAlan Somers } 9987d951cc2SAlan Somers 9997d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_file_success, tc) 10007d951cc2SAlan Somers { 10017d951cc2SAlan Somers cleanup(); 10027d951cc2SAlan Somers } 10037d951cc2SAlan Somers 10047d951cc2SAlan Somers 10057d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_file_failure); 10067d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_file_failure, tc) 10077d951cc2SAlan Somers { 10087d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 10097d951cc2SAlan Somers "extattr_list_file(2) call"); 10107d951cc2SAlan Somers } 10117d951cc2SAlan Somers 10127d951cc2SAlan Somers ATF_TC_BODY(extattr_list_file_failure, tc) 10137d951cc2SAlan Somers { 10147d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10157d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 10167d951cc2SAlan Somers "extattr_list_file.*%s.*return,failure", path); 10177d951cc2SAlan Somers 10187d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10197d951cc2SAlan Somers /* Failure reason: file does not exist */ 10207d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_list_file(path, 10217d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)); 10227d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10237d951cc2SAlan Somers } 10247d951cc2SAlan Somers 10257d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_file_failure, tc) 10267d951cc2SAlan Somers { 10277d951cc2SAlan Somers cleanup(); 10287d951cc2SAlan Somers } 10297d951cc2SAlan Somers 10307d951cc2SAlan Somers 10317d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_fd_success); 10327d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_fd_success, tc) 10337d951cc2SAlan Somers { 10347d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 10357d951cc2SAlan Somers "extattr_list_fd(2) call"); 10367d951cc2SAlan Somers } 10377d951cc2SAlan Somers 10387d951cc2SAlan Somers ATF_TC_BODY(extattr_list_fd_success, tc) 10397d951cc2SAlan Somers { 10407d951cc2SAlan Somers int readbuff; 10417d951cc2SAlan Somers /* File needs to exist to call extattr_list_fd(2) */ 10427d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 10437d951cc2SAlan Somers 10447d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10457d951cc2SAlan Somers ATF_REQUIRE((readbuff = extattr_list_fd(filedesc, 10467d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)) != -1); 10477d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10487d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 10497d951cc2SAlan Somers "extattr_list_fd.*return,success,%d", readbuff); 10507d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10517d951cc2SAlan Somers close(filedesc); 10527d951cc2SAlan Somers } 10537d951cc2SAlan Somers 10547d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_fd_success, tc) 10557d951cc2SAlan Somers { 10567d951cc2SAlan Somers cleanup(); 10577d951cc2SAlan Somers } 10587d951cc2SAlan Somers 10597d951cc2SAlan Somers 10607d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_fd_failure); 10617d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_fd_failure, tc) 10627d951cc2SAlan Somers { 10637d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 10647d951cc2SAlan Somers "extattr_list_fd(2) call"); 10657d951cc2SAlan Somers } 10667d951cc2SAlan Somers 10677d951cc2SAlan Somers ATF_TC_BODY(extattr_list_fd_failure, tc) 10687d951cc2SAlan Somers { 10697d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10707d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 10717d951cc2SAlan Somers "extattr_list_fd.*return,failure : Bad file descriptor"); 10727d951cc2SAlan Somers 10737d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10747d951cc2SAlan Somers /* Failure reason: Invalid file descriptor */ 10757d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, 10767d951cc2SAlan Somers extattr_list_fd(-1, EXTATTR_NAMESPACE_USER, NULL, 0)); 10777d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10787d951cc2SAlan Somers } 10797d951cc2SAlan Somers 10807d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_fd_failure, tc) 10817d951cc2SAlan Somers { 10827d951cc2SAlan Somers cleanup(); 10837d951cc2SAlan Somers } 10847d951cc2SAlan Somers 10857d951cc2SAlan Somers 10867d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_link_success); 10877d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_link_success, tc) 10887d951cc2SAlan Somers { 10897d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 10907d951cc2SAlan Somers "extattr_list_link(2) call"); 10917d951cc2SAlan Somers } 10927d951cc2SAlan Somers 10937d951cc2SAlan Somers ATF_TC_BODY(extattr_list_link_success, tc) 10947d951cc2SAlan Somers { 10957d951cc2SAlan Somers int readbuff; 10967d951cc2SAlan Somers /* Symbolic link needs to exist to call extattr_list_link(2) */ 10977d951cc2SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 10987d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10997d951cc2SAlan Somers 11007d951cc2SAlan Somers ATF_REQUIRE((readbuff = extattr_list_link(path, 11017d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)) != -1); 11027d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 11037d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 11047d951cc2SAlan Somers "extattr_list_link.*%s.*return,success,%d", path, readbuff); 11057d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11067d951cc2SAlan Somers } 11077d951cc2SAlan Somers 11087d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_link_success, tc) 11097d951cc2SAlan Somers { 11107d951cc2SAlan Somers cleanup(); 11117d951cc2SAlan Somers } 11127d951cc2SAlan Somers 11137d951cc2SAlan Somers 11147d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_link_failure); 11157d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_link_failure, tc) 11167d951cc2SAlan Somers { 11177d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 11187d951cc2SAlan Somers "extattr_list_link(2) call"); 11197d951cc2SAlan Somers } 11207d951cc2SAlan Somers 11217d951cc2SAlan Somers ATF_TC_BODY(extattr_list_link_failure, tc) 11227d951cc2SAlan Somers { 11237d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 11247d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 11257d951cc2SAlan Somers "extattr_list_link.*%s.*failure", path); 11267d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 11277d951cc2SAlan Somers /* Failure reason: symbolic link does not exist */ 11287d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_list_link(path, 11297d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)); 11307d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11317d951cc2SAlan Somers } 11327d951cc2SAlan Somers 11337d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_link_failure, tc) 11347d951cc2SAlan Somers { 11357d951cc2SAlan Somers cleanup(); 11367d951cc2SAlan Somers } 11377d951cc2SAlan Somers 11387d951cc2SAlan Somers 1139f86d6517SAlan Somers ATF_TP_ADD_TCS(tp) 1140f86d6517SAlan Somers { 1141f86d6517SAlan Somers ATF_TP_ADD_TC(tp, stat_success); 1142f86d6517SAlan Somers ATF_TP_ADD_TC(tp, stat_failure); 1143f86d6517SAlan Somers ATF_TP_ADD_TC(tp, lstat_success); 1144f86d6517SAlan Somers ATF_TP_ADD_TC(tp, lstat_failure); 1145f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstat_success); 1146f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstat_failure); 1147f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstatat_success); 1148f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstatat_failure); 1149f86d6517SAlan Somers 1150ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, statfs_success); 1151ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, statfs_failure); 1152ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, fstatfs_success); 1153ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, fstatfs_failure); 1154ae19b2efSAlan Somers 1155ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, getfsstat_success); 1156ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, getfsstat_failure); 1157ae19b2efSAlan Somers 1158a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhopen_success); 1159a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhopen_failure); 1160a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstat_success); 1161a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstat_failure); 1162a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstatfs_success); 1163a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstatfs_failure); 1164a56867b8SAlan Somers 116528845213SAlan Somers ATF_TP_ADD_TC(tp, access_success); 116628845213SAlan Somers ATF_TP_ADD_TC(tp, access_failure); 116728845213SAlan Somers ATF_TP_ADD_TC(tp, eaccess_success); 116828845213SAlan Somers ATF_TP_ADD_TC(tp, eaccess_failure); 116928845213SAlan Somers ATF_TP_ADD_TC(tp, faccessat_success); 117028845213SAlan Somers ATF_TP_ADD_TC(tp, faccessat_failure); 117128845213SAlan Somers 11722c347e63SAlan Somers ATF_TP_ADD_TC(tp, pathconf_success); 11732c347e63SAlan Somers ATF_TP_ADD_TC(tp, pathconf_failure); 11742c347e63SAlan Somers ATF_TP_ADD_TC(tp, lpathconf_success); 11752c347e63SAlan Somers ATF_TP_ADD_TC(tp, lpathconf_failure); 11762c347e63SAlan Somers ATF_TP_ADD_TC(tp, fpathconf_success); 11772c347e63SAlan Somers ATF_TP_ADD_TC(tp, fpathconf_failure); 11782c347e63SAlan Somers 11797d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_file_success); 11807d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_file_failure); 11817d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_fd_success); 11827d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_fd_failure); 11837d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_link_success); 11847d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_link_failure); 11857d951cc2SAlan Somers 11867d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_file_success); 11877d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_file_failure); 11887d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_fd_success); 11897d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_fd_failure); 11907d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_link_success); 11917d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_link_failure); 11927d951cc2SAlan Somers 1193f86d6517SAlan Somers return (atf_no_error()); 1194f86d6517SAlan Somers } 1195