Fix: relayd: harmonize path format in backward-compat mode
[lttng-tools.git] / src / bin / lttng-relayd / backward-compatibility-group-by.c
index 8963dc2866b2944486e0ae10b5c5ba8ad7246d0f..241c21f469b8356b813926037550ab60cbb8c8c7 100644 (file)
@@ -5,6 +5,7 @@
  *
  */
 
+#include "common/time.h"
 #include <assert.h>
 #include <regex.h>
 #include <stdio.h>
@@ -28,8 +29,9 @@
  *
  * Return the allocated string containing the new stream path or else NULL.
  */
-char *backward_compat_group_by_session(
-               const char *path, const char *local_session_name)
+char *backward_compat_group_by_session(const char *path,
+               const char *local_session_name,
+               time_t relay_session_creation_time)
 {
        int ret;
        size_t len;
@@ -60,7 +62,7 @@ char *backward_compat_group_by_session(
        /*
         * The use of strtok with '/' as delimiter is valid since we refuse '/'
         * in session name and '/' is not a valid hostname character based on
-        * RFC-952 [1], RFC-921 [2] and refined in RFC-1123 [2].
+        * RFC-952 [1], RFC-921 [2] and refined in RFC-1123 [3].
         * [1] https://tools.ietf.org/html/rfc952
         * [2] https://tools.ietf.org/html/rfc921
         * [3] https://tools.ietf.org/html/rfc1123#page-13
@@ -162,7 +164,7 @@ char *backward_compat_group_by_session(
                ret = regexec(&regex, local_session_name, 0, NULL, 0);
                if (ret == 0) {
                        const ssize_t local_session_name_offset =
-                                       strlen(local_session_name) - DATETIME_STRING_SIZE + 1;
+                                       strlen(local_session_name) - DATETIME_STR_LEN + 1;
 
                        assert(local_session_name_offset >= 0);
                        datetime = strdup(local_session_name +
@@ -171,8 +173,21 @@ char *backward_compat_group_by_session(
                                PERROR("Failed to parse session path: couldn't copy datetime on regex match");
                                goto error_regex;
                        }
+               } else {
+                       datetime = zmalloc(DATETIME_STR_LEN);
+                       if (!datetime) {
+                               PERROR("Failed to allocate DATETIME string");
+                               goto error;
+                       }
+
+                       ret = time_to_datetime_str(relay_session_creation_time,
+                                       datetime, DATETIME_STR_LEN);
+                       if (ret) {
+                               /* time_to_datetime_str already logs errors. */
+                               goto error;
+                       }
                }
-       } else if (len == DATETIME_STRING_SIZE &&
+       } else if (len == DATETIME_STR_LEN &&
                        !regexec(&regex, leftover_second_token_ptr, 0, NULL,
                                        0)) {
                /*
This page took 0.025718 seconds and 5 git commands to generate.