Changeset View
Changeset View
Standalone View
Standalone View
head/tests/sys/audit/open.c
Show First 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | |||||
#include <atf-c.h> | #include <atf-c.h> | ||||
#include <fcntl.h> | #include <fcntl.h> | ||||
#include "utils.h" | #include "utils.h" | ||||
static struct pollfd fds[1]; | static struct pollfd fds[1]; | ||||
static mode_t o_mode = 0777; | static mode_t o_mode = 0777; | ||||
static int filedesc; | |||||
static char extregex[80]; | static char extregex[80]; | ||||
static const char *path = "fileforaudit"; | static const char *path = "fileforaudit"; | ||||
static const char *errpath = "adirhasnoname/fileforaudit"; | static const char *errpath = "adirhasnoname/fileforaudit"; | ||||
/* | /* | ||||
* Define test-cases for success and failure modes of both open(2) and openat(2) | * Define test-cases for success and failure modes of both open(2) and openat(2) | ||||
*/ | */ | ||||
#define OPEN_AT_TC_DEFINE(mode, regex, flag, class) \ | #define OPEN_AT_TC_DEFINE(mode, regex, flag, class) \ | ||||
ATF_TC_WITH_CLEANUP(open_ ## mode ## _success); \ | ATF_TC_WITH_CLEANUP(open_ ## mode ## _success); \ | ||||
ATF_TC_HEAD(open_ ## mode ## _success, tc) \ | ATF_TC_HEAD(open_ ## mode ## _success, tc) \ | ||||
{ \ | { \ | ||||
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " \ | atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " \ | ||||
"open(2) call with flags = %s", #flag); \ | "open(2) call with flags = %s", #flag); \ | ||||
} \ | } \ | ||||
ATF_TC_BODY(open_ ## mode ## _success, tc) \ | ATF_TC_BODY(open_ ## mode ## _success, tc) \ | ||||
{ \ | { \ | ||||
snprintf(extregex, sizeof(extregex), \ | snprintf(extregex, sizeof(extregex), \ | ||||
"open.*%s.*fileforaudit.*return,success", regex); \ | "open.*%s.*fileforaudit.*return,success", regex); \ | ||||
/* File needs to exist for successful open(2) invocation */ \ | /* File needs to exist for successful open(2) invocation */ \ | ||||
ATF_REQUIRE(open(path, O_CREAT, o_mode) != -1); \ | ATF_REQUIRE((filedesc = open(path, O_CREAT, o_mode)) != -1); \ | ||||
FILE *pipefd = setup(fds, class); \ | FILE *pipefd = setup(fds, class); \ | ||||
ATF_REQUIRE(syscall(SYS_open, path, flag) != -1); \ | ATF_REQUIRE(syscall(SYS_open, path, flag) != -1); \ | ||||
check_audit(fds, extregex, pipefd); \ | check_audit(fds, extregex, pipefd); \ | ||||
close(filedesc); \ | |||||
} \ | } \ | ||||
ATF_TC_CLEANUP(open_ ## mode ## _success, tc) \ | ATF_TC_CLEANUP(open_ ## mode ## _success, tc) \ | ||||
{ \ | { \ | ||||
cleanup(); \ | cleanup(); \ | ||||
} \ | } \ | ||||
ATF_TC_WITH_CLEANUP(open_ ## mode ## _failure); \ | ATF_TC_WITH_CLEANUP(open_ ## mode ## _failure); \ | ||||
ATF_TC_HEAD(open_ ## mode ## _failure, tc) \ | ATF_TC_HEAD(open_ ## mode ## _failure, tc) \ | ||||
{ \ | { \ | ||||
Show All 15 Lines | |||||
ATF_TC_WITH_CLEANUP(openat_ ## mode ## _success); \ | ATF_TC_WITH_CLEANUP(openat_ ## mode ## _success); \ | ||||
ATF_TC_HEAD(openat_ ## mode ## _success, tc) \ | ATF_TC_HEAD(openat_ ## mode ## _success, tc) \ | ||||
{ \ | { \ | ||||
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " \ | atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " \ | ||||
"openat(2) call with flags = %s", #flag); \ | "openat(2) call with flags = %s", #flag); \ | ||||
} \ | } \ | ||||
ATF_TC_BODY(openat_ ## mode ## _success, tc) \ | ATF_TC_BODY(openat_ ## mode ## _success, tc) \ | ||||
{ \ | { \ | ||||
int filedesc2; \ | |||||
snprintf(extregex, sizeof(extregex), \ | snprintf(extregex, sizeof(extregex), \ | ||||
"openat.*%s.*fileforaudit.*return,success", regex); \ | "openat.*%s.*fileforaudit.*return,success", regex); \ | ||||
/* File needs to exist for successful openat(2) invocation */ \ | /* File needs to exist for successful openat(2) invocation */ \ | ||||
ATF_REQUIRE(open(path, O_CREAT, o_mode) != -1); \ | ATF_REQUIRE((filedesc = open(path, O_CREAT, o_mode)) != -1); \ | ||||
FILE *pipefd = setup(fds, class); \ | FILE *pipefd = setup(fds, class); \ | ||||
ATF_REQUIRE(openat(AT_FDCWD, path, flag) != -1); \ | ATF_REQUIRE((filedesc2 = openat(AT_FDCWD, path, flag)) != -1); \ | ||||
check_audit(fds, extregex, pipefd); \ | check_audit(fds, extregex, pipefd); \ | ||||
close(filedesc2); \ | |||||
close(filedesc); \ | |||||
} \ | } \ | ||||
ATF_TC_CLEANUP(openat_ ## mode ## _success, tc) \ | ATF_TC_CLEANUP(openat_ ## mode ## _success, tc) \ | ||||
{ \ | { \ | ||||
cleanup(); \ | cleanup(); \ | ||||
} \ | } \ | ||||
ATF_TC_WITH_CLEANUP(openat_ ## mode ## _failure); \ | ATF_TC_WITH_CLEANUP(openat_ ## mode ## _failure); \ | ||||
ATF_TC_HEAD(openat_ ## mode ## _failure, tc) \ | ATF_TC_HEAD(openat_ ## mode ## _failure, tc) \ | ||||
{ \ | { \ | ||||
▲ Show 20 Lines • Show All 68 Lines • Show Last 20 Lines |