diff options
| author | Burt P <pburt0@gmail.com> | 2019-06-17 17:43:54 -0500 | 
|---|---|---|
| committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2019-06-18 07:13:27 -0700 | 
| commit | d42bea3df0dccbf2636eb98dff1c5931187517d6 (patch) | |
| tree | 894c0ea86938d275cb5320c55d81788d7b0405a7 | |
| parent | 098e0c0955305ae60cf8b8892bcf34a957f5286c (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.h | 1 | ||||
| -rw-r--r-- | modules/computer.c | 29 | ||||
| -rw-r--r-- | modules/computer/os.c | 24 | 
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)  {  | 
