|
Matthias Clasen |
99ef53 |
From a9699746f5b5e6c3a6ea3e3509df0a21a67e4eaf Mon Sep 17 00:00:00 2001
|
|
Matthias Clasen |
99ef53 |
From: Matthias Clasen <mclasen@redhat.com>
|
|
Matthias Clasen |
99ef53 |
Date: Thu, 24 Feb 2011 17:49:11 -0500
|
|
Matthias Clasen |
99ef53 |
Subject: [PATCH 3/3] Keep excluded users off the cached list
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
Previously, calling FindUserByName would create a user object
|
|
Matthias Clasen |
99ef53 |
and then it would be included in ListCachedUsers return values
|
|
Matthias Clasen |
99ef53 |
even though it has e.g. a low uid.
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
This was causing both the root and gdm users to show up in
|
|
Matthias Clasen |
99ef53 |
the user account panel.
|
|
Matthias Clasen |
99ef53 |
---
|
|
Matthias Clasen |
99ef53 |
src/daemon.c | 49 ++++++++++++++++++++++++++++++-------------------
|
|
Matthias Clasen |
99ef53 |
1 files changed, 30 insertions(+), 19 deletions(-)
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
diff --git a/src/daemon.c b/src/daemon.c
|
|
Matthias Clasen |
99ef53 |
index 3b021ad..4e0b935 100644
|
|
Matthias Clasen |
99ef53 |
--- a/src/daemon.c
|
|
Matthias Clasen |
99ef53 |
+++ b/src/daemon.c
|
|
Matthias Clasen |
99ef53 |
@@ -213,6 +213,18 @@ daemon_class_init (DaemonClass *klass)
|
|
Matthias Clasen |
99ef53 |
G_PARAM_READABLE));
|
|
Matthias Clasen |
99ef53 |
}
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
+static gboolean
|
|
Matthias Clasen |
99ef53 |
+user_is_excluded (Daemon *daemon, const gchar *username, uid_t uid)
|
|
Matthias Clasen |
99ef53 |
+{
|
|
Matthias Clasen |
99ef53 |
+ if (uid < MINIMAL_UID) {
|
|
Matthias Clasen |
99ef53 |
+ return TRUE;
|
|
Matthias Clasen |
99ef53 |
+ }
|
|
Matthias Clasen |
99ef53 |
+ if (g_hash_table_lookup (daemon->priv->exclusions, username)) {
|
|
Matthias Clasen |
99ef53 |
+ return TRUE;
|
|
Matthias Clasen |
99ef53 |
+ }
|
|
Matthias Clasen |
99ef53 |
+
|
|
Matthias Clasen |
99ef53 |
+ return FALSE;
|
|
Matthias Clasen |
99ef53 |
+}
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
static void
|
|
Matthias Clasen |
99ef53 |
listify_hash_values_hfunc (gpointer key,
|
|
Matthias Clasen |
99ef53 |
@@ -325,7 +337,8 @@ process_ck_history_line (Daemon *daemon,
|
|
Matthias Clasen |
99ef53 |
return;
|
|
Matthias Clasen |
99ef53 |
}
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
- if (g_hash_table_lookup (daemon->priv->exclusions, username)) {
|
|
Matthias Clasen |
99ef53 |
+ /* pass MINIMAL_UID to just check the name here */
|
|
Matthias Clasen |
99ef53 |
+ if (user_is_excluded (daemon, username, MINIMAL_UID)) {
|
|
Matthias Clasen |
99ef53 |
g_debug ("excluding user '%s'", username);
|
|
Matthias Clasen |
99ef53 |
g_free (username);
|
|
Matthias Clasen |
99ef53 |
return;
|
|
Matthias Clasen |
99ef53 |
@@ -474,13 +487,8 @@ reload_passwd (Daemon *daemon)
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
for (pwent = fgetpwent (fp); pwent != NULL; pwent = fgetpwent (fp)) {
|
|
Matthias Clasen |
99ef53 |
/* Skip users below MINIMAL_UID... */
|
|
Matthias Clasen |
99ef53 |
- if (pwent->pw_uid < MINIMAL_UID) {
|
|
Matthias Clasen |
99ef53 |
- continue;
|
|
Matthias Clasen |
99ef53 |
- }
|
|
Matthias Clasen |
99ef53 |
-
|
|
Matthias Clasen |
99ef53 |
- /* ...and explicitly excluded users */
|
|
Matthias Clasen |
99ef53 |
- if (g_hash_table_lookup (daemon->priv->exclusions, pwent->pw_name)) {
|
|
Matthias Clasen |
99ef53 |
- g_debug ("explicitly skipping user: %s", pwent->pw_name);
|
|
Matthias Clasen |
99ef53 |
+ if (user_is_excluded (daemon, pwent->pw_name, pwent->pw_uid)) {
|
|
Matthias Clasen |
99ef53 |
+ g_debug ("skipping user: %s", pwent->pw_name);
|
|
Matthias Clasen |
99ef53 |
continue;
|
|
Matthias Clasen |
99ef53 |
}
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
@@ -919,21 +927,12 @@ daemon_find_user_by_name (Daemon *daemon,
|
|
Matthias Clasen |
99ef53 |
return TRUE;
|
|
Matthias Clasen |
99ef53 |
}
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
-static void
|
|
Matthias Clasen |
99ef53 |
-enumerate_cb (gpointer key,
|
|
Matthias Clasen |
99ef53 |
- gpointer value,
|
|
Matthias Clasen |
99ef53 |
- gpointer user_data)
|
|
Matthias Clasen |
99ef53 |
-{
|
|
Matthias Clasen |
99ef53 |
- User *user = USER (value);
|
|
Matthias Clasen |
99ef53 |
- GPtrArray *object_paths = user_data;
|
|
Matthias Clasen |
99ef53 |
- g_ptr_array_add (object_paths, g_strdup (user_local_get_object_path (user)));
|
|
Matthias Clasen |
99ef53 |
-}
|
|
Matthias Clasen |
99ef53 |
-
|
|
Matthias Clasen |
99ef53 |
typedef struct {
|
|
Matthias Clasen |
99ef53 |
Daemon *daemon;
|
|
Matthias Clasen |
99ef53 |
DBusGMethodInvocation *context;
|
|
Matthias Clasen |
99ef53 |
} ListUserData;
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
+
|
|
Matthias Clasen |
99ef53 |
static ListUserData *
|
|
Matthias Clasen |
99ef53 |
list_user_data_new (Daemon *daemon,
|
|
Matthias Clasen |
99ef53 |
DBusGMethodInvocation *context)
|
|
Matthias Clasen |
99ef53 |
@@ -960,9 +959,21 @@ finish_list_cached_users (gpointer user_data)
|
|
Matthias Clasen |
99ef53 |
{
|
|
Matthias Clasen |
99ef53 |
ListUserData *data = user_data;
|
|
Matthias Clasen |
99ef53 |
GPtrArray *object_paths;
|
|
Matthias Clasen |
99ef53 |
+ GHashTableIter iter;
|
|
Matthias Clasen |
99ef53 |
+ const gchar *name;
|
|
Matthias Clasen |
99ef53 |
+ User *user;
|
|
Matthias Clasen |
99ef53 |
+ uid_t uid;
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
object_paths = g_ptr_array_new ();
|
|
Matthias Clasen |
99ef53 |
- g_hash_table_foreach (data->daemon->priv->users, enumerate_cb, object_paths);
|
|
Matthias Clasen |
99ef53 |
+
|
|
Matthias Clasen |
99ef53 |
+ g_hash_table_iter_init (&iter, data->daemon->priv->users);
|
|
Matthias Clasen |
99ef53 |
+ while (g_hash_table_iter_next (&iter, (gpointer *)&name, (gpointer *)&user)) {
|
|
Matthias Clasen |
99ef53 |
+ uid = user_local_get_uid (user);
|
|
Matthias Clasen |
99ef53 |
+ if (!user_is_excluded (data->daemon, name, uid)) {
|
|
Matthias Clasen |
99ef53 |
+ g_debug ("user %s %ld not excluded\n", name, uid);
|
|
Matthias Clasen |
99ef53 |
+ g_ptr_array_add (object_paths, g_strdup (user_local_get_object_path (user)));
|
|
Matthias Clasen |
99ef53 |
+ }
|
|
Matthias Clasen |
99ef53 |
+ }
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
dbus_g_method_return (data->context, object_paths);
|
|
Matthias Clasen |
99ef53 |
|
|
Matthias Clasen |
99ef53 |
--
|
|
Matthias Clasen |
99ef53 |
1.7.4.1
|
|
Matthias Clasen |
99ef53 |
|