[lttng-dev] [PATCH lttng-tools] Fix: error out on leftover arguments
Jérémie Galarneau
jeremie.galarneau at efficios.com
Mon Feb 19 19:51:07 EST 2018
On 14 February 2018 at 11:49, Julien Desfossez <jdesfossez at efficios.com> wrote:
> 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 bbb -t vpid
> Error: Unknown argument: bbb
> 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
>
> Signed-off-by: Julien Desfossez <jdesfossez at efficios.com>
> ---
> src/bin/lttng/commands/add_context.c | 8 ++++++++
> src/bin/lttng/commands/create.c | 8 ++++++++
> src/bin/lttng/commands/destroy.c | 9 +++++++++
> src/bin/lttng/commands/disable_channels.c | 8 ++++++++
> src/bin/lttng/commands/disable_events.c | 8 ++++++++
> src/bin/lttng/commands/enable_channels.c | 9 +++++++++
> src/bin/lttng/commands/enable_events.c | 8 ++++++++
> src/bin/lttng/commands/list.c | 9 ++++++++-
> src/bin/lttng/commands/load.c | 8 ++++++++
> src/bin/lttng/commands/save.c | 9 ++++++++-
> src/bin/lttng/commands/snapshot.c | 8 ++++++++
> src/bin/lttng/commands/start.c | 8 ++++++++
> src/bin/lttng/commands/stop.c | 8 ++++++++
> src/bin/lttng/commands/view.c | 8 ++++++++
> 14 files changed, 114 insertions(+), 2 deletions(-)
>
> diff --git a/src/bin/lttng/commands/add_context.c b/src/bin/lttng/commands/add_context.c
> index 209a9f4..d9121b0 100644
> --- a/src/bin/lttng/commands/add_context.c
> +++ b/src/bin/lttng/commands/add_context.c
> @@ -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) {
> diff --git a/src/bin/lttng/commands/create.c b/src/bin/lttng/commands/create.c
> index d075f64..faf9f3e 100644
> --- a/src/bin/lttng/commands/create.c
> +++ b/src/bin/lttng/commands/create.c
> @@ -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;
> diff --git a/src/bin/lttng/commands/destroy.c b/src/bin/lttng/commands/destroy.c
> index 02c7139..6878aaa 100644
> --- a/src/bin/lttng/commands/destroy.c
> +++ b/src/bin/lttng/commands/destroy.c
> @@ -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) {
> diff --git a/src/bin/lttng/commands/disable_channels.c b/src/bin/lttng/commands/disable_channels.c
> index 775ff89..936884e 100644
> --- a/src/bin/lttng/commands/disable_channels.c
> +++ b/src/bin/lttng/commands/disable_channels.c
> @@ -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) {
> diff --git a/src/bin/lttng/commands/disable_events.c b/src/bin/lttng/commands/disable_events.c
> index 2696201..290e727 100644
> --- a/src/bin/lttng/commands/disable_events.c
> +++ b/src/bin/lttng/commands/disable_events.c
> @@ -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) {
> diff --git a/src/bin/lttng/commands/enable_channels.c b/src/bin/lttng/commands/enable_channels.c
> index cb9f44a..9c84d02 100644
> --- a/src/bin/lttng/commands/enable_channels.c
> +++ b/src/bin/lttng/commands/enable_channels.c
> @@ -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) {
> diff --git a/src/bin/lttng/commands/enable_events.c b/src/bin/lttng/commands/enable_events.c
> index 97a36b3..05f20f7 100644
> --- a/src/bin/lttng/commands/enable_events.c
> +++ b/src/bin/lttng/commands/enable_events.c
> @@ -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) {
> diff --git a/src/bin/lttng/commands/list.c b/src/bin/lttng/commands/list.c
> index a166fd2..898c0de 100644
> --- a/src/bin/lttng/commands/list.c
> +++ b/src/bin/lttng/commands/list.c
> @@ -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) {
> diff --git a/src/bin/lttng/commands/load.c b/src/bin/lttng/commands/load.c
> index ad61849..07ef121 100644
> --- a/src/bin/lttng/commands/load.c
> +++ b/src/bin/lttng/commands/load.c
> @@ -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);
> diff --git a/src/bin/lttng/commands/save.c b/src/bin/lttng/commands/save.c
> index 4ba9024..924ddcb 100644
> --- a/src/bin/lttng/commands/save.c
> +++ b/src/bin/lttng/commands/save.c
> @@ -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;
> diff --git a/src/bin/lttng/commands/snapshot.c b/src/bin/lttng/commands/snapshot.c
> index d8a6b81..dc51628 100644
> --- a/src/bin/lttng/commands/snapshot.c
> +++ b/src/bin/lttng/commands/snapshot.c
> @@ -510,6 +510,7 @@ int cmd_snapshot(int argc, const char **argv)
> int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1;
> char *session_name = NULL;
> static poptContext pc;
> + const char *leftover = NULL;
>
> pc = poptGetContext(NULL, argc, argv, snapshot_opts, 0);
> poptReadDefaultConfig(pc, 0);
> @@ -571,6 +572,13 @@ int cmd_snapshot(int argc, const char **argv)
> }
> }
>
> + leftover = poptGetArg(pc);
> + if (leftover) {
> + ERR("Unknown argument: %s", leftover);
> + ret = CMD_ERROR;
> + goto end;
> + }
This prevents the use of snapshot subcommands such as
lttng snapshot add-output, del-output, and list-output.
Jérémie
> +
> if (!opt_session_name) {
> session_name = get_session_name();
> if (session_name == NULL) {
> diff --git a/src/bin/lttng/commands/start.c b/src/bin/lttng/commands/start.c
> index 0287fc7..65b2229 100644
> --- a/src/bin/lttng/commands/start.c
> +++ b/src/bin/lttng/commands/start.c
> @@ -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);
> diff --git a/src/bin/lttng/commands/stop.c b/src/bin/lttng/commands/stop.c
> index 336d887..9d211d6 100644
> --- a/src/bin/lttng/commands/stop.c
> +++ b/src/bin/lttng/commands/stop.c
> @@ -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;
> diff --git a/src/bin/lttng/commands/view.c b/src/bin/lttng/commands/view.c
> index c9a5fdc..faca60d 100644
> --- a/src/bin/lttng/commands/view.c
> +++ b/src/bin/lttng/commands/view.c
> @@ -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:
> --
> 2.7.4
>
--
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list