Re: [lttng-dev] [PATCH lttng-tools] Fix: error out on leftover arguments

2018-02-19 Thread Jérémie Galarneau
On 14 February 2018 at 11:49, Julien Desfossez  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 
> ---
>  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

2018-02-14 Thread Julien Desfossez
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