diff --git a/src/journal/journalctl-misc.c b/src/journal/journalctl-misc.c index c7a49eefea..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,27 +240,42 @@ 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); } } - r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, !arg_quiet); - if (r < 0) - return table_log_print_error(r); + if (table_isempty(table) && FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF)) { + if (!arg_quiet) + log_notice("No namespaces found."); + } else { + r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, !arg_quiet); + if (r < 0) + return r; + } return 0; } diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 0008e8a755..cc59869790 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -265,6 +265,7 @@ static int help(void) { " -N --fields List all field names currently used\n" " -F --field=FIELD List all values that a specified field takes\n" " --list-boots Show terse information about recorded boots\n" + " --list-namespaces Show list of journal namespaces\n" " --disk-usage Show total disk usage of all journal files\n" " --vacuum-size=BYTES Reduce disk usage below specified size\n" " --vacuum-files=INT Leave only the specified number of journal files\n"