Fix: error out on leftover arguments
authorJulien Desfossez <jdesfossez@efficios.com>
Wed, 21 Feb 2018 21:57:36 +0000 (16:57 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 27 Feb 2018 15:09:40 +0000 (10:09 -0500)
All the commands currently ignore leftover arguments, this can lead to
wrong usage of the commands and waste of time debugging. For example,
this command enables the vpid context on all channels instead of only on
the "mychan" channel:
$ lttng add-context -u mychan -t vpid

The correct usage is:
$ lttng add-context -u -c mychan -t vpid

We now output an error on leftover arguments:
$ lttng add-context -u mychan -t vpid
Error: Unknown argument: mychan
Error: Command error

Some commands accept one leftover argument (create, start, stop,
destroy), so we check if there are other leftovers:
$ lttng create mysess allo
Error: Unknown argument: allo
Error: Command error

Only the snapshot command is not handled since it has a second level of
command and does not consume the popt arguments.

Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
13 files changed:
src/bin/lttng/commands/add_context.c
src/bin/lttng/commands/create.c
src/bin/lttng/commands/destroy.c
src/bin/lttng/commands/disable_channels.c
src/bin/lttng/commands/disable_events.c
src/bin/lttng/commands/enable_channels.c
src/bin/lttng/commands/enable_events.c
src/bin/lttng/commands/list.c
src/bin/lttng/commands/load.c
src/bin/lttng/commands/save.c
src/bin/lttng/commands/start.c
src/bin/lttng/commands/stop.c
src/bin/lttng/commands/view.c

index df722bb249f39ef8ee28107c501a3b668998ca49..11c3372ad2623c70e891efda7c878f036b8f4d09 100644 (file)
@@ -892,6 +892,7 @@ int cmd_add_context(int argc, const char **argv)
        static poptContext pc;
        struct ctx_type *type, *tmptype;
        char *session_name = NULL;
+       const char *leftover = NULL;
 
        if (argc < 2) {
                ret = CMD_ERROR;
@@ -938,6 +939,13 @@ int cmd_add_context(int argc, const char **argv)
                }
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        ret = print_missing_or_multiple_domains(opt_kernel + opt_userspace +
                        opt_jul + opt_log4j);
        if (ret) {
index 40d2a77d94b48b9d8435948c2c2b557ade3792ed..83f0af65d9b67cd306361d033f7f8a6ef3bfcdc9 100644 (file)
@@ -619,6 +619,7 @@ int cmd_create(int argc, const char **argv)
 {
        int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1;
        char *opt_arg = NULL;
+       const char *leftover = NULL;
        static poptContext pc;
 
        pc = poptGetContext(NULL, argc, argv, long_options, 0);
@@ -713,6 +714,13 @@ int cmd_create(int argc, const char **argv)
        }
        opt_session_name = (char*) poptGetArg(pc);
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        command_ret = create_session();
        if (command_ret) {
                success = 0;
index 0314b767e9fb0269ce431424d44d921a1aa9ff69..b17f4c516413654e692c0d97fa304da7def131e9 100644 (file)
@@ -168,6 +168,7 @@ int cmd_destroy(int argc, const char **argv)
        int ret = CMD_SUCCESS , i, command_ret = CMD_SUCCESS, success = 1;
        static poptContext pc;
        char *session_name = NULL;
+       const char *leftover = NULL;
 
        struct lttng_session *sessions;
        int count;
@@ -274,6 +275,14 @@ int cmd_destroy(int argc, const char **argv)
                }
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               success = 0;
+               goto mi_closing;
+       }
+
 mi_closing:
        /* Mi closing */
        if (lttng_opt_mi) {
index 678af746d5091181aed4febe926130525afa7c5b..57391128ec9f4a851999fce271c8b0f8c4051b58 100644 (file)
@@ -210,6 +210,7 @@ int cmd_disable_channels(int argc, const char **argv)
        int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1;
        static poptContext pc;
        char *session_name = NULL;
+       const char *leftover = NULL;
 
        pc = poptGetContext(NULL, argc, argv, long_options, 0);
        poptReadDefaultConfig(pc, 0);
@@ -244,6 +245,13 @@ int cmd_disable_channels(int argc, const char **argv)
                goto end;
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        if (!opt_session_name) {
                session_name = get_session_name();
                if (session_name == NULL) {
index 238f8463fec1553c4f8410091a3ebbb057752423..3c53c75c29d23813f41d9a087b58cb0538cfc05c 100644 (file)
@@ -322,6 +322,7 @@ int cmd_disable_events(int argc, const char **argv)
        int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1;
        static poptContext pc;
        char *session_name = NULL;
+       const char *leftover = NULL;
        int event_type = -1;
 
        pc = poptGetContext(NULL, argc, argv, long_options, 0);
@@ -392,6 +393,13 @@ int cmd_disable_events(int argc, const char **argv)
                goto end;
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        if (!opt_session_name) {
                session_name = get_session_name();
                if (session_name == NULL) {
index 9a990030d5023ff38f0b984f1329f32e5feb849f..66caa79a21257a33e9e055ff6504066355b06e75 100644 (file)
@@ -330,6 +330,7 @@ int cmd_enable_channels(int argc, const char **argv)
        static poptContext pc;
        char *session_name = NULL;
        char *opt_arg = NULL;
+       const char *leftover = NULL;
 
        init_channel_config();
 
@@ -545,6 +546,14 @@ int cmd_enable_channels(int argc, const char **argv)
                goto mi_closing;
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               success = 0;
+               goto mi_closing;
+       }
+
        if (!opt_session_name) {
                session_name = get_session_name();
                if (session_name == NULL) {
index 8a32837e6216e599c06c0861ebd64c1e8a641fd9..f5e8ba61abbcaf78fc59f2a973b5bbd9d33b8f8e 100644 (file)
@@ -1249,6 +1249,7 @@ int cmd_enable_events(int argc, const char **argv)
        int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1;
        static poptContext pc;
        char *session_name = NULL;
+       const char *leftover = NULL;
        int event_type = -1;
 
        pc = poptGetContext(NULL, argc, argv, long_options, 0);
@@ -1348,6 +1349,13 @@ int cmd_enable_events(int argc, const char **argv)
                goto end;
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        if (!opt_session_name) {
                session_name = get_session_name();
                if (session_name == NULL) {
index 9aa28b57ae600de10898df918325f4589a716a0a..8c6d1ef4afe5a7dc016957026b2258efb589e535 100644 (file)
@@ -1691,7 +1691,7 @@ end:
 int cmd_list(int argc, const char **argv)
 {
        int opt, ret = CMD_SUCCESS;
-       const char *session_name;
+       const char *session_name, *leftover = NULL;
        static poptContext pc;
        struct lttng_domain domain;
        struct lttng_domain *domains = NULL;
@@ -1752,6 +1752,13 @@ int cmd_list(int argc, const char **argv)
        session_name = poptGetArg(pc);
        DBG2("Session name: %s", session_name);
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        if (opt_kernel) {
                domain.type = LTTNG_DOMAIN_KERNEL;
        } else if (opt_userspace) {
index 0516351ea8ddaddfbe4fdfb312c6f986d16ef6c7..e65042cd484b731da11c32c86bc2a80589b7d6a5 100644 (file)
@@ -157,6 +157,7 @@ int cmd_load(int argc, const char **argv)
        poptContext pc;
        struct lttng_load_session_attr *session_attr = NULL;
        char *input_path = NULL;
+       const char *leftover = NULL;
 
        pc = poptGetContext(NULL, argc, argv, load_opts, 0);
        poptReadDefaultConfig(pc, 0);
@@ -200,6 +201,13 @@ int cmd_load(int argc, const char **argv)
                }
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        /* Mi check */
        if (lttng_opt_mi) {
                writer = mi_lttng_writer_create(fileno(stdout), lttng_opt_mi);
index ee3e17c66e2b3fe89dc921348aeb5005a12f1dc9..808216bf99d10ea203a4ce234c0a2c0aa22de6cc 100644 (file)
@@ -121,7 +121,7 @@ int cmd_save(int argc, const char **argv)
 {
        int ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success;
        int opt;
-       const char *session_name = NULL;
+       const char *session_name = NULL, *leftover = NULL;
        poptContext pc;
        struct lttng_save_session_attr *attr;
 
@@ -158,6 +158,13 @@ int cmd_save(int argc, const char **argv)
                }
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        attr = lttng_save_session_attr_create();
        if (!attr) {
                ret = CMD_FATAL;
index 03d99cf4143b4f5a42245a474af9663d9f2e92d6..5df246225a63c1964dca5e31d79a64fbe24bff81 100644 (file)
@@ -138,6 +138,7 @@ int cmd_start(int argc, const char **argv)
 {
        int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1;
        static poptContext pc;
+       const char *leftover = NULL;
 
        pc = poptGetContext(NULL, argc, argv, long_options, 0);
        poptReadDefaultConfig(pc, 0);
@@ -158,6 +159,13 @@ int cmd_start(int argc, const char **argv)
 
        opt_session_name = (char*) poptGetArg(pc);
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        /* Mi check */
        if (lttng_opt_mi) {
                writer = mi_lttng_writer_create(fileno(stdout), lttng_opt_mi);
index c38fc894a741debd87a91aec43ec69701a1af178..c5677b4a79c054f6769988166a148707d876757f 100644 (file)
@@ -166,6 +166,7 @@ int cmd_stop(int argc, const char **argv)
 {
        int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1;
        static poptContext pc;
+       const char *leftover = NULL;
 
        pc = poptGetContext(NULL, argc, argv, long_options, 0);
        poptReadDefaultConfig(pc, 0);
@@ -222,6 +223,13 @@ int cmd_stop(int argc, const char **argv)
 
        opt_session_name = (char*) poptGetArg(pc);
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        command_ret = stop_tracing();
        if (command_ret) {
                success = 0;
index db13ee22718d9fcc0c4eb9636bcd9593ef012032..1e6852e79caf4ee975547752f92104d9f69f746c 100644 (file)
@@ -409,6 +409,7 @@ int cmd_view(int argc, const char **argv)
 {
        int opt, ret = CMD_SUCCESS;
        static poptContext pc;
+       const char *leftover = NULL;
 
        pc = poptGetContext(NULL, argc, argv, long_options, 0);
        poptReadDefaultConfig(pc, 0);
@@ -433,6 +434,13 @@ int cmd_view(int argc, const char **argv)
 
        opt_session_name = (char*) poptGetArg(pc);
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        ret = view_trace();
 
 end:
This page took 0.035773 seconds and 4 git commands to generate.