diff options
author | Marius Vollmer <mvollmer@redhat.com> | 2013-10-22 19:57:35 +0300 |
---|---|---|
committer | Marius Vollmer <mvollmer@redhat.com> | 2013-10-22 19:57:35 +0300 |
commit | b5c0aa6dd4fc54a51e0ea07ba772b0a0358989d3 (patch) | |
tree | 664ea663d696206e7bc10a3aa7d8858f3ff2c6fe | |
parent | 898b5ceb6738b81fa2d95d904d30fc74c9adcc41 (diff) | |
download | accountsservice-b5c0aa6dd4fc54a51e0ea07ba772b0a0358989d3.tar.gz |
Don't find excluded users.
The returned object path for non-human users can not really be used
since there is no guarantee for how long it will be valid. The next
run of reload_users will unregister non-human users, and that can
happen at any time.
-rw-r--r-- | src/daemon.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/daemon.c b/src/daemon.c index 9c9f617..44e3ecc 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -92,7 +92,7 @@ G_DEFINE_TYPE_WITH_CODE (Daemon, daemon, ACCOUNTS_TYPE_ACCOUNTS_SKELETON, G_IMPL #define DAEMON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DAEMON, DaemonPrivate)) static const GDBusErrorEntry accounts_error_entries[] = -{ +{ { ERROR_FAILED, "org.freedesktop.Accounts.Error.Failed" }, { ERROR_USER_EXISTS, "org.freedesktop.Accounts.Error.UserExists" }, { ERROR_USER_DOES_NOT_EXIST, "org.freedesktop.Accounts.Error.UserDoesNotExist" }, @@ -765,7 +765,7 @@ register_accounts_daemon (Daemon *daemon) g_critical ("error exporting interface: %s", error->message); g_error_free (error); } - goto error; + goto error; } return TRUE; @@ -842,6 +842,11 @@ daemon_local_find_user_by_id (Daemon *daemon, return NULL; } + if (!user_classify_is_human (uid, pwent->pw_name, pwent->pw_shell, NULL)) { + g_debug ("rejecting excluded user %d", (int)uid); + return NULL; + } + user = g_hash_table_lookup (daemon->priv->users, pwent->pw_name); if (user == NULL) @@ -863,6 +868,11 @@ daemon_local_find_user_by_name (Daemon *daemon, return NULL; } + if (!user_classify_is_human (pwent->pw_uid, pwent->pw_name, pwent->pw_shell, NULL)) { + g_debug ("rejecting excluded user %s", name); + return NULL; + } + user = g_hash_table_lookup (daemon->priv->users, pwent->pw_name); if (user == NULL) @@ -952,22 +962,11 @@ finish_list_cached_users (gpointer user_data) GHashTableIter iter; const gchar *name; User *user; - uid_t uid; - const gchar *shell; object_paths = g_ptr_array_new (); g_hash_table_iter_init (&iter, data->daemon->priv->users); while (g_hash_table_iter_next (&iter, (gpointer *)&name, (gpointer *)&user)) { - uid = user_get_uid (user); - shell = user_get_shell (user); - - if (!user_classify_is_human (uid, name, shell, NULL)) { - g_debug ("user %s %ld excluded", name, (long) uid); - continue; - } - - g_debug ("user %s %ld not excluded", name, (long) uid); g_ptr_array_add (object_paths, (gpointer) user_get_object_path (user)); } g_ptr_array_add (object_paths, NULL); |