]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/ConfigMonitor: validate and normalize option on 'config set'
authorSage Weil <sage@redhat.com>
Thu, 11 Jan 2018 22:26:10 +0000 (16:26 -0600)
committerSage Weil <sage@redhat.com>
Tue, 6 Mar 2018 20:44:49 +0000 (14:44 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/ConfigMonitor.cc

index a758ac314cf4d9d6c346839461bf60ecda4d2a62..6c29e55403472642fa9114dd46dad39909bcbc30 100644 (file)
@@ -338,8 +338,26 @@ bool ConfigMonitor::prepare_command(MonOpRequestRef op)
     cmd_getval(g_ceph_context, cmdmap, "name", name);
     cmd_getval(g_ceph_context, cmdmap, "value", value);
 
-    OptionMask mask;
+    if (prefix == "config set") {
+      const Option *opt = g_conf->find_option(name);
+      if (!opt) {
+       ss << "unrecognized config option '" << name << "'";
+       err = -EINVAL;
+       goto reply;
+      }
+
+      Option::value_t real_value;
+      string str;
+      err = opt->parse_value(value, &real_value, &str);
+      if (err < 0) {
+       ss << "error parsing value: " << str;
+       goto reply;
+      }
+      value = stringify(real_value);
+    }
+
     string section;
+    OptionMask mask;
     if (!ConfigMap::parse_mask(who, &section, &mask)) {
       ss << "unrecognized config target '" << who << "'";
       err = -EINVAL;