]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Check auid permissions in get_pool_cap
authorGreg Farnum <gregf@hq.newdream.net>
Wed, 10 Mar 2010 18:20:44 +0000 (10:20 -0800)
committerGreg Farnum <gregf@hq.newdream.net>
Wed, 10 Mar 2010 21:22:02 +0000 (13:22 -0800)
src/osd/OSD.cc
src/osd/OSDCaps.cc

index 17dddc30acb116699e5f00440d2e0d311dcf99b1..58343e3f13a6ad31ecb97d1c6945c13558b4ab64 100644 (file)
@@ -4043,7 +4043,7 @@ void OSD::handle_op(MOSDOp *op)
 
   OSDCaps& caps = session->caps;
   int pool = pgid.pool();
-  int perm = caps.get_pool_cap(pool);
+  int perm = caps.get_pool_cap(pool, osdmap->get_pg_pool(pool)->v.auid);
 
   dout(10) << "request for pool=" << pool << " perm=" << perm
           << " may_read=" << op->may_read() << " may_write=" << op->may_write()
index 461793410ffa1650541f5101753e45c871060237..27a89a066642b396721616b4002bebad5cbc5fab 100644 (file)
@@ -191,6 +191,11 @@ int OSDCaps::get_pool_cap(int pool_id, __u64 uid)
     //the owner has full access unless they've removed some by setting
     //new caps
     cap = OSD_POOL_CAP_ALL;
+  } else if ((iter = auid_map.find(uid)) != pools_map.end()) {
+    //if the owner is granted permissions on the pool owner's auid, grant them
+    OSDCap& auid_cap = iter->second;
+    cap |= auid_cap.allow;
+    cap &= ~auid_cap.deny;
   }
 
   return cap;