]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
config: fix stringification of config values
authorSage Weil <sage@inktank.com>
Thu, 15 Aug 2013 21:36:57 +0000 (14:36 -0700)
committerSage Weil <sage@inktank.com>
Thu, 15 Aug 2013 21:38:13 +0000 (14:38 -0700)
The std::copy construct leaves a trailing separator character, which breaks
parsing for booleans (among other things) and probably mangles everything
else too.

Backport: dumpling
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
(cherry picked from commit fc23cfe3fe567b30413d8af0c614a32fec238939)

src/common/ceph_context.cc

index 9602fdf2e40d8b92ebd1f1b3c93694e5796156a7..e694a2f09b393a7b2583e85de9efa108032cbd5e 100644 (file)
@@ -26,6 +26,7 @@
 #include "common/Formatter.h"
 #include "log/Log.h"
 #include "auth/Crypto.h"
+#include "include/str_list.h"
 
 #include <iostream>
 #include <pthread.h>
@@ -197,11 +198,10 @@ void CephContext::do_command(std::string command, cmdmap_t& cmdmap,
         f->dump_string("error", "syntax error: 'config set <var> <value>'");
       } else {
        // val may be multiple words
-       ostringstream argss;
-       std::copy(val.begin(), val.end(), ostream_iterator<string>(argss, " "));
-        int r = _conf->set_val(var.c_str(), argss.str().c_str());
+       string valstr = str_join(val, " ");
+        int r = _conf->set_val(var.c_str(), valstr.c_str());
         if (r < 0) {
-          f->dump_stream("error") << "error setting '" << var << "' to '" << val << "': " << cpp_strerror(r);
+          f->dump_stream("error") << "error setting '" << var << "' to '" << valstr << "': " << cpp_strerror(r);
         } else {
           ostringstream ss;
           _conf->apply_changes(&ss);