aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeandro Pereira <leandro@hardinfo.org>2012-01-08 11:45:07 -0200
committerLeandro Pereira <leandro@hardinfo.org>2012-01-08 11:45:07 -0200
commita3f184c1e0354269916ddfe9216f5ff56cdf19ab (patch)
tree7ffa1987a8ba59b87538f09baf3d6fdc01ec094f
parent7ce496ba68d67905a5715104aa6122ae85dab1c3 (diff)
Add group information.
Closes http://bugs.hardinfo.org/showreport.php?bugid=54
-rw-r--r--CMakeLists.txt1
-rw-r--r--includes/computer.h1
-rw-r--r--modules/computer.c22
-rw-r--r--modules/computer/groups.c45
4 files changed, 68 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b7a39cbb..0acc7678 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -83,6 +83,7 @@ set(MODULE_computer_SOURCES
modules/computer/os.c
modules/computer/uptime.c
modules/computer/users.c
+ modules/computer/groups.c
)
set(MODULE_devices_SOURCES
modules/devices.c
diff --git a/includes/computer.h b/includes/computer.h
index 05f7c4be..361dc25d 100644
--- a/includes/computer.h
+++ b/includes/computer.h
@@ -162,6 +162,7 @@ struct _MemoryInfo {
}
extern gchar *users;
+extern gchar *groups;
extern gchar *fs_list;
extern GHashTable *_module_hash_table;
extern Computer *computer;
diff --git a/modules/computer.c b/modules/computer.c
index de4e8abe..7d3c5d8d 100644
--- a/modules/computer.c
+++ b/modules/computer.c
@@ -42,6 +42,7 @@ gchar *callback_fs();
gchar *callback_display();
gchar *callback_network();
gchar *callback_users();
+gchar *callback_groups();
gchar *callback_env_var();
#if GLIB_CHECK_VERSION(2,14,0)
gchar *callback_dev();
@@ -57,6 +58,7 @@ void scan_fs(gboolean reload);
void scan_display(gboolean reload);
void scan_network(gboolean reload);
void scan_users(gboolean reload);
+void scan_groups(gboolean reload);
void scan_env_var(gboolean reload);
#if GLIB_CHECK_VERSION(2,14,0)
void scan_dev(gboolean reload);
@@ -75,10 +77,10 @@ static ModuleEntry entries[] = {
{"Development", "devel.png", callback_dev, scan_dev, MODULE_FLAG_NONE},
#endif /* GLIB_CHECK_VERSION(2,14,0) */
{"Users", "users.png", callback_users, scan_users, MODULE_FLAG_NONE},
+ {"Groups", "users.png", callback_groups, scan_groups, MODULE_FLAG_NONE},
{NULL},
};
-
GHashTable *moreinfo = NULL;
gchar *module_list = NULL;
Computer *computer = NULL;
@@ -175,6 +177,13 @@ void scan_users(gboolean reload)
SCAN_END();
}
+void scan_groups(gboolean reload)
+{
+ SCAN_START();
+ scan_groups_do();
+ SCAN_END();
+}
+
#if GLIB_CHECK_VERSION(2,14,0)
static gchar *dev_list = NULL;
void scan_dev(gboolean reload)
@@ -512,6 +521,17 @@ gchar *callback_users()
"%s\n", users);
}
+gchar *callback_groups()
+{
+ return g_strdup_printf("[$ShellParam$]\n"
+ "ReloadInterval=10000\n"
+ "ColumnTitle$TextValue=Name\n"
+ "ColumnTitle$Value=Group ID\n"
+ "ShowColumnHeaders=true\n"
+ "[Groups]\n"
+ "%s\n", groups);
+}
+
gchar *get_os_kernel(void)
{
scan_os(FALSE);
diff --git a/modules/computer/groups.c b/modules/computer/groups.c
new file mode 100644
index 00000000..244b8000
--- /dev/null
+++ b/modules/computer/groups.c
@@ -0,0 +1,45 @@
+/*
+ * HardInfo - Displays System Information
+ * Copyright (C) 2012 Leandro A. F. Pereira <leandro@hardinfo.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 2.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <sys/types.h>
+#include <grp.h>
+#include "hardinfo.h"
+#include "computer.h"
+
+gchar *groups = NULL;
+
+void
+scan_groups_do(void)
+{
+ struct group *group_;
+
+ setgrent();
+ group_ = getgrent();
+ if (!group_)
+ return;
+
+ g_free(groups);
+ groups = g_strdup("");
+
+ while (group_) {
+ groups = h_strdup_cprintf("%s=%d\n", groups, group_->gr_name, group_->gr_gid);
+ group_ = getgrent();
+ }
+
+ endgrent();
+}