Fix: lttng create default name check
[lttng-tools.git] / src / bin / lttng / commands / create.c
index 5588d4267bae2d304facb6ea73866f175f46e2e8..b14b45cd6e1fd31435612590f34e8e07d3f97a28 100644 (file)
@@ -52,9 +52,9 @@ static struct poptOption long_options[] = {
        {"help", 'h', POPT_ARG_NONE, NULL, OPT_HELP, NULL, NULL},
        {"output", 'o', POPT_ARG_STRING, &opt_output_path, 0, NULL, NULL},
        {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL},
-       {"set-uri",        'U', POPT_ARG_STRING, &opt_url, 0, 0, 0},
-       {"ctrl-uri",       'C', POPT_ARG_STRING, &opt_ctrl_url, 0, 0, 0},
-       {"data-uri",       'D', POPT_ARG_STRING, &opt_data_url, 0, 0, 0},
+       {"set-url",        'U', POPT_ARG_STRING, &opt_url, 0, 0, 0},
+       {"ctrl-url",       'C', POPT_ARG_STRING, &opt_ctrl_url, 0, 0, 0},
+       {"data-url",       'D', POPT_ARG_STRING, &opt_data_url, 0, 0, 0},
        {"no-consumer",      0, POPT_ARG_VAL, &opt_no_consumer, 1, 0, 0},
        {"disable-consumer", 0, POPT_ARG_VAL, &opt_disable_consumer, 1, 0, 0},
        {0, 0, 0, 0, 0, 0, 0}
@@ -183,7 +183,7 @@ static int create_session(void)
        int ret;
        char *session_name = NULL, *traces_path = NULL, *alloc_path = NULL;
        char *alloc_url = NULL, *url = NULL, datetime[16];
-       char session_name_date[NAME_MAX], *print_str_url = NULL;
+       char session_name_date[NAME_MAX + 17], *print_str_url = NULL;
        time_t rawtime;
        struct tm *timeinfo;
 
@@ -203,9 +203,22 @@ static int create_session(void)
                session_name = session_name_date;
                DBG("Auto session name set to %s", session_name_date);
        } else {
-               if (strncmp(opt_session_name, DEFAULT_SESSION_NAME,
+               if (strlen(opt_session_name) > NAME_MAX) {
+                       ERR("Session name too long. Length must be lower or equal to %d",
+                                       NAME_MAX);
+                       ret = LTTNG_ERR_SESSION_FAIL;
+                       goto error;
+               }
+               /*
+                * Check if the session name begins with "auto-" or is exactly "auto".
+                * Both are reserved for the default session name. See bug #449 to
+                * understand why we need to check both here.
+                */
+               if ((strncmp(opt_session_name, DEFAULT_SESSION_NAME "-",
+                                       strlen(DEFAULT_SESSION_NAME) + 1) == 0) ||
+                               (strncmp(opt_session_name, DEFAULT_SESSION_NAME,
                                        strlen(DEFAULT_SESSION_NAME)) == 0 &&
-                               strlen(opt_session_name) == strlen(DEFAULT_SESSION_NAME)) {
+                               strlen(opt_session_name) == strlen(DEFAULT_SESSION_NAME))) {
                        ERR("%s is a reserved keyword for default session(s)",
                                        DEFAULT_SESSION_NAME);
                        ret = CMD_ERROR;
@@ -273,6 +286,9 @@ static int create_session(void)
                case LTTNG_ERR_EXIST_SESS:
                        WARN("Session %s already exists", session_name);
                        break;
+               default:
+                       ERR("%s", lttng_strerror(ret));
+                       break;
                }
                goto error;
        }
This page took 0.026928 seconds and 4 git commands to generate.