Re: [lttng-dev] [PATCH lttng-tools] Fix: error out on leftover arguments
On 14 February 2018 at 11:49, Julien Desfossezwrote: > 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 > --- > 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
[lttng-dev] [PATCH lttng-tools] Fix: error out on leftover arguments
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--- 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