unlinkat
(void)unlinkat(to.dir, to.path,
if (!dne && unlinkat(to.dir, to.path, atflags) != 0) {
if (!dne && unlinkat(to.dir, to.path, atflags) != 0) {
if (!dne && unlinkat(to.dir, to.path, atflags) != 0) {
unlinkat(dirfd(d), dp->d_name, 0);
int unlinkat(int, const char *, int);
int unlinkat(int, const char *, int);
rv = unlinkat(rt_dir_prefix, user, AT_REMOVEDIR);
unlinkat(fd, dp->d_name, AT_REMOVEDIR);
unlinkat(fd, dp->d_name, 0);
unlinkat(rt_dir_prefix, xdg_session_file, 0);
if (unlinkat(rt_dir_prefix, user, AT_REMOVEDIR) != 0) {
unlinkat(dirfd, pfh->pf_filename, 0);
(void)unlinkat(savedirfd, path, 0);
(void)unlinkat(savedirfd, path, 0);
(void)unlinkat(savedirfd, path, 0);
(void)unlinkat(savedirfd, path, 0);
(void)unlinkat(savedirfd, path, 0);
(void)unlinkat(savedirfd, path, 0);
(void)unlinkat(savedirfd, path, 0);
(void)unlinkat(savedirfd, path, 0);
(void)unlinkat(savedirfd, path, 0);
(void)unlinkat(savedirfd, "info.last", 0);
(void)unlinkat(savedirfd, "key.last", 0);
(void)unlinkat(savedirfd, "vmcore.last", 0);
(void)unlinkat(savedirfd, "vmcore.last.gz", 0);
(void)unlinkat(savedirfd, "vmcore.last.zst", 0);
(void)unlinkat(savedirfd, "vmcore_encrypted.last", 0);
(void)unlinkat(savedirfd, "vmcore_encrypted.last.gz", 0);
(void)unlinkat(savedirfd, "textdump.tar.last", 0);
(void)unlinkat(savedirfd, "textdump.tar.last.gz", 0);
(void)unlinkat(savedirfd, "livecore.last", 0);
(void)unlinkat(savedirfd, "livecore.last.gz", 0);
(void)unlinkat(savedirfd, "livecore.last.zst", 0);
ATF_REQUIRE_EQ(0, unlinkat(AT_FDCWD, path, AT_REMOVEDIR));
ATF_REQUIRE_EQ(-1, unlinkat(AT_FDCWD, errpath, AT_REMOVEDIR));
EXPECT_NOTCAPABLE(unlinkat(cap_dfd_no_unlink, "cap_subdir", AT_REMOVEDIR));
EXPECT_OK(unlinkat(cap_dfd_all, "cap_subdir", AT_REMOVEDIR));
EXPECT_OK(unlinkat(dirfd, "cap_create", 0));
EXPECT_OK(unlinkat(dirfd, "cap_create", 0));
EXPECT_OK(unlinkat(dirfd, "cap_create", 0));
EXPECT_OK(unlinkat(dirfd, "cap_faccess", 0));
EXPECT_OK(unlinkat(dirfd, "cap_fsync", 0));
EXPECT_OK(unlinkat(dirfd, "cap_ftruncate", 0));
EXPECT_OK(unlinkat(dirfd, "cap_create", 0));
EXPECT_OK(unlinkat(dirfd, "cap_create", 0));
EXPECT_OK(unlinkat(dirfd, "cap_fsync", 0));
EXPECT_OK(unlinkat(dirfd, "cap_chflagsat", 0));
EXPECT_OK(unlinkat(dirfd, "cap_fchownat", 0));
EXPECT_OK(unlinkat(dirfd, "cap_fchmodat", 0));
EXPECT_OK(unlinkat(dirfd, "cap_fstatat", 0));
EXPECT_OK(unlinkat(dirfd, "cap_futimesat", 0));
EXPECT_OK(unlinkat(dirfd, "cap_linkat_dst", 0));
EXPECT_OK(unlinkat(dirfd, "cap_linkat_dst", 0));
EXPECT_OK(unlinkat(dirfd, "cap_linkat_src", 0));
EXPECT_OK(unlinkat(dirfd, "cap_mkdirat", AT_REMOVEDIR));
EXPECT_OK(unlinkat(dirfd, "cap_mkfifoat", 0));
EXPECT_OK(unlinkat(dirfd, "cap_mknodat", 0));
EXPECT_OK(unlinkat(dirfd, "cap_renameat_dst", 0));
EXPECT_OK(unlinkat(dirfd, "cap_renameat_src", 0));
EXPECT_OK(unlinkat(dirfd, "cap_renameat_dst", 0));
EXPECT_OK(unlinkat(dirfd, "cap_renameat_src", 0));
EXPECT_OK(unlinkat(dirfd, "cap_symlinkat", 0));
rc = unlinkat(dfd_cap, "cap_unlinkat", 0);
unlinkat(dirfd, "cap_unlinkat", 0);
rc = unlinkat(dfd_cap, "cap_unlinkat", AT_REMOVEDIR);
unlinkat(dirfd, "cap_unlinkat", AT_REMOVEDIR);
EXPECT_OK(unlinkat(tmpfd, "cap_dirops", AT_REMOVEDIR));
EXPECT_OK(unlinkat(dfd, "linky", 0));
EXPECT_OK(unlinkat(dfd, "subdir", AT_REMOVEDIR));
EXPECT_CAPMODE(unlinkat(AT_FDCWD, "linky", 0));
error = unlinkat(dfd, "testdir", AT_REMOVEDIR);
unlinkat(fd, "file", AT_RESOLVE_BENEATH));
unlinkat(fd, "../outside/target",
unlinkat(fd, "subdir",
unlinkat(fd, "../outside/dir",
CHECK(ret == -1 || unlinkat(dirfd, "cap_create", 0) == 0);
CHECK(ret == -1 || unlinkat(dirfd, "cap_create", 0) == 0);
CHECK(ret == -1 || unlinkat(dirfd, "cap_create", 0) == 0);
CHECK(unlinkat(dirfd, "cap_fsync", 0) == 0);
CHECK(unlinkat(dirfd, "cap_ftruncate", 0) == 0);
CHECK(ret == -1 || unlinkat(dirfd, "cap_create", 0) == 0);
CHECK(ret == -1 || unlinkat(dirfd, "cap_create", 0) == 0);
CHECK(unlinkat(dirfd, "cap_fsync", 0) == 0);
CHECK(unlinkat(dirfd, "cap_chflagsat", 0) == 0);
CHECK(unlinkat(dirfd, "cap_fchownat", 0) == 0);
CHECK(unlinkat(dirfd, "cap_fchmodat", 0) == 0);
CHECK(unlinkat(dirfd, "cap_fstatat", 0) == 0);
CHECK(unlinkat(dirfd, "cap_futimesat", 0) == 0);
CHECK(unlinkat(dirfd, "cap_linkat_src", 0) == 0);
CHECK(ret == -1 || unlinkat(dirfd, "cap_linkat_dst", 0) == 0);
CHECK(ret == -1 || unlinkat(dirfd, "cap_mkdirat", AT_REMOVEDIR) == 0);
CHECK(ret == -1 || unlinkat(dirfd, "cap_mkfifoat", 0) == 0);
CHECK(ret == -1 || unlinkat(dirfd, "cap_mknodat", 0) == 0);
CHECK(ret == -1 || unlinkat(dirfd, "cap_symlinkat", 0) == 0);
ret = unlinkat(dfd_cap, "cap_unlinkat", 0);
CHECK_RESULT(unlinkat, CAP_UNLINKAT | CAP_LOOKUP, ret == 0);
CHECK(ret == 0 || unlinkat(dirfd, "cap_unlinkat", 0) == 0);
ret = unlinkat(dfd_cap, "cap_unlinkat", AT_REMOVEDIR);
CHECK_RESULT(unlinkat, CAP_UNLINKAT | CAP_LOOKUP, ret == 0);
CHECK(ret == 0 || unlinkat(dirfd, "cap_unlinkat", AT_REMOVEDIR) == 0);
(void)unlinkat(tmpfd, file + strlen("/tmp/"), 0);
(void)unlinkat(tmpfd, dir + strlen("/tmp/"), AT_REMOVEDIR);
if (unlinkat(fd, file, 0) == -1)
if (unlinkat(dirfd, newfile, 0))
(void)unlinkat(d, (*ent)->d_name, 0);
(void)unlinkat(d, tmppath, 0);
(void)unlinkat(d, tmppath, 0);
(void)unlinkat(d, tmpfile, 0);
(void)unlinkat(d, tmpfile, 0);
else if (unlinkat(dir_fd, oldlogs[i].fname, 0) != 0) {
unlinkat(conf.rootfd, file + 1, 0);
if (unlinkat(rootfd, path, 0) == -1)
if (unlinkat(rootfd, path, AT_REMOVEDIR) == -1) {
unlinkat(dirfd, e->d_name, 0);
if (unlinkat(sl->sl_dirfd, sl->sl_name, 0) == -1) {