if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
return;
- if (!check_access(mdr, diri, MAY_WRITE|MAY_CREATE))
+ if (!check_access(mdr, diri, MAY_WRITE))
return;
CDentry::linkage_t *dnl = dn->get_projected_linkage();
if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
return;
- if (!check_access(mdr, diri, MAY_WRITE|MAY_CREATE))
+ if (!check_access(mdr, diri, MAY_WRITE))
return;
unsigned mode = req->head.args.mknod.mode;
return;
// mkdir check access
- if (!check_access(mdr, diri, (MAY_WRITE | MAY_CREATE)))
+ if (!check_access(mdr, diri, MAY_WRITE))
return;
// new inode
if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
return;
- if (!check_access(mdr, diri, MAY_WRITE|MAY_CREATE))
+ if (!check_access(mdr, diri, MAY_WRITE))
return;
unsigned mode = S_IFLNK | 0777;
if (path.length())
path = path.substr(1); // drop leading /
- // for creation, we always assign the new inode the caller uid+gid.
- // verify that is permitted.
- if (mask & MAY_CREATE) {
- if (!(auth_caps.is_capable(path, caller_uid, caller_gid,
- 0 /* irrelevant */,
- caller_uid, caller_gid,
- MAY_CREATE, 0, 0))) {
- return false;
- }
- mask &= ~MAY_CREATE;
- }
-
if (auth_caps.is_capable(path, in->inode.uid, in->inode.gid, in->inode.mode,
caller_uid, caller_gid, mask,
new_uid, new_gid)) {
ASSERT_TRUE(cap.is_capable("foo", 0, 10, 0775, 10, 10, MAY_READ, 0, 0));
ASSERT_TRUE(cap.is_capable("foo", 0, 10, 0777, 10, 10, MAY_WRITE, 0, 0));
ASSERT_TRUE(cap.is_capable("foo", 10, 10, 0755, 10, 10, MAY_WRITE, 0, 0));
- ASSERT_FALSE(cap.is_capable("foo", 0, 0, 0777, 0, 10, MAY_READ|MAY_CREATE, 0, 0));
+ ASSERT_FALSE(cap.is_capable("foo", 0, 0, 0777, 0, 10, MAY_READ, 0, 0));
ASSERT_FALSE(cap.is_capable("foo", 10, 10, 0755, 0, 0, MAY_READ, 0, 0));
ASSERT_TRUE(cap.is_capable("foo", 0, 10, 0777, 10, 10, MAY_READ, 0, 0));
- ASSERT_FALSE(cap.is_capable("foo", 0, 10, 0777, 10, 10, MAY_READ|MAY_CREATE, 0, 0));
ASSERT_TRUE(cap.is_capable("foo", 0, 10, 0557, 10, 10, MAY_READ, 0, 0));
ASSERT_TRUE(cap.is_capable("foo", 0, 0, 0557, 10, 10, MAY_READ, 0, 0));
ASSERT_TRUE(cap.is_capable("foo", 0, 0, 0557, 10, 10, MAY_WRITE, 0, 0));