2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
4 * Copyright (c) 2019 The FreeBSD Foundation
6 * This software was developed by BFF Storage Systems, LLC under sponsorship
7 * from the FreeBSD Foundation.
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 * Tests for the "default_permissions" mount option. They must be in their own
33 * file so they can be run as an unprivileged user
44 using namespace testing;
46 class DefaultPermissions: public FuseTest {
48 virtual void SetUp() {
52 GTEST_SKIP() << "This test requires an unprivileged user";
54 m_default_permissions = true;
58 void expect_lookup(const char *relpath, uint64_t ino, mode_t mode)
60 FuseTest::expect_lookup(relpath, ino, S_IFREG | mode, 0, 1);
65 class Access: public DefaultPermissions {};
66 class Open: public DefaultPermissions {};
68 /* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=216391 */
69 TEST_F(Access, DISABLED_eaccess)
71 const char FULLPATH[] = "mountpoint/some_file.txt";
72 const char RELPATH[] = "some_file.txt";
74 mode_t access_mode = X_OK;
76 expect_lookup(RELPATH, ino, S_IFREG | 0644);
78 * Once default_permissions is properly implemented, there might be
79 * another FUSE_GETATTR or something in here. But there should not be
83 ASSERT_NE(0, access(FULLPATH, access_mode));
84 ASSERT_EQ(EACCES, errno);
89 const char FULLPATH[] = "mountpoint/some_file.txt";
90 const char RELPATH[] = "some_file.txt";
92 mode_t access_mode = R_OK;
94 expect_lookup(RELPATH, ino, S_IFREG | 0644);
96 * Once default_permissions is properly implemented, there might be
97 * another FUSE_GETATTR or something in here. But there should not be
101 ASSERT_EQ(0, access(FULLPATH, access_mode)) << strerror(errno);
106 const char FULLPATH[] = "mountpoint/some_file.txt";
107 const char RELPATH[] = "some_file.txt";
111 expect_lookup(RELPATH, ino, S_IFREG | 0644);
112 expect_open(ino, 0, 1);
113 /* Until the attr cache is working, we may send an additional GETATTR */
114 expect_getattr(ino, 0);
116 fd = open(FULLPATH, O_RDONLY);
117 EXPECT_LE(0, fd) << strerror(errno);
118 /* Deliberately leak fd. close(2) will be tested in release.cc */
121 /* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=216391 */
122 TEST_F(Open, DISABLED_eperm)
124 const char FULLPATH[] = "mountpoint/some_file.txt";
125 const char RELPATH[] = "some_file.txt";
128 expect_lookup(RELPATH, ino, S_IFREG | 0644);
130 * Once default_permissions is properly implemented, there might be
131 * another FUSE_GETATTR or something in here. But there should not be
135 EXPECT_NE(0, open(FULLPATH, O_RDWR));
136 EXPECT_EQ(EPERM, errno);