e5a5dd6cc4
The following change imports google/capsicum-test@9333154 from GitHub, omitting the embedded version of googletest, as well as the incomplete libcasper. This test suite helps verify capsicum(3) support via functional tests written in the GoogleTest test framework. Kernel support for capsicum(4) is tested by side-effect of testing capsicum(3). NB: as discussed in a previous [closed] PR [1], the casper(3) tests are incomplete/buggy and will not pass on FreeBSD. Thus, I have no intention of integrating them into the build/test on FreeBSD as-is. The import command used was: ``` curl -L https://github.com/google/capsicum-test/tarball/9333154 | tar --strip-components=1 -xvzf - -C dist/ rm -Rf dist/*/ ``` 1. https://github.com/google/capsicum-test/pull/26 Reviewed by: emaste (mentor) Differential Revision: https://reviews.freebsd.org/D19261
50 lines
1.6 KiB
C++
50 lines
1.6 KiB
C++
#include <fcntl.h>
|
|
#include <sys/stat.h>
|
|
|
|
#include "./capsicum-test.h"
|
|
|
|
// There was a Capsicum-related regression in FreeBSD renameat,
|
|
// which affects certain cases independent of Capsicum or capability mode
|
|
//
|
|
// added to test the renameat syscall for the case that
|
|
// - the "to" file already exists
|
|
// - the "to" file is specified by an absolute path
|
|
// - the "to" file descriptor is used
|
|
// (this descriptor should be ignored if absolute path is provided)
|
|
//
|
|
// details at: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=222258
|
|
|
|
|
|
const char * create_tmp_src(const char* filename) {
|
|
const char *src_path = TmpFile(filename);
|
|
int src_fd = open(src_path, O_CREAT|O_RDWR, 0644);
|
|
close(src_fd);
|
|
return src_path;
|
|
}
|
|
|
|
TEST(Rename, AbsDesignationSame) {
|
|
const char *src_path = create_tmp_src("rename_test");
|
|
EXPECT_OK(rename(src_path, src_path));
|
|
unlink(src_path);
|
|
}
|
|
|
|
TEST(RenameAt, AbsDesignationSame) {
|
|
const char *src_path = create_tmp_src("renameat_test");
|
|
const char *dir_path = TmpFile("renameat_test_dir");
|
|
|
|
EXPECT_OK(mkdir(dir_path, 0755));
|
|
// random temporary directory descriptor
|
|
int dfd = open(dir_path, O_DIRECTORY);
|
|
|
|
// Various rename from/to the same absolute path; in each case the source
|
|
// and dest directory FDs should be irrelevant.
|
|
EXPECT_OK(renameat(AT_FDCWD, src_path, AT_FDCWD, src_path));
|
|
EXPECT_OK(renameat(AT_FDCWD, src_path, dfd, src_path));
|
|
EXPECT_OK(renameat(dfd, src_path, AT_FDCWD, src_path));
|
|
EXPECT_OK(renameat(dfd, src_path, dfd, src_path));
|
|
|
|
close(dfd);
|
|
rmdir(dir_path);
|
|
unlink(src_path);
|
|
}
|