summaryrefslogtreecommitdiff
path: root/regress
diff options
context:
space:
mode:
authorBob Beck <beck@cvs.openbsd.org>2018-10-28 22:42:34 +0000
committerBob Beck <beck@cvs.openbsd.org>2018-10-28 22:42:34 +0000
commit3dd75325aba331f14e7a1144d97b573b5fb8ae58 (patch)
treea4c7a026f7b9d3029854952a92c3ae299f09d53c /regress
parenta9e3a4fd23e7d0e319d4ed68b83a108830e84b47 (diff)
Correctly deal with upper level unveil's by keeping track of the covering
unveil for each unveil in the process at unveil() time, and refactoring the handling of current directory and ISDOTDOT to be much more sensible. Worked out at ns2k18 with guenther@. ok deraadt@
Diffstat (limited to 'regress')
-rw-r--r--regress/sys/kern/unveil/syscalls.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/regress/sys/kern/unveil/syscalls.c b/regress/sys/kern/unveil/syscalls.c
index 4284ddf63d3..4410526553b 100644
--- a/regress/sys/kern/unveil/syscalls.c
+++ b/regress/sys/kern/unveil/syscalls.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: syscalls.c,v 1.17 2018/08/28 02:49:47 beck Exp $ */
+/* $OpenBSD: syscalls.c,v 1.18 2018/10/28 22:42:33 beck Exp $ */
/*
* Copyright (c) 2017-2018 Bob Beck <beck@openbsd.org>
@@ -456,7 +456,7 @@ test_parent_dir(int do_uv)
{
char filename[255];
if (do_uv) {
- printf("testing chdir\n");
+ printf("testing parent dir\n");
do_unveil2();
} else {
(void) snprintf(filename, sizeof(filename), "/%s/doof", uv_dir1);
@@ -466,23 +466,31 @@ test_parent_dir(int do_uv)
(void) snprintf(filename, sizeof(filename), "/%s/doof/subdir1", uv_dir1);
UV_SHOULD_SUCCEED((mkdir(filename, 0777) == -1), "mkdir");
(void) snprintf(filename, sizeof(filename), "/%s/doof/subdir1/poop", uv_dir1);
- UV_SHOULD_SUCCEED((open(filename, O_RDWR|O_CREAT) == -1), "open");
+ UV_SHOULD_SUCCEED((open(filename, O_RDWR|O_CREAT, 0644) == -1), "open");
(void) snprintf(filename, sizeof(filename), "/%s/doof/subdir1/link", uv_dir1);
UV_SHOULD_SUCCEED((symlink("../subdir1/poop", filename) == -1), "symlink");
}
sleep(1);
- (void) snprintf(filename, sizeof(filename), "/%s/doof/subdir1/poop", uv_dir1);
- UV_SHOULD_SUCCEED((access(filename, R_OK) == -1), "access");
(void) snprintf(filename, sizeof(filename), "/%s/doof/subdir1/link", uv_dir1);
UV_SHOULD_SUCCEED((access(filename, R_OK) == -1), "access");
- return 0;
+ (void) snprintf(filename, sizeof(filename), "/%s/doof/subdir1/poop", uv_dir1);
+ UV_SHOULD_SUCCEED((access(filename, R_OK) == -1), "access");
UV_SHOULD_SUCCEED((chdir(uv_dir1) == -1), "chdir");
(void) snprintf(filename, sizeof(filename), "/%s/doof/subdir1", uv_dir1);
UV_SHOULD_SUCCEED((chdir(filename) == -1), "chdir");
+ UV_SHOULD_SUCCEED((access("poop", R_OK) == -1), "access");
UV_SHOULD_SUCCEED((chdir("../subdir2") == -1), "chdir");
UV_SHOULD_SUCCEED((chdir("../subdir1") == -1), "chdir");
-
- return 0;
+ UV_SHOULD_SUCCEED((chdir(filename) == -1), "chdir");
+ UV_SHOULD_SUCCEED((chdir("../../doof/subdir2") == -1), "chdir");
+ UV_SHOULD_SUCCEED((chdir("../../doof/subdir1") == -1), "chdir");
+ UV_SHOULD_SUCCEED((chdir("../../doof/subdir2") == -1), "chdir");
+ UV_SHOULD_SUCCEED((chdir("../../doof/subdir1") == -1), "chdir");
+ UV_SHOULD_SUCCEED((access("poop", R_OK) == -1), "access");
+ UV_SHOULD_SUCCEED((access("../subdir1/poop", R_OK) == -1), "access");
+ UV_SHOULD_EACCES((chdir("../../../") == -1), "chdir");
+ UV_SHOULD_ENOENT((chdir(uv_dir2) == -1), "chdir");
+ return(0);
}
static int