aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2019-06-17 17:43:54 -0500
committerLeandro A. F. Pereira <leandro@hardinfo.org>2019-06-18 07:13:27 -0700
commitd42bea3df0dccbf2636eb98dff1c5931187517d6 (patch)
tree894c0ea86938d275cb5320c55d81788d7b0405a7
parent098e0c0955305ae60cf8b8892bcf34a957f5286c (diff)
Start Computer/Security
As requested in https://github.com/lpereira/hardinfo/issues/342 Signed-off-by: Burt P <pburt0@gmail.com>
-rw-r--r--includes/computer.h1
-rw-r--r--modules/computer.c29
-rw-r--r--modules/computer/os.c24
3 files changed, 49 insertions, 5 deletions
diff --git a/includes/computer.h b/includes/computer.h
index 2e381285..892a3d69 100644
--- a/includes/computer.h
+++ b/includes/computer.h
@@ -144,6 +144,7 @@ gchar *computer_get_formatted_uptime();
gchar *computer_get_alsacards(Computer * computer);
gchar *computer_get_entropy_avail(void);
gchar *computer_get_aslr(void);
+gchar *computer_get_dmesg_status(void);
OperatingSystem *computer_get_os(void);
AlsaInfo *computer_get_alsainfo(void);
diff --git a/modules/computer.c b/modules/computer.c
index e3976e81..7bb470a3 100644
--- a/modules/computer.c
+++ b/modules/computer.c
@@ -43,6 +43,7 @@
/* Callbacks */
gchar *callback_summary(void);
gchar *callback_os(void);
+gchar *callback_security(void);
gchar *callback_modules(void);
gchar *callback_boots(void);
gchar *callback_locales(void);
@@ -59,6 +60,7 @@ gchar *callback_dev(void);
/* Scan callbacks */
void scan_summary(gboolean reload);
void scan_os(gboolean reload);
+void scan_security(gboolean reload);
void scan_modules(gboolean reload);
void scan_boots(gboolean reload);
void scan_locales(gboolean reload);
@@ -75,6 +77,7 @@ void scan_dev(gboolean reload);
static ModuleEntry entries[] = {
{N_("Summary"), "summary.png", callback_summary, scan_summary, MODULE_FLAG_NONE},
{N_("Operating System"), "os.png", callback_os, scan_os, MODULE_FLAG_NONE},
+ {N_("Security"), "os.png", callback_security, scan_security, MODULE_FLAG_NONE},
{N_("Kernel Modules"), "module.png", callback_modules, scan_modules, MODULE_FLAG_NONE},
{N_("Boots"), "boot.png", callback_boots, scan_boots, MODULE_FLAG_NONE},
{N_("Languages"), "language.png", callback_locales, scan_locales, MODULE_FLAG_NONE},
@@ -143,6 +146,13 @@ void scan_os(gboolean reload)
SCAN_END();
}
+void scan_security(gboolean reload)
+{
+ SCAN_START();
+ //nothing to do here yet
+ SCAN_END();
+}
+
void scan_modules(gboolean reload)
{
SCAN_START();
@@ -512,11 +522,6 @@ gchar *callback_os(void)
info_field(_("Desktop Environment"), computer->os->desktop),
info_field_last());
- info_add_group(info, _("Security"),
- info_field_update(_("Available entropy in /dev/random"), 1000),
- info_field(_("ASLR"), idle_free(computer_get_aslr())),
- info_field_last());
-
info_add_group(info, _("Misc"),
info_field_update(_("Uptime"), 1000),
info_field_update(_("Load Average"), 10000),
@@ -525,6 +530,20 @@ gchar *callback_os(void)
return info_flatten(info);
}
+gchar *callback_security(void)
+{
+ struct Info *info = info_new();
+
+ info_add_group(info, _("Security"),
+ info_field(_("HardInfo running as"), (getuid() == 0) ? _("Superuser") : _("User")),
+ info_field_update(_("Available entropy in /dev/random"), 1000),
+ info_field(_("ASLR"), idle_free(computer_get_aslr())),
+ info_field(_("dmesg"), idle_free(computer_get_dmesg_status())),
+ info_field_last());
+
+ return info_flatten(info);
+}
+
gchar *callback_modules(void)
{
struct Info *info = info_new();
diff --git a/modules/computer/os.c b/modules/computer/os.c
index 7a8348f2..49210307 100644
--- a/modules/computer/os.c
+++ b/modules/computer/os.c
@@ -263,6 +263,29 @@ detect_desktop_environment(void)
}
gchar *
+computer_get_dmesg_status(void)
+{
+ gchar *out = NULL, *err = NULL;
+ int ex = 1, result = 0;
+ g_spawn_command_line_sync("dmesg", &out, &err, &ex, NULL);
+ g_free(out);
+ g_free(err);
+ result += (getuid() == 0) ? 2 : 0;
+ result += ex ? 1 : 0;
+ switch(result) {
+ case 0: /* readable, user */
+ return g_strdup(_("User access allowed"));
+ case 1: /* unreadable, user */
+ return g_strdup(_("User access forbidden"));
+ case 2: /* readable, root */
+ return g_strdup(_("Access allowed (running as superuser)"));
+ case 3: /* unreadable, root */
+ return g_strdup(_("Access forbidden? (running as superuser)"));
+ }
+ return g_strdup(_("(Unknown)"));
+}
+
+gchar *
computer_get_aslr(void)
{
switch (h_sysfs_read_int("/proc/sys/kernel", "randomize_va_space")) {
@@ -276,6 +299,7 @@ computer_get_aslr(void)
return g_strdup(_("Unknown"));
}
}
+
gchar *
computer_get_entropy_avail(void)
{