aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJakob Unterwurzacher2018-09-08 18:06:33 +0200
committerJakob Unterwurzacher2018-09-08 18:06:33 +0200
commit930c37e03d5ff80e7cdc9f0ca2cd35d80a06d5c0 (patch)
tree7294ff75cc9ebbc78c5d6fe57c20ca7e69d515d5 /tests
parent9ec9d0c49cfbdc9ceba10d7534b77e527c0a3cdc (diff)
syscallcompat: use O_PATH in OpenDirNofollow
This fixes the "0100 directory" problem in reverse mode, and should be slightly faster.
Diffstat (limited to 'tests')
-rw-r--r--tests/reverse/correctness_test.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/reverse/correctness_test.go b/tests/reverse/correctness_test.go
index 34b32ea..17c4cdd 100644
--- a/tests/reverse/correctness_test.go
+++ b/tests/reverse/correctness_test.go
@@ -207,3 +207,33 @@ func TestTooLongSymlink(t *testing.T) {
err2.Err)
}
}
+
+// Test that we can traverse a directory with 0100 permissions
+// (execute but no read). This used to be a problem as OpenDirNofollow opened
+// all directory in the path with O_RDONLY. Now it uses O_PATH, which only needs
+// the executable bit.
+func Test0100Dir(t *testing.T) {
+ dir := dirA + "/" + t.Name()
+ err := os.Mkdir(dir, 0700)
+ if err != nil {
+ t.Fatal(err)
+ }
+ file := dir + "/hello"
+ err = ioutil.WriteFile(file, []byte("hello"), 0600)
+ if err != nil {
+ t.Fatal(err)
+ }
+ err = os.Chmod(dir, 0100)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ fileReverse := dirC + "/" + t.Name() + "/hello"
+ fd, err := os.Open(fileReverse)
+ // Make sure the dir can be removed after the test is done
+ os.Chmod(dir, 0700)
+ if err != nil {
+ t.Fatal(err)
+ }
+ fd.Close()
+}