]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: require MAY_SET_POOL to set pool_ns 12155/head
authorJohn Spray <john.spray@redhat.com>
Fri, 4 Nov 2016 15:50:26 +0000 (15:50 +0000)
committerLoic Dachary <ldachary@redhat.com>
Wed, 23 Nov 2016 08:05:21 +0000 (09:05 +0100)
The intent of that flag is to enable admins to limit a client
to setting layouts to put objects within the OSD auth caps that
it has been given, so we should apply it to namespace as well
as pool ID.

Fixes: http://tracker.ceph.com/issues/17798
Signed-off-by: John Spray <john.spray@redhat.com>
(cherry picked from commit 1dfee37ad1c65f34f7fbc877e90c5b0a219125cd)

src/mds/Server.cc

index 61320c3348d4febe6fd9d20fce47a71c0244154c..c549392b4303d67d3b6dcb4230d1ff1a530bc07e 100644 (file)
@@ -3180,9 +3180,8 @@ void Server::handle_client_openc(MDRequestRef& mdr)
     // file would have inherited anyway from its parent.
     CDir *parent = dn->get_dir();
     CInode *parent_in = parent->get_inode();
-    int64_t parent_pool = parent_in->inode.layout.pool_id;
-
-    if (layout.pool_id != parent_pool) {
+    if (layout.pool_id != parent_in->inode.layout.pool_id
+        || layout.pool_ns != parent_in->inode.layout.pool_ns) {
       access |= MAY_SET_POOL;
     }
 
@@ -4239,7 +4238,8 @@ void Server::handle_set_vxattr(MDRequestRef& mdr, CInode *cur,
     if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
       return;
 
-    if (cur->inode.layout.pool_id != layout.pool_id) {
+    if (cur->inode.layout.pool_id != layout.pool_id
+        || cur->inode.layout.pool_ns != layout.pool_ns) {
       if (!check_access(mdr, cur, MAY_SET_POOL)) {
         return;
       }
@@ -4290,7 +4290,8 @@ void Server::handle_set_vxattr(MDRequestRef& mdr, CInode *cur,
     if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
       return;
 
-    if (cur->inode.layout.pool_id != layout.pool_id) {
+    if (cur->inode.layout.pool_id != layout.pool_id
+        || cur->inode.layout.pool_ns != layout.pool_ns) {
       if (!check_access(mdr, cur, MAY_SET_POOL)) {
         return;
       }