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>
Mon, 26 Feb 2018 22:48:05 +0000 (17:48 -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 209a9f4eb1eba9a804b701d017f46a7598ad65fa..d9121b02a8a53783195507a651d4446210160aea 100644 (file)
@@ -898,6 +898,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;
@@ -944,6 +945,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 d075f64b90742c08b8463058440c7c2722fbc316..faf9f3e0d780274d2beb69ab838d2302e4713dcd 100644 (file)
@@ -625,6 +625,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);
@@ -719,6 +720,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 02c7139c3547e4e9a4dff2516e223597081faa76..6878aaa0da20a146808592b54d89efcfabd56977 100644 (file)
@@ -174,6 +174,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;
@@ -280,6 +281,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 775ff895905b1fc91247b507a2a78a014adec254..936884e1fc430c79da4ec98b79e24ff8f555fdc3 100644 (file)
@@ -216,6 +216,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);
@@ -250,6 +251,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 269620178e4093101da62a78379d7f9d6af36bcf..290e72791e034fb8060ffda8cfd1e8c77ef5e9ea 100644 (file)
@@ -328,6 +328,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);
@@ -398,6 +399,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 cb9f44a635531bbc5a0db04b77baee748faf6fac..9c84d02634c8612740b914c4a1c6d0d5e806b210 100644 (file)
@@ -400,6 +400,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();
 
@@ -693,6 +694,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 97a36b31109a57c70217533ba05a646ac2f9df52..05f20f72de03309afda2add9c268a9d934fbe77f 100644 (file)
@@ -1264,6 +1264,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);
@@ -1363,6 +1364,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 a166fd2b31c6e91d80a9c169c7e90bbd9bdccc31..898c0de6a02e1a2735d9ce5f59067fe10fe788fb 100644 (file)
@@ -1776,7 +1776,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;
@@ -1837,6 +1837,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 ad61849235d74220f5328e7bdc496fcabd6896ba..07ef1214ff026619c14c36fcc82012093ef27b18 100644 (file)
@@ -163,6 +163,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);
@@ -206,6 +207,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 4ba90243698c9c13e50b3efc93dc1b57ab98c48d..924ddcbcd6bef1f2c4faf43524e60c0a31ce8124 100644 (file)
@@ -127,7 +127,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;
 
@@ -164,6 +164,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 0287fc7e8cf144a4fee7b574862ae85f892561d9..65b2229245408efc5883ab2d0078dfe47b30a6fe 100644 (file)
@@ -144,6 +144,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);
@@ -164,6 +165,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 336d887651d06b5872f222b652584b88b6fcbeb7..9d211d68b58d4ee37b44244aa3a56012f1f94c9f 100644 (file)
@@ -172,6 +172,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);
@@ -228,6 +229,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 c9a5fdc3e09b0f356096a25a051c55d730ea86c8..faca60de8b980adfe60afcb2ac68a7c202a65595 100644 (file)
@@ -415,6 +415,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);
@@ -439,6 +440,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.033936 seconds and 5 git commands to generate.