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/mount.h> 31f86d6517SAlan Somers #include <sys/stat.h> 32f86d6517SAlan Somers #include <sys/syscall.h> 33*40407d39SAlex Richardson #include <sys/ucred.h> 34f86d6517SAlan Somers 35f86d6517SAlan Somers #include <atf-c.h> 36*40407d39SAlex Richardson #include <errno.h> 37f86d6517SAlan Somers #include <fcntl.h> 38*40407d39SAlex Richardson #include <string.h> 39f86d6517SAlan Somers #include <unistd.h> 40f86d6517SAlan Somers 41f86d6517SAlan Somers #include "utils.h" 42f86d6517SAlan Somers 43f86d6517SAlan Somers static struct pollfd fds[1]; 44f86d6517SAlan Somers static mode_t mode = 0777; 45ae19b2efSAlan Somers static pid_t pid; 46a56867b8SAlan Somers static fhandle_t fht; 47a56867b8SAlan Somers static int filedesc, fhdesc; 48f86d6517SAlan Somers static char extregex[80]; 495641c23fSAlan Somers static char buff[] = "ezio"; 50f86d6517SAlan Somers static struct stat statbuff; 51ae19b2efSAlan Somers static struct statfs statfsbuff; 52f86d6517SAlan Somers static const char *auclass = "fa"; 537d951cc2SAlan Somers static const char *name = "authorname"; 54f86d6517SAlan Somers static const char *path = "fileforaudit"; 55f86d6517SAlan Somers static const char *errpath = "dirdoesnotexist/fileforaudit"; 56f86d6517SAlan Somers static const char *successreg = "fileforaudit.*return,success"; 57f86d6517SAlan Somers static const char *failurereg = "fileforaudit.*return,failure"; 58f86d6517SAlan Somers 59f86d6517SAlan Somers 60f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(stat_success); 61f86d6517SAlan Somers ATF_TC_HEAD(stat_success, tc) 62f86d6517SAlan Somers { 63f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 64f86d6517SAlan Somers "stat(2) call"); 65f86d6517SAlan Somers } 66f86d6517SAlan Somers 67f86d6517SAlan Somers ATF_TC_BODY(stat_success, tc) 68f86d6517SAlan Somers { 69f86d6517SAlan Somers /* File needs to exist to call stat(2) */ 70b13a70d5SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 71f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 72f86d6517SAlan Somers ATF_REQUIRE_EQ(0, stat(path, &statbuff)); 73f86d6517SAlan Somers check_audit(fds, successreg, pipefd); 74b13a70d5SAlan Somers close(filedesc); 75f86d6517SAlan Somers } 76f86d6517SAlan Somers 77f86d6517SAlan Somers ATF_TC_CLEANUP(stat_success, tc) 78f86d6517SAlan Somers { 79f86d6517SAlan Somers cleanup(); 80f86d6517SAlan Somers } 81f86d6517SAlan Somers 82f86d6517SAlan Somers 83f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(stat_failure); 84f86d6517SAlan Somers ATF_TC_HEAD(stat_failure, tc) 85f86d6517SAlan Somers { 86f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 87f86d6517SAlan Somers "stat(2) call"); 88f86d6517SAlan Somers } 89f86d6517SAlan Somers 90f86d6517SAlan Somers ATF_TC_BODY(stat_failure, tc) 91f86d6517SAlan Somers { 92f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 93f86d6517SAlan Somers /* Failure reason: file does not exist */ 94*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, stat(errpath, &statbuff) == -1); 95f86d6517SAlan Somers check_audit(fds, failurereg, pipefd); 96f86d6517SAlan Somers } 97f86d6517SAlan Somers 98f86d6517SAlan Somers ATF_TC_CLEANUP(stat_failure, tc) 99f86d6517SAlan Somers { 100f86d6517SAlan Somers cleanup(); 101f86d6517SAlan Somers } 102f86d6517SAlan Somers 103f86d6517SAlan Somers 104f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(lstat_success); 105f86d6517SAlan Somers ATF_TC_HEAD(lstat_success, tc) 106f86d6517SAlan Somers { 107f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 108f86d6517SAlan Somers "lstat(2) call"); 109f86d6517SAlan Somers } 110f86d6517SAlan Somers 111f86d6517SAlan Somers ATF_TC_BODY(lstat_success, tc) 112f86d6517SAlan Somers { 113f86d6517SAlan Somers /* Symbolic link needs to exist to call lstat(2) */ 114f86d6517SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 115f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 116f86d6517SAlan Somers ATF_REQUIRE_EQ(0, lstat(path, &statbuff)); 117f86d6517SAlan Somers check_audit(fds, successreg, pipefd); 118f86d6517SAlan Somers } 119f86d6517SAlan Somers 120f86d6517SAlan Somers ATF_TC_CLEANUP(lstat_success, tc) 121f86d6517SAlan Somers { 122f86d6517SAlan Somers cleanup(); 123f86d6517SAlan Somers } 124f86d6517SAlan Somers 125f86d6517SAlan Somers 126f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(lstat_failure); 127f86d6517SAlan Somers ATF_TC_HEAD(lstat_failure, tc) 128f86d6517SAlan Somers { 129f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 130f86d6517SAlan Somers "lstat(2) call"); 131f86d6517SAlan Somers } 132f86d6517SAlan Somers 133f86d6517SAlan Somers ATF_TC_BODY(lstat_failure, tc) 134f86d6517SAlan Somers { 135f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 136f86d6517SAlan Somers /* Failure reason: symbolic link does not exist */ 137*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, lstat(errpath, &statbuff) == -1); 138f86d6517SAlan Somers check_audit(fds, failurereg, pipefd); 139f86d6517SAlan Somers } 140f86d6517SAlan Somers 141f86d6517SAlan Somers ATF_TC_CLEANUP(lstat_failure, tc) 142f86d6517SAlan Somers { 143f86d6517SAlan Somers cleanup(); 144f86d6517SAlan Somers } 145f86d6517SAlan Somers 146f86d6517SAlan Somers 147f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstat_success); 148f86d6517SAlan Somers ATF_TC_HEAD(fstat_success, tc) 149f86d6517SAlan Somers { 150f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 151f86d6517SAlan Somers "fstat(2) call"); 152f86d6517SAlan Somers } 153f86d6517SAlan Somers 154f86d6517SAlan Somers ATF_TC_BODY(fstat_success, tc) 155f86d6517SAlan Somers { 156f86d6517SAlan Somers /* File needs to exist to call fstat(2) */ 157f86d6517SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT | O_RDWR, mode)) != -1); 158f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 159f86d6517SAlan Somers ATF_REQUIRE_EQ(0, fstat(filedesc, &statbuff)); 160f86d6517SAlan Somers 161f86d6517SAlan Somers snprintf(extregex, sizeof(extregex), 162f86d6517SAlan Somers "fstat.*%jd.*return,success", (intmax_t)statbuff.st_ino); 163f86d6517SAlan Somers check_audit(fds, extregex, pipefd); 164b13a70d5SAlan Somers close(filedesc); 165f86d6517SAlan Somers } 166f86d6517SAlan Somers 167f86d6517SAlan Somers ATF_TC_CLEANUP(fstat_success, tc) 168f86d6517SAlan Somers { 169f86d6517SAlan Somers cleanup(); 170f86d6517SAlan Somers } 171f86d6517SAlan Somers 172f86d6517SAlan Somers 173f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstat_failure); 174f86d6517SAlan Somers ATF_TC_HEAD(fstat_failure, tc) 175f86d6517SAlan Somers { 176f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 177f86d6517SAlan Somers "fstat(2) call"); 178f86d6517SAlan Somers } 179f86d6517SAlan Somers 180f86d6517SAlan Somers ATF_TC_BODY(fstat_failure, tc) 181f86d6517SAlan Somers { 182f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 183f86d6517SAlan Somers const char *regex = "fstat.*return,failure : Bad file descriptor"; 184f86d6517SAlan Somers /* Failure reason: bad file descriptor */ 185*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, fstat(-1, &statbuff) == -1); 186f86d6517SAlan Somers check_audit(fds, regex, pipefd); 187f86d6517SAlan Somers } 188f86d6517SAlan Somers 189f86d6517SAlan Somers ATF_TC_CLEANUP(fstat_failure, tc) 190f86d6517SAlan Somers { 191f86d6517SAlan Somers cleanup(); 192f86d6517SAlan Somers } 193f86d6517SAlan Somers 194f86d6517SAlan Somers 195f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstatat_success); 196f86d6517SAlan Somers ATF_TC_HEAD(fstatat_success, tc) 197f86d6517SAlan Somers { 198f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 199f86d6517SAlan Somers "fstatat(2) call"); 200f86d6517SAlan Somers } 201f86d6517SAlan Somers 202f86d6517SAlan Somers ATF_TC_BODY(fstatat_success, tc) 203f86d6517SAlan Somers { 204f86d6517SAlan Somers /* File or Symbolic link needs to exist to call lstat(2) */ 205f86d6517SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 206f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 207f86d6517SAlan Somers ATF_REQUIRE_EQ(0, fstatat(AT_FDCWD, path, &statbuff, 208f86d6517SAlan Somers AT_SYMLINK_NOFOLLOW)); 209f86d6517SAlan Somers check_audit(fds, successreg, pipefd); 210f86d6517SAlan Somers } 211f86d6517SAlan Somers 212f86d6517SAlan Somers ATF_TC_CLEANUP(fstatat_success, tc) 213f86d6517SAlan Somers { 214f86d6517SAlan Somers cleanup(); 215f86d6517SAlan Somers } 216f86d6517SAlan Somers 217f86d6517SAlan Somers 218f86d6517SAlan Somers ATF_TC_WITH_CLEANUP(fstatat_failure); 219f86d6517SAlan Somers ATF_TC_HEAD(fstatat_failure, tc) 220f86d6517SAlan Somers { 221f86d6517SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 222f86d6517SAlan Somers "fstatat(2) call"); 223f86d6517SAlan Somers } 224f86d6517SAlan Somers 225f86d6517SAlan Somers ATF_TC_BODY(fstatat_failure, tc) 226f86d6517SAlan Somers { 227f86d6517SAlan Somers FILE *pipefd = setup(fds, auclass); 228f86d6517SAlan Somers /* Failure reason: symbolic link does not exist */ 229*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 230*40407d39SAlex Richardson fstatat(AT_FDCWD, path, &statbuff, AT_SYMLINK_NOFOLLOW) == -1); 231f86d6517SAlan Somers check_audit(fds, failurereg, pipefd); 232f86d6517SAlan Somers } 233f86d6517SAlan Somers 234f86d6517SAlan Somers ATF_TC_CLEANUP(fstatat_failure, tc) 235f86d6517SAlan Somers { 236f86d6517SAlan Somers cleanup(); 237f86d6517SAlan Somers } 238f86d6517SAlan Somers 239f86d6517SAlan Somers 240ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(statfs_success); 241ae19b2efSAlan Somers ATF_TC_HEAD(statfs_success, tc) 242ae19b2efSAlan Somers { 243ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 244ae19b2efSAlan Somers "statfs(2) call"); 245ae19b2efSAlan Somers } 246ae19b2efSAlan Somers 247ae19b2efSAlan Somers ATF_TC_BODY(statfs_success, tc) 248ae19b2efSAlan Somers { 249ae19b2efSAlan Somers /* File needs to exist to call statfs(2) */ 250ae19b2efSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 251ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 252ae19b2efSAlan Somers ATF_REQUIRE_EQ(0, statfs(path, &statfsbuff)); 253ae19b2efSAlan Somers check_audit(fds, successreg, pipefd); 254ae19b2efSAlan Somers close(filedesc); 255ae19b2efSAlan Somers } 256ae19b2efSAlan Somers 257ae19b2efSAlan Somers ATF_TC_CLEANUP(statfs_success, tc) 258ae19b2efSAlan Somers { 259ae19b2efSAlan Somers cleanup(); 260ae19b2efSAlan Somers } 261ae19b2efSAlan Somers 262ae19b2efSAlan Somers 263ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(statfs_failure); 264ae19b2efSAlan Somers ATF_TC_HEAD(statfs_failure, tc) 265ae19b2efSAlan Somers { 266ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 267ae19b2efSAlan Somers "statfs(2) call"); 268ae19b2efSAlan Somers } 269ae19b2efSAlan Somers 270ae19b2efSAlan Somers ATF_TC_BODY(statfs_failure, tc) 271ae19b2efSAlan Somers { 272ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 273ae19b2efSAlan Somers /* Failure reason: file does not exist */ 274*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, statfs(errpath, &statfsbuff) == -1); 275ae19b2efSAlan Somers check_audit(fds, failurereg, pipefd); 276ae19b2efSAlan Somers } 277ae19b2efSAlan Somers 278ae19b2efSAlan Somers ATF_TC_CLEANUP(statfs_failure, tc) 279ae19b2efSAlan Somers { 280ae19b2efSAlan Somers cleanup(); 281ae19b2efSAlan Somers } 282ae19b2efSAlan Somers 283ae19b2efSAlan Somers 284ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(fstatfs_success); 285ae19b2efSAlan Somers ATF_TC_HEAD(fstatfs_success, tc) 286ae19b2efSAlan Somers { 287ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 288ae19b2efSAlan Somers "fstatfs(2) call"); 289ae19b2efSAlan Somers } 290ae19b2efSAlan Somers 291ae19b2efSAlan Somers ATF_TC_BODY(fstatfs_success, tc) 292ae19b2efSAlan Somers { 293ae19b2efSAlan Somers /* File needs to exist to call fstat(2) */ 294ae19b2efSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT | O_RDWR, mode)) != -1); 295ae19b2efSAlan Somers /* Call stat(2) to store the Inode number of 'path' */ 296ae19b2efSAlan Somers ATF_REQUIRE_EQ(0, stat(path, &statbuff)); 297ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 298ae19b2efSAlan Somers ATF_REQUIRE_EQ(0, fstatfs(filedesc, &statfsbuff)); 299ae19b2efSAlan Somers 300ae19b2efSAlan Somers snprintf(extregex, sizeof(extregex), "fstatfs.*%jd.*return,success", 301ae19b2efSAlan Somers (intmax_t)statbuff.st_ino); 302ae19b2efSAlan Somers check_audit(fds, extregex, pipefd); 303ae19b2efSAlan Somers close(filedesc); 304ae19b2efSAlan Somers } 305ae19b2efSAlan Somers 306ae19b2efSAlan Somers ATF_TC_CLEANUP(fstatfs_success, tc) 307ae19b2efSAlan Somers { 308ae19b2efSAlan Somers cleanup(); 309ae19b2efSAlan Somers } 310ae19b2efSAlan Somers 311ae19b2efSAlan Somers 312ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(fstatfs_failure); 313ae19b2efSAlan Somers ATF_TC_HEAD(fstatfs_failure, tc) 314ae19b2efSAlan Somers { 315ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 316ae19b2efSAlan Somers "fstatfs(2) call"); 317ae19b2efSAlan Somers } 318ae19b2efSAlan Somers 319ae19b2efSAlan Somers ATF_TC_BODY(fstatfs_failure, tc) 320ae19b2efSAlan Somers { 321ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 322ae19b2efSAlan Somers const char *regex = "fstatfs.*return,failure : Bad file descriptor"; 323ae19b2efSAlan Somers /* Failure reason: bad file descriptor */ 324*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, fstatfs(-1, &statfsbuff) == -1); 325ae19b2efSAlan Somers check_audit(fds, regex, pipefd); 326ae19b2efSAlan Somers } 327ae19b2efSAlan Somers 328ae19b2efSAlan Somers ATF_TC_CLEANUP(fstatfs_failure, tc) 329ae19b2efSAlan Somers { 330ae19b2efSAlan Somers cleanup(); 331ae19b2efSAlan Somers } 332ae19b2efSAlan Somers 333ae19b2efSAlan Somers 334ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(getfsstat_success); 335ae19b2efSAlan Somers ATF_TC_HEAD(getfsstat_success, tc) 336ae19b2efSAlan Somers { 337ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 338ae19b2efSAlan Somers "getfsstat(2) call"); 339ae19b2efSAlan Somers } 340ae19b2efSAlan Somers 341ae19b2efSAlan Somers ATF_TC_BODY(getfsstat_success, tc) 342ae19b2efSAlan Somers { 343ae19b2efSAlan Somers pid = getpid(); 344ae19b2efSAlan Somers snprintf(extregex, sizeof(extregex), "getfsstat.*%d.*success", pid); 345ae19b2efSAlan Somers 346ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 347ae19b2efSAlan Somers ATF_REQUIRE(getfsstat(NULL, 0, MNT_NOWAIT) != -1); 348ae19b2efSAlan Somers check_audit(fds, extregex, pipefd); 349ae19b2efSAlan Somers } 350ae19b2efSAlan Somers 351ae19b2efSAlan Somers ATF_TC_CLEANUP(getfsstat_success, tc) 352ae19b2efSAlan Somers { 353ae19b2efSAlan Somers cleanup(); 354ae19b2efSAlan Somers } 355ae19b2efSAlan Somers 356ae19b2efSAlan Somers 357ae19b2efSAlan Somers ATF_TC_WITH_CLEANUP(getfsstat_failure); 358ae19b2efSAlan Somers ATF_TC_HEAD(getfsstat_failure, tc) 359ae19b2efSAlan Somers { 360ae19b2efSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 361ae19b2efSAlan Somers "getfsstat(2) call"); 362ae19b2efSAlan Somers } 363ae19b2efSAlan Somers 364ae19b2efSAlan Somers ATF_TC_BODY(getfsstat_failure, tc) 365ae19b2efSAlan Somers { 366ae19b2efSAlan Somers const char *regex = "getfsstat.*return,failure : Invalid argument"; 367ae19b2efSAlan Somers FILE *pipefd = setup(fds, auclass); 368ae19b2efSAlan Somers /* Failure reason: Invalid value for mode */ 369*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EINVAL, getfsstat(NULL, 0, -1) == -1); 370ae19b2efSAlan Somers check_audit(fds, regex, pipefd); 371ae19b2efSAlan Somers } 372ae19b2efSAlan Somers 373ae19b2efSAlan Somers ATF_TC_CLEANUP(getfsstat_failure, tc) 374ae19b2efSAlan Somers { 375ae19b2efSAlan Somers cleanup(); 376ae19b2efSAlan Somers } 377ae19b2efSAlan Somers 378ae19b2efSAlan Somers 37955cd4523SAlan Somers ATF_TC_WITH_CLEANUP(lgetfh_success); 38055cd4523SAlan Somers ATF_TC_HEAD(lgetfh_success, tc) 38155cd4523SAlan Somers { 38255cd4523SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 38355cd4523SAlan Somers "lgetfh(2) call"); 38455cd4523SAlan Somers } 38555cd4523SAlan Somers 38655cd4523SAlan Somers ATF_TC_BODY(lgetfh_success, tc) 38755cd4523SAlan Somers { 38855cd4523SAlan Somers /* Symbolic link needs to exist to get a file-handle */ 38955cd4523SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 39055cd4523SAlan Somers const char *regex = "lgetfh.*return,success"; 39155cd4523SAlan Somers FILE *pipefd = setup(fds, "fa"); 39255cd4523SAlan Somers ATF_REQUIRE_EQ(0, lgetfh(path, &fht)); 39355cd4523SAlan Somers check_audit(fds, regex, pipefd); 39455cd4523SAlan Somers } 39555cd4523SAlan Somers 39655cd4523SAlan Somers ATF_TC_CLEANUP(lgetfh_success, tc) 39755cd4523SAlan Somers { 39855cd4523SAlan Somers cleanup(); 39955cd4523SAlan Somers } 40055cd4523SAlan Somers 40155cd4523SAlan Somers 40255cd4523SAlan Somers ATF_TC_WITH_CLEANUP(lgetfh_failure); 40355cd4523SAlan Somers ATF_TC_HEAD(lgetfh_failure, tc) 40455cd4523SAlan Somers { 40555cd4523SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 40655cd4523SAlan Somers "lgetfh(2) call"); 40755cd4523SAlan Somers } 40855cd4523SAlan Somers 40955cd4523SAlan Somers ATF_TC_BODY(lgetfh_failure, tc) 41055cd4523SAlan Somers { 41155cd4523SAlan Somers const char *regex = "lgetfh.*return,failure"; 41255cd4523SAlan Somers FILE *pipefd = setup(fds, "fa"); 41355cd4523SAlan Somers /* Failure reason: symbolic link does not exist */ 414*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, lgetfh(errpath, &fht) == -1); 41555cd4523SAlan Somers check_audit(fds, regex, pipefd); 41655cd4523SAlan Somers } 41755cd4523SAlan Somers 41855cd4523SAlan Somers ATF_TC_CLEANUP(lgetfh_failure, tc) 41955cd4523SAlan Somers { 42055cd4523SAlan Somers cleanup(); 42155cd4523SAlan Somers } 42255cd4523SAlan Somers 42355cd4523SAlan Somers 424a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhopen_success); 425a56867b8SAlan Somers ATF_TC_HEAD(fhopen_success, tc) 426a56867b8SAlan Somers { 427a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 428a56867b8SAlan Somers "fhopen(2) call"); 429a56867b8SAlan Somers } 430a56867b8SAlan Somers 431a56867b8SAlan Somers ATF_TC_BODY(fhopen_success, tc) 432a56867b8SAlan Somers { 433a56867b8SAlan Somers pid = getpid(); 434a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhopen.*%d.*return,success", pid); 435a56867b8SAlan Somers 436a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 437a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 438a56867b8SAlan Somers /* Get the file handle to be passed to fhopen(2) */ 439a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 440a56867b8SAlan Somers 441a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 442a56867b8SAlan Somers ATF_REQUIRE((fhdesc = fhopen(&fht, O_RDWR)) != -1); 443a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 444a56867b8SAlan Somers 445a56867b8SAlan Somers close(fhdesc); 446a56867b8SAlan Somers close(filedesc); 447a56867b8SAlan Somers } 448a56867b8SAlan Somers 449a56867b8SAlan Somers ATF_TC_CLEANUP(fhopen_success, tc) 450a56867b8SAlan Somers { 451a56867b8SAlan Somers cleanup(); 452a56867b8SAlan Somers } 453a56867b8SAlan Somers 454a56867b8SAlan Somers 455a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhopen_failure); 456a56867b8SAlan Somers ATF_TC_HEAD(fhopen_failure, tc) 457a56867b8SAlan Somers { 458a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 459a56867b8SAlan Somers "fhopen(2) call"); 460a56867b8SAlan Somers } 461a56867b8SAlan Somers 462a56867b8SAlan Somers ATF_TC_BODY(fhopen_failure, tc) 463a56867b8SAlan Somers { 464a56867b8SAlan Somers const char *regex = "fhopen.*return,failure : Invalid argument"; 465a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 466a56867b8SAlan Somers /* 467a56867b8SAlan Somers * Failure reason: NULL does not represent any file handle 468a56867b8SAlan Somers * and O_CREAT is not allowed as the flag for fhopen(2) 469a56867b8SAlan Somers */ 470*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EINVAL, fhopen(NULL, O_CREAT) == -1); 471a56867b8SAlan Somers check_audit(fds, regex, pipefd); 472a56867b8SAlan Somers } 473a56867b8SAlan Somers 474a56867b8SAlan Somers ATF_TC_CLEANUP(fhopen_failure, tc) 475a56867b8SAlan Somers { 476a56867b8SAlan Somers cleanup(); 477a56867b8SAlan Somers } 478a56867b8SAlan Somers 479a56867b8SAlan Somers 480a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstat_success); 481a56867b8SAlan Somers ATF_TC_HEAD(fhstat_success, tc) 482a56867b8SAlan Somers { 483a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 484a56867b8SAlan Somers "fstat(2) call"); 485a56867b8SAlan Somers } 486a56867b8SAlan Somers 487a56867b8SAlan Somers ATF_TC_BODY(fhstat_success, tc) 488a56867b8SAlan Somers { 489a56867b8SAlan Somers pid = getpid(); 490a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhstat.*%d.*return,success", pid); 491a56867b8SAlan Somers 492a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 493a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 494a56867b8SAlan Somers /* Get the file handle to be passed to fhstat(2) */ 495a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 496a56867b8SAlan Somers 497a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 498a56867b8SAlan Somers ATF_REQUIRE_EQ(0, fhstat(&fht, &statbuff)); 499a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 500a56867b8SAlan Somers close(filedesc); 501a56867b8SAlan Somers } 502a56867b8SAlan Somers 503a56867b8SAlan Somers ATF_TC_CLEANUP(fhstat_success, tc) 504a56867b8SAlan Somers { 505a56867b8SAlan Somers cleanup(); 506a56867b8SAlan Somers } 507a56867b8SAlan Somers 508a56867b8SAlan Somers 509a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstat_failure); 510a56867b8SAlan Somers ATF_TC_HEAD(fhstat_failure, tc) 511a56867b8SAlan Somers { 512a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 513a56867b8SAlan Somers "fhstat(2) call"); 514a56867b8SAlan Somers } 515a56867b8SAlan Somers 516a56867b8SAlan Somers ATF_TC_BODY(fhstat_failure, tc) 517a56867b8SAlan Somers { 518a56867b8SAlan Somers const char *regex = "fhstat.*return,failure : Bad address"; 519a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 520a56867b8SAlan Somers /* Failure reason: NULL does not represent any file handle */ 521*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EFAULT, fhstat(NULL, NULL) == -1); 522a56867b8SAlan Somers check_audit(fds, regex, pipefd); 523a56867b8SAlan Somers } 524a56867b8SAlan Somers 525a56867b8SAlan Somers ATF_TC_CLEANUP(fhstat_failure, tc) 526a56867b8SAlan Somers { 527a56867b8SAlan Somers cleanup(); 528a56867b8SAlan Somers } 529a56867b8SAlan Somers 530a56867b8SAlan Somers 531a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstatfs_success); 532a56867b8SAlan Somers ATF_TC_HEAD(fhstatfs_success, tc) 533a56867b8SAlan Somers { 534a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 535a56867b8SAlan Somers "fstatfs(2) call"); 536a56867b8SAlan Somers } 537a56867b8SAlan Somers 538a56867b8SAlan Somers ATF_TC_BODY(fhstatfs_success, tc) 539a56867b8SAlan Somers { 540a56867b8SAlan Somers pid = getpid(); 541a56867b8SAlan Somers snprintf(extregex, sizeof(extregex), "fhstatfs.*%d.*success", pid); 542a56867b8SAlan Somers 543a56867b8SAlan Somers /* File needs to exist to get a file-handle */ 544a56867b8SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 545a56867b8SAlan Somers /* Get the file handle to be passed to fhstatfs(2) */ 546a56867b8SAlan Somers ATF_REQUIRE_EQ(0, getfh(path, &fht)); 547a56867b8SAlan Somers 548a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 549a56867b8SAlan Somers ATF_REQUIRE_EQ(0, fhstatfs(&fht, &statfsbuff)); 550a56867b8SAlan Somers check_audit(fds, extregex, pipefd); 551a56867b8SAlan Somers close(filedesc); 552a56867b8SAlan Somers } 553a56867b8SAlan Somers 554a56867b8SAlan Somers ATF_TC_CLEANUP(fhstatfs_success, tc) 555a56867b8SAlan Somers { 556a56867b8SAlan Somers cleanup(); 557a56867b8SAlan Somers } 558a56867b8SAlan Somers 559a56867b8SAlan Somers 560a56867b8SAlan Somers ATF_TC_WITH_CLEANUP(fhstatfs_failure); 561a56867b8SAlan Somers ATF_TC_HEAD(fhstatfs_failure, tc) 562a56867b8SAlan Somers { 563a56867b8SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 564a56867b8SAlan Somers "fhstatfs(2) call"); 565a56867b8SAlan Somers } 566a56867b8SAlan Somers 567a56867b8SAlan Somers ATF_TC_BODY(fhstatfs_failure, tc) 568a56867b8SAlan Somers { 569a56867b8SAlan Somers const char *regex = "fhstatfs.*return,failure : Bad address"; 570a56867b8SAlan Somers FILE *pipefd = setup(fds, auclass); 571a56867b8SAlan Somers /* Failure reason: NULL does not represent any file handle */ 572*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EFAULT, fhstatfs(NULL, NULL) == -1); 573a56867b8SAlan Somers check_audit(fds, regex, pipefd); 574a56867b8SAlan Somers } 575a56867b8SAlan Somers 576a56867b8SAlan Somers ATF_TC_CLEANUP(fhstatfs_failure, tc) 577a56867b8SAlan Somers { 578a56867b8SAlan Somers cleanup(); 579a56867b8SAlan Somers } 580a56867b8SAlan Somers 581a56867b8SAlan Somers 58228845213SAlan Somers ATF_TC_WITH_CLEANUP(access_success); 58328845213SAlan Somers ATF_TC_HEAD(access_success, tc) 58428845213SAlan Somers { 58528845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 58628845213SAlan Somers "access(2) call"); 58728845213SAlan Somers } 58828845213SAlan Somers 58928845213SAlan Somers ATF_TC_BODY(access_success, tc) 59028845213SAlan Somers { 59128845213SAlan Somers /* File needs to exist to call access(2) */ 59228845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 59328845213SAlan Somers FILE *pipefd = setup(fds, auclass); 59428845213SAlan Somers ATF_REQUIRE_EQ(0, access(path, F_OK)); 59528845213SAlan Somers check_audit(fds, successreg, pipefd); 59628845213SAlan Somers close(filedesc); 59728845213SAlan Somers } 59828845213SAlan Somers 59928845213SAlan Somers ATF_TC_CLEANUP(access_success, tc) 60028845213SAlan Somers { 60128845213SAlan Somers cleanup(); 60228845213SAlan Somers } 60328845213SAlan Somers 60428845213SAlan Somers 60528845213SAlan Somers ATF_TC_WITH_CLEANUP(access_failure); 60628845213SAlan Somers ATF_TC_HEAD(access_failure, tc) 60728845213SAlan Somers { 60828845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 60928845213SAlan Somers "access(2) call"); 61028845213SAlan Somers } 61128845213SAlan Somers 61228845213SAlan Somers ATF_TC_BODY(access_failure, tc) 61328845213SAlan Somers { 61428845213SAlan Somers FILE *pipefd = setup(fds, auclass); 61528845213SAlan Somers /* Failure reason: file does not exist */ 616*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, access(errpath, F_OK) == -1); 61728845213SAlan Somers check_audit(fds, failurereg, pipefd); 61828845213SAlan Somers } 61928845213SAlan Somers 62028845213SAlan Somers ATF_TC_CLEANUP(access_failure, tc) 62128845213SAlan Somers { 62228845213SAlan Somers cleanup(); 62328845213SAlan Somers } 62428845213SAlan Somers 62528845213SAlan Somers 62628845213SAlan Somers ATF_TC_WITH_CLEANUP(eaccess_success); 62728845213SAlan Somers ATF_TC_HEAD(eaccess_success, tc) 62828845213SAlan Somers { 62928845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 63028845213SAlan Somers "eaccess(2) call"); 63128845213SAlan Somers } 63228845213SAlan Somers 63328845213SAlan Somers ATF_TC_BODY(eaccess_success, tc) 63428845213SAlan Somers { 63528845213SAlan Somers /* File needs to exist to call eaccess(2) */ 63628845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 63728845213SAlan Somers FILE *pipefd = setup(fds, auclass); 63828845213SAlan Somers ATF_REQUIRE_EQ(0, eaccess(path, F_OK)); 63928845213SAlan Somers check_audit(fds, successreg, pipefd); 64028845213SAlan Somers close(filedesc); 64128845213SAlan Somers } 64228845213SAlan Somers 64328845213SAlan Somers ATF_TC_CLEANUP(eaccess_success, tc) 64428845213SAlan Somers { 64528845213SAlan Somers cleanup(); 64628845213SAlan Somers } 64728845213SAlan Somers 64828845213SAlan Somers 64928845213SAlan Somers ATF_TC_WITH_CLEANUP(eaccess_failure); 65028845213SAlan Somers ATF_TC_HEAD(eaccess_failure, tc) 65128845213SAlan Somers { 65228845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 65328845213SAlan Somers "eaccess(2) call"); 65428845213SAlan Somers } 65528845213SAlan Somers 65628845213SAlan Somers ATF_TC_BODY(eaccess_failure, tc) 65728845213SAlan Somers { 65828845213SAlan Somers FILE *pipefd = setup(fds, auclass); 65928845213SAlan Somers /* Failure reason: file does not exist */ 660*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, eaccess(errpath, F_OK) == -1); 66128845213SAlan Somers check_audit(fds, failurereg, pipefd); 66228845213SAlan Somers } 66328845213SAlan Somers 66428845213SAlan Somers ATF_TC_CLEANUP(eaccess_failure, tc) 66528845213SAlan Somers { 66628845213SAlan Somers cleanup(); 66728845213SAlan Somers } 66828845213SAlan Somers 66928845213SAlan Somers 67028845213SAlan Somers ATF_TC_WITH_CLEANUP(faccessat_success); 67128845213SAlan Somers ATF_TC_HEAD(faccessat_success, tc) 67228845213SAlan Somers { 67328845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 67428845213SAlan Somers "faccessat(2) call"); 67528845213SAlan Somers } 67628845213SAlan Somers 67728845213SAlan Somers ATF_TC_BODY(faccessat_success, tc) 67828845213SAlan Somers { 67928845213SAlan Somers /* File needs to exist to call faccessat(2) */ 68028845213SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 68128845213SAlan Somers FILE *pipefd = setup(fds, auclass); 68228845213SAlan Somers ATF_REQUIRE_EQ(0, faccessat(AT_FDCWD, path, F_OK, AT_EACCESS)); 68328845213SAlan Somers check_audit(fds, successreg, pipefd); 68428845213SAlan Somers close(filedesc); 68528845213SAlan Somers } 68628845213SAlan Somers 68728845213SAlan Somers ATF_TC_CLEANUP(faccessat_success, tc) 68828845213SAlan Somers { 68928845213SAlan Somers cleanup(); 69028845213SAlan Somers } 69128845213SAlan Somers 69228845213SAlan Somers 69328845213SAlan Somers ATF_TC_WITH_CLEANUP(faccessat_failure); 69428845213SAlan Somers ATF_TC_HEAD(faccessat_failure, tc) 69528845213SAlan Somers { 69628845213SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 69728845213SAlan Somers "faccessat(2) call"); 69828845213SAlan Somers } 69928845213SAlan Somers 70028845213SAlan Somers ATF_TC_BODY(faccessat_failure, tc) 70128845213SAlan Somers { 70228845213SAlan Somers FILE *pipefd = setup(fds, auclass); 70328845213SAlan Somers /* Failure reason: file does not exist */ 704*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 705*40407d39SAlex Richardson faccessat(AT_FDCWD, errpath, F_OK, AT_EACCESS) == -1); 70628845213SAlan Somers check_audit(fds, failurereg, pipefd); 70728845213SAlan Somers } 70828845213SAlan Somers 70928845213SAlan Somers ATF_TC_CLEANUP(faccessat_failure, tc) 71028845213SAlan Somers { 71128845213SAlan Somers cleanup(); 71228845213SAlan Somers } 71328845213SAlan Somers 71428845213SAlan Somers 7152c347e63SAlan Somers ATF_TC_WITH_CLEANUP(pathconf_success); 7162c347e63SAlan Somers ATF_TC_HEAD(pathconf_success, tc) 7172c347e63SAlan Somers { 7182c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 7192c347e63SAlan Somers "pathconf(2) call"); 7202c347e63SAlan Somers } 7212c347e63SAlan Somers 7222c347e63SAlan Somers ATF_TC_BODY(pathconf_success, tc) 7232c347e63SAlan Somers { 7242c347e63SAlan Somers /* File needs to exist to call pathconf(2) */ 7252c347e63SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 7262c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7272c347e63SAlan Somers /* Get the maximum number of bytes of filename */ 7282c347e63SAlan Somers ATF_REQUIRE(pathconf(path, _PC_NAME_MAX) != -1); 7292c347e63SAlan Somers check_audit(fds, successreg, pipefd); 7302c347e63SAlan Somers close(filedesc); 7312c347e63SAlan Somers } 7322c347e63SAlan Somers 7332c347e63SAlan Somers ATF_TC_CLEANUP(pathconf_success, tc) 7342c347e63SAlan Somers { 7352c347e63SAlan Somers cleanup(); 7362c347e63SAlan Somers } 7372c347e63SAlan Somers 7382c347e63SAlan Somers 7392c347e63SAlan Somers ATF_TC_WITH_CLEANUP(pathconf_failure); 7402c347e63SAlan Somers ATF_TC_HEAD(pathconf_failure, tc) 7412c347e63SAlan Somers { 7422c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 7432c347e63SAlan Somers "pathconf(2) call"); 7442c347e63SAlan Somers } 7452c347e63SAlan Somers 7462c347e63SAlan Somers ATF_TC_BODY(pathconf_failure, tc) 7472c347e63SAlan Somers { 7482c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7492c347e63SAlan Somers /* Failure reason: file does not exist */ 750*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, pathconf(errpath, _PC_NAME_MAX) == -1); 7512c347e63SAlan Somers check_audit(fds, failurereg, pipefd); 7522c347e63SAlan Somers } 7532c347e63SAlan Somers 7542c347e63SAlan Somers ATF_TC_CLEANUP(pathconf_failure, tc) 7552c347e63SAlan Somers { 7562c347e63SAlan Somers cleanup(); 7572c347e63SAlan Somers } 7582c347e63SAlan Somers 7592c347e63SAlan Somers 7602c347e63SAlan Somers ATF_TC_WITH_CLEANUP(lpathconf_success); 7612c347e63SAlan Somers ATF_TC_HEAD(lpathconf_success, tc) 7622c347e63SAlan Somers { 7632c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 7642c347e63SAlan Somers "lpathconf(2) call"); 7652c347e63SAlan Somers } 7662c347e63SAlan Somers 7672c347e63SAlan Somers ATF_TC_BODY(lpathconf_success, tc) 7682c347e63SAlan Somers { 7692c347e63SAlan Somers /* Symbolic link needs to exist to call lpathconf(2) */ 7702c347e63SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 7712c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7722c347e63SAlan Somers /* Get the maximum number of bytes of symlink's name */ 7732c347e63SAlan Somers ATF_REQUIRE(lpathconf(path, _PC_SYMLINK_MAX) != -1); 7742c347e63SAlan Somers check_audit(fds, successreg, pipefd); 7752c347e63SAlan Somers } 7762c347e63SAlan Somers 7772c347e63SAlan Somers ATF_TC_CLEANUP(lpathconf_success, tc) 7782c347e63SAlan Somers { 7792c347e63SAlan Somers cleanup(); 7802c347e63SAlan Somers } 7812c347e63SAlan Somers 7822c347e63SAlan Somers 7832c347e63SAlan Somers ATF_TC_WITH_CLEANUP(lpathconf_failure); 7842c347e63SAlan Somers ATF_TC_HEAD(lpathconf_failure, tc) 7852c347e63SAlan Somers { 7862c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 7872c347e63SAlan Somers "lpathconf(2) call"); 7882c347e63SAlan Somers } 7892c347e63SAlan Somers 7902c347e63SAlan Somers ATF_TC_BODY(lpathconf_failure, tc) 7912c347e63SAlan Somers { 7922c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 7932c347e63SAlan Somers /* Failure reason: symbolic link does not exist */ 794*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, lpathconf(errpath, _PC_SYMLINK_MAX) == -1); 7952c347e63SAlan Somers check_audit(fds, failurereg, pipefd); 7962c347e63SAlan Somers } 7972c347e63SAlan Somers 7982c347e63SAlan Somers ATF_TC_CLEANUP(lpathconf_failure, tc) 7992c347e63SAlan Somers { 8002c347e63SAlan Somers cleanup(); 8012c347e63SAlan Somers } 8022c347e63SAlan Somers 8032c347e63SAlan Somers 8042c347e63SAlan Somers ATF_TC_WITH_CLEANUP(fpathconf_success); 8052c347e63SAlan Somers ATF_TC_HEAD(fpathconf_success, tc) 8062c347e63SAlan Somers { 8072c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 8082c347e63SAlan Somers "fpathconf(2) call"); 8092c347e63SAlan Somers } 8102c347e63SAlan Somers 8112c347e63SAlan Somers ATF_TC_BODY(fpathconf_success, tc) 8122c347e63SAlan Somers { 8132c347e63SAlan Somers pid = getpid(); 8142c347e63SAlan Somers snprintf(extregex, sizeof(extregex), "fpathconf.*%d.*success", pid); 8152c347e63SAlan Somers 8162c347e63SAlan Somers /* File needs to exist to call fpathconf(2) */ 8172c347e63SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 8182c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 8192c347e63SAlan Somers /* Get the maximum number of bytes of filename */ 8202c347e63SAlan Somers ATF_REQUIRE(fpathconf(filedesc, _PC_NAME_MAX) != -1); 8212c347e63SAlan Somers check_audit(fds, extregex, pipefd); 8222c347e63SAlan Somers close(filedesc); 8232c347e63SAlan Somers } 8242c347e63SAlan Somers 8252c347e63SAlan Somers ATF_TC_CLEANUP(fpathconf_success, tc) 8262c347e63SAlan Somers { 8272c347e63SAlan Somers cleanup(); 8282c347e63SAlan Somers } 8292c347e63SAlan Somers 8302c347e63SAlan Somers 8312c347e63SAlan Somers ATF_TC_WITH_CLEANUP(fpathconf_failure); 8322c347e63SAlan Somers ATF_TC_HEAD(fpathconf_failure, tc) 8332c347e63SAlan Somers { 8342c347e63SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 8352c347e63SAlan Somers "fpathconf(2) call"); 8362c347e63SAlan Somers } 8372c347e63SAlan Somers 8382c347e63SAlan Somers ATF_TC_BODY(fpathconf_failure, tc) 8392c347e63SAlan Somers { 8402c347e63SAlan Somers FILE *pipefd = setup(fds, auclass); 8412c347e63SAlan Somers const char *regex = "fpathconf.*return,failure : Bad file descriptor"; 8422c347e63SAlan Somers /* Failure reason: Bad file descriptor */ 843*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, fpathconf(-1, _PC_NAME_MAX) == -1); 8442c347e63SAlan Somers check_audit(fds, regex, pipefd); 8452c347e63SAlan Somers } 8462c347e63SAlan Somers 8472c347e63SAlan Somers ATF_TC_CLEANUP(fpathconf_failure, tc) 8482c347e63SAlan Somers { 8492c347e63SAlan Somers cleanup(); 8502c347e63SAlan Somers } 8512c347e63SAlan Somers 8522c347e63SAlan Somers 8537d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_file_success); 8547d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_file_success, tc) 8557d951cc2SAlan Somers { 8567d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 8577d951cc2SAlan Somers "extattr_get_file(2) call"); 8587d951cc2SAlan Somers } 8597d951cc2SAlan Somers 8607d951cc2SAlan Somers ATF_TC_BODY(extattr_get_file_success, tc) 8617d951cc2SAlan Somers { 8627d951cc2SAlan Somers /* File needs to exist to call extattr_get_file(2) */ 8637d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 864*40407d39SAlex Richardson skip_if_extattr_not_supported(path); 865*40407d39SAlex Richardson 8667d951cc2SAlan Somers /* Set an extended attribute to be retrieved later on */ 867*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), 868*40407d39SAlex Richardson extattr_set_file(path, EXTATTR_NAMESPACE_USER, name, buff, 869*40407d39SAlex Richardson 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); 876*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), 877*40407d39SAlex Richardson extattr_get_file(path, 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 */ 903*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 904*40407d39SAlex Richardson extattr_get_file(path, EXTATTR_NAMESPACE_USER, name, NULL, 0) == 905*40407d39SAlex Richardson -1); 9067d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9077d951cc2SAlan Somers } 9087d951cc2SAlan Somers 9097d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_file_failure, tc) 9107d951cc2SAlan Somers { 9117d951cc2SAlan Somers cleanup(); 9127d951cc2SAlan Somers } 9137d951cc2SAlan Somers 9147d951cc2SAlan Somers 9157d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_fd_success); 9167d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_fd_success, tc) 9177d951cc2SAlan Somers { 9187d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 9197d951cc2SAlan Somers "extattr_get_fd(2) call"); 9207d951cc2SAlan Somers } 9217d951cc2SAlan Somers 9227d951cc2SAlan Somers ATF_TC_BODY(extattr_get_fd_success, tc) 9237d951cc2SAlan Somers { 9247d951cc2SAlan Somers /* File needs to exist to call extattr_get_fd(2) */ 9257d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 926*40407d39SAlex Richardson skip_if_extattr_not_supported(path); 927*40407d39SAlex Richardson 9287d951cc2SAlan Somers /* Set an extended attribute to be retrieved later on */ 929*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), 930*40407d39SAlex Richardson extattr_set_file(path, EXTATTR_NAMESPACE_USER, name, buff, 931*40407d39SAlex Richardson sizeof(buff))); 9327d951cc2SAlan Somers 9337d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9347d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9357d951cc2SAlan Somers "extattr_get_fd.*%s.*return,success", name); 9367d951cc2SAlan Somers 9377d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 938*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), 939*40407d39SAlex Richardson extattr_get_fd(filedesc, EXTATTR_NAMESPACE_USER, name, NULL, 0)); 9407d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9417d951cc2SAlan Somers close(filedesc); 9427d951cc2SAlan Somers } 9437d951cc2SAlan Somers 9447d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_fd_success, tc) 9457d951cc2SAlan Somers { 9467d951cc2SAlan Somers cleanup(); 9477d951cc2SAlan Somers } 9487d951cc2SAlan Somers 9497d951cc2SAlan Somers 9507d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_fd_failure); 9517d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_fd_failure, tc) 9527d951cc2SAlan Somers { 9537d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 9547d951cc2SAlan Somers "extattr_get_fd(2) call"); 9557d951cc2SAlan Somers } 9567d951cc2SAlan Somers 9577d951cc2SAlan Somers ATF_TC_BODY(extattr_get_fd_failure, tc) 9587d951cc2SAlan Somers { 9597d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9607d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9617d951cc2SAlan Somers "extattr_get_fd.*%s.*return,failure : Bad file descriptor", name); 9627d951cc2SAlan Somers 9637d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 9647d951cc2SAlan Somers /* Failure reason: Invalid file descriptor */ 965*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, 966*40407d39SAlex Richardson extattr_get_fd(-1, EXTATTR_NAMESPACE_USER, name, NULL, 0) == -1); 9677d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 9687d951cc2SAlan Somers } 9697d951cc2SAlan Somers 9707d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_fd_failure, tc) 9717d951cc2SAlan Somers { 9727d951cc2SAlan Somers cleanup(); 9737d951cc2SAlan Somers } 9747d951cc2SAlan Somers 9757d951cc2SAlan Somers 9767d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_link_success); 9777d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_link_success, tc) 9787d951cc2SAlan Somers { 9797d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 9807d951cc2SAlan Somers "extattr_get_link(2) call"); 9817d951cc2SAlan Somers } 9827d951cc2SAlan Somers 9837d951cc2SAlan Somers ATF_TC_BODY(extattr_get_link_success, tc) 9847d951cc2SAlan Somers { 9857d951cc2SAlan Somers /* Symbolic link needs to exist to call extattr_get_link(2) */ 9867d951cc2SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 987*40407d39SAlex Richardson skip_if_extattr_not_supported("."); 988*40407d39SAlex Richardson 9897d951cc2SAlan Somers /* Set an extended attribute to be retrieved later on */ 990*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), 991*40407d39SAlex Richardson extattr_set_link(path, EXTATTR_NAMESPACE_USER, name, buff, 992*40407d39SAlex Richardson sizeof(buff))); 9937d951cc2SAlan Somers 9947d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 9957d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 9967d951cc2SAlan Somers "extattr_get_link.*%s.*%s.*return,success", path, name); 9977d951cc2SAlan Somers 9987d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 999*40407d39SAlex Richardson REQUIRE_EXTATTR_RESULT(sizeof(buff), 1000*40407d39SAlex Richardson extattr_get_link(path, EXTATTR_NAMESPACE_USER, name, NULL, 0)); 10017d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10027d951cc2SAlan Somers } 10037d951cc2SAlan Somers 10047d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_link_success, tc) 10057d951cc2SAlan Somers { 10067d951cc2SAlan Somers cleanup(); 10077d951cc2SAlan Somers } 10087d951cc2SAlan Somers 10097d951cc2SAlan Somers 10107d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_get_link_failure); 10117d951cc2SAlan Somers ATF_TC_HEAD(extattr_get_link_failure, tc) 10127d951cc2SAlan Somers { 10137d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 10147d951cc2SAlan Somers "extattr_get_link(2) call"); 10157d951cc2SAlan Somers } 10167d951cc2SAlan Somers 10177d951cc2SAlan Somers ATF_TC_BODY(extattr_get_link_failure, tc) 10187d951cc2SAlan Somers { 10197d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10207d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 10217d951cc2SAlan Somers "extattr_get_link.*%s.*%s.*failure", path, name); 10227d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10237d951cc2SAlan Somers /* Failure reason: symbolic link does not exist */ 1024*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 1025*40407d39SAlex Richardson extattr_get_link(path, EXTATTR_NAMESPACE_USER, name, NULL, 0)); 10267d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10277d951cc2SAlan Somers } 10287d951cc2SAlan Somers 10297d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_get_link_failure, tc) 10307d951cc2SAlan Somers { 10317d951cc2SAlan Somers cleanup(); 10327d951cc2SAlan Somers } 10337d951cc2SAlan Somers 10347d951cc2SAlan Somers 10357d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_file_success); 10367d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_file_success, tc) 10377d951cc2SAlan Somers { 10387d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 10397d951cc2SAlan Somers "extattr_list_file(2) call"); 10407d951cc2SAlan Somers } 10417d951cc2SAlan Somers 10427d951cc2SAlan Somers ATF_TC_BODY(extattr_list_file_success, tc) 10437d951cc2SAlan Somers { 1044*40407d39SAlex Richardson ssize_t readbuff; 10457d951cc2SAlan Somers /* File needs to exist to call extattr_list_file(2) */ 10467d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 1047*40407d39SAlex Richardson skip_if_extattr_not_supported(path); 10487d951cc2SAlan Somers 10497d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 1050*40407d39SAlex Richardson readbuff = REQUIRE_EXTATTR_SUCCESS( 1051*40407d39SAlex Richardson extattr_list_file(path, EXTATTR_NAMESPACE_USER, NULL, 0)); 10527d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10537d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 1054*40407d39SAlex Richardson "extattr_list_file.*%s.*return,success,%zd", path, readbuff); 10557d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10567d951cc2SAlan Somers } 10577d951cc2SAlan Somers 10587d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_file_success, tc) 10597d951cc2SAlan Somers { 10607d951cc2SAlan Somers cleanup(); 10617d951cc2SAlan Somers } 10627d951cc2SAlan Somers 10637d951cc2SAlan Somers 10647d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_file_failure); 10657d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_file_failure, tc) 10667d951cc2SAlan Somers { 10677d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 10687d951cc2SAlan Somers "extattr_list_file(2) call"); 10697d951cc2SAlan Somers } 10707d951cc2SAlan Somers 10717d951cc2SAlan Somers ATF_TC_BODY(extattr_list_file_failure, tc) 10727d951cc2SAlan Somers { 10737d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 10747d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 10757d951cc2SAlan Somers "extattr_list_file.*%s.*return,failure", path); 10767d951cc2SAlan Somers 10777d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 10787d951cc2SAlan Somers /* Failure reason: file does not exist */ 1079*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 1080*40407d39SAlex Richardson extattr_list_file(path, EXTATTR_NAMESPACE_USER, NULL, 0)); 10817d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 10827d951cc2SAlan Somers } 10837d951cc2SAlan Somers 10847d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_file_failure, tc) 10857d951cc2SAlan Somers { 10867d951cc2SAlan Somers cleanup(); 10877d951cc2SAlan Somers } 10887d951cc2SAlan Somers 10897d951cc2SAlan Somers 10907d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_fd_success); 10917d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_fd_success, tc) 10927d951cc2SAlan Somers { 10937d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 10947d951cc2SAlan Somers "extattr_list_fd(2) call"); 10957d951cc2SAlan Somers } 10967d951cc2SAlan Somers 10977d951cc2SAlan Somers ATF_TC_BODY(extattr_list_fd_success, tc) 10987d951cc2SAlan Somers { 1099*40407d39SAlex Richardson ssize_t readbuff; 11007d951cc2SAlan Somers /* File needs to exist to call extattr_list_fd(2) */ 11017d951cc2SAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1); 1102*40407d39SAlex Richardson skip_if_extattr_not_supported(path); 11037d951cc2SAlan Somers 11047d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 1105*40407d39SAlex Richardson readbuff = REQUIRE_EXTATTR_SUCCESS( 1106*40407d39SAlex Richardson extattr_list_fd(filedesc, EXTATTR_NAMESPACE_USER, NULL, 0)); 11077d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 11087d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 1109*40407d39SAlex Richardson "extattr_list_fd.*return,success,%zd", readbuff); 11107d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11117d951cc2SAlan Somers close(filedesc); 11127d951cc2SAlan Somers } 11137d951cc2SAlan Somers 11147d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_fd_success, tc) 11157d951cc2SAlan Somers { 11167d951cc2SAlan Somers cleanup(); 11177d951cc2SAlan Somers } 11187d951cc2SAlan Somers 11197d951cc2SAlan Somers 11207d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_fd_failure); 11217d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_fd_failure, tc) 11227d951cc2SAlan Somers { 11237d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 11247d951cc2SAlan Somers "extattr_list_fd(2) call"); 11257d951cc2SAlan Somers } 11267d951cc2SAlan Somers 11277d951cc2SAlan Somers ATF_TC_BODY(extattr_list_fd_failure, tc) 11287d951cc2SAlan Somers { 11297d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 11307d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 11317d951cc2SAlan Somers "extattr_list_fd.*return,failure : Bad file descriptor"); 11327d951cc2SAlan Somers 11337d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 11347d951cc2SAlan Somers /* Failure reason: Invalid file descriptor */ 1135*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(EBADF, 1136*40407d39SAlex Richardson extattr_list_fd(-1, EXTATTR_NAMESPACE_USER, NULL, 0) == -1); 11377d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11387d951cc2SAlan Somers } 11397d951cc2SAlan Somers 11407d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_fd_failure, tc) 11417d951cc2SAlan Somers { 11427d951cc2SAlan Somers cleanup(); 11437d951cc2SAlan Somers } 11447d951cc2SAlan Somers 11457d951cc2SAlan Somers 11467d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_link_success); 11477d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_link_success, tc) 11487d951cc2SAlan Somers { 11497d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 11507d951cc2SAlan Somers "extattr_list_link(2) call"); 11517d951cc2SAlan Somers } 11527d951cc2SAlan Somers 11537d951cc2SAlan Somers ATF_TC_BODY(extattr_list_link_success, tc) 11547d951cc2SAlan Somers { 1155*40407d39SAlex Richardson ssize_t readbuff; 11567d951cc2SAlan Somers /* Symbolic link needs to exist to call extattr_list_link(2) */ 11577d951cc2SAlan Somers ATF_REQUIRE_EQ(0, symlink("symlink", path)); 1158*40407d39SAlex Richardson skip_if_extattr_not_supported("."); 11597d951cc2SAlan Somers 1160*40407d39SAlex Richardson FILE *pipefd = setup(fds, auclass); 1161*40407d39SAlex Richardson readbuff = REQUIRE_EXTATTR_SUCCESS( 1162*40407d39SAlex Richardson extattr_list_link(path, EXTATTR_NAMESPACE_USER, NULL, 0)); 11637d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 11647d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 1165*40407d39SAlex Richardson "extattr_list_link.*%s.*return,success,%zd", path, readbuff); 11667d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11677d951cc2SAlan Somers } 11687d951cc2SAlan Somers 11697d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_link_success, tc) 11707d951cc2SAlan Somers { 11717d951cc2SAlan Somers cleanup(); 11727d951cc2SAlan Somers } 11737d951cc2SAlan Somers 11747d951cc2SAlan Somers 11757d951cc2SAlan Somers ATF_TC_WITH_CLEANUP(extattr_list_link_failure); 11767d951cc2SAlan Somers ATF_TC_HEAD(extattr_list_link_failure, tc) 11777d951cc2SAlan Somers { 11787d951cc2SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 11797d951cc2SAlan Somers "extattr_list_link(2) call"); 11807d951cc2SAlan Somers } 11817d951cc2SAlan Somers 11827d951cc2SAlan Somers ATF_TC_BODY(extattr_list_link_failure, tc) 11837d951cc2SAlan Somers { 11847d951cc2SAlan Somers /* Prepare the regex to be checked in the audit record */ 11857d951cc2SAlan Somers snprintf(extregex, sizeof(extregex), 11867d951cc2SAlan Somers "extattr_list_link.*%s.*failure", path); 11877d951cc2SAlan Somers FILE *pipefd = setup(fds, auclass); 11887d951cc2SAlan Somers /* Failure reason: symbolic link does not exist */ 1189*40407d39SAlex Richardson ATF_REQUIRE_ERRNO(ENOENT, 1190*40407d39SAlex Richardson extattr_list_link(path, EXTATTR_NAMESPACE_USER, NULL, 0) == -1); 11917d951cc2SAlan Somers check_audit(fds, extregex, pipefd); 11927d951cc2SAlan Somers } 11937d951cc2SAlan Somers 11947d951cc2SAlan Somers ATF_TC_CLEANUP(extattr_list_link_failure, tc) 11957d951cc2SAlan Somers { 11967d951cc2SAlan Somers cleanup(); 11977d951cc2SAlan Somers } 11987d951cc2SAlan Somers 11997d951cc2SAlan Somers 1200f86d6517SAlan Somers ATF_TP_ADD_TCS(tp) 1201f86d6517SAlan Somers { 1202f86d6517SAlan Somers ATF_TP_ADD_TC(tp, stat_success); 1203f86d6517SAlan Somers ATF_TP_ADD_TC(tp, stat_failure); 1204f86d6517SAlan Somers ATF_TP_ADD_TC(tp, lstat_success); 1205f86d6517SAlan Somers ATF_TP_ADD_TC(tp, lstat_failure); 1206f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstat_success); 1207f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstat_failure); 1208f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstatat_success); 1209f86d6517SAlan Somers ATF_TP_ADD_TC(tp, fstatat_failure); 1210f86d6517SAlan Somers 1211ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, statfs_success); 1212ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, statfs_failure); 1213ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, fstatfs_success); 1214ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, fstatfs_failure); 1215ae19b2efSAlan Somers 1216ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, getfsstat_success); 1217ae19b2efSAlan Somers ATF_TP_ADD_TC(tp, getfsstat_failure); 1218ae19b2efSAlan Somers 121955cd4523SAlan Somers ATF_TP_ADD_TC(tp, lgetfh_success); 122055cd4523SAlan Somers ATF_TP_ADD_TC(tp, lgetfh_failure); 1221a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhopen_success); 1222a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhopen_failure); 1223a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstat_success); 1224a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstat_failure); 1225a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstatfs_success); 1226a56867b8SAlan Somers ATF_TP_ADD_TC(tp, fhstatfs_failure); 1227a56867b8SAlan Somers 122828845213SAlan Somers ATF_TP_ADD_TC(tp, access_success); 122928845213SAlan Somers ATF_TP_ADD_TC(tp, access_failure); 123028845213SAlan Somers ATF_TP_ADD_TC(tp, eaccess_success); 123128845213SAlan Somers ATF_TP_ADD_TC(tp, eaccess_failure); 123228845213SAlan Somers ATF_TP_ADD_TC(tp, faccessat_success); 123328845213SAlan Somers ATF_TP_ADD_TC(tp, faccessat_failure); 123428845213SAlan Somers 12352c347e63SAlan Somers ATF_TP_ADD_TC(tp, pathconf_success); 12362c347e63SAlan Somers ATF_TP_ADD_TC(tp, pathconf_failure); 12372c347e63SAlan Somers ATF_TP_ADD_TC(tp, lpathconf_success); 12382c347e63SAlan Somers ATF_TP_ADD_TC(tp, lpathconf_failure); 12392c347e63SAlan Somers ATF_TP_ADD_TC(tp, fpathconf_success); 12402c347e63SAlan Somers ATF_TP_ADD_TC(tp, fpathconf_failure); 12412c347e63SAlan Somers 12427d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_file_success); 12437d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_file_failure); 12447d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_fd_success); 12457d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_fd_failure); 12467d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_link_success); 12477d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_get_link_failure); 12487d951cc2SAlan Somers 12497d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_file_success); 12507d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_file_failure); 12517d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_fd_success); 12527d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_fd_failure); 12537d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_link_success); 12547d951cc2SAlan Somers ATF_TP_ADD_TC(tp, extattr_list_link_failure); 1255f86d6517SAlan Somers return (atf_no_error()); 1256f86d6517SAlan Somers } 1257