user_id = cct->_conf->client_mount_uid;
group_id = cct->_conf->client_mount_gid;
+ client_permissions = cct->_conf.get_val<bool>("client_permissions");
fuse_default_permissions = cct->_conf.get_val<bool>(
"fuse_default_permissions");
int r = path_walk(path, &dir, perms);
if (r < 0)
return r;
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = may_delete(dir.get(), name.c_str(), perms);
if (r < 0)
return r;
ldout(cct, 10) << " " << i << " " << *cur << " " << dname << dendl;
ldout(cct, 20) << " (path is " << path << ")" << dendl;
InodeRef next;
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = may_lookup(cur.get(), perms);
if (r < 0)
return r;
r = path_walk(path, &dir, perm, true);
if (r < 0)
return r;
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
if (S_ISDIR(in->mode)) {
r = -EPERM;
return r;
if (r < 0) {
return r;
}
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
r = may_delete(dir.get(), name.c_str(), perm);
if (r < 0) {
return r;
if (r < 0)
goto out;
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = may_delete(fromdir.get(), fromname.c_str(), perm);
if (r < 0)
return r;
if (r < 0) {
return r;
}
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
r = may_create(dir.get(), perm);
if (r < 0) {
return r;
std::scoped_lock lock(client_lock);
cur = cwd;
for (i=0; i<path.depth(); ++i) {
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
r = may_lookup(cur.get(), perms);
if (r < 0)
break;
ldout(cct, 20) << __func__ << " got through " << i << " directories on path " << relpath << dendl;
//make new directory at each level
for (; i<path.depth(); ++i) {
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
r = may_create(cur.get(), perms);
if (r < 0)
return r;
int r = path_walk(path, &dir, perms);
if (r < 0)
return r;
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = may_create(dir.get(), perms);
if (r < 0)
return r;
if (r < 0) {
return r;
}
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = may_create(dir.get(), perms);
if (r < 0) {
return r;
CEPH_SETATTR_GID | CEPH_SETATTR_MTIME |
CEPH_SETATTR_ATIME | CEPH_SETATTR_SIZE |
CEPH_SETATTR_CTIME | CEPH_SETATTR_BTIME);
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = may_setattr(in.get(), stx, mask, perms);
if (r < 0)
return r;
int r = path_walk(path, &in, perms, true);
if (r < 0)
return r;
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = may_open(in.get(), O_RDONLY, perms);
if (r < 0)
return r;
return r;
}
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
r = may_open(dirinode.get(), O_RDONLY, perms);
if (r < 0) {
return r;
dirpath.pop_dentry();
InodeRef dir;
r = path_walk(dirpath, &dir, perms, true,
- cct->_conf->client_permissions ? CEPH_CAP_AUTH_SHARED : 0, dirinode);
+ client_permissions ? CEPH_CAP_AUTH_SHARED : 0, dirinode);
if (r < 0) {
goto out;
}
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
r = may_create(dir.get(), perms);
if (r < 0)
goto out;
if (!created) {
// posix says we can only check permissions of existing files
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
r = may_open(in.get(), flags, perms);
if (r < 0)
goto out;
int r = path_walk(path, &in, perm);
if (r < 0)
return r;
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
r = may_create(in.get(), perm);
if (r < 0)
return r;
if (r < 0)
return r;
Inode *snapdir = open_snapdir(in.get());
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
r = may_delete(snapdir, check_perms ? name : NULL, perms);
if (r < 0)
return r;
int Client::_getxattr(InodeRef &in, const char *name, void *value, size_t size,
const UserPerm& perms)
{
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = xattr_permission(in.get(), name, CLIENT_MAY_READ, perms);
if (r < 0)
return r;
int Client::_setxattr(InodeRef &in, const char *name, const void *value,
size_t size, int flags, const UserPerm& perms)
{
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = xattr_permission(in.get(), name, CLIENT_MAY_WRITE, perms);
if (r < 0)
return r;
int Client::_removexattr(InodeRef &in, const char *name, const UserPerm& perms)
{
- if (cct->_conf->client_permissions) {
+ if (client_permissions) {
int r = xattr_permission(in.get(), name, CLIENT_MAY_WRITE, perms);
if (r < 0)
return r;
"client_oc_max_dirty_age", \
"client_oc_max_objects", \
"client_oc_size", \
- "client_oc_target_dirty" \
+ "client_oc_target_dirty", \
+ "client_permissions" \
constexpr bool is_sorted = [] () constexpr {
constexpr auto arr = std::to_array<std::string_view>({KEYS});
std::scoped_lock lock(client_lock);
+ if (changed.count("client_permissions")) {
+ client_permissions = cct->_conf.get_val<bool>("client_permissions");
+ }
if (changed.count("client_cache_mid")) {
lru.lru_set_midpoint(cct->_conf->client_cache_mid);
}