From bb019ccd36a73219b27647d2a168af29c37d1eff Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 11 Jan 2018 16:26:10 -0600 Subject: [PATCH] mon/ConfigMonitor: validate and normalize option on 'config set' Signed-off-by: Sage Weil --- src/mon/ConfigMonitor.cc | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/mon/ConfigMonitor.cc b/src/mon/ConfigMonitor.cc index a758ac314cf4d..6c29e55403472 100644 --- a/src/mon/ConfigMonitor.cc +++ b/src/mon/ConfigMonitor.cc @@ -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, §ion, &mask)) { ss << "unrecognized config target '" << who << "'"; err = -EINVAL; -- 2.39.5