diff --git a/src/journal/journalctl-misc.c b/src/journal/journalctl-misc.c index 9d878e8e05..47eb72575a 100644 --- a/src/journal/journalctl-misc.c +++ b/src/journal/journalctl-misc.c @@ -211,7 +211,6 @@ int action_list_field_names(void) { int action_list_namespaces(void) { _cleanup_(table_unrefp) Table *table = NULL; sd_id128_t machine; - char machine_id[SD_ID128_STRING_MAX]; int r; assert(arg_action == ACTION_LIST_NAMESPACES); @@ -220,8 +219,6 @@ int action_list_namespaces(void) { if (r < 0) return log_error_errno(r, "Failed to get machine ID: %m"); - sd_id128_to_string(machine, machine_id); - table = table_new("namespace"); if (!table) return log_oom(); @@ -243,19 +240,29 @@ int action_list_namespaces(void) { } FOREACH_DIRENT(de, dirp, return log_error_errno(errno, "Failed to iterate through %s: %m", path)) { - char *dot; - if (!startswith(de->d_name, machine_id)) + const char *e = strchr(de->d_name, '.'); + if (!e) continue; - dot = strchr(de->d_name, '.'); - if (!dot) + _cleanup_free_ char *ids = strndup(de->d_name, e - de->d_name); + if (!ids) + return log_oom(); + + sd_id128_t id; + r = sd_id128_from_string(ids, &id); + if (r < 0) continue; - if (!log_namespace_name_valid(dot + 1)) + if (!sd_id128_equal(machine, id)) continue; - r = table_add_cell(table, NULL, TABLE_STRING, dot + 1); + e++; + + if (!log_namespace_name_valid(e)) + continue; + + r = table_add_cell(table, NULL, TABLE_STRING, e); if (r < 0) return table_log_add_error(r); }