From: Sage Weil Date: Thu, 3 Sep 2015 16:44:20 +0000 (-0400) Subject: mds: drop MAY_CREATE X-Git-Tag: v10.0.0~123^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e54ff357a81d6ad030c45c0124947b14656cf3a3;p=ceph.git mds: drop MAY_CREATE The check is a no-op. We already verify the uid/gid combo is valid and that the dir is writeable with MAY_WRITE. The new file is always set to the caller uid:gid. Signed-off-by: Sage Weil --- diff --git a/src/mds/MDSAuthCaps.cc b/src/mds/MDSAuthCaps.cc index 9f1709f8715..42d01aff0a0 100644 --- a/src/mds/MDSAuthCaps.cc +++ b/src/mds/MDSAuthCaps.cc @@ -164,12 +164,6 @@ bool MDSAuthCaps::is_capable(const std::string &inode_path, return true; } - // we may only create things owned by caller - if ((mask & MAY_CREATE) && - (inode_gid != caller_gid || inode_uid != caller_uid)) { - continue; - } - // chown/chgrp if (mask & MAY_CHOWN) { if (new_uid != caller_uid || // you can't chown to someone else diff --git a/src/mds/MDSAuthCaps.h b/src/mds/MDSAuthCaps.h index 68034ecc82f..112a7fb12ae 100644 --- a/src/mds/MDSAuthCaps.h +++ b/src/mds/MDSAuthCaps.h @@ -27,7 +27,6 @@ enum { MAY_READ = 1, MAY_WRITE = 2, MAY_EXECUTE = 4, - MAY_CREATE = 8, MAY_CHOWN = 16, MAY_CHGRP = 32 }; diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 13e460df60f..5889ac37519 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -3097,7 +3097,7 @@ void Server::handle_client_openc(MDRequestRef& mdr) 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(); @@ -4448,7 +4448,7 @@ void Server::handle_client_mknod(MDRequestRef& mdr) 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; @@ -4540,7 +4540,7 @@ void Server::handle_client_mkdir(MDRequestRef& mdr) return; // mkdir check access - if (!check_access(mdr, diri, (MAY_WRITE | MAY_CREATE))) + if (!check_access(mdr, diri, MAY_WRITE)) return; // new inode @@ -4619,7 +4619,7 @@ void Server::handle_client_symlink(MDRequestRef& mdr) 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; diff --git a/src/mds/SessionMap.cc b/src/mds/SessionMap.cc index e2034f89f2c..3593867de76 100644 --- a/src/mds/SessionMap.cc +++ b/src/mds/SessionMap.cc @@ -851,18 +851,6 @@ bool Session::check_access(CInode *in, unsigned mask, 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)) { diff --git a/src/test/mds/TestMDSAuthCaps.cc b/src/test/mds/TestMDSAuthCaps.cc index b7d3c0b0877..d7aebfe8233 100644 --- a/src/test/mds/TestMDSAuthCaps.cc +++ b/src/test/mds/TestMDSAuthCaps.cc @@ -127,10 +127,9 @@ TEST(MDSAuthCaps, AllowUid) { 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));