track-untrack.c: error out on unknown CLI options
authorFrancis Deslauriers <francis.deslauriers@efficios.com>
Tue, 7 Jan 2020 23:09:46 +0000 (18:09 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 14 Jan 2020 23:57:39 +0000 (18:57 -0500)
Issue
=====
At the moment, it's possible to have unknown options in the `track` and
`untrack` commands. They are silently ignored.

For example, the following command line is accepted without problem:
  lttng untrack HELLO -k --all --pid

This was witnessed in the `test_event_tracker` tests. The
`lttng_track()` and `lttng_untrack() functions in `tests/utils/util.sh`
are currently passing the `$1` bash variable of the function to the
`track` and `untrack` througth their "$@" variable.

The commands should not silently accept those unknown options.

Fix
===
1. After looping on all the known options, check if there is any leftover
  options and error out if it's the case.
2. Fix the `utils.sh` functions to that they don't pass the `$1` variable
  to the commands.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I822ba09c8ce1ffa8366c586e760a9257e8078e43
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng/commands/track-untrack.c
tests/utils/utils.sh

index 0d716972980701009bb389a14e89ae38a62a04e5..afb4d93d1fe9bc30e14f56c6aee90a8c1181330e 100644 (file)
@@ -594,6 +594,7 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str,
        enum cmd_error_code command_ret = CMD_SUCCESS;
        static poptContext pc;
        char *session_name = NULL;
+       const char *leftover = NULL;
        struct mi_writer *writer = NULL;
 
        if (argc < 1) {
@@ -715,6 +716,13 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str,
                session_name = opt_session_name;
        }
 
+       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 1b2f71f183b764977acd05985b48966c8e9db56a..b2c08680ef6cf47e1bb035eadc1397791086ea62 100644 (file)
@@ -1469,6 +1469,7 @@ function lttng_load_fail()
 function lttng_track()
 {
        local expected_to_fail="$1"
+       shift 1
        local opts="$@"
        $TESTDIR/../src/bin/lttng/$LTTNG_BIN track $opts >$OUTPUT_DEST
        ret=$?
@@ -1493,6 +1494,7 @@ function lttng_track_fail()
 function lttng_untrack()
 {
        local expected_to_fail="$1"
+       shift 1
        local opts="$@"
        $TESTDIR/../src/bin/lttng/$LTTNG_BIN untrack $opts >$OUTPUT_DEST
        ret=$?
This page took 0.037986 seconds and 5 git commands to generate.