From: Mathieu Desnoyers Date: Thu, 22 Aug 2019 00:36:29 +0000 (-0700) Subject: Fix: relayd outputs traces of legacy sessionds to home dir X-Git-Tag: v2.12.0-rc1~471 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=a0409c33b358da15ba8b6fcd03713f1511e88c51;p=lttng-tools.git Fix: relayd outputs traces of legacy sessionds to home dir 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 Signed-off-by: Jérémie Galarneau --- diff --git a/src/bin/lttng-relayd/session.c b/src/bin/lttng-relayd/session.c index 605931d5b..888bb88eb 100644 --- a/src/bin/lttng-relayd/session.c +++ b/src/bin/lttng-relayd/session.c @@ -28,6 +28,7 @@ #include "session.h" #include "sessiond-trace-chunks.h" #include "stream.h" +#include /* 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; }