]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: translate caps=[k1,v1,k2,v2] into [caps_k1=v1, caps_k2=v2]
authorSage Weil <sage@inktank.com>
Fri, 26 Jul 2013 00:58:12 +0000 (17:58 -0700)
committerSage Weil <sage@inktank.com>
Fri, 26 Jul 2013 00:58:35 +0000 (17:58 -0700)
The command matching needs key/value pairs.

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Dan Mick <dan.mick@inktank.com>
src/mon/Monitor.cc

index bd189f1430ce4737fc99f1e9d924e85d1ef56033..bf500dff218fc24ebdd17d7e063fa4308b559731 100644 (file)
@@ -1535,11 +1535,23 @@ bool Monitor::_allowed_command(MonSession *s, map<string, cmd_vartype>& cmd)
   map<string,string> strmap;
   for (map<string, cmd_vartype>::const_iterator p = cmd.begin();
        p != cmd.end(); ++p) {
-    if (p->first != "prefix") {
-      strmap[p->first] = cmd_vartype_stringify(p->second);
+    if (p->first == "prefix")
+      continue;
+    if (p->first == "caps") {
+      vector<string> cv;
+      if (cmd_getval(g_ceph_context, cmd, "caps", cv) &&
+         cv.size() % 2 == 0) {
+       for (unsigned i = 0; i < cv.size(); i += 2) {
+         string k = string("caps_") + cv[i];
+         strmap[k] = cv[i + 1];
+       }
+       continue;
+      }
     }
+    strmap[p->first] = cmd_vartype_stringify(p->second);
   }
 
+  dout(20) << __func__ << " strmap " << strmap << dendl;
   if (s->caps.is_capable(g_ceph_context, s->inst.name,
                         "", prefix, strmap, false, false, true)) {
     retval = true;