From: Sage Weil Date: Fri, 26 Jul 2013 00:58:12 +0000 (-0700) Subject: mon: translate caps=[k1,v1,k2,v2] into [caps_k1=v1, caps_k2=v2] X-Git-Tag: v0.67-rc3~54 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ca8ac9502bdfce888decd4b53669ef57858afcf6;p=ceph.git mon: translate caps=[k1,v1,k2,v2] into [caps_k1=v1, caps_k2=v2] The command matching needs key/value pairs. Signed-off-by: Sage Weil Reviewed-by: Dan Mick --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index bd189f1430ce..bf500dff218f 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -1535,11 +1535,23 @@ bool Monitor::_allowed_command(MonSession *s, map& cmd) map strmap; for (map::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 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;