analyze: split out "capability" verb
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include "analyze.h"
|
||||
#include "analyze-capability.h"
|
||||
#include "cap-list.h"
|
||||
#include "capability-util.h"
|
||||
#include "format-table.h"
|
||||
|
||||
int dump_capabilities(int argc, char *argv[], void *userdata) {
|
||||
_cleanup_(table_unrefp) Table *table = NULL;
|
||||
unsigned last_cap;
|
||||
int r;
|
||||
|
||||
table = table_new("name", "number");
|
||||
if (!table)
|
||||
return log_oom();
|
||||
|
||||
(void) table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
|
||||
|
||||
/* Determine the maximum of the last cap known by the kernel and by us */
|
||||
last_cap = MAX((unsigned) CAP_LAST_CAP, cap_last_cap());
|
||||
|
||||
if (strv_isempty(strv_skip(argv, 1)))
|
||||
for (unsigned c = 0; c <= last_cap; c++) {
|
||||
r = table_add_many(table,
|
||||
TABLE_STRING, capability_to_name(c) ?: "cap_???",
|
||||
TABLE_UINT, c);
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
else {
|
||||
for (int i = 1; i < argc; i++) {
|
||||
int c;
|
||||
|
||||
c = capability_from_name(argv[i]);
|
||||
if (c < 0 || (unsigned) c > last_cap)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Capability \"%s\" not known.", argv[i]);
|
||||
|
||||
r = table_add_many(table,
|
||||
TABLE_STRING, capability_to_name(c) ?: "cap_???",
|
||||
TABLE_UINT, (unsigned) c);
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
|
||||
(void) table_set_sort(table, (size_t) 1);
|
||||
}
|
||||
|
||||
pager_open(arg_pager_flags);
|
||||
|
||||
return table_print(table, NULL);
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
int dump_capabilities(int argc, char *argv[], void *userdata);
|
||||
+1
-45
@@ -14,6 +14,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "analyze.h"
|
||||
#include "analyze-calendar.h"
|
||||
#include "analyze-capability.h"
|
||||
#include "analyze-condition.h"
|
||||
#include "analyze-dot.h"
|
||||
#include "analyze-dump.h"
|
||||
@@ -1312,51 +1313,6 @@ static int dump_unit_paths(int argc, char *argv[], void *userdata) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dump_capabilities(int argc, char *argv[], void *userdata) {
|
||||
_cleanup_(table_unrefp) Table *table = NULL;
|
||||
unsigned last_cap;
|
||||
int r;
|
||||
|
||||
table = table_new("name", "number");
|
||||
if (!table)
|
||||
return log_oom();
|
||||
|
||||
(void) table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
|
||||
|
||||
/* Determine the maximum of the last cap known by the kernel and by us */
|
||||
last_cap = MAX((unsigned) CAP_LAST_CAP, cap_last_cap());
|
||||
|
||||
if (strv_isempty(strv_skip(argv, 1)))
|
||||
for (unsigned c = 0; c <= last_cap; c++) {
|
||||
r = table_add_many(table,
|
||||
TABLE_STRING, capability_to_name(c) ?: "cap_???",
|
||||
TABLE_UINT, c);
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
else {
|
||||
for (int i = 1; i < argc; i++) {
|
||||
int c;
|
||||
|
||||
c = capability_from_name(argv[i]);
|
||||
if (c < 0 || (unsigned) c > last_cap)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Capability \"%s\" not known.", argv[i]);
|
||||
|
||||
r = table_add_many(table,
|
||||
TABLE_STRING, capability_to_name(c) ?: "cap_???",
|
||||
TABLE_UINT, (unsigned) c);
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
|
||||
(void) table_set_sort(table, (size_t) 1);
|
||||
}
|
||||
|
||||
pager_open(arg_pager_flags);
|
||||
|
||||
return table_print(table, NULL);
|
||||
}
|
||||
|
||||
void time_parsing_hint(const char *p, bool calendar, bool timestamp, bool timespan) {
|
||||
if (calendar && calendar_spec_from_string(p, NULL) >= 0)
|
||||
log_notice("Hint: this expression is a valid calendar specification. "
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
systemd_analyze_sources = files('''
|
||||
analyze-calendar.c
|
||||
analyze-calendar.h
|
||||
analyze-capability.c
|
||||
analyze-capability.h
|
||||
analyze-condition.c
|
||||
analyze-condition.h
|
||||
analyze-dot.c
|
||||
|
||||
Reference in New Issue
Block a user