Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 20 May 2018 20:44:51 GMT
From:      aniketp@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r337243 - soc2018/aniketp/head/tests/sys/audit
Message-ID:  <201805202044.w4KKipLl021449@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: aniketp
Date: Sun May 20 20:44:49 2018
New Revision: 337243
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=337243

Log:
  Tests for utimes(2), chflags(2) & chown(2) family
  
  Submitted by: Aniket Pandey aniketp@freebsd.org

Modified:
  soc2018/aniketp/head/tests/sys/audit/file-attribute-modify.c

Modified: soc2018/aniketp/head/tests/sys/audit/file-attribute-modify.c
==============================================================================
--- soc2018/aniketp/head/tests/sys/audit/file-attribute-modify.c	Sun May 20 09:35:05 2018	(r337242)
+++ soc2018/aniketp/head/tests/sys/audit/file-attribute-modify.c	Sun May 20 20:44:49 2018	(r337243)
@@ -27,6 +27,7 @@
  */
 
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <sys/syscall.h>
 
 #include <atf-c.h>
@@ -46,6 +47,96 @@
 static const char *failurereg = "fileforaudit.*return,failure";
 
 
+ATF_TC_WITH_CLEANUP(flock_success);
+ATF_TC_HEAD(flock_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"flock(2) call");
+}
+
+ATF_TC_BODY(flock_success, tc)
+{
+	int filedesc;
+	const char *regex = "flock.*return,success";
+	/* File needs to exist to call flock(2) */
+	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(0, flock(filedesc, LOCK_SH));
+	check_audit(fds, regex, pipefd);
+}
+
+ATF_TC_CLEANUP(flock_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(flock_failure);
+ATF_TC_HEAD(flock_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"flock(2) call");
+}
+
+ATF_TC_BODY(flock_failure, tc)
+{
+	const char *regex = "flock.*return,failure : Bad file descriptor";
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(-1, flock(-1, LOCK_SH));
+	check_audit(fds, regex, pipefd);
+}
+
+ATF_TC_CLEANUP(flock_failure, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(fcntl_success);
+ATF_TC_HEAD(fcntl_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"fcntl(2) call");
+}
+
+ATF_TC_BODY(fcntl_success, tc)
+{
+	int filedesc;
+	const char *regex = "fcntl.*return,success,13";
+	/* File needs to exist to call fcntl(2) */
+	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(13, fcntl(filedesc, F_DUPFD, 13));
+	check_audit(fds, regex, pipefd);
+}
+
+ATF_TC_CLEANUP(fcntl_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(fcntl_failure);
+ATF_TC_HEAD(fcntl_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"fcntl(2) call");
+}
+
+ATF_TC_BODY(fcntl_failure, tc)
+{
+	const char *regex = "fcntl.*return,failure : Bad file descriptor";
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(-1, fcntl(-1, F_DUPFD, 1));
+	check_audit(fds, regex, pipefd);
+}
+
+ATF_TC_CLEANUP(fcntl_failure, tc)
+{
+	cleanup();
+}
+
+
 ATF_TC_WITH_CLEANUP(chmod_success);
 ATF_TC_HEAD(chmod_success, tc)
 {
@@ -352,7 +443,7 @@
 ATF_TC_BODY(lchown_failure, tc)
 {
 	FILE *pipefd = setup(fds, "fm");
-	/* Failure reason: file does not exist */
+	/* Failure reason: Symbolic link does not exist */
 	ATF_REQUIRE_EQ(-1, lchown(errpath, uid, gid));
 	check_audit(fds, failurereg, pipefd);
 }
@@ -406,6 +497,368 @@
 }
 
 
+ATF_TC_WITH_CLEANUP(chflags_success);
+ATF_TC_HEAD(chflags_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"chflags(2) call");
+}
+
+ATF_TC_BODY(chflags_success, tc)
+{
+	/* File needs to exist to call chflags(2) */
+	ATF_REQUIRE(open(path, O_CREAT, mode) != -1);
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(0, chflags(path, SF_IMMUTABLE));
+	check_audit(fds, successreg, pipefd);
+}
+
+ATF_TC_CLEANUP(chflags_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(chflags_failure);
+ATF_TC_HEAD(chflags_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"chflags(2) call");
+}
+
+ATF_TC_BODY(chflags_failure, tc)
+{
+	FILE *pipefd = setup(fds, "fm");
+	/* Failure reason: file does not exist */
+	ATF_REQUIRE_EQ(-1, chflags(errpath, SF_IMMUTABLE));
+	check_audit(fds, failurereg, pipefd);
+}
+
+ATF_TC_CLEANUP(chflags_failure, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(fchflags_success);
+ATF_TC_HEAD(fchflags_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"fchflags(2) call");
+}
+
+ATF_TC_BODY(fchflags_success, tc)
+{
+	int filedesc;
+	char regex[30];
+
+	/* File needs to exist to call fchflags(2) */
+	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
+	ATF_REQUIRE_EQ(0, fstat(filedesc, &statbuff));
+	/* Prepare the regex to be checked in the audit record */
+	snprintf(regex, 30, "fchflags.*%lu.*return,success", statbuff.st_ino);
+
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(0, fchflags(filedesc, SF_IMMUTABLE));
+	check_audit(fds, regex, pipefd);
+}
+
+ATF_TC_CLEANUP(fchflags_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(fchflags_failure);
+ATF_TC_HEAD(fchflags_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"fchflags(2) call");
+}
+
+ATF_TC_BODY(fchflags_failure, tc)
+{
+	const char *regex = "fchflags.*return,failure : Bad file descriptor";
+	FILE *pipefd = setup(fds, "fm");
+	/* Failure reason: Invalid file descriptor */
+	ATF_REQUIRE_EQ(-1, fchflags(-1, SF_IMMUTABLE));
+	check_audit(fds, regex, pipefd);
+}
+
+ATF_TC_CLEANUP(fchflags_failure, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(lchflags_success);
+ATF_TC_HEAD(lchflags_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"lchflags(2) call");
+}
+
+ATF_TC_BODY(lchflags_success, tc)
+{
+	/* Symbolic link needs to exist to call lchflags(2) */
+	ATF_REQUIRE_EQ(0, symlink("symlink", path));
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(0, lchflags(path, SF_IMMUTABLE));
+	check_audit(fds, successreg, pipefd);
+}
+
+ATF_TC_CLEANUP(lchflags_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(lchflags_failure);
+ATF_TC_HEAD(lchflags_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"lchflags(2) call");
+}
+
+ATF_TC_BODY(lchflags_failure, tc)
+{
+	FILE *pipefd = setup(fds, "fm");
+	/* Failure reason: Symbolic link does not exist */
+	ATF_REQUIRE_EQ(-1, lchflags(errpath, SF_IMMUTABLE));
+	check_audit(fds, failurereg, pipefd);
+}
+
+ATF_TC_CLEANUP(lchflags_failure, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(chflagsat_success);
+ATF_TC_HEAD(chflagsat_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"chflagsat(2) call");
+}
+
+ATF_TC_BODY(chflagsat_success, tc)
+{
+	atf_tc_expect_fail("chflagsat(2) does not get audited");
+	/* File needs to exist to call chflagsat(2) */
+	ATF_REQUIRE(open(path, O_CREAT, mode) != -1);
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(0, chflagsat(AT_FDCWD, path, SF_IMMUTABLE, 0));
+	check_audit(fds, successreg, pipefd);
+}
+
+ATF_TC_CLEANUP(chflagsat_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(chflagsat_failure);
+ATF_TC_HEAD(chflagsat_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"chflagsat(2) call");
+}
+
+ATF_TC_BODY(chflagsat_failure, tc)
+{
+	atf_tc_expect_fail("chflagsat(2) does not get audited");
+	FILE *pipefd = setup(fds, "fm");
+	/* Failure reason: file does not exist */
+	ATF_REQUIRE_EQ(-1, chflagsat(AT_FDCWD, errpath, SF_IMMUTABLE, 0));
+	check_audit(fds, failurereg, pipefd);
+}
+
+ATF_TC_CLEANUP(chflagsat_failure, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(utimes_success);
+ATF_TC_HEAD(utimes_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"utimes(2) call");
+}
+
+ATF_TC_BODY(utimes_success, tc)
+{
+	/* File needs to exist to call utimes(2) */
+	ATF_REQUIRE(open(path, O_CREAT, mode) != -1);
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(0, utimes(path, NULL));
+	check_audit(fds, successreg, pipefd);
+}
+
+ATF_TC_CLEANUP(utimes_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(utimes_failure);
+ATF_TC_HEAD(utimes_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"utimes(2) call");
+}
+
+ATF_TC_BODY(utimes_failure, tc)
+{
+	FILE *pipefd = setup(fds, "fm");
+	/* Failure reason: file does not exist */
+	ATF_REQUIRE_EQ(-1, utimes(errpath, NULL));
+	check_audit(fds, failurereg, pipefd);
+}
+
+ATF_TC_CLEANUP(utimes_failure, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(futimes_success);
+ATF_TC_HEAD(futimes_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"futimes(2) call");
+}
+
+ATF_TC_BODY(futimes_success, tc)
+{
+	int filedesc;
+	char regex[30];
+
+	/* File needs to exist to call futimes(2) */
+	ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
+	ATF_REQUIRE_EQ(0, fstat(filedesc, &statbuff));
+	/* Prepare the regex to be checked in the audit record */
+	snprintf(regex, 30, "futimes.*%lu.*return,success", statbuff.st_ino);
+
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(0, futimes(filedesc, NULL));
+	check_audit(fds, regex, pipefd);
+}
+
+ATF_TC_CLEANUP(futimes_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(futimes_failure);
+ATF_TC_HEAD(futimes_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"futimes(2) call");
+}
+
+ATF_TC_BODY(futimes_failure, tc)
+{
+	const char *regex = "futimes.*return,failure : Bad file descriptor";
+	FILE *pipefd = setup(fds, "fm");
+	/* Failure reason: Invalid file descriptor */
+	ATF_REQUIRE_EQ(-1, futimes(-1, NULL));
+	check_audit(fds, regex, pipefd);
+}
+
+ATF_TC_CLEANUP(futimes_failure, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(lutimes_success);
+ATF_TC_HEAD(lutimes_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"lutimes(2) call");
+}
+
+ATF_TC_BODY(lutimes_success, tc)
+{
+	/* Symbolic link needs to exist to call lutimes(2) */
+	ATF_REQUIRE_EQ(0, symlink("symlink", path));
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(0, lutimes(path, NULL));
+	check_audit(fds, successreg, pipefd);
+}
+
+ATF_TC_CLEANUP(lutimes_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(lutimes_failure);
+ATF_TC_HEAD(lutimes_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"lutimes(2) call");
+}
+
+ATF_TC_BODY(lutimes_failure, tc)
+{
+	FILE *pipefd = setup(fds, "fm");
+	/* Failure reason: symbolic link does not exist */
+	ATF_REQUIRE_EQ(-1, lutimes(errpath, NULL));
+	check_audit(fds, failurereg, pipefd);
+}
+
+ATF_TC_CLEANUP(lutimes_failure, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(futimesat_success);
+ATF_TC_HEAD(futimesat_success, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
+					"futimesat(2) call");
+}
+
+ATF_TC_BODY(futimesat_success, tc)
+{
+	/* File needs to exist to call futimesat(2) */
+	ATF_REQUIRE(open(path, O_CREAT, mode) != -1);
+	FILE *pipefd = setup(fds, "fm");
+	ATF_REQUIRE_EQ(0, futimesat(AT_FDCWD, path, NULL));
+	check_audit(fds, successreg, pipefd);
+}
+
+ATF_TC_CLEANUP(futimesat_success, tc)
+{
+	cleanup();
+}
+
+
+ATF_TC_WITH_CLEANUP(futimesat_failure);
+ATF_TC_HEAD(futimesat_failure, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
+					"futimesat(2) call");
+}
+
+ATF_TC_BODY(futimesat_failure, tc)
+{
+	FILE *pipefd = setup(fds, "fm");
+	/* Failure reason: file does not exist */
+	ATF_REQUIRE_EQ(-1, futimesat(AT_FDCWD, errpath, NULL));
+	check_audit(fds, failurereg, pipefd);
+}
+
+ATF_TC_CLEANUP(futimesat_failure, tc)
+{
+	cleanup();
+}
+
+
 ATF_TC_WITH_CLEANUP(open_read_creat_success);
 ATF_TC_HEAD(open_read_creat_success, tc)
 {
@@ -1176,6 +1629,12 @@
 
 ATF_TP_ADD_TCS(tp)
 {
+	ATF_TP_ADD_TC(tp, flock_success);
+	ATF_TP_ADD_TC(tp, flock_failure);
+
+	ATF_TP_ADD_TC(tp, fcntl_success);
+	ATF_TP_ADD_TC(tp, fcntl_failure);
+
 	ATF_TP_ADD_TC(tp, chmod_success);
 	ATF_TP_ADD_TC(tp, chmod_failure);
 	ATF_TP_ADD_TC(tp, fchmod_success);
@@ -1194,6 +1653,24 @@
 	ATF_TP_ADD_TC(tp, fchownat_success);
 	ATF_TP_ADD_TC(tp, fchownat_failure);
 
+	ATF_TP_ADD_TC(tp, chflags_success);
+	ATF_TP_ADD_TC(tp, chflags_failure);
+	ATF_TP_ADD_TC(tp, fchflags_success);
+	ATF_TP_ADD_TC(tp, fchflags_failure);
+	ATF_TP_ADD_TC(tp, lchflags_success);
+	ATF_TP_ADD_TC(tp, lchflags_failure);
+	ATF_TP_ADD_TC(tp, chflagsat_success);
+	ATF_TP_ADD_TC(tp, chflagsat_failure);
+
+	ATF_TP_ADD_TC(tp, utimes_success);
+	ATF_TP_ADD_TC(tp, utimes_failure);
+	ATF_TP_ADD_TC(tp, futimes_success);
+	ATF_TP_ADD_TC(tp, futimes_failure);
+	ATF_TP_ADD_TC(tp, lutimes_success);
+	ATF_TP_ADD_TC(tp, lutimes_failure);
+	ATF_TP_ADD_TC(tp, futimesat_success);
+	ATF_TP_ADD_TC(tp, futimesat_failure);
+
 	ATF_TP_ADD_TC(tp, open_read_creat_success);
 	ATF_TP_ADD_TC(tp, open_read_creat_failure);
 	ATF_TP_ADD_TC(tp, openat_read_creat_success);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201805202044.w4KKipLl021449>