]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: let prepare_new_pool assign an auid.
authorGreg Farnum <gregf@hq.newdream.net>
Mon, 8 Mar 2010 14:44:51 +0000 (06:44 -0800)
committerGreg Farnum <gregf@hq.newdream.net>
Mon, 8 Mar 2010 15:42:16 +0000 (07:42 -0800)
Add new version that takes an MPoolOp and checks permissions
first.

src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index 10df2313050e173d5f7b45eb4f7d9a1287217477..1f1b54af5e11bea261c2eb4d887fc256addb48e5 100644 (file)
@@ -1003,7 +1003,19 @@ bool OSDMonitor::preprocess_command(MMonCommand *m)
     return false;
 }
 
-int OSDMonitor::prepare_new_pool(string& name)
+int OSDMonitor::prepare_new_pool(MPoolOp *m)
+{
+  //check permissions for the auid, then pass off to next function
+  Session * session = (Session *) m->get_connection()->get_priv();
+  if (m->auid) {
+    if(check_privileges(m->auid, session->caps, MON_CAP_W)) {
+      prepare_new_pool(m->name, m->auid);
+    } else return -EPERM;
+  } else prepare_new_pool(m->name, session->caps.auid);
+  return 0;
+}
+
+int OSDMonitor::prepare_new_pool(string& name, __u64 auid)
 {
   if (osdmap.name_pool.count(name)) {
     return -EEXIST;
@@ -1019,6 +1031,7 @@ int OSDMonitor::prepare_new_pool(string& name)
   pending_inc.new_pools[pool].v.lpg_num = 0;
   pending_inc.new_pools[pool].v.lpgp_num = 0;
   pending_inc.new_pools[pool].v.last_change = pending_inc.epoch;
+  pending_inc.new_pools[pool].v.auid = auid;
   pending_inc.new_pool_names[pool] = name;
   return 0;
 }
@@ -1367,8 +1380,12 @@ bool OSDMonitor::prepare_pool_op (MPoolOp *m)
 
 bool OSDMonitor::prepare_pool_op_create (MPoolOp *m)
 {
-  int err = prepare_new_pool(m->name);
-  paxos->wait_for_commit(new OSDMonitor::C_PoolOp(this, m, err, pending_inc.epoch));
+  int err = prepare_new_pool(m);
+  if (!err) {
+    paxos->wait_for_commit(new OSDMonitor::C_PoolOp(this, m, err, pending_inc.epoch));
+  } else {
+    _pool_op(m, err, pending_inc.epoch);
+  }
   return true;
 }
 
index 2ca0438c14f4e8f1bdd3bde64d977059a722c2ba..a88a699964a589e52604943ba95e2b1e10cdf7b7 100644 (file)
@@ -89,6 +89,8 @@ private:
   bool prepare_pool_op (MPoolOp *m);
   bool prepare_pool_op_create (MPoolOp *m);
   bool prepare_pool_op_delete(MPoolOp *m);
+  int prepare_new_pool(string& name, __u64 auid = CEPH_AUTH_UID_DEFAULT);
+  int prepare_new_pool(MPoolOp *m);
   void _pool_op(MPoolOp *m, int replyCode, epoch_t epoch);
 
   //check that the provided caps allow the given action in auid's name 
@@ -156,8 +158,6 @@ private:
   bool preprocess_command(MMonCommand *m);
   bool prepare_command(MMonCommand *m);
 
-  int prepare_new_pool(string& name);
-
   void mark_all_down();
 
   void send_latest(PaxosServiceMessage *m, epoch_t start=0);