From: Kefu Chai Date: Wed, 12 Feb 2020 12:47:12 +0000 (+0800) Subject: ceph_argparse: put args from env before existing ones X-Git-Tag: v15.1.1~409^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=36b81324ae450ea065865ef75cf789ef0d36d9cf;p=ceph.git ceph_argparse: put args from env before existing ones to ensure environment variables can be overriden by command line arguments. For example, if you have "CEPH_ARGS='--id XYZ'", passing "--id ABC" to a Ceph CLI tool should result in the ABC id being utilized. Fixes: https://tracker.ceph.com/issues/43795 Signed-off-by: Kefu Chai --- diff --git a/src/common/ceph_argparse.cc b/src/common/ceph_argparse.cc index 73272e554b47..631bc7c54704 100644 --- a/src/common/ceph_argparse.cc +++ b/src/common/ceph_argparse.cc @@ -117,14 +117,14 @@ void env_to_vec(std::vector& args, const char *name) auto [env_options, env_arguments] = split_dashdash(env); args.clear(); - args.insert(args.end(), options.begin(), options.end()); args.insert(args.end(), env_options.begin(), env_options.end()); + args.insert(args.end(), options.begin(), options.end()); if (arguments.empty() && env_arguments.empty()) { return; } args.push_back("--"); - args.insert(args.end(), arguments.begin(), arguments.end()); args.insert(args.end(), env_arguments.begin(), env_arguments.end()); + args.insert(args.end(), arguments.begin(), arguments.end()); } void argv_to_vec(int argc, const char **argv, diff --git a/src/test/ceph_argparse.cc b/src/test/ceph_argparse.cc index b1cc07d4f39d..ae1461a09405 100644 --- a/src/test/ceph_argparse.cc +++ b/src/test/ceph_argparse.cc @@ -385,14 +385,15 @@ TEST(CephArgParse, env_to_vec) { clear_g_str_vec(); env_to_vec(args); EXPECT_EQ(3u, args.size()); - EXPECT_EQ(string("b"), args[1]); - EXPECT_EQ(string("c"), args[2]); + EXPECT_EQ(string("b"), args[0]); + EXPECT_EQ(string("c"), args[1]); + EXPECT_EQ(string("a"), args[2]); setenv("WHATEVER", "d e", 0); clear_g_str_vec(); env_to_vec(args, "WHATEVER"); EXPECT_EQ(5u, args.size()); - EXPECT_EQ(string("d"), args[3]); - EXPECT_EQ(string("e"), args[4]); + EXPECT_EQ(string("d"), args[0]); + EXPECT_EQ(string("e"), args[1]); } { std::vector args; @@ -404,11 +405,11 @@ TEST(CephArgParse, env_to_vec) { clear_g_str_vec(); env_to_vec(args); EXPECT_EQ(5u, args.size()); - EXPECT_EQ(string("a"), args[0]); - EXPECT_EQ(string("b"), args[1]); + EXPECT_EQ(string("b"), args[0]); + EXPECT_EQ(string("a"), args[1]); EXPECT_EQ(string("--"), args[2]); - EXPECT_EQ(string("c"), args[3]); - EXPECT_EQ(string("d"), args[4]); + EXPECT_EQ(string("d"), args[3]); + EXPECT_EQ(string("c"), args[4]); } { std::vector args; @@ -419,8 +420,8 @@ TEST(CephArgParse, env_to_vec) { clear_g_str_vec(); env_to_vec(args); EXPECT_EQ(4u, args.size()); - EXPECT_EQ(string("a"), args[0]); - EXPECT_EQ(string("b"), args[1]); + EXPECT_EQ(string("b"), args[0]); + EXPECT_EQ(string("a"), args[1]); EXPECT_EQ(string("--"), args[2]); EXPECT_EQ(string("c"), args[3]); } @@ -435,8 +436,8 @@ TEST(CephArgParse, env_to_vec) { EXPECT_EQ(4u, args.size()); EXPECT_EQ(string("b"), args[0]); EXPECT_EQ(string("--"), args[1]); - EXPECT_EQ(string("c"), args[2]); - EXPECT_EQ(string("d"), args[3]); + EXPECT_EQ(string("d"), args[2]); + EXPECT_EQ(string("c"), args[3]); } { std::vector args; @@ -446,8 +447,8 @@ TEST(CephArgParse, env_to_vec) { clear_g_str_vec(); env_to_vec(args); EXPECT_EQ(4u, args.size()); - EXPECT_EQ(string("b"), args[0]); - EXPECT_EQ(string("c"), args[1]); + EXPECT_EQ(string("c"), args[0]); + EXPECT_EQ(string("b"), args[1]); EXPECT_EQ(string("--"), args[2]); EXPECT_EQ(string("d"), args[3]); } @@ -463,8 +464,8 @@ TEST(CephArgParse, env_to_vec) { EXPECT_EQ(4u, args.size()); EXPECT_EQ(string("a"), args[0]); EXPECT_EQ(string("--"), args[1]); - EXPECT_EQ(string("c"), args[2]); - EXPECT_EQ(string("d"), args[3]); + EXPECT_EQ(string("d"), args[2]); + EXPECT_EQ(string("c"), args[3]); } { std::vector args; @@ -476,8 +477,8 @@ TEST(CephArgParse, env_to_vec) { clear_g_str_vec(); env_to_vec(args); EXPECT_EQ(4u, args.size()); - EXPECT_EQ(string("a"), args[0]); - EXPECT_EQ(string("d"), args[1]); + EXPECT_EQ(string("d"), args[0]); + EXPECT_EQ(string("a"), args[1]); EXPECT_EQ(string("--"), args[2]); EXPECT_EQ(string("c"), args[3]); }