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]; 475641c23fSAlan 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 377*55cd4523SAlan Somers ATF_TC_WITH_CLEANUP(lgetfh_success); 378*55cd4523SAlan Somers ATF_TC_HEAD(lgetfh_success, tc) 379*55cd4523SAlan Somers { 380*55cd4523SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 381*55cd4523SAlan Somers "lgetfh(2) call"); 382*55cd4523SAlan Somers } 383*55cd4523SAlan Somers 384*55cd4523SAlan Somers ATF_TC_BODY(lgetfh_success, tc) 385*55cd4523SAlan Somers { 386*55cd4523SAlan Somers /* BSM conversion requested for unknown event 43061 */ 387*55cd4523SAlan Somers atf_tc_expect_fail("PR 228374: lgetfh(2) does not get audited in success mode"); 388*55cd4523SAlan Somers 389*55cd4523SAlan Somers /* Symbolic link needs to exist to get a file-handle */ 390*55cd4523SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 391*55cd4523SAlan Somers const char *regex = "lgetfh.*return,success"; 392*55cd4523SAlan Somers FILE *pipefd = setup(fds, "fa"); 393*55cd4523SAlan Somers ATF_REQUIRE_EQ(0, lgetfh(path, &fht)); 394*55cd4523SAlan Somers check_audit(fds, regex, pipefd); 395*55cd4523SAlan Somers } 396*55cd4523SAlan Somers 397*55cd4523SAlan Somers ATF_TC_CLEANUP(lgetfh_success, tc) 398*55cd4523SAlan Somers { 399*55cd4523SAlan Somers cleanup(); 400*55cd4523SAlan Somers } 401*55cd4523SAlan Somers 402*55cd4523SAlan Somers 403*55cd4523SAlan Somers ATF_TC_WITH_CLEANUP(lgetfh_failure); 404*55cd4523SAlan Somers ATF_TC_HEAD(lgetfh_failure, tc) 405*55cd4523SAlan Somers { 406*55cd4523SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 407*55cd4523SAlan Somers "lgetfh(2) call"); 408*55cd4523SAlan Somers } 409*55cd4523SAlan Somers 410*55cd4523SAlan Somers ATF_TC_BODY(lgetfh_failure, tc) 411*55cd4523SAlan Somers { 412*55cd4523SAlan Somers /* BSM conversion requested for unknown event 43061 */ 413*55cd4523SAlan Somers atf_tc_expect_fail("PR 228374: lgetfh(2) does not get audited in failure mode"); 414*55cd4523SAlan Somers 415*55cd4523SAlan Somers const char *regex = "lgetfh.*return,failure"; 416*55cd4523SAlan Somers FILE *pipefd = setup(fds, "fa"); 417*55cd4523SAlan Somers /* Failure reason: symbolic link does not exist */ 418*55cd4523SAlan Somers ATF_REQUIRE_EQ(-1, lgetfh(errpath, &fht)); 419*55cd4523SAlan Somers check_audit(fds, regex, pipefd); 420*55cd4523SAlan Somers } 421*55cd4523SAlan Somers 422*55cd4523SAlan Somers ATF_TC_CLEANUP(lgetfh_failure, tc) 423*55cd4523SAlan Somers { 424*55cd4523SAlan Somers cleanup(); 425*55cd4523SAlan Somers } 426*55cd4523SAlan Somers 427*55cd4523SAlan Somers 428a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhopen_success); 429a56867b8SAlan Somers ATF_TC_HEAD(fhopen_success, tc) 430a56867b8SAlan Somers { 431a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 432a56867b8SAlan Somers "fhopen(2) call"); 433a56867b8SAlan Somers } 434a56867b8SAlan Somers 435a56867b8SAlan Somers ATF_TC_BODY(fhopen_success, tc) 436a56867b8SAlan Somers { 437a56867b8SAlan Somers pid = getpid(); 438a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhopen.*%d.*return,success", pid); 439a56867b8SAlan Somers 440a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 441a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 442a56867b8SAlan Somers /* Get the file handle to be passed to fhopen(2) */ 443a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 444a56867b8SAlan Somers 445a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 446a56867b8SAlan Somers ATF_REQUIRE((fhdesc = fhopen(&fht, O_RDWR)) != -1); 447a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 448a56867b8SAlan Somers 449a56867b8SAlan Somers close(fhdesc); 450a56867b8SAlan Somers close(filedesc); 451a56867b8SAlan Somers } 452a56867b8SAlan Somers 453a56867b8SAlan Somers ATF_TC_CLEANUP(fhopen_success, tc) 454a56867b8SAlan Somers { 455a56867b8SAlan Somers cleanup(); 456a56867b8SAlan Somers } 457a56867b8SAlan Somers 458a56867b8SAlan Somers 459a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhopen_failure); 460a56867b8SAlan Somers ATF_TC_HEAD(fhopen_failure, tc) 461a56867b8SAlan Somers { 462a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 463a56867b8SAlan Somers "fhopen(2) call"); 464a56867b8SAlan Somers } 465a56867b8SAlan Somers 466a56867b8SAlan Somers ATF_TC_BODY(fhopen_failure, tc) 467a56867b8SAlan Somers { 468a56867b8SAlan Somers const char *regex = "fhopen.*return,failure : Invalid argument"; 469a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 470a56867b8SAlan Somers /* 471a56867b8SAlan Somers * Failure reason: NULL does not represent any file handle 472a56867b8SAlan Somers * and O_CREAT is not allowed as the flag for fhopen(2) 473a56867b8SAlan Somers */ 474a56867b8SAlan Somers ATF_REQUIRE_EQ(-1, fhopen(NULL, O_CREAT)); 475a56867b8SAlan Somers check_audit(fds, regex, pipefd); 476a56867b8SAlan Somers } 477a56867b8SAlan Somers 478a56867b8SAlan Somers ATF_TC_CLEANUP(fhopen_failure, tc) 479a56867b8SAlan Somers { 480a56867b8SAlan Somers cleanup(); 481a56867b8SAlan Somers } 482a56867b8SAlan Somers 483a56867b8SAlan Somers 484a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstat_success); 485a56867b8SAlan Somers ATF_TC_HEAD(fhstat_success, tc) 486a56867b8SAlan Somers { 487a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 488a56867b8SAlan Somers "fstat(2) call"); 489a56867b8SAlan Somers } 490a56867b8SAlan Somers 491a56867b8SAlan Somers ATF_TC_BODY(fhstat_success, tc) 492a56867b8SAlan Somers { 493a56867b8SAlan Somers pid = getpid(); 494a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhstat.*%d.*return,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 fhstat(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, fhstat(&fht, &statbuff)); 503a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 504a56867b8SAlan Somers close(filedesc); 505a56867b8SAlan Somers } 506a56867b8SAlan Somers 507a56867b8SAlan Somers ATF_TC_CLEANUP(fhstat_success, tc) 508a56867b8SAlan Somers { 509a56867b8SAlan Somers cleanup(); 510a56867b8SAlan Somers } 511a56867b8SAlan Somers 512a56867b8SAlan Somers 513a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstat_failure); 514a56867b8SAlan Somers ATF_TC_HEAD(fhstat_failure, tc) 515a56867b8SAlan Somers { 516a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 517a56867b8SAlan Somers "fhstat(2) call"); 518a56867b8SAlan Somers } 519a56867b8SAlan Somers 520a56867b8SAlan Somers ATF_TC_BODY(fhstat_failure, tc) 521a56867b8SAlan Somers { 522a56867b8SAlan Somers const char *regex = "fhstat.*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, fhstat(NULL, NULL)); 526a56867b8SAlan Somers check_audit(fds, regex, pipefd); 527a56867b8SAlan Somers } 528a56867b8SAlan Somers 529a56867b8SAlan Somers ATF_TC_CLEANUP(fhstat_failure, tc) 530a56867b8SAlan Somers { 531a56867b8SAlan Somers cleanup(); 532a56867b8SAlan Somers } 533a56867b8SAlan Somers 534a56867b8SAlan Somers 535a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstatfs_success); 536a56867b8SAlan Somers ATF_TC_HEAD(fhstatfs_success, tc) 537a56867b8SAlan Somers { 538a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 539a56867b8SAlan Somers "fstatfs(2) call"); 540a56867b8SAlan Somers } 541a56867b8SAlan Somers 542a56867b8SAlan Somers ATF_TC_BODY(fhstatfs_success, tc) 543a56867b8SAlan Somers { 544a56867b8SAlan Somers pid = getpid(); 545a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhstatfs.*%d.*success", pid); 546a56867b8SAlan Somers 547a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 548a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 549a56867b8SAlan Somers /* Get the file handle to be passed to fhstatfs(2) */ 550a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 551a56867b8SAlan Somers 552a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 553a56867b8SAlan Somers ATF_REQUIRE_EQ(0, fhstatfs(&fht, &statfsbuff)); 554a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 555a56867b8SAlan Somers close(filedesc); 556a56867b8SAlan Somers } 557a56867b8SAlan Somers 558a56867b8SAlan Somers ATF_TC_CLEANUP(fhstatfs_success, tc) 559a56867b8SAlan Somers { 560a56867b8SAlan Somers cleanup(); 561a56867b8SAlan Somers } 562a56867b8SAlan Somers 563a56867b8SAlan Somers 564a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstatfs_failure); 565a56867b8SAlan Somers ATF_TC_HEAD(fhstatfs_failure, tc) 566a56867b8SAlan Somers { 567a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 568a56867b8SAlan Somers "fhstatfs(2) call"); 569a56867b8SAlan Somers } 570a56867b8SAlan Somers 571a56867b8SAlan Somers ATF_TC_BODY(fhstatfs_failure, tc) 572a56867b8SAlan Somers { 573a56867b8SAlan Somers const char *regex = "fhstatfs.*return,failure : Bad address"; 574a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 575a56867b8SAlan Somers /* Failure reason: NULL does not represent any file handle */ 576a56867b8SAlan Somers ATF_REQUIRE_EQ(-1, fhstatfs(NULL, NULL)); 577a56867b8SAlan Somers check_audit(fds, regex, pipefd); 578a56867b8SAlan Somers } 579a56867b8SAlan Somers 580a56867b8SAlan Somers ATF_TC_CLEANUP(fhstatfs_failure, tc) 581a56867b8SAlan Somers { 582a56867b8SAlan Somers cleanup(); 583a56867b8SAlan Somers } 584a56867b8SAlan Somers 585a56867b8SAlan Somers 58628845213SAlan Somers ATF_TC_WITH_CLEANUP(access_success); 58728845213SAlan Somers ATF_TC_HEAD(access_success, tc) 58828845213SAlan Somers { 58928845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 59028845213SAlan Somers "access(2) call"); 59128845213SAlan Somers } 59228845213SAlan Somers 59328845213SAlan Somers ATF_TC_BODY(access_success, tc) 59428845213SAlan Somers { 59528845213SAlan Somers /* File needs to exist to call access(2) */ 59628845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 59728845213SAlan Somers FILE *pipefd = setup(fds, auclass); 59828845213SAlan Somers ATF_REQUIRE_EQ(0, access(path, F_OK)); 59928845213SAlan Somers check_audit(fds, successreg, pipefd); 60028845213SAlan Somers close(filedesc); 60128845213SAlan Somers } 60228845213SAlan Somers 60328845213SAlan Somers ATF_TC_CLEANUP(access_success, tc) 60428845213SAlan Somers { 60528845213SAlan Somers cleanup(); 60628845213SAlan Somers } 60728845213SAlan Somers 60828845213SAlan Somers 60928845213SAlan Somers ATF_TC_WITH_CLEANUP(access_failure); 61028845213SAlan Somers ATF_TC_HEAD(access_failure, tc) 61128845213SAlan Somers { 61228845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 61328845213SAlan Somers "access(2) call"); 61428845213SAlan Somers } 61528845213SAlan Somers 61628845213SAlan Somers ATF_TC_BODY(access_failure, tc) 61728845213SAlan Somers { 61828845213SAlan Somers FILE *pipefd = setup(fds, auclass); 61928845213SAlan Somers /* Failure reason: file does not exist */ 62028845213SAlan Somers ATF_REQUIRE_EQ(-1, access(errpath, F_OK)); 62128845213SAlan Somers check_audit(fds, failurereg, pipefd); 62228845213SAlan Somers } 62328845213SAlan Somers 62428845213SAlan Somers ATF_TC_CLEANUP(access_failure, tc) 62528845213SAlan Somers { 62628845213SAlan Somers cleanup(); 62728845213SAlan Somers } 62828845213SAlan Somers 62928845213SAlan Somers 63028845213SAlan Somers ATF_TC_WITH_CLEANUP(eaccess_success); 63128845213SAlan Somers ATF_TC_HEAD(eaccess_success, tc) 63228845213SAlan Somers { 63328845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 63428845213SAlan Somers "eaccess(2) call"); 63528845213SAlan Somers } 63628845213SAlan Somers 63728845213SAlan Somers ATF_TC_BODY(eaccess_success, tc) 63828845213SAlan Somers { 63928845213SAlan Somers /* File needs to exist to call eaccess(2) */ 64028845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 64128845213SAlan Somers FILE *pipefd = setup(fds, auclass); 64228845213SAlan Somers ATF_REQUIRE_EQ(0, eaccess(path, F_OK)); 64328845213SAlan Somers check_audit(fds, successreg, pipefd); 64428845213SAlan Somers close(filedesc); 64528845213SAlan Somers } 64628845213SAlan Somers 64728845213SAlan Somers ATF_TC_CLEANUP(eaccess_success, tc) 64828845213SAlan Somers { 64928845213SAlan Somers cleanup(); 65028845213SAlan Somers } 65128845213SAlan Somers 65228845213SAlan Somers 65328845213SAlan Somers ATF_TC_WITH_CLEANUP(eaccess_failure); 65428845213SAlan Somers ATF_TC_HEAD(eaccess_failure, tc) 65528845213SAlan Somers { 65628845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 65728845213SAlan Somers "eaccess(2) call"); 65828845213SAlan Somers } 65928845213SAlan Somers 66028845213SAlan Somers ATF_TC_BODY(eaccess_failure, tc) 66128845213SAlan Somers { 66228845213SAlan Somers FILE *pipefd = setup(fds, auclass); 66328845213SAlan Somers /* Failure reason: file does not exist */ 66428845213SAlan Somers ATF_REQUIRE_EQ(-1, eaccess(errpath, F_OK)); 66528845213SAlan Somers check_audit(fds, failurereg, pipefd); 66628845213SAlan Somers } 66728845213SAlan Somers 66828845213SAlan Somers ATF_TC_CLEANUP(eaccess_failure, tc) 66928845213SAlan Somers { 67028845213SAlan Somers cleanup(); 67128845213SAlan Somers } 67228845213SAlan Somers 67328845213SAlan Somers 67428845213SAlan Somers ATF_TC_WITH_CLEANUP(faccessat_success); 67528845213SAlan Somers ATF_TC_HEAD(faccessat_success, tc) 67628845213SAlan Somers { 67728845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 67828845213SAlan Somers "faccessat(2) call"); 67928845213SAlan Somers } 68028845213SAlan Somers 68128845213SAlan Somers ATF_TC_BODY(faccessat_success, tc) 68228845213SAlan Somers { 68328845213SAlan Somers /* File needs to exist to call faccessat(2) */ 68428845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 68528845213SAlan Somers FILE *pipefd = setup(fds, auclass); 68628845213SAlan Somers ATF_REQUIRE_EQ(0, faccessat(AT_FDCWD, path, F_OK, AT_EACCESS)); 68728845213SAlan Somers check_audit(fds, successreg, pipefd); 68828845213SAlan Somers close(filedesc); 68928845213SAlan Somers } 69028845213SAlan Somers 69128845213SAlan Somers ATF_TC_CLEANUP(faccessat_success, tc) 69228845213SAlan Somers { 69328845213SAlan Somers cleanup(); 69428845213SAlan Somers } 69528845213SAlan Somers 69628845213SAlan Somers 69728845213SAlan Somers ATF_TC_WITH_CLEANUP(faccessat_failure); 69828845213SAlan Somers ATF_TC_HEAD(faccessat_failure, tc) 69928845213SAlan Somers { 70028845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 70128845213SAlan Somers "faccessat(2) call"); 70228845213SAlan Somers } 70328845213SAlan Somers 70428845213SAlan Somers ATF_TC_BODY(faccessat_failure, tc) 70528845213SAlan Somers { 70628845213SAlan Somers FILE *pipefd = setup(fds, auclass); 70728845213SAlan Somers /* Failure reason: file does not exist */ 70828845213SAlan Somers ATF_REQUIRE_EQ(-1, faccessat(AT_FDCWD, errpath, F_OK, AT_EACCESS)); 70928845213SAlan Somers check_audit(fds, failurereg, pipefd); 71028845213SAlan Somers } 71128845213SAlan Somers 71228845213SAlan Somers ATF_TC_CLEANUP(faccessat_failure, tc) 71328845213SAlan Somers { 71428845213SAlan Somers cleanup(); 71528845213SAlan Somers } 71628845213SAlan Somers 71728845213SAlan Somers 7182c347e63SAlan Somers ATF_TC_WITH_CLEANUP(pathconf_success); 7192c347e63SAlan Somers ATF_TC_HEAD(pathconf_success, tc) 7202c347e63SAlan Somers { 7212c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 7222c347e63SAlan Somers "pathconf(2) call"); 7232c347e63SAlan Somers } 7242c347e63SAlan Somers 7252c347e63SAlan Somers ATF_TC_BODY(pathconf_success, tc) 7262c347e63SAlan Somers { 7272c347e63SAlan Somers /* File needs to exist to call pathconf(2) */ 7282c347e63SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 7292c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7302c347e63SAlan Somers /* Get the maximum number of bytes of filename */ 7312c347e63SAlan Somers ATF_REQUIRE(pathconf(path, _PC_NAME_MAX) != -1); 7322c347e63SAlan Somers check_audit(fds, successreg, pipefd); 7332c347e63SAlan Somers close(filedesc); 7342c347e63SAlan Somers } 7352c347e63SAlan Somers 7362c347e63SAlan Somers ATF_TC_CLEANUP(pathconf_success, tc) 7372c347e63SAlan Somers { 7382c347e63SAlan Somers cleanup(); 7392c347e63SAlan Somers } 7402c347e63SAlan Somers 7412c347e63SAlan Somers 7422c347e63SAlan Somers ATF_TC_WITH_CLEANUP(pathconf_failure); 7432c347e63SAlan Somers ATF_TC_HEAD(pathconf_failure, tc) 7442c347e63SAlan Somers { 7452c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 7462c347e63SAlan Somers "pathconf(2) call"); 7472c347e63SAlan Somers } 7482c347e63SAlan Somers 7492c347e63SAlan Somers ATF_TC_BODY(pathconf_failure, tc) 7502c347e63SAlan Somers { 7512c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7522c347e63SAlan Somers /* Failure reason: file does not exist */ 7532c347e63SAlan Somers ATF_REQUIRE_EQ(-1, pathconf(errpath, _PC_NAME_MAX)); 7542c347e63SAlan Somers check_audit(fds, failurereg, pipefd); 7552c347e63SAlan Somers } 7562c347e63SAlan Somers 7572c347e63SAlan Somers ATF_TC_CLEANUP(pathconf_failure, tc) 7582c347e63SAlan Somers { 7592c347e63SAlan Somers cleanup(); 7602c347e63SAlan Somers } 7612c347e63SAlan Somers 7622c347e63SAlan Somers 7632c347e63SAlan Somers ATF_TC_WITH_CLEANUP(lpathconf_success); 7642c347e63SAlan Somers ATF_TC_HEAD(lpathconf_success, tc) 7652c347e63SAlan Somers { 7662c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 7672c347e63SAlan Somers "lpathconf(2) call"); 7682c347e63SAlan Somers } 7692c347e63SAlan Somers 7702c347e63SAlan Somers ATF_TC_BODY(lpathconf_success, tc) 7712c347e63SAlan Somers { 7722c347e63SAlan Somers /* Symbolic link needs to exist to call lpathconf(2) */ 7732c347e63SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 7742c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7752c347e63SAlan Somers /* Get the maximum number of bytes of symlink's name */ 7762c347e63SAlan Somers ATF_REQUIRE(lpathconf(path, _PC_SYMLINK_MAX) != -1); 7772c347e63SAlan Somers check_audit(fds, successreg, pipefd); 7782c347e63SAlan Somers } 7792c347e63SAlan Somers 7802c347e63SAlan Somers ATF_TC_CLEANUP(lpathconf_success, tc) 7812c347e63SAlan Somers { 7822c347e63SAlan Somers cleanup(); 7832c347e63SAlan Somers } 7842c347e63SAlan Somers 7852c347e63SAlan Somers 7862c347e63SAlan Somers ATF_TC_WITH_CLEANUP(lpathconf_failure); 7872c347e63SAlan Somers ATF_TC_HEAD(lpathconf_failure, tc) 7882c347e63SAlan Somers { 7892c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 7902c347e63SAlan Somers "lpathconf(2) call"); 7912c347e63SAlan Somers } 7922c347e63SAlan Somers 7932c347e63SAlan Somers ATF_TC_BODY(lpathconf_failure, tc) 7942c347e63SAlan Somers { 7952c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7962c347e63SAlan Somers /* Failure reason: symbolic link does not exist */ 7972c347e63SAlan Somers ATF_REQUIRE_EQ(-1, lpathconf(errpath, _PC_SYMLINK_MAX)); 7982c347e63SAlan Somers check_audit(fds, failurereg, pipefd); 7992c347e63SAlan Somers } 8002c347e63SAlan Somers 8012c347e63SAlan Somers ATF_TC_CLEANUP(lpathconf_failure, tc) 8022c347e63SAlan Somers { 8032c347e63SAlan Somers cleanup(); 8042c347e63SAlan Somers } 8052c347e63SAlan Somers 8062c347e63SAlan Somers 8072c347e63SAlan Somers ATF_TC_WITH_CLEANUP(fpathconf_success); 8082c347e63SAlan Somers ATF_TC_HEAD(fpathconf_success, tc) 8092c347e63SAlan Somers { 8102c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 8112c347e63SAlan Somers "fpathconf(2) call"); 8122c347e63SAlan Somers } 8132c347e63SAlan Somers 8142c347e63SAlan Somers ATF_TC_BODY(fpathconf_success, tc) 8152c347e63SAlan Somers { 8162c347e63SAlan Somers pid = getpid(); 8172c347e63SAlan Somers snprintf(extregex, sizeof(extregex), "fpathconf.*%d.*success", pid); 8182c347e63SAlan Somers 8192c347e63SAlan Somers /* File needs to exist to call fpathconf(2) */ 8202c347e63SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 8212c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 8222c347e63SAlan Somers /* Get the maximum number of bytes of filename */ 8232c347e63SAlan Somers ATF_REQUIRE(fpathconf(filedesc, _PC_NAME_MAX) != -1); 8242c347e63SAlan Somers check_audit(fds, extregex, pipefd); 8252c347e63SAlan Somers close(filedesc); 8262c347e63SAlan Somers } 8272c347e63SAlan Somers 8282c347e63SAlan Somers ATF_TC_CLEANUP(fpathconf_success, tc) 8292c347e63SAlan Somers { 8302c347e63SAlan Somers cleanup(); 8312c347e63SAlan Somers } 8322c347e63SAlan Somers 8332c347e63SAlan Somers 8342c347e63SAlan Somers ATF_TC_WITH_CLEANUP(fpathconf_failure); 8352c347e63SAlan Somers ATF_TC_HEAD(fpathconf_failure, tc) 8362c347e63SAlan Somers { 8372c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 8382c347e63SAlan Somers "fpathconf(2) call"); 8392c347e63SAlan Somers } 8402c347e63SAlan Somers 8412c347e63SAlan Somers ATF_TC_BODY(fpathconf_failure, tc) 8422c347e63SAlan Somers { 8432c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 8442c347e63SAlan Somers const char *regex = "fpathconf.*return,failure : Bad file descriptor"; 8452c347e63SAlan Somers /* Failure reason: Bad file descriptor */ 8462c347e63SAlan Somers ATF_REQUIRE_EQ(-1, fpathconf(-1, _PC_NAME_MAX)); 8472c347e63SAlan Somers check_audit(fds, regex, pipefd); 8482c347e63SAlan Somers } 8492c347e63SAlan Somers 8502c347e63SAlan Somers ATF_TC_CLEANUP(fpathconf_failure, tc) 8512c347e63SAlan Somers { 8522c347e63SAlan Somers cleanup(); 8532c347e63SAlan Somers } 8542c347e63SAlan Somers 8552c347e63SAlan Somers 8567d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_file_success); 8577d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_file_success, tc) 8587d951cc2SAlan Somers { 8597d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 8607d951cc2SAlan Somers "extattr_get_file(2) call"); 8617d951cc2SAlan Somers } 8627d951cc2SAlan Somers 8637d951cc2SAlan Somers ATF_TC_BODY(extattr_get_file_success, tc) 8647d951cc2SAlan Somers { 8657d951cc2SAlan Somers /* File needs to exist to call extattr_get_file(2) */ 8667d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 8677d951cc2SAlan Somers /* Set an extended attribute to be retrieved later on */ 8687d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path, 8697d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 8707d951cc2SAlan Somers 8717d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 8727d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 8737d951cc2SAlan Somers "extattr_get_file.*%s.*%s.*return,success", path, name); 8747d951cc2SAlan Somers 8757d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 8767d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_get_file(path, 8777d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 8787d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 8797d951cc2SAlan Somers close(filedesc); 8807d951cc2SAlan Somers } 8817d951cc2SAlan Somers 8827d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_file_success, tc) 8837d951cc2SAlan Somers { 8847d951cc2SAlan Somers cleanup(); 8857d951cc2SAlan Somers } 8867d951cc2SAlan Somers 8877d951cc2SAlan Somers 8887d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_file_failure); 8897d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_file_failure, tc) 8907d951cc2SAlan Somers { 8917d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 8927d951cc2SAlan Somers "extattr_get_file(2) call"); 8937d951cc2SAlan Somers } 8947d951cc2SAlan Somers 8957d951cc2SAlan Somers ATF_TC_BODY(extattr_get_file_failure, tc) 8967d951cc2SAlan Somers { 8977d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 8987d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 8997d951cc2SAlan Somers "extattr_get_file.*%s.*%s.*failure", path, name); 9007d951cc2SAlan Somers 9017d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 9027d951cc2SAlan Somers /* Failure reason: file does not exist */ 9037d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_get_file(path, 9047d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 9057d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9067d951cc2SAlan Somers } 9077d951cc2SAlan Somers 9087d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_file_failure, tc) 9097d951cc2SAlan Somers { 9107d951cc2SAlan Somers cleanup(); 9117d951cc2SAlan Somers } 9127d951cc2SAlan Somers 9137d951cc2SAlan Somers 9147d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_fd_success); 9157d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_fd_success, tc) 9167d951cc2SAlan Somers { 9177d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 9187d951cc2SAlan Somers "extattr_get_fd(2) call"); 9197d951cc2SAlan Somers } 9207d951cc2SAlan Somers 9217d951cc2SAlan Somers ATF_TC_BODY(extattr_get_fd_success, tc) 9227d951cc2SAlan Somers { 9237d951cc2SAlan Somers /* File needs to exist to call extattr_get_fd(2) */ 9247d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 9257d951cc2SAlan Somers /* Set an extended attribute to be retrieved later on */ 9267d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_set_file(path, 9277d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 9287d951cc2SAlan Somers 9297d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9307d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9317d951cc2SAlan Somers "extattr_get_fd.*%s.*return,success", name); 9327d951cc2SAlan Somers 9337d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 9347d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_get_fd(filedesc, 9357d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 9367d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9377d951cc2SAlan Somers close(filedesc); 9387d951cc2SAlan Somers } 9397d951cc2SAlan Somers 9407d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_fd_success, tc) 9417d951cc2SAlan Somers { 9427d951cc2SAlan Somers cleanup(); 9437d951cc2SAlan Somers } 9447d951cc2SAlan Somers 9457d951cc2SAlan Somers 9467d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_fd_failure); 9477d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_fd_failure, tc) 9487d951cc2SAlan Somers { 9497d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 9507d951cc2SAlan Somers "extattr_get_fd(2) call"); 9517d951cc2SAlan Somers } 9527d951cc2SAlan Somers 9537d951cc2SAlan Somers ATF_TC_BODY(extattr_get_fd_failure, tc) 9547d951cc2SAlan Somers { 9557d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9567d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9577d951cc2SAlan Somers "extattr_get_fd.*%s.*return,failure : Bad file descriptor", name); 9587d951cc2SAlan Somers 9597d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 9607d951cc2SAlan Somers /* Failure reason: Invalid file descriptor */ 9617d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_get_fd(-1, 9627d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 9637d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9647d951cc2SAlan Somers } 9657d951cc2SAlan Somers 9667d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_fd_failure, tc) 9677d951cc2SAlan Somers { 9687d951cc2SAlan Somers cleanup(); 9697d951cc2SAlan Somers } 9707d951cc2SAlan Somers 9717d951cc2SAlan Somers 9727d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_link_success); 9737d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_link_success, tc) 9747d951cc2SAlan Somers { 9757d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 9767d951cc2SAlan Somers "extattr_get_link(2) call"); 9777d951cc2SAlan Somers } 9787d951cc2SAlan Somers 9797d951cc2SAlan Somers ATF_TC_BODY(extattr_get_link_success, tc) 9807d951cc2SAlan Somers { 9817d951cc2SAlan Somers /* Symbolic link needs to exist to call extattr_get_link(2) */ 9827d951cc2SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 9837d951cc2SAlan Somers /* Set an extended attribute to be retrieved later on */ 9847d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_set_link(path, 9857d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, buff, sizeof(buff))); 9867d951cc2SAlan Somers 9877d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9887d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9897d951cc2SAlan Somers "extattr_get_link.*%s.*%s.*return,success", path, name); 9907d951cc2SAlan Somers 9917d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 9927d951cc2SAlan Somers ATF_REQUIRE_EQ(sizeof(buff), extattr_get_link(path, 9937d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 9947d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9957d951cc2SAlan Somers } 9967d951cc2SAlan Somers 9977d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_link_success, tc) 9987d951cc2SAlan Somers { 9997d951cc2SAlan Somers cleanup(); 10007d951cc2SAlan Somers } 10017d951cc2SAlan Somers 10027d951cc2SAlan Somers 10037d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_link_failure); 10047d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_link_failure, tc) 10057d951cc2SAlan Somers { 10067d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 10077d951cc2SAlan Somers "extattr_get_link(2) call"); 10087d951cc2SAlan Somers } 10097d951cc2SAlan Somers 10107d951cc2SAlan Somers ATF_TC_BODY(extattr_get_link_failure, tc) 10117d951cc2SAlan Somers { 10127d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10137d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 10147d951cc2SAlan Somers "extattr_get_link.*%s.*%s.*failure", path, name); 10157d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10167d951cc2SAlan Somers /* Failure reason: symbolic link does not exist */ 10177d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_get_link(path, 10187d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, name, NULL, 0)); 10197d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10207d951cc2SAlan Somers } 10217d951cc2SAlan Somers 10227d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_link_failure, tc) 10237d951cc2SAlan Somers { 10247d951cc2SAlan Somers cleanup(); 10257d951cc2SAlan Somers } 10267d951cc2SAlan Somers 10277d951cc2SAlan Somers 10287d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_file_success); 10297d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_file_success, tc) 10307d951cc2SAlan Somers { 10317d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 10327d951cc2SAlan Somers "extattr_list_file(2) call"); 10337d951cc2SAlan Somers } 10347d951cc2SAlan Somers 10357d951cc2SAlan Somers ATF_TC_BODY(extattr_list_file_success, tc) 10367d951cc2SAlan Somers { 10377d951cc2SAlan Somers int readbuff; 10387d951cc2SAlan Somers /* File needs to exist to call extattr_list_file(2) */ 10397d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 10407d951cc2SAlan Somers 10417d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10427d951cc2SAlan Somers ATF_REQUIRE((readbuff = extattr_list_file(path, 10437d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)) != -1); 10447d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10457d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 10467d951cc2SAlan Somers "extattr_list_file.*%s.*return,success,%d", path, readbuff); 10477d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10487d951cc2SAlan Somers } 10497d951cc2SAlan Somers 10507d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_file_success, tc) 10517d951cc2SAlan Somers { 10527d951cc2SAlan Somers cleanup(); 10537d951cc2SAlan Somers } 10547d951cc2SAlan Somers 10557d951cc2SAlan Somers 10567d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_file_failure); 10577d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_file_failure, tc) 10587d951cc2SAlan Somers { 10597d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 10607d951cc2SAlan Somers "extattr_list_file(2) call"); 10617d951cc2SAlan Somers } 10627d951cc2SAlan Somers 10637d951cc2SAlan Somers ATF_TC_BODY(extattr_list_file_failure, tc) 10647d951cc2SAlan Somers { 10657d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10667d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 10677d951cc2SAlan Somers "extattr_list_file.*%s.*return,failure", path); 10687d951cc2SAlan Somers 10697d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10707d951cc2SAlan Somers /* Failure reason: file does not exist */ 10717d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_list_file(path, 10727d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)); 10737d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10747d951cc2SAlan Somers } 10757d951cc2SAlan Somers 10767d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_file_failure, tc) 10777d951cc2SAlan Somers { 10787d951cc2SAlan Somers cleanup(); 10797d951cc2SAlan Somers } 10807d951cc2SAlan Somers 10817d951cc2SAlan Somers 10827d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_fd_success); 10837d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_fd_success, tc) 10847d951cc2SAlan Somers { 10857d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 10867d951cc2SAlan Somers "extattr_list_fd(2) call"); 10877d951cc2SAlan Somers } 10887d951cc2SAlan Somers 10897d951cc2SAlan Somers ATF_TC_BODY(extattr_list_fd_success, tc) 10907d951cc2SAlan Somers { 10917d951cc2SAlan Somers int readbuff; 10927d951cc2SAlan Somers /* File needs to exist to call extattr_list_fd(2) */ 10937d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 10947d951cc2SAlan Somers 10957d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10967d951cc2SAlan Somers ATF_REQUIRE((readbuff = extattr_list_fd(filedesc, 10977d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)) != -1); 10987d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10997d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 11007d951cc2SAlan Somers "extattr_list_fd.*return,success,%d", readbuff); 11017d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11027d951cc2SAlan Somers close(filedesc); 11037d951cc2SAlan Somers } 11047d951cc2SAlan Somers 11057d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_fd_success, tc) 11067d951cc2SAlan Somers { 11077d951cc2SAlan Somers cleanup(); 11087d951cc2SAlan Somers } 11097d951cc2SAlan Somers 11107d951cc2SAlan Somers 11117d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_fd_failure); 11127d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_fd_failure, tc) 11137d951cc2SAlan Somers { 11147d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 11157d951cc2SAlan Somers "extattr_list_fd(2) call"); 11167d951cc2SAlan Somers } 11177d951cc2SAlan Somers 11187d951cc2SAlan Somers ATF_TC_BODY(extattr_list_fd_failure, tc) 11197d951cc2SAlan Somers { 11207d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 11217d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 11227d951cc2SAlan Somers "extattr_list_fd.*return,failure : Bad file descriptor"); 11237d951cc2SAlan Somers 11247d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 11257d951cc2SAlan Somers /* Failure reason: Invalid file descriptor */ 11267d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, 11277d951cc2SAlan Somers extattr_list_fd(-1, EXTATTR_NAMESPACE_USER, NULL, 0)); 11287d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11297d951cc2SAlan Somers } 11307d951cc2SAlan Somers 11317d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_fd_failure, tc) 11327d951cc2SAlan Somers { 11337d951cc2SAlan Somers cleanup(); 11347d951cc2SAlan Somers } 11357d951cc2SAlan Somers 11367d951cc2SAlan Somers 11377d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_link_success); 11387d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_link_success, tc) 11397d951cc2SAlan Somers { 11407d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 11417d951cc2SAlan Somers "extattr_list_link(2) call"); 11427d951cc2SAlan Somers } 11437d951cc2SAlan Somers 11447d951cc2SAlan Somers ATF_TC_BODY(extattr_list_link_success, tc) 11457d951cc2SAlan Somers { 11467d951cc2SAlan Somers int readbuff; 11477d951cc2SAlan Somers /* Symbolic link needs to exist to call extattr_list_link(2) */ 11487d951cc2SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 11497d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 11507d951cc2SAlan Somers 11517d951cc2SAlan Somers ATF_REQUIRE((readbuff = extattr_list_link(path, 11527d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)) != -1); 11537d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 11547d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 11557d951cc2SAlan Somers "extattr_list_link.*%s.*return,success,%d", path, readbuff); 11567d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11577d951cc2SAlan Somers } 11587d951cc2SAlan Somers 11597d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_link_success, tc) 11607d951cc2SAlan Somers { 11617d951cc2SAlan Somers cleanup(); 11627d951cc2SAlan Somers } 11637d951cc2SAlan Somers 11647d951cc2SAlan Somers 11657d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_link_failure); 11667d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_link_failure, tc) 11677d951cc2SAlan Somers { 11687d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 11697d951cc2SAlan Somers "extattr_list_link(2) call"); 11707d951cc2SAlan Somers } 11717d951cc2SAlan Somers 11727d951cc2SAlan Somers ATF_TC_BODY(extattr_list_link_failure, tc) 11737d951cc2SAlan Somers { 11747d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 11757d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 11767d951cc2SAlan Somers "extattr_list_link.*%s.*failure", path); 11777d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 11787d951cc2SAlan Somers /* Failure reason: symbolic link does not exist */ 11797d951cc2SAlan Somers ATF_REQUIRE_EQ(-1, extattr_list_link(path, 11807d951cc2SAlan Somers EXTATTR_NAMESPACE_USER, NULL, 0)); 11817d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11827d951cc2SAlan Somers } 11837d951cc2SAlan Somers 11847d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_link_failure, tc) 11857d951cc2SAlan Somers { 11867d951cc2SAlan Somers cleanup(); 11877d951cc2SAlan Somers } 11887d951cc2SAlan Somers 11897d951cc2SAlan Somers 1190f86d6517SAlan Somers ATF_TP_ADD_TCS(tp) 1191f86d6517SAlan Somers { 1192f86d6517SAlan Somers ATF_TP_ADD_TC(tp, stat_success); 1193f86d6517SAlan Somers ATF_TP_ADD_TC(tp, stat_failure); 1194f86d6517SAlan Somers ATF_TP_ADD_TC(tp, lstat_success); 1195f86d6517SAlan Somers ATF_TP_ADD_TC(tp, lstat_failure); 1196f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstat_success); 1197f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstat_failure); 1198f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstatat_success); 1199f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstatat_failure); 1200f86d6517SAlan Somers 1201ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, statfs_success); 1202ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, statfs_failure); 1203ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, fstatfs_success); 1204ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, fstatfs_failure); 1205ae19b2efSAlan Somers 1206ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, getfsstat_success); 1207ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, getfsstat_failure); 1208ae19b2efSAlan Somers 1209*55cd4523SAlan Somers ATF_TP_ADD_TC(tp, lgetfh_success); 1210*55cd4523SAlan Somers ATF_TP_ADD_TC(tp, lgetfh_failure); 1211a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhopen_success); 1212a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhopen_failure); 1213a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstat_success); 1214a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstat_failure); 1215a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstatfs_success); 1216a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstatfs_failure); 1217a56867b8SAlan Somers 121828845213SAlan Somers ATF_TP_ADD_TC(tp, access_success); 121928845213SAlan Somers ATF_TP_ADD_TC(tp, access_failure); 122028845213SAlan Somers ATF_TP_ADD_TC(tp, eaccess_success); 122128845213SAlan Somers ATF_TP_ADD_TC(tp, eaccess_failure); 122228845213SAlan Somers ATF_TP_ADD_TC(tp, faccessat_success); 122328845213SAlan Somers ATF_TP_ADD_TC(tp, faccessat_failure); 122428845213SAlan Somers 12252c347e63SAlan Somers ATF_TP_ADD_TC(tp, pathconf_success); 12262c347e63SAlan Somers ATF_TP_ADD_TC(tp, pathconf_failure); 12272c347e63SAlan Somers ATF_TP_ADD_TC(tp, lpathconf_success); 12282c347e63SAlan Somers ATF_TP_ADD_TC(tp, lpathconf_failure); 12292c347e63SAlan Somers ATF_TP_ADD_TC(tp, fpathconf_success); 12302c347e63SAlan Somers ATF_TP_ADD_TC(tp, fpathconf_failure); 12312c347e63SAlan Somers 12327d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_file_success); 12337d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_file_failure); 12347d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_fd_success); 12357d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_fd_failure); 12367d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_link_success); 12377d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_link_failure); 12387d951cc2SAlan Somers 12397d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_file_success); 12407d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_file_failure); 12417d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_fd_success); 12427d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_fd_failure); 12437d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_link_success); 12447d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_link_failure); 12457d951cc2SAlan Somers 1246f86d6517SAlan Somers return (atf_no_error()); 1247f86d6517SAlan Somers } 1248