Fix: relayd outputs traces of legacy sessionds to home dir
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 22 Aug 2019 00:36:29 +0000 (17:36 -0700)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 5 Sep 2019 20:39:15 +0000 (16:39 -0400)
The relay daemon's session output path creation fallback, which is
used when interacting with legacy (< 2.11) session daemons, does not
append the DEFAULT_TRACE_DIR_NAME to the user's home directory
(or LTTNG_HOME, if specified).

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-relayd/session.c

index 605931d5bd82ed449143de9b6f9c6b870bb59a2b..888bb88ebc53cc916dada51f23db5e011dc3ced2 100644 (file)
@@ -28,6 +28,7 @@
 #include "session.h"
 #include "sessiond-trace-chunks.h"
 #include "stream.h"
+#include <common/defaults.h>
 
 /* Global session id used in the session creation. */
 static uint64_t last_relay_session_id;
@@ -39,20 +40,31 @@ static int session_set_anonymous_chunk(struct relay_session *session)
        struct lttng_trace_chunk *chunk = NULL;
        enum lttng_trace_chunk_status status;
        struct lttng_directory_handle output_directory;
-       const char *base_path = opt_output_path;
+       char *output_path;
+       bool output_path_allocated = false;
 
-       if (base_path == NULL) {
+       if (!opt_output_path) {
                /* No output path defined */
-               base_path = utils_get_home_dir();
-               if (base_path == NULL) {
+               const char *home_dir = utils_get_home_dir();
+               if (!home_dir) {
                        ERR("Home path not found.\n \
                                        Please specify an output path using -o, --output PATH");
                        ret = -1;
                        goto end;
                }
+               ret = asprintf(&output_path, "%s/%s", home_dir, DEFAULT_TRACE_DIR_NAME);
+               if (ret < 0) {
+                       PERROR("asprintf trace dir name");
+                       ret = -1;
+                       goto end;
+               }
+               output_path_allocated = true;
+       } else {
+               output_path = opt_output_path;
+               output_path_allocated = false;
        }
 
-       ret = lttng_directory_handle_init(&output_directory, base_path);
+       ret = lttng_directory_handle_init(&output_directory, output_path);
        if (ret) {
                goto end;
        }
@@ -78,6 +90,9 @@ static int session_set_anonymous_chunk(struct relay_session *session)
 end:
        lttng_trace_chunk_put(chunk);
        lttng_directory_handle_fini(&output_directory);
+       if (output_path_allocated) {
+               free(output_path);
+       }
        return ret;
 }
 
This page took 0.030523 seconds and 4 git commands to generate.