diff options
-rw-r--r-- | src/accounts-daemon.h | 2 | ||||
-rw-r--r-- | src/daemon.c | 348 | ||||
-rw-r--r-- | src/daemon.h | 33 | ||||
-rw-r--r-- | src/extensions.c | 10 | ||||
-rw-r--r-- | src/fgetpwent.c | 148 | ||||
-rw-r--r-- | src/libaccountsservice/act-user-manager.c | 432 | ||||
-rw-r--r-- | src/libaccountsservice/act-user-manager.h | 158 | ||||
-rw-r--r-- | src/libaccountsservice/act-user-private.h | 32 | ||||
-rw-r--r-- | src/libaccountsservice/act-user.c | 139 | ||||
-rw-r--r-- | src/libaccountsservice/act-user.h | 170 | ||||
-rw-r--r-- | src/main.c | 55 | ||||
-rw-r--r-- | src/user-classify.h | 6 | ||||
-rw-r--r-- | src/user.c | 429 | ||||
-rw-r--r-- | src/user.h | 58 | ||||
-rw-r--r-- | src/util.c | 67 | ||||
-rw-r--r-- | src/util.h | 17 | ||||
-rw-r--r-- | src/wtmp-helper.c | 42 | ||||
-rw-r--r-- | src/wtmp-helper.h | 4 | ||||
-rw-r--r-- | tests/util.c | 39 |
19 files changed, 1123 insertions, 1066 deletions
diff --git a/src/accounts-daemon.h b/src/accounts-daemon.h index 84bb293..0949dae 100644 --- a/src/accounts-daemon.h +++ b/src/accounts-daemon.h @@ -23,7 +23,7 @@ #define TYPE_DAEMON (daemon_get_type ()) #define DAEMON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_DAEMON, Daemon)) -#define DAEMON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), TYPE_DAEMON, DaemonClass)) +#define DAEMON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_DAEMON, DaemonClass)) #define IS_DAEMON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_DAEMON)) #define IS_DAEMON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_DAEMON)) #define DAEMON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_DAEMON, DaemonClass)) diff --git a/src/daemon.c b/src/daemon.c index 882bc26..df6810e 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -56,39 +56,45 @@ #define PATH_SHADOW "shadow" #define PATH_GROUP "/etc/group" -enum { +enum +{ PROP_0, PROP_DAEMON_VERSION }; -typedef struct { +typedef struct +{ GDBusConnection *bus_connection; - GHashTable *users; - gsize number_of_normal_users; - GList *explicitly_requested_users; + GHashTable *users; + gsize number_of_normal_users; + GList *explicitly_requested_users; - User *autologin; + User *autologin; - GFileMonitor *passwd_monitor; - GFileMonitor *shadow_monitor; - GFileMonitor *group_monitor; - GFileMonitor *gdm_monitor; - GFileMonitor *wtmp_monitor; + GFileMonitor *passwd_monitor; + GFileMonitor *shadow_monitor; + GFileMonitor *group_monitor; + GFileMonitor *gdm_monitor; + GFileMonitor *wtmp_monitor; - GQueue *pending_list_cached_users; + GQueue *pending_list_cached_users; - guint reload_id; - guint autologin_id; + guint reload_id; + guint autologin_id; PolkitAuthority *authority; - GHashTable *extension_ifaces; + GHashTable *extension_ifaces; } DaemonPrivate; -typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, GHashTable *, gpointer *, struct spwd **shadow_entry); +typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, + GHashTable *, + gpointer *, + struct spwd **shadow_entry); -typedef struct { - Daemon *daemon; +typedef struct +{ + Daemon *daemon; GDBusMethodInvocation *context; } ListUserData; @@ -104,11 +110,11 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (Daemon, g_object_unref) static const GDBusErrorEntry accounts_error_entries[] = { - { ERROR_FAILED, "org.freedesktop.Accounts.Error.Failed" }, - { ERROR_USER_EXISTS, "org.freedesktop.Accounts.Error.UserExists" }, + { 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" }, - { ERROR_PERMISSION_DENIED, "org.freedesktop.Accounts.Error.PermissionDenied" }, - { ERROR_NOT_SUPPORTED, "org.freedesktop.Accounts.Error.NotSupported" } + { ERROR_PERMISSION_DENIED, "org.freedesktop.Accounts.Error.PermissionDenied" }, + { ERROR_NOT_SUPPORTED, "org.freedesktop.Accounts.Error.NotSupported" } }; GQuark @@ -128,23 +134,22 @@ error_quark (void) GType error_get_type (void) { - static GType etype = 0; - - if (etype == 0) - { - static const GEnumValue values[] = - { - ENUM_ENTRY (ERROR_FAILED, "Failed"), - ENUM_ENTRY (ERROR_USER_EXISTS, "UserExists"), - ENUM_ENTRY (ERROR_USER_DOES_NOT_EXIST, "UserDoesntExist"), - ENUM_ENTRY (ERROR_PERMISSION_DENIED, "PermissionDenied"), - ENUM_ENTRY (ERROR_NOT_SUPPORTED, "NotSupported"), - { 0, 0, 0 } - }; - g_assert (NUM_ERRORS == G_N_ELEMENTS (values) - 1); - etype = g_enum_register_static ("Error", values); - } - return etype; + static GType etype = 0; + + if (etype == 0) { + static const GEnumValue values[] = + { + ENUM_ENTRY (ERROR_FAILED, "Failed"), + ENUM_ENTRY (ERROR_USER_EXISTS, "UserExists"), + ENUM_ENTRY (ERROR_USER_DOES_NOT_EXIST, "UserDoesntExist"), + ENUM_ENTRY (ERROR_PERMISSION_DENIED, "PermissionDenied"), + ENUM_ENTRY (ERROR_NOT_SUPPORTED, "NotSupported"), + { 0, 0, 0} + }; + g_assert (NUM_ERRORS == G_N_ELEMENTS (values) - 1); + etype = g_enum_register_static ("Error", values); + } + return etype; } #ifndef HAVE_FGETPWENT @@ -176,13 +181,15 @@ entry_generator_fgetpwent (Daemon *daemon, { struct passwd *pwent; - struct { + struct + { struct spwd spbuf; - char buf[1024]; + char buf[1024]; } *shadow_entry_buffers; - struct { - FILE *fp; + struct + { + FILE *fp; GHashTable *users; } *generator_state; @@ -206,9 +213,9 @@ entry_generator_fgetpwent (Daemon *daemon, do { int ret = 0; - shadow_entry_buffers = g_malloc0 (sizeof (*shadow_entry_buffers)); + shadow_entry_buffers = g_malloc0 (sizeof(*shadow_entry_buffers)); - ret = fgetspent_r (fp, &shadow_entry_buffers->spbuf, shadow_entry_buffers->buf, sizeof (shadow_entry_buffers->buf), &shadow_entry); + ret = fgetspent_r (fp, &shadow_entry_buffers->spbuf, shadow_entry_buffers->buf, sizeof(shadow_entry_buffers->buf), &shadow_entry); if (ret == 0) { g_hash_table_insert (shadow_users, g_strdup (shadow_entry->sp_namp), shadow_entry_buffers); } else { @@ -235,7 +242,7 @@ entry_generator_fgetpwent (Daemon *daemon, return NULL; } - generator_state = g_malloc0 (sizeof (*generator_state)); + generator_state = g_malloc0 (sizeof(*generator_state)); generator_state->fp = fp; generator_state->users = shadow_users; @@ -251,7 +258,7 @@ entry_generator_fgetpwent (Daemon *daemon, shadow_entry_buffers = g_hash_table_lookup (generator_state->users, pwent->pw_name); if (shadow_entry_buffers != NULL) { - *spent = &shadow_entry_buffers->spbuf; + *spent = &shadow_entry_buffers->spbuf; } /* Skip system users... */ @@ -281,7 +288,8 @@ entry_generator_cachedir (Daemon *daemon, struct spwd **shadow_entry) { struct passwd *pwent; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; gboolean regular; GHashTableIter iter; gpointer key, value; @@ -326,10 +334,9 @@ entry_generator_cachedir (Daemon *daemon, } else if (errno == 0) { g_debug ("user '%s' in cache dir but not present on system, removing", name); remove_cache_files (name); - } - else { + } else { g_warning ("failed to check if user '%s' in cache dir is present on system: %s", - name, g_strerror (errno)); + name, g_strerror (errno)); } } } @@ -396,10 +403,10 @@ entry_generator_requested_users (Daemon *daemon, } static void -load_entries (Daemon *daemon, - GHashTable *users, - gboolean explicitly_requested, - EntryGeneratorFunc entry_generator) +load_entries (Daemon *daemon, + GHashTable *users, + gboolean explicitly_requested, + EntryGeneratorFunc entry_generator) { DaemonPrivate *priv = daemon_get_instance_private (daemon); gpointer generator_state = NULL; @@ -482,8 +489,9 @@ reload_users (Daemon *daemon) load_entries (daemon, users, FALSE, entry_generator_fgetpwent); local = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_iter_init (&iter, users); - while (g_hash_table_iter_next (&iter, &name, NULL)) + while (g_hash_table_iter_next (&iter, &name, NULL)) { g_hash_table_add (local, name); + } /* Now add/update users from other sources, possibly non-local */ load_entries (daemon, users, TRUE, entry_generator_cachedir); @@ -568,10 +576,10 @@ reload_users_timeout (Daemon *daemon) return FALSE; } -static gboolean load_autologin (Daemon *daemon, - gchar **name, - gboolean *enabled, - GError **error); +static gboolean load_autologin (Daemon *daemon, + gchar **name, + gboolean *enabled, + GError **error); static gboolean reload_autologin_timeout (Daemon *daemon) @@ -580,7 +588,8 @@ reload_autologin_timeout (Daemon *daemon) AccountsAccounts *accounts = ACCOUNTS_ACCOUNTS (daemon); gboolean enabled; g_autofree gchar *name = NULL; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; User *user = NULL; priv->autologin_id = 0; @@ -610,8 +619,7 @@ reload_autologin_timeout (Daemon *daemon) priv->autologin = g_object_ref (user); g_signal_emit_by_name (priv->autologin, "changed", 0); } - } - else { + } else { g_debug ("automatic login is disabled"); accounts_accounts_set_automatic_login_users (accounts, NULL); } @@ -632,7 +640,7 @@ queue_reload_users_eventually (Daemon *daemon) * parsing doesn't hammer the cpu if the user is logging in * and out in a continuous loop. */ - priv->reload_id = g_timeout_add_seconds (10, (GSourceFunc)reload_users_timeout, daemon); + priv->reload_id = g_timeout_add_seconds (10, (GSourceFunc) reload_users_timeout, daemon); } static void @@ -647,7 +655,7 @@ queue_reload_users_soon (Daemon *daemon) /* we wait half a second or so in case /etc/passwd and * /etc/shadow are changed at the same time, or repeatedly. */ - priv->reload_id = g_timeout_add (500, (GSourceFunc)reload_users_timeout, daemon); + priv->reload_id = g_timeout_add (500, (GSourceFunc) reload_users_timeout, daemon); } static void @@ -659,7 +667,7 @@ queue_reload_users (Daemon *daemon) return; } - priv->reload_id = g_idle_add ((GSourceFunc)reload_users_timeout, daemon); + priv->reload_id = g_idle_add ((GSourceFunc) reload_users_timeout, daemon); } static void @@ -671,15 +679,15 @@ queue_reload_autologin (Daemon *daemon) return; } - priv->autologin_id = g_idle_add ((GSourceFunc)reload_autologin_timeout, daemon); + priv->autologin_id = g_idle_add ((GSourceFunc) reload_autologin_timeout, daemon); } static void -on_users_monitor_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - Daemon *daemon) +on_users_monitor_changed (GFileMonitor *monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + Daemon *daemon) { DaemonPrivate *priv = daemon_get_instance_private (daemon); @@ -696,11 +704,11 @@ on_users_monitor_changed (GFileMonitor *monitor, } static void -on_gdm_monitor_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - Daemon *daemon) +on_gdm_monitor_changed (GFileMonitor *monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + Daemon *daemon) { if (event_type != G_FILE_MONITOR_EVENT_CHANGED && event_type != G_FILE_MONITOR_EVENT_CREATED) { @@ -710,20 +718,20 @@ on_gdm_monitor_changed (GFileMonitor *monitor, queue_reload_autologin (daemon); } -typedef void FileChangeCallback (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - Daemon *daemon); +typedef void FileChangeCallback (GFileMonitor *monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + Daemon *daemon); static GFileMonitor * setup_monitor (Daemon *daemon, const gchar *path, FileChangeCallback *callback) { - g_autoptr(GFile) file = NULL; + g_autoptr (GFile) file = NULL; GFileMonitor *monitor; - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; if (!path) { return NULL; @@ -813,7 +821,8 @@ static gboolean register_accounts_daemon (Daemon *daemon) { DaemonPrivate *priv = daemon_get_instance_private (daemon); - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; priv->authority = polkit_authority_get_sync (NULL, &error); if (priv->authority == NULL) { @@ -844,7 +853,7 @@ register_accounts_daemon (Daemon *daemon) Daemon * daemon_new (void) { - g_autoptr(Daemon) daemon = NULL; + g_autoptr (Daemon) daemon = NULL; daemon = DAEMON (g_object_new (TYPE_DAEMON, NULL)); @@ -902,7 +911,7 @@ daemon_local_find_user_by_id (Daemon *daemon, pwent = getpwuid (uid); if (pwent == NULL) { - g_debug ("unable to lookup uid %d", (int)uid); + g_debug ("unable to lookup uid %d", (int) uid); return NULL; } @@ -952,6 +961,7 @@ User * daemon_local_get_automatic_login_user (Daemon *daemon) { DaemonPrivate *priv = daemon_get_instance_private (daemon); + return priv->autologin; } @@ -960,16 +970,15 @@ daemon_find_user_by_id (AccountsAccounts *accounts, GDBusMethodInvocation *context, gint64 uid) { - Daemon *daemon = (Daemon*)accounts; + Daemon *daemon = (Daemon *) accounts; User *user; user = daemon_local_find_user_by_id (daemon, uid); if (user) { accounts_accounts_complete_find_user_by_id (NULL, context, user_get_object_path (user)); - } - else { - throw_error (context, ERROR_FAILED, "Failed to look up user with uid %d.", (int)uid); + } else { + throw_error (context, ERROR_FAILED, "Failed to look up user with uid %d.", (int) uid); } return TRUE; @@ -980,15 +989,14 @@ daemon_find_user_by_name (AccountsAccounts *accounts, GDBusMethodInvocation *context, const gchar *name) { - Daemon *daemon = (Daemon*)accounts; + Daemon *daemon = (Daemon *) accounts; User *user; user = daemon_local_find_user_by_name (daemon, name); if (user) { accounts_accounts_complete_find_user_by_name (NULL, context, user_get_object_path (user)); - } - else { + } else { throw_error (context, ERROR_FAILED, "Failed to look up user with name %s.", name); } @@ -1020,7 +1028,8 @@ static void finish_list_cached_users (ListUserData *data) { DaemonPrivate *priv = daemon_get_instance_private (data->daemon); - g_autoptr(GPtrArray) object_paths = NULL; + + g_autoptr (GPtrArray) object_paths = NULL; GHashTableIter iter; gpointer key, value; @@ -1058,7 +1067,7 @@ static gboolean daemon_list_cached_users (AccountsAccounts *accounts, GDBusMethodInvocation *context) { - Daemon *daemon = (Daemon*)accounts; + Daemon *daemon = (Daemon *) accounts; DaemonPrivate *priv = daemon_get_instance_private (daemon); ListUserData *data; @@ -1067,8 +1076,7 @@ daemon_list_cached_users (AccountsAccounts *accounts, if (priv->reload_id > 0) { /* reload pending -- finish call in reload_users_timeout */ g_queue_push_tail (priv->pending_list_cached_users, data); - } - else { + } else { finish_list_cached_users (data); } @@ -1078,7 +1086,7 @@ daemon_list_cached_users (AccountsAccounts *accounts, static int sort_languages (gconstpointer element_1, gconstpointer element_2, - GHashTable *language_frequency_map) + GHashTable *language_frequency_map) { const char *language_1 = *(const char **) element_1; const char *language_2 = *(const char **) element_2; @@ -1098,12 +1106,14 @@ static gboolean daemon_get_users_languages (AccountsAccounts *accounts, GDBusMethodInvocation *context) { - Daemon *daemon = (Daemon*)accounts; + Daemon *daemon = (Daemon *) accounts; DaemonPrivate *priv = daemon_get_instance_private (daemon); - g_autoptr(GHashTable) language_frequency_map = NULL; + + g_autoptr (GHashTable) language_frequency_map = NULL; GHashTableIter users_iter, language_frequency_map_iter; gpointer key, value; - g_autoptr(GPtrArray) languages_array = NULL; + + g_autoptr (GPtrArray) languages_array = NULL; const char *system_locale; language_frequency_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); @@ -1156,7 +1166,7 @@ daemon_get_users_languages (AccountsAccounts *accounts, static const gchar * daemon_get_daemon_version (AccountsAccounts *object) { - return VERSION; + return VERSION; } static void @@ -1175,10 +1185,11 @@ cache_user (Daemon *daemon, } } -typedef struct { +typedef struct +{ gchar *user_name; gchar *real_name; - gint account_type; + gint account_type; } CreateUserData; static void @@ -1200,7 +1211,8 @@ daemon_create_user_authorized_cb (Daemon *daemon, { CreateUserData *cd = data; User *user; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; const gchar *argv[9]; g_autofree gchar *admin_groups = NULL; @@ -1216,13 +1228,13 @@ daemon_create_user_authorized_cb (Daemon *daemon, argv[2] = "-c"; argv[3] = cd->real_name; if (cd->account_type == ACCOUNT_TYPE_ADMINISTRATOR) { - g_auto(GStrv) admin_groups_array = NULL; - g_autoptr(GStrvBuilder) admin_groups_builder = g_strv_builder_new (); + g_auto (GStrv) admin_groups_array = NULL; + g_autoptr (GStrvBuilder) admin_groups_builder = g_strv_builder_new (); g_strv_builder_add (admin_groups_builder, ADMIN_GROUP); if (EXTRA_ADMIN_GROUPS != NULL && EXTRA_ADMIN_GROUPS[0] != '\0') { - g_auto(GStrv) extra_admin_groups = NULL; + g_auto (GStrv) extra_admin_groups = NULL; extra_admin_groups = g_strsplit (EXTRA_ADMIN_GROUPS, ",", 0); for (gsize i = 0; extra_admin_groups[i] != NULL; i++) { @@ -1240,13 +1252,11 @@ daemon_create_user_authorized_cb (Daemon *daemon, argv[6] = "--"; argv[7] = cd->user_name; argv[8] = NULL; - } - else if (cd->account_type == ACCOUNT_TYPE_STANDARD) { + } else if (cd->account_type == ACCOUNT_TYPE_STANDARD) { argv[4] = "--"; argv[5] = cd->user_name; argv[6] = NULL; - } - else { + } else { throw_error (context, ERROR_FAILED, "Don't know how to add user of type %d", cd->account_type); return; } @@ -1272,7 +1282,7 @@ daemon_create_user (AccountsAccounts *accounts, const gchar *real_name, gint account_type) { - Daemon *daemon = (Daemon*)accounts; + Daemon *daemon = (Daemon *) accounts; CreateUserData *data; data = g_new0 (CreateUserData, 1); @@ -1286,7 +1296,7 @@ daemon_create_user (AccountsAccounts *accounts, daemon_create_user_authorized_cb, context, data, - (GDestroyNotify)create_data_free); + (GDestroyNotify) create_data_free); return TRUE; } @@ -1298,7 +1308,7 @@ daemon_cache_user_authorized_cb (Daemon *daemon, gpointer data) { const gchar *user_name = data; - User *user; + User *user; sys_log (context, "cache user '%s'", user_name); @@ -1321,7 +1331,7 @@ daemon_cache_user (AccountsAccounts *accounts, GDBusMethodInvocation *context, const gchar *user_name) { - Daemon *daemon = (Daemon*)accounts; + Daemon *daemon = (Daemon *) accounts; /* Can't have a slash in the user name */ if (strchr (user_name, '/') != NULL) { @@ -1349,7 +1359,7 @@ daemon_uncache_user_authorized_cb (Daemon *daemon, gpointer data) { const gchar *user_name = data; - User *user; + User *user; sys_log (context, "uncache user '%s'", user_name); @@ -1378,7 +1388,7 @@ daemon_uncache_user (AccountsAccounts *accounts, GDBusMethodInvocation *context, const gchar *user_name) { - Daemon *daemon = (Daemon*)accounts; + Daemon *daemon = (Daemon *) accounts; daemon_local_check_auth (daemon, NULL, @@ -1391,8 +1401,9 @@ daemon_uncache_user (AccountsAccounts *accounts, return TRUE; } -typedef struct { - uid_t uid; +typedef struct +{ + uid_t uid; gboolean remove_files; } DeleteUserData; @@ -1405,7 +1416,8 @@ daemon_delete_user_authorized_cb (Daemon *daemon, { DaemonPrivate *priv = daemon_get_instance_private (daemon); DeleteUserData *ud = data; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; struct passwd *pwent; const gchar *argv[6]; const gchar *homedir; @@ -1451,8 +1463,7 @@ daemon_delete_user_authorized_cb (Daemon *daemon, argv[3] = "--"; argv[4] = pwent->pw_name; argv[5] = NULL; - } - else { + } else { argv[1] = "-f"; argv[2] = "--"; argv[3] = pwent->pw_name; @@ -1474,16 +1485,16 @@ daemon_delete_user (AccountsAccounts *accounts, gint64 uid, gboolean remove_files) { - Daemon *daemon = (Daemon*)accounts; + Daemon *daemon = (Daemon *) accounts; DeleteUserData *data; - if ((uid_t)uid == 0) { + if ((uid_t) uid == 0) { throw_error (context, ERROR_FAILED, "Refuse to delete root user"); return TRUE; } data = g_new0 (DeleteUserData, 1); - data->uid = (uid_t)uid; + data->uid = (uid_t) uid; data->remove_files = remove_files; daemon_local_check_auth (daemon, @@ -1492,18 +1503,19 @@ daemon_delete_user (AccountsAccounts *accounts, daemon_delete_user_authorized_cb, context, data, - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } -typedef struct { - Daemon *daemon; - User *user; - AuthorizedCallback authorized_cb; +typedef struct +{ + Daemon *daemon; + User *user; + AuthorizedCallback authorized_cb; GDBusMethodInvocation *context; - gpointer data; - GDestroyNotify destroy_notify; + gpointer data; + GDestroyNotify destroy_notify; } CheckAuthData; static void @@ -1527,21 +1539,19 @@ check_auth_cb (PolkitAuthority *authority, { CheckAuthData *cad = data; PolkitAuthorizationResult *result; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; gboolean is_authorized = FALSE; result = polkit_authority_check_authorization_finish (authority, res, &error); if (error) { throw_error (cad->context, ERROR_PERMISSION_DENIED, "Not authorized: %s", error->message); - } - else { + } else { if (polkit_authorization_result_get_is_authorized (result)) { is_authorized = TRUE; - } - else if (polkit_authorization_result_get_is_challenge (result)) { + } else if (polkit_authorization_result_get_is_challenge (result)) { throw_error (cad->context, ERROR_PERMISSION_DENIED, "Authentication is required"); - } - else { + } else { throw_error (cad->context, ERROR_PERMISSION_DENIED, "Not authorized"); } @@ -1549,10 +1559,10 @@ check_auth_cb (PolkitAuthority *authority, } if (is_authorized) { - (* cad->authorized_cb) (cad->daemon, - cad->user, - cad->context, - cad->data); + (*cad->authorized_cb) (cad->daemon, + cad->user, + cad->context, + cad->data); } check_auth_data_free (data); @@ -1561,18 +1571,18 @@ check_auth_cb (PolkitAuthority *authority, static gboolean get_allow_interaction (GDBusMethodInvocation *invocation) { - /* GLib 2.46 is when G_DBUS_MESSAGE_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION - * was first released. - */ -#if GLIB_CHECK_VERSION(2, 46, 0) - GDBusMessage *message = g_dbus_method_invocation_get_message (invocation); - GDBusMessageFlags message_flags = g_dbus_message_get_flags (message); - if (message_flags & G_DBUS_MESSAGE_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION) - return TRUE; - else - return FALSE; + /* GLib 2.46 is when G_DBUS_MESSAGE_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION + * was first released. + */ +#if GLIB_CHECK_VERSION (2, 46, 0) + GDBusMessage *message = g_dbus_method_invocation_get_message (invocation); + GDBusMessageFlags message_flags = g_dbus_message_get_flags (message); + if (message_flags & G_DBUS_MESSAGE_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION) + return TRUE; + else + return FALSE; #else - return TRUE; + return TRUE; #endif } @@ -1618,12 +1628,12 @@ daemon_local_check_auth (Daemon *daemon, } gboolean -load_autologin (Daemon *daemon, - gchar **name, - gboolean *enabled, - GError **error) +load_autologin (Daemon *daemon, + gchar **name, + gboolean *enabled, + GError **error) { - g_autoptr(GKeyFile) keyfile = NULL; + g_autoptr (GKeyFile) keyfile = NULL; GError *local_error = NULL; g_autofree gchar *string = NULL; @@ -1642,8 +1652,7 @@ load_autologin (Daemon *daemon, } if (string != NULL && (g_ascii_strcasecmp (string, "true") == 0 || strcmp (string, "1") == 0)) { *enabled = TRUE; - } - else { + } else { *enabled = FALSE; } @@ -1662,10 +1671,10 @@ save_autologin (Daemon *daemon, gboolean enabled, GError **error) { - g_autoptr(GKeyFile) keyfile = NULL; + g_autoptr (GKeyFile) keyfile = NULL; g_autofree gchar *data = NULL; gboolean result; - g_autoptr(GError) local_error = NULL; + g_autoptr (GError) local_error = NULL; keyfile = g_key_file_new (); if (!g_key_file_load_from_file (keyfile, @@ -1689,10 +1698,10 @@ save_autologin (Daemon *daemon, } gboolean -daemon_local_set_automatic_login (Daemon *daemon, - User *user, - gboolean enabled, - GError **error) +daemon_local_set_automatic_login (Daemon *daemon, + User *user, + gboolean enabled, + GError **error) { DaemonPrivate *priv = daemon_get_instance_private (daemon); @@ -1726,6 +1735,7 @@ GHashTable * daemon_get_extension_ifaces (Daemon *daemon) { DaemonPrivate *priv = daemon_get_instance_private (daemon); + return priv->extension_ifaces; } diff --git a/src/daemon.h b/src/daemon.h index 0555872..1e264a9 100644 --- a/src/daemon.h +++ b/src/daemon.h @@ -31,22 +31,25 @@ #define TYPE_DAEMON (daemon_get_type ()) #define DAEMON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_DAEMON, Daemon)) -#define DAEMON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), TYPE_DAEMON, DaemonClass)) +#define DAEMON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_DAEMON, DaemonClass)) #define IS_DAEMON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_DAEMON)) #define IS_DAEMON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_DAEMON)) #define DAEMON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_DAEMON, DaemonClass)) typedef struct DaemonClass DaemonClass; -struct Daemon { +struct Daemon +{ AccountsAccountsSkeleton parent; }; -struct DaemonClass { +struct DaemonClass +{ AccountsAccountsSkeletonClass parent_class; }; -typedef enum { +typedef enum +{ ERROR_FAILED, ERROR_USER_EXISTS, ERROR_USER_DOES_NOT_EXIST, @@ -61,16 +64,16 @@ GType error_get_type (void); #define TYPE_ERROR (error_get_type ()) GQuark error_quark (void); -GType daemon_get_type (void) G_GNUC_CONST; -Daemon *daemon_new (void); +GType daemon_get_type (void) G_GNUC_CONST; +Daemon *daemon_new (void); /* local methods */ -User *daemon_local_find_user_by_id (Daemon *daemon, - uid_t uid); -User *daemon_local_find_user_by_name (Daemon *daemon, - const gchar *name); -User *daemon_local_get_automatic_login_user (Daemon *daemon); +User *daemon_local_find_user_by_id (Daemon *daemon, + uid_t uid); +User *daemon_local_find_user_by_name (Daemon *daemon, + const gchar *name); +User *daemon_local_get_automatic_login_user (Daemon *daemon); typedef void (*AuthorizedCallback) (Daemon *daemon, User *user, @@ -85,10 +88,10 @@ void daemon_local_check_auth (Daemon *daemon, gpointer data, GDestroyNotify destroy_notify); -gboolean daemon_local_set_automatic_login (Daemon *daemon, - User *user, - gboolean enabled, - GError **error); +gboolean daemon_local_set_automatic_login (Daemon *daemon, + User *user, + gboolean enabled, + GError **error); GHashTable * daemon_read_extension_ifaces (void); GHashTable * daemon_get_extension_ifaces (Daemon *daemon); diff --git a/src/extensions.c b/src/extensions.c index 038dcb2..354f476 100644 --- a/src/extensions.c +++ b/src/extensions.c @@ -55,8 +55,8 @@ static void daemon_read_extension_file (GHashTable *ifaces, const gchar *filename) { - g_autoptr(GError) error = NULL; - g_autoptr(GDBusNodeInfo) node = NULL; + g_autoptr (GError) error = NULL; + g_autoptr (GDBusNodeInfo) node = NULL; g_autofree gchar *contents = NULL; gint i; @@ -71,8 +71,9 @@ daemon_read_extension_file (GHashTable *ifaces, return; } - for (i = 0; node->interfaces && node->interfaces[i]; i++) + for (i = 0; node->interfaces && node->interfaces[i]; i++) { daemon_maybe_add_extension_interface (ifaces, node->interfaces[i]); + } } static void @@ -125,8 +126,7 @@ daemon_read_extension_directory (GHashTable *ifaces, const gchar * const prefix = "../../dbus-1/interfaces/"; if (g_str_has_prefix (symlink, prefix) && g_str_equal (symlink + strlen (prefix), name)) { daemon_read_extension_file (ifaces, filename); - } - else { + } else { g_warning ("Found accounts service vendor extension symlink %s, but it must be exactly " "equal to '../../dbus-1/interfaces/%s' for forwards-compatibility reasons.", filename, name); diff --git a/src/fgetpwent.c b/src/fgetpwent.c index 3a2d77c..a62f847 100644 --- a/src/fgetpwent.c +++ b/src/fgetpwent.c @@ -17,92 +17,90 @@ * * Authors: Ryan Lortie <desrt@desrt.ca> */ - static gchar * fgetpwent_getline (FILE *fp) { - static GString str; - - /* We could be "more clever" here and avoid the strlen() but this is a - * clear case of dumb is better. - */ - str.len = 0; - while (!str.len || str.str[str.len - 1] != '\n') - { - if (str.allocated_len < str.len + 32) - { - str.allocated_len = str.len + 32; - str.str = g_realloc (str.str, str.allocated_len); + static GString str; + + /* We could be "more clever" here and avoid the strlen() but this is a + * clear case of dumb is better. + */ + str.len = 0; + while (!str.len || str.str[str.len - 1] != '\n') { + if (str.allocated_len < str.len + 32) { + str.allocated_len = str.len + 32; + str.str = g_realloc (str.str, str.allocated_len); + } + + if (fgets (str.str + str.len, str.allocated_len - str.len, fp) == NULL) + return NULL; + + str.len = strlen (str.str + str.len) + str.len; } - if (fgets (str.str + str.len, str.allocated_len - str.len, fp) == NULL) - return NULL; - - str.len = strlen (str.str + str.len) + str.len; - } - - /* chomp the '\n' */ - str.str[str.len - 1] = '\0'; + /* chomp the '\n' */ + str.str[str.len - 1] = '\0'; - return str.str; + return str.str; } static struct passwd * fgetpwent (FILE *fp) { - static struct passwd pw; - guint64 intval; - gchar *line; + static struct passwd pw; + guint64 intval; + gchar *line; - /* In case of failure, we ignore the line and start again */ + /* In case of failure, we ignore the line and start again */ again: - line = fgetpwent_getline (fp); - if (!line) - return NULL; - - while (g_ascii_isspace (*line)) - line++; - - /* comments, empty lines */ - if (line[0] == '#' || line[0] == '\0') - goto again; - - /* username */ - pw.pw_name = line; - if (!(line = strchr (line, ':'))) - goto again; - *line++ = '\0'; - - /* password */ - pw.pw_passwd = line; - if (!(line = strchr (line, ':'))) - goto again; - *line++ = '\0'; - - /* uid */ - pw.pw_uid = intval = g_ascii_strtoull (line, &line, 10); - if (pw.pw_uid != intval || *line++ != ':') - goto again; - - /* gid */ - pw.pw_gid = intval = g_ascii_strtoull (line, &line, 10); - if (pw.pw_gid != intval || *line++ != ':') - goto again; - - /* gecos */ - pw.pw_gecos = line; - if (!(line = strchr (line, ':'))) - goto again; - *line++ = '\0'; - - /* home directory */ - pw.pw_dir = line; - if (!(line = strchr (line, ':'))) - goto again; - *line++ = '\0'; - - /* shell */ - pw.pw_shell = line; - - return &pw; + line = fgetpwent_getline (fp); + if (!line) + return NULL; + + while (g_ascii_isspace (*line)) { + line++; + } + + /* comments, empty lines */ + if (line[0] == '#' || line[0] == '\0') + goto again; + + /* username */ + pw.pw_name = line; + if (!(line = strchr (line, ':'))) + goto again; + *line++ = '\0'; + + /* password */ + pw.pw_passwd = line; + if (!(line = strchr (line, ':'))) + goto again; + *line++ = '\0'; + + /* uid */ + pw.pw_uid = intval = g_ascii_strtoull (line, &line, 10); + if (pw.pw_uid != intval || *line++ != ':') + goto again; + + /* gid */ + pw.pw_gid = intval = g_ascii_strtoull (line, &line, 10); + if (pw.pw_gid != intval || *line++ != ':') + goto again; + + /* gecos */ + pw.pw_gecos = line; + if (!(line = strchr (line, ':'))) + goto again; + *line++ = '\0'; + + /* home directory */ + pw.pw_dir = line; + if (!(line = strchr (line, ':'))) + goto again; + *line++ = '\0'; + + /* shell */ + pw.pw_shell = line; + + return &pw; } diff --git a/src/libaccountsservice/act-user-manager.c b/src/libaccountsservice/act-user-manager.c index b1b7d7b..3b1a774 100644 --- a/src/libaccountsservice/act-user-manager.c +++ b/src/libaccountsservice/act-user-manager.c @@ -85,7 +85,8 @@ #define ACCOUNTS_PATH "/org/freedesktop/Accounts" #define ACCOUNTS_INTERFACE "org.freedesktop.Accounts" -typedef enum { +typedef enum +{ ACT_USER_MANAGER_SEAT_STATE_UNLOADED = 0, ACT_USER_MANAGER_SEAT_STATE_GET_SESSION_ID, ACT_USER_MANAGER_SEAT_STATE_GET_ID, @@ -95,16 +96,17 @@ typedef enum { typedef struct { - ActUserManagerSeatState state; - char *id; - char *session_id; - guint load_idle_id; - sd_login_monitor *session_monitor; - GInputStream *session_monitor_stream; - guint session_monitor_source_id; + ActUserManagerSeatState state; + char *id; + char *session_id; + guint load_idle_id; + sd_login_monitor *session_monitor; + GInputStream *session_monitor_stream; + guint session_monitor_source_id; } ActUserManagerSeat; -typedef enum { +typedef enum +{ ACT_USER_MANAGER_NEW_SESSION_STATE_UNLOADED = 0, ACT_USER_MANAGER_NEW_SESSION_STATE_GET_UID, ACT_USER_MANAGER_NEW_SESSION_STATE_GET_X11_DISPLAY, @@ -114,69 +116,73 @@ typedef enum { typedef struct { - ActUserManager *manager; - ActUserManagerNewSessionState state; - char *id; - GCancellable *cancellable; - uid_t uid; - char *x11_display; - gsize pending_calls; + ActUserManager *manager; + ActUserManagerNewSessionState state; + char *id; + GCancellable *cancellable; + uid_t uid; + char *x11_display; + gsize pending_calls; } ActUserManagerNewSession; -typedef enum { +typedef enum +{ ACT_USER_MANAGER_GET_USER_STATE_UNFETCHED = 0, ACT_USER_MANAGER_GET_USER_STATE_WAIT_FOR_LOADED, ACT_USER_MANAGER_GET_USER_STATE_ASK_ACCOUNTS_SERVICE, ACT_USER_MANAGER_GET_USER_STATE_FETCHED } ActUserManagerGetUserState; -typedef enum { +typedef enum +{ ACT_USER_MANAGER_FETCH_USER_FROM_USERNAME_REQUEST, ACT_USER_MANAGER_FETCH_USER_FROM_ID_REQUEST, } ActUserManagerFetchUserRequestType; typedef struct { - ActUserManager *manager; - ActUserManagerGetUserState state; - ActUser *user; + ActUserManager *manager; + ActUserManagerGetUserState state; + ActUser *user; ActUserManagerFetchUserRequestType type; - union { - char *username; - uid_t uid; + union + { + char *username; + uid_t uid; }; - char *object_path; - char *description; + char *object_path; + char *description; } ActUserManagerFetchUserRequest; typedef struct { - GHashTable *normal_users_by_name; - GHashTable *system_users_by_name; - GHashTable *users_by_object_path; /* (element-type utf8 ActUser) (owned) */ - GHashTable *sessions; - GDBusConnection *connection; - AccountsAccounts *accounts_proxy; + GHashTable *normal_users_by_name; + GHashTable *system_users_by_name; + GHashTable *users_by_object_path; /* (element-type utf8 ActUser) (owned) */ + GHashTable *sessions; + GDBusConnection *connection; + AccountsAccounts *accounts_proxy; - ActUserManagerSeat seat; + ActUserManagerSeat seat; - GSList *new_sessions; - GSList *new_users; /* (element-type ActUser) (owned) */ - GSList *new_users_inhibiting_load; /* (element-type ActUser) (unowned) */ - GSList *fetch_user_requests; + GSList *new_sessions; + GSList *new_users; /* (element-type ActUser) (owned) */ + GSList *new_users_inhibiting_load; /* (element-type ActUser) (unowned) */ + GSList *fetch_user_requests; - GSList *exclude_usernames; - GSList *include_usernames; + GSList *exclude_usernames; + GSList *include_usernames; - guint load_id; + guint load_id; - gboolean is_loaded; - gboolean has_multiple_users; - gboolean getting_sessions; - gboolean list_cached_users_done; + gboolean is_loaded; + gboolean has_multiple_users; + gboolean getting_sessions; + gboolean list_cached_users_done; } ActUserManagerPrivate; -enum { +enum +{ PROP_0, PROP_INCLUDE_USERNAMES_LIST, PROP_EXCLUDE_USERNAMES_LIST, @@ -184,7 +190,8 @@ enum { PROP_HAS_MULTIPLE_USERS }; -enum { +enum +{ USER_ADDED, USER_REMOVED, USER_IS_LOGGED_IN_CHANGED, @@ -192,50 +199,52 @@ enum { LAST_SIGNAL }; -static guint signals [LAST_SIGNAL] = { 0, }; +static guint signals[LAST_SIGNAL] = { 0, }; static void act_user_manager_class_init (ActUserManagerClass *klass); -static void act_user_manager_init (ActUserManager *user_manager); -static void act_user_manager_finalize (GObject *object); - -static gboolean ensure_accounts_proxy (ActUserManager *manager); -static gboolean load_seat_incrementally (ActUserManager *manager); -static void unload_seat (ActUserManager *manager); -static void load_users (ActUserManager *manager); -static void load_user (ActUserManager *manager, - const char *username); +static void act_user_manager_init (ActUserManager *user_manager); +static void act_user_manager_finalize (GObject *object); + +static gboolean ensure_accounts_proxy (ActUserManager *manager); +static gboolean load_seat_incrementally (ActUserManager *manager); +static void unload_seat (ActUserManager *manager); +static void load_users (ActUserManager *manager); +static void load_user (ActUserManager *manager, + const char *username); static void act_user_manager_queue_load (ActUserManager *manager); -static void queue_load_seat (ActUserManager *manager); +static void queue_load_seat (ActUserManager *manager); static void load_new_session_incrementally (ActUserManagerNewSession *new_session); -static void set_is_loaded (ActUserManager *manager, gboolean is_loaded); +static void set_is_loaded (ActUserManager *manager, + gboolean is_loaded); static void on_new_user_loaded (ActUser *user, GParamSpec *pspec, ActUserManager *manager); static void give_up (ActUserManager *manager, ActUserManagerFetchUserRequest *request); -static void fetch_user_incrementally (ActUserManagerFetchUserRequest *request); +static void fetch_user_incrementally (ActUserManagerFetchUserRequest *request); -static void maybe_set_is_loaded (ActUserManager *manager); -static void update_user (ActUserManager *manager, - ActUser *user); +static void maybe_set_is_loaded (ActUserManager *manager); +static void update_user (ActUserManager *manager, + ActUser *user); static gpointer user_manager_object = NULL; G_DEFINE_TYPE_WITH_PRIVATE (ActUserManager, act_user_manager, G_TYPE_OBJECT) static const GDBusErrorEntry error_entries[] = { - { ACT_USER_MANAGER_ERROR_FAILED, "org.freedesktop.Accounts.Error.Failed" }, - { ACT_USER_MANAGER_ERROR_USER_EXISTS, "org.freedesktop.Accounts.Error.UserExists" }, + { ACT_USER_MANAGER_ERROR_FAILED, "org.freedesktop.Accounts.Error.Failed" }, + { ACT_USER_MANAGER_ERROR_USER_EXISTS, "org.freedesktop.Accounts.Error.UserExists" }, { ACT_USER_MANAGER_ERROR_USER_DOES_NOT_EXIST, "org.freedesktop.Accounts.Error.UserDoesNotExist" }, { ACT_USER_MANAGER_ERROR_PERMISSION_DENIED, "org.freedesktop.Accounts.Error.PermissionDenied" }, - { ACT_USER_MANAGER_ERROR_NOT_SUPPORTED, "org.freedesktop.Accounts.Error.NotSupported" } + { ACT_USER_MANAGER_ERROR_NOT_SUPPORTED, "org.freedesktop.Accounts.Error.NotSupported" } }; GQuark act_user_manager_error_quark (void) { static volatile gsize ret = 0; + if (ret == 0) { g_dbus_error_register_error_domain ("act_user_manager_error", &ret, @@ -251,9 +260,9 @@ activate_systemd_session_id (ActUserManager *manager, const char *seat_id, const char *session_id) { - g_autoptr(GDBusConnection) connection = NULL; - g_autoptr(GVariant) reply = NULL; - g_autoptr(GError) error = NULL; + g_autoptr (GDBusConnection) connection = NULL; + g_autoptr (GVariant) reply = NULL; + g_autoptr (GError) error = NULL; connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); if (connection == NULL) { @@ -286,15 +295,15 @@ static gboolean session_is_login_window (ActUserManager *manager, const char *session_id) { - int res; + int res; g_autofree gchar *session_class = NULL; res = sd_session_get_class (session_id, &session_class); if (res < 0) { - g_debug ("failed to determine class of session %s: %s", - session_id, - strerror (-res)); - return FALSE; + g_debug ("failed to determine class of session %s: %s", + session_id, + strerror (-res)); + return FALSE; } return g_strcmp0 (session_class, "greeter") == 0; @@ -305,7 +314,7 @@ session_is_on_our_seat (ActUserManager *manager, const char *session_id) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - int res; + int res; g_autofree gchar *session_seat = NULL; res = sd_session_get_seat (session_id, &session_seat); @@ -334,7 +343,8 @@ act_user_manager_goto_login_session (ActUserManager *manager) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); gboolean res; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; g_return_val_if_fail (ACT_IS_USER_MANAGER (manager), FALSE); g_return_val_if_fail (priv->is_loaded, FALSE); @@ -349,7 +359,6 @@ act_user_manager_goto_login_session (ActUserManager *manager) } return res; - } static gboolean @@ -505,7 +514,7 @@ queue_load_seat_incrementally (ActUserManager *manager) ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); if (priv->seat.load_idle_id == 0) { - priv->seat.load_idle_id = g_idle_add ((GSourceFunc) load_seat_incrementally, manager); + priv->seat.load_idle_id = g_idle_add ((GSourceFunc) load_seat_incrementally, manager); } } @@ -567,7 +576,8 @@ static gboolean _find_graphical_systemd_session (char **session_id) { char *local_session_id = NULL; - g_auto(GStrv) sessions = NULL; + + g_auto (GStrv) sessions = NULL; int n_sessions; /* filter level 0 means to include inactive and active sessions @@ -615,7 +625,7 @@ static void get_seat_id_for_current_session (ActUserManager *manager) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - int res; + int res; g_autofree gchar *seat_id = NULL; if (priv->seat.session_id == NULL) { @@ -653,8 +663,8 @@ username_in_exclude_list (ActUserManager *manager, const char *username) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - GSList *found; - gboolean ret = FALSE; + GSList *found; + gboolean ret = FALSE; if (priv->exclude_usernames != NULL) { found = g_slist_find_custom (priv->exclude_usernames, @@ -774,7 +784,6 @@ remove_user (ActUserManager *manager, if (act_user_get_user_name (user) != NULL) { g_hash_table_remove (priv->normal_users_by_name, act_user_get_user_name (user)); g_hash_table_remove (priv->system_users_by_name, act_user_get_user_name (user)); - } if (priv->is_loaded && priv->list_cached_users_done) { @@ -1024,7 +1033,8 @@ on_new_user_in_accounts_service (GDBusProxy *proxy, { ActUserManager *manager = ACT_USER_MANAGER (user_data); ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - g_autoptr(ActUser) user = NULL; + + g_autoptr (ActUser) user = NULL; /* Only track user changes if the user has requested a list * of users */ @@ -1048,8 +1058,8 @@ on_user_removed_in_accounts_service (GDBusProxy *proxy, { ActUserManager *manager = ACT_USER_MANAGER (user_data); ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - ActUser *user; - GSList *node; + ActUser *user; + GSList *node; /* Only track user changes if the user has requested a list * of users */ @@ -1100,10 +1110,10 @@ unload_new_session (ActUserManagerNewSession *new_session) ActUserManager *manager = new_session->manager; ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - /* From here down to the check on pending_calls is idempotent, - * like GObject dispose(); it can be called twice if the new session - * is unloaded while there are still async calls pending. - */ + /* From here down to the check on pending_calls is idempotent, + * like GObject dispose(); it can be called twice if the new session + * is unloaded while there are still async calls pending. + */ if (new_session->cancellable != NULL && !g_cancellable_is_cancelled (new_session->cancellable)) { @@ -1128,7 +1138,7 @@ unload_new_session (ActUserManagerNewSession *new_session) if (new_session->pending_calls != 0) { /* don't "finalize" until we run out of pending calls - * that have us as their user_data */ + * that have us as their user_data */ return; } @@ -1139,7 +1149,7 @@ static void get_uid_for_new_session (ActUserManagerNewSession *new_session) { uid_t uid; - int res; + int res; res = sd_session_get_uid (new_session->id, &uid); @@ -1158,14 +1168,15 @@ get_uid_for_new_session (ActUserManagerNewSession *new_session) } static void -on_find_user_by_name_finished (GObject *object, - GAsyncResult *result, - gpointer data) +on_find_user_by_name_finished (GObject *object, + GAsyncResult *result, + gpointer data) { AccountsAccounts *proxy = ACCOUNTS_ACCOUNTS (object); ActUserManagerFetchUserRequest *request = data; - g_autoptr(GError) error = NULL; - char *user; + + g_autoptr (GError) error = NULL; + char *user; if (!accounts_accounts_call_find_user_by_name_finish (proxy, &user, result, &error)) { if (error != NULL) { @@ -1188,14 +1199,15 @@ on_find_user_by_name_finished (GObject *object, } static void -on_find_user_by_id_finished (GObject *object, - GAsyncResult *result, - gpointer data) +on_find_user_by_id_finished (GObject *object, + GAsyncResult *result, + gpointer data) { AccountsAccounts *proxy = ACCOUNTS_ACCOUNTS (object); ActUserManagerFetchUserRequest *request = data; - g_autoptr(GError) error = NULL; - char *user; + + g_autoptr (GError) error = NULL; + char *user; if (!accounts_accounts_call_find_user_by_id_finish (proxy, &user, result, &error)) { if (error != NULL) { @@ -1229,25 +1241,24 @@ find_user_in_accounts_service (ActUserManager *manager, request->description); switch (request->type) { - case ACT_USER_MANAGER_FETCH_USER_FROM_USERNAME_REQUEST: - accounts_accounts_call_find_user_by_name (priv->accounts_proxy, - request->username, - G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION, - -1, - NULL, - on_find_user_by_name_finished, - request); - break; - case ACT_USER_MANAGER_FETCH_USER_FROM_ID_REQUEST: - accounts_accounts_call_find_user_by_id (priv->accounts_proxy, - request->uid, - G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION, - -1, - NULL, - on_find_user_by_id_finished, - request); - break; - + case ACT_USER_MANAGER_FETCH_USER_FROM_USERNAME_REQUEST: + accounts_accounts_call_find_user_by_name (priv->accounts_proxy, + request->username, + G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION, + -1, + NULL, + on_find_user_by_name_finished, + request); + break; + case ACT_USER_MANAGER_FETCH_USER_FROM_ID_REQUEST: + accounts_accounts_call_find_user_by_id (priv->accounts_proxy, + request->uid, + G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION, + -1, + NULL, + on_find_user_by_id_finished, + request); + break; } } @@ -1264,8 +1275,8 @@ set_is_loaded (ActUserManager *manager, } static void -load_user_paths (ActUserManager *manager, - const char * const * user_paths) +load_user_paths (ActUserManager *manager, + const char * const *user_paths) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); @@ -1279,7 +1290,7 @@ load_user_paths (ActUserManager *manager, g_debug ("ActUserManager: ListCachedUsers finished, will set loaded property after list is fully loaded"); for (i = 0; user_paths[i] != NULL; i++) { - g_autoptr(ActUser) user = NULL; + g_autoptr (ActUser) user = NULL; user = add_new_user_for_object_path (user_paths[i], manager); if (!priv->is_loaded) { @@ -1300,7 +1311,7 @@ load_included_usernames (ActUserManager *manager) /* Add users who are specifically included */ for (l = priv->include_usernames; l != NULL; l = l->next) { - g_debug ("ActUserManager: Adding included user %s", (char *)l->data); + g_debug ("ActUserManager: Adding included user %s", (char *) l->data); load_user (manager, l->data); } @@ -1345,7 +1356,7 @@ get_x11_display_for_new_session (ActUserManagerNewSession *new_session) new_session->id, x11_display); } - done: +done: new_session->x11_display = g_strdup (x11_display); new_session->state++; @@ -1356,8 +1367,8 @@ static void maybe_add_new_session (ActUserManagerNewSession *new_session) { ActUserManager *manager; - ActUser *user; - gboolean is_ours; + ActUser *user; + gboolean is_ours; manager = ACT_USER_MANAGER (new_session->manager); @@ -1407,7 +1418,7 @@ match_new_session_cmpfunc (gconstpointer a, gconstpointer b) { ActUserManagerNewSession *new_session; - const char *session_id; + const char *session_id; new_session = (ActUserManagerNewSession *) a; session_id = (const char *) b; @@ -1420,8 +1431,8 @@ _remove_session (ActUserManager *manager, const char *session_id) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - ActUser *user; - GSList *found; + ActUser *user; + GSList *found; g_debug ("ActUserManager: Session removed: %s", session_id); @@ -1562,10 +1573,11 @@ _remove_stale_systemd_sessions (ActUserManager *manager, static void reload_systemd_sessions (ActUserManager *manager) { - int res; - int i; - g_auto(GStrv) sessions = NULL; - g_autoptr(GHashTable) systemd_sessions = NULL; + int res; + int i; + + g_auto (GStrv) sessions = NULL; + g_autoptr (GHashTable) systemd_sessions = NULL; res = sd_get_sessions (&sessions); if (res < 0) { @@ -1577,7 +1589,7 @@ reload_systemd_sessions (ActUserManager *manager) g_str_equal); if (sessions != NULL) { - for (i = 0; sessions[i] != NULL; i ++) { + for (i = 0; sessions[i] != NULL; i++) { g_autofree gchar *state = NULL; g_autofree gchar *session_class = NULL; @@ -1605,7 +1617,6 @@ reload_systemd_sessions (ActUserManager *manager) g_hash_table_insert (systemd_sessions, sessions[i], NULL); } - } _add_new_systemd_sessions (manager, systemd_sessions); @@ -1617,6 +1628,7 @@ on_session_monitor_event (GPollableInputStream *stream, ActUserManager *manager) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); + sd_login_monitor_flush (priv->seat.session_monitor); reload_systemd_sessions (manager); return TRUE; @@ -1773,7 +1785,6 @@ fetch_user_incrementally (ActUserManagerFetchUserRequest *request) request->description); g_signal_connect (manager, "notify::is-loaded", G_CALLBACK (on_user_manager_maybe_ready_for_request), request); - } break; @@ -1795,7 +1806,7 @@ fetch_user_incrementally (ActUserManagerFetchUserRequest *request) g_assert_not_reached (); } - if (request->state == ACT_USER_MANAGER_GET_USER_STATE_FETCHED || + if (request->state == ACT_USER_MANAGER_GET_USER_STATE_FETCHED || request->state == ACT_USER_MANAGER_GET_USER_STATE_UNFETCHED) { g_debug ("ActUserManager: finished handling request for %s", request->description); @@ -1893,8 +1904,9 @@ load_user (ActUserManager *manager, const char *username) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - g_autoptr(ActUser) user = NULL; - g_autoptr(GError) error = NULL; + + g_autoptr (ActUser) user = NULL; + g_autoptr (GError) error = NULL; char *object_path = NULL; gboolean user_found; @@ -2075,8 +2087,9 @@ static void load_users (ActUserManager *manager) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - g_autoptr(GError) error = NULL; - g_auto(GStrv) user_paths = NULL; + + g_autoptr (GError) error = NULL; + g_auto (GStrv) user_paths = NULL; gboolean could_list = FALSE; if (!ensure_accounts_proxy (manager)) { @@ -2157,14 +2170,14 @@ queue_load_seat (ActUserManager *manager) return; } - priv->load_id = g_idle_add ((GSourceFunc)load_idle, manager); + priv->load_id = g_idle_add ((GSourceFunc) load_idle, manager); } static void -act_user_manager_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +act_user_manager_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { ActUserManager *manager = ACT_USER_MANAGER (object); ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); @@ -2215,10 +2228,10 @@ set_exclude_usernames (ActUserManager *manager, } static void -act_user_manager_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +act_user_manager_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { ActUserManager *self; @@ -2243,7 +2256,7 @@ act_user_manager_set_property (GObject *object, static void act_user_manager_class_init (ActUserManagerClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = act_user_manager_finalize; object_class->get_property = act_user_manager_get_property; @@ -2360,9 +2373,9 @@ act_user_manager_queue_load (ActUserManager *manager) } static void -on_name_owner_changed (GObject *object, +on_name_owner_changed (GObject *object, GParamSpec *pspec, - gpointer user_data) + gpointer user_data) { ActUserManager *manager = ACT_USER_MANAGER (user_data); GDBusProxy *accounts_proxy = G_DBUS_PROXY (object); @@ -2380,7 +2393,8 @@ static gboolean ensure_accounts_proxy (ActUserManager *manager) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; if (priv->accounts_proxy != NULL) { return TRUE; @@ -2425,7 +2439,8 @@ static void act_user_manager_init (ActUserManager *manager) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; act_user_manager_error_quark (); /* register dbus errors */ @@ -2469,7 +2484,7 @@ act_user_manager_finalize (GObject *object) { ActUserManager *manager = ACT_USER_MANAGER (object); ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); - GSList *node; + GSList *node; g_debug ("ActUserManager: finalizing user manager"); @@ -2486,7 +2501,7 @@ act_user_manager_finalize (GObject *object) node = priv->new_users; while (node != NULL) { ActUser *user; - GSList *next_node; + GSList *next_node; user = ACT_USER (node->data); next_node = node->next; @@ -2578,6 +2593,7 @@ gboolean act_user_manager_no_service (ActUserManager *manager) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); + return priv->accounts_proxy == NULL; } @@ -2594,11 +2610,11 @@ act_user_manager_no_service (ActUserManager *manager) * Returns: (transfer full): user object */ ActUser * -act_user_manager_create_user (ActUserManager *manager, - const char *username, - const char *fullname, - ActUserAccountType accounttype, - GError **error) +act_user_manager_create_user (ActUserManager *manager, + const char *username, + const char *fullname, + ActUserAccountType accounttype, + GError **error) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GError *local_error = NULL; @@ -2658,13 +2674,13 @@ act_user_manager_async_complete_handler (GObject *source, * Since: 0.6.27 */ void -act_user_manager_create_user_async (ActUserManager *manager, - const char *username, - const char *fullname, - ActUserAccountType accounttype, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) +act_user_manager_create_user_async (ActUserManager *manager, + const char *username, + const char *fullname, + ActUserAccountType accounttype, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GTask *task; @@ -2706,9 +2722,9 @@ act_user_manager_create_user_async (ActUserManager *manager, * Since: 0.6.27 */ ActUser * -act_user_manager_create_user_finish (ActUserManager *manager, - GAsyncResult *result, - GError **error) +act_user_manager_create_user_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GAsyncResult *inner_result; @@ -2741,9 +2757,9 @@ act_user_manager_create_user_finish (ActUserManager *manager, * Returns: (transfer full): user object */ ActUser * -act_user_manager_cache_user (ActUserManager *manager, - const char *username, - GError **error) +act_user_manager_cache_user (ActUserManager *manager, + const char *username, + GError **error) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GError *local_error = NULL; @@ -2790,11 +2806,11 @@ act_user_manager_cache_user (ActUserManager *manager, * Since: 0.6.27 */ void -act_user_manager_cache_user_async (ActUserManager *manager, - const char *username, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) +act_user_manager_cache_user_async (ActUserManager *manager, + const char *username, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GTask *task; @@ -2831,9 +2847,9 @@ act_user_manager_cache_user_async (ActUserManager *manager, * Since: 0.6.27 */ ActUser * -act_user_manager_cache_user_finish (ActUserManager *manager, - GAsyncResult *result, - GError **error) +act_user_manager_cache_user_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GAsyncResult *inner_result; @@ -2869,9 +2885,9 @@ act_user_manager_cache_user_finish (ActUserManager *manager, * Returns: %TRUE if successful, otherwise %FALSE */ gboolean -act_user_manager_uncache_user (ActUserManager *manager, - const char *username, - GError **error) +act_user_manager_uncache_user (ActUserManager *manager, + const char *username, + GError **error) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GError *local_error = NULL; @@ -2914,11 +2930,11 @@ act_user_manager_uncache_user (ActUserManager *manager, * Since: 0.6.39 */ void -act_user_manager_uncache_user_async (ActUserManager *manager, - const char *username, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) +act_user_manager_uncache_user_async (ActUserManager *manager, + const char *username, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GTask *task; @@ -2956,9 +2972,9 @@ act_user_manager_uncache_user_async (ActUserManager *manager, * Since: 0.6.39 */ gboolean -act_user_manager_uncache_user_finish (ActUserManager *manager, - GAsyncResult *result, - GError **error) +act_user_manager_uncache_user_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GAsyncResult *inner_result; @@ -2993,10 +3009,10 @@ act_user_manager_uncache_user_finish (ActUserManager *manager, * Returns: %TRUE if the user account was successfully deleted */ gboolean -act_user_manager_delete_user (ActUserManager *manager, - ActUser *user, - gboolean remove_files, - GError **error) +act_user_manager_delete_user (ActUserManager *manager, + ActUser *user, + gboolean remove_files, + GError **error) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GError *local_error = NULL; @@ -3040,12 +3056,12 @@ act_user_manager_delete_user (ActUserManager *manager, * Since: 0.6.27 */ void -act_user_manager_delete_user_async (ActUserManager *manager, - ActUser *user, - gboolean remove_files, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) +act_user_manager_delete_user_async (ActUserManager *manager, + ActUser *user, + gboolean remove_files, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GTask *task; @@ -3083,9 +3099,9 @@ act_user_manager_delete_user_async (ActUserManager *manager, * Since: 0.6.27 */ gboolean -act_user_manager_delete_user_finish (ActUserManager *manager, - GAsyncResult *result, - GError **error) +act_user_manager_delete_user_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error) { ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); GAsyncResult *inner_result; diff --git a/src/libaccountsservice/act-user-manager.h b/src/libaccountsservice/act-user-manager.h index 6355167..e19055b 100644 --- a/src/libaccountsservice/act-user-manager.h +++ b/src/libaccountsservice/act-user-manager.h @@ -27,7 +27,7 @@ #define ACT_TYPE_USER_MANAGER (act_user_manager_get_type ()) #define ACT_USER_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ACT_TYPE_USER_MANAGER, ActUserManager)) -#define ACT_USER_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ACT_TYPE_USER_MANAGER, ActUserManagerClass)) +#define ACT_USER_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), ACT_TYPE_USER_MANAGER, ActUserManagerClass)) #define ACT_IS_USER_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ACT_TYPE_USER_MANAGER)) #define ACT_IS_USER_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ACT_TYPE_USER_MANAGER)) #define ACT_USER_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ACT_TYPE_USER_MANAGER, ActUserManagerClass)) @@ -45,16 +45,16 @@ struct _ActUserManager struct _ActUserManagerClass { - GObjectClass parent_class; - - void (* user_added) (ActUserManager *user_manager, - ActUser *user); - void (* user_removed) (ActUserManager *user_manager, - ActUser *user); - void (* user_is_logged_in_changed) (ActUserManager *user_manager, - ActUser *user); - void (* user_changed) (ActUserManager *user_manager, - ActUser *user); + GObjectClass parent_class; + + void (* user_added) (ActUserManager *user_manager, + ActUser *user); + void (* user_removed) (ActUserManager *user_manager, + ActUser *user); + void (* user_is_logged_in_changed) (ActUserManager *user_manager, + ActUser *user); + void (* user_changed) (ActUserManager *user_manager, + ActUser *user); }; typedef enum ActUserManagerError @@ -68,79 +68,79 @@ typedef enum ActUserManagerError #define ACT_USER_MANAGER_ERROR act_user_manager_error_quark () -GQuark act_user_manager_error_quark (void); -GType act_user_manager_get_type (void); +GQuark act_user_manager_error_quark (void); +GType act_user_manager_get_type (void); -ActUserManager * act_user_manager_get_default (void); +ActUserManager * act_user_manager_get_default (void); -gboolean act_user_manager_no_service (ActUserManager *manager); -GSList * act_user_manager_list_users (ActUserManager *manager); -ActUser * act_user_manager_get_user (ActUserManager *manager, - const char *username); -ActUser * act_user_manager_get_user_by_id (ActUserManager *manager, - uid_t id); +gboolean act_user_manager_no_service (ActUserManager *manager); +GSList * act_user_manager_list_users (ActUserManager *manager); +ActUser * act_user_manager_get_user (ActUserManager *manager, + const char *username); +ActUser * act_user_manager_get_user_by_id (ActUserManager *manager, + uid_t id); gboolean act_user_manager_activate_user_session (ActUserManager *manager, ActUser *user); -gboolean act_user_manager_can_switch (ActUserManager *manager); - -gboolean act_user_manager_goto_login_session (ActUserManager *manager); - -ActUser * act_user_manager_create_user (ActUserManager *manager, - const char *username, - const char *fullname, - ActUserAccountType accounttype, - GError **error); -void act_user_manager_create_user_async (ActUserManager *manager, - const gchar *username, - const gchar *fullname, - ActUserAccountType accounttype, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -ActUser * act_user_manager_create_user_finish (ActUserManager *manager, - GAsyncResult *result, - GError **error); - -ActUser * act_user_manager_cache_user (ActUserManager *manager, - const char *username, - GError **error); -void act_user_manager_cache_user_async (ActUserManager *manager, - const gchar *username, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -ActUser * act_user_manager_cache_user_finish (ActUserManager *manager, - GAsyncResult *result, - GError **error); - -gboolean act_user_manager_uncache_user (ActUserManager *manager, - const char *username, - GError **error); -void act_user_manager_uncache_user_async (ActUserManager *manager, - const gchar *username, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean act_user_manager_uncache_user_finish (ActUserManager *manager, - GAsyncResult *result, - GError **error); - -gboolean act_user_manager_delete_user (ActUserManager *manager, - ActUser *user, - gboolean remove_files, - GError **error); -void act_user_manager_delete_user_async (ActUserManager *manager, - ActUser *user, - gboolean remove_files, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean act_user_manager_delete_user_finish (ActUserManager *manager, - GAsyncResult *result, - GError **error); - -#if GLIB_CHECK_VERSION(2, 44, 0) +gboolean act_user_manager_can_switch (ActUserManager *manager); + +gboolean act_user_manager_goto_login_session (ActUserManager *manager); + +ActUser * act_user_manager_create_user (ActUserManager *manager, + const char *username, + const char *fullname, + ActUserAccountType accounttype, + GError **error); +void act_user_manager_create_user_async (ActUserManager *manager, + const gchar *username, + const gchar *fullname, + ActUserAccountType accounttype, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +ActUser * act_user_manager_create_user_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error); + +ActUser * act_user_manager_cache_user (ActUserManager *manager, + const char *username, + GError **error); +void act_user_manager_cache_user_async (ActUserManager *manager, + const gchar *username, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +ActUser * act_user_manager_cache_user_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error); + +gboolean act_user_manager_uncache_user (ActUserManager *manager, + const char *username, + GError **error); +void act_user_manager_uncache_user_async (ActUserManager *manager, + const gchar *username, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean act_user_manager_uncache_user_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error); + +gboolean act_user_manager_delete_user (ActUserManager *manager, + ActUser *user, + gboolean remove_files, + GError **error); +void act_user_manager_delete_user_async (ActUserManager *manager, + ActUser *user, + gboolean remove_files, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean act_user_manager_delete_user_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error); + +#if GLIB_CHECK_VERSION (2, 44, 0) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ActUserManager, g_object_unref) #endif diff --git a/src/libaccountsservice/act-user-private.h b/src/libaccountsservice/act-user-private.h index f83eb51..f68d0d6 100644 --- a/src/libaccountsservice/act-user-private.h +++ b/src/libaccountsservice/act-user-private.h @@ -27,22 +27,22 @@ #include "act-user.h" -void _act_user_update_from_object_path (ActUser *user, - const char *object_path); -void _act_user_update_as_nonexistent (ActUser *user); -void _act_user_update_login_frequency (ActUser *user, - int login_frequency); -void _act_user_load_from_user (ActUser *user, - ActUser *user_to_copy); +void _act_user_update_from_object_path (ActUser *user, + const char *object_path); +void _act_user_update_as_nonexistent (ActUser *user); +void _act_user_update_login_frequency (ActUser *user, + int login_frequency); +void _act_user_load_from_user (ActUser *user, + ActUser *user_to_copy); /* 'Our' sessions are the graphical sessions on the same seat as the - current process. The primary session of a user will always be - choosen from one of our sessions and act_user_is_logged_in only - considers our sessions. -*/ + * current process. The primary session of a user will always be + * choosen from one of our sessions and act_user_is_logged_in only + * considers our sessions. + */ -void _act_user_add_session (ActUser *user, - const char *session_id, - gboolean is_ours); -void _act_user_remove_session (ActUser *user, - const char *session_id); +void _act_user_add_session (ActUser *user, + const char *session_id, + gboolean is_ours); +void _act_user_remove_session (ActUser *user, + const char *session_id); diff --git a/src/libaccountsservice/act-user.c b/src/libaccountsservice/act-user.c index 484b15e..77b7b2f 100644 --- a/src/libaccountsservice/act-user.c +++ b/src/libaccountsservice/act-user.c @@ -69,7 +69,8 @@ #define ACCOUNTS_NAME "org.freedesktop.Accounts" #define ACCOUNTS_USER_INTERFACE "org.freedesktop.Accounts.User" -enum { +enum +{ PROP_0, PROP_UID, PROP_USER_NAME, @@ -95,26 +96,28 @@ enum { PROP_IS_LOADED }; -enum { +enum +{ CHANGED, SESSIONS_CHANGED, LAST_SIGNAL }; -struct _ActUser { - GObject parent; +struct _ActUser +{ + GObject parent; GDBusConnection *connection; AccountsUser *accounts_proxy; - GList *our_sessions; - GList *other_sessions; + GList *our_sessions; + GList *other_sessions; - guint is_loaded : 1; - guint nonexistent : 1; + guint is_loaded : 1; + guint nonexistent : 1; }; -static void act_user_finalize (GObject *object); +static void act_user_finalize (GObject *object); static guint signals[LAST_SIGNAL] = { 0 }; @@ -143,9 +146,9 @@ _act_user_add_session (ActUser *user, g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (ssid != NULL); - li = g_list_find_custom (user->our_sessions, ssid, (GCompareFunc)session_compare); + li = g_list_find_custom (user->our_sessions, ssid, (GCompareFunc) session_compare); if (li == NULL) - li = g_list_find_custom (user->other_sessions, ssid, (GCompareFunc)session_compare); + li = g_list_find_custom (user->other_sessions, ssid, (GCompareFunc) session_compare); if (li == NULL) { g_debug ("ActUser: adding session %s", ssid); @@ -169,10 +172,10 @@ _act_user_remove_session (ActUser *user, g_return_if_fail (ssid != NULL); headp = &(user->our_sessions); - li = g_list_find_custom (user->our_sessions, ssid, (GCompareFunc)session_compare); + li = g_list_find_custom (user->our_sessions, ssid, (GCompareFunc) session_compare); if (li == NULL) { headp = &(user->other_sessions); - li = g_list_find_custom (user->other_sessions, ssid, (GCompareFunc)session_compare); + li = g_list_find_custom (user->other_sessions, ssid, (GCompareFunc) session_compare); } if (li != NULL) { @@ -195,7 +198,7 @@ _act_user_remove_session (ActUser *user, * Returns: the number of sessions */ guint -act_user_get_num_sessions (ActUser *user) +act_user_get_num_sessions (ActUser *user) { return g_list_length (user->our_sessions); } @@ -213,10 +216,10 @@ act_user_get_num_sessions (ActUser *user) * Returns: the number of sessions */ guint -act_user_get_num_sessions_anywhere (ActUser *user) +act_user_get_num_sessions_anywhere (ActUser *user) { - return (g_list_length (user->our_sessions) - + g_list_length (user->other_sessions)); + return g_list_length (user->our_sessions) + + g_list_length (user->other_sessions); } static void @@ -246,7 +249,6 @@ act_user_get_property (GObject *object, property_name = g_param_spec_get_name (pspec); g_object_get_property (G_OBJECT (user->accounts_proxy), property_name, value); - } break; } @@ -423,7 +425,7 @@ act_user_class_init (ActUserClass *class) "Locked", "Locked", FALSE, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_AUTOMATIC_LOGIN, @@ -481,7 +483,7 @@ act_user_class_init (ActUserClass *class) static void act_user_init (ActUser *user) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; user->our_sessions = NULL; user->other_sessions = NULL; @@ -512,8 +514,8 @@ act_user_finalize (GObject *object) } static void -set_is_loaded (ActUser *user, - gboolean is_loaded) +set_is_loaded (ActUser *user, + gboolean is_loaded) { if (user->is_loaded != is_loaded) { user->is_loaded = is_loaded; @@ -530,7 +532,6 @@ set_is_loaded (ActUser *user, * Returns: a pointer to an array of characters which must not be modified or * freed, or %NULL. **/ - uid_t act_user_get_uid (ActUser *user) { @@ -717,7 +718,6 @@ act_user_get_location (ActUser *user) * Returns: (transfer none): a pointer to an array of characters which must not be modified or * freed, or %NULL. **/ - const char * act_user_get_user_name (ActUser *user) { @@ -803,10 +803,10 @@ act_user_collate (ActUser *user1, { const char *str1; const char *str2; - int num1; - int num2; - guint len1; - guint len2; + int num1; + int num2; + guint len1; + guint len2; g_return_val_if_fail (ACT_IS_USER (user1), 0); g_return_val_if_fail (ACT_IS_USER (user2), 0); @@ -940,7 +940,7 @@ act_user_get_automatic_login (ActUser *user) if (user->accounts_proxy == NULL) return FALSE; - return accounts_user_get_automatic_login (user->accounts_proxy); + return accounts_user_get_automatic_login (user->accounts_proxy); } /** @@ -972,7 +972,7 @@ act_user_is_system_account (ActUser *user) * Returns: %TRUE if the user is local **/ gboolean -act_user_is_local_account (ActUser *user) +act_user_is_local_account (ActUser *user) { g_return_val_if_fail (ACT_IS_USER (user), FALSE); @@ -991,7 +991,7 @@ act_user_is_local_account (ActUser *user) * Returns: %TRUE if the user is nonexistent **/ gboolean -act_user_is_nonexistent (ActUser *user) +act_user_is_nonexistent (ActUser *user) { g_return_val_if_fail (ACT_IS_USER (user), FALSE); @@ -1199,8 +1199,9 @@ void _act_user_update_from_object_path (ActUser *user, const char *object_path) { - AccountsUser *accounts_proxy; - g_autoptr(GError) error = NULL; + AccountsUser *accounts_proxy; + + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (object_path != NULL); @@ -1231,8 +1232,8 @@ _act_user_update_from_object_path (ActUser *user, } void -_act_user_update_login_frequency (ActUser *user, - int login_frequency) +_act_user_update_login_frequency (ActUser *user, + int login_frequency) { if (act_user_get_login_frequency (user) == login_frequency) { return; @@ -1262,8 +1263,8 @@ copy_sessions_lists (ActUser *user, } void -_act_user_load_from_user (ActUser *user, - ActUser *user_to_copy) +_act_user_load_from_user (ActUser *user, + ActUser *user_to_copy) { if (!user_to_copy->is_loaded) { return; @@ -1324,7 +1325,7 @@ act_user_get_password_expiration_policy (ActUser *user, gint64 *days_to_warn, gint64 *days_after_expiration_until_lock) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy)); @@ -1358,7 +1359,7 @@ void act_user_set_user_expiration_policy (ActUser *user, gint64 expiration_time) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy)); @@ -1393,7 +1394,7 @@ act_user_set_password_expiration_policy (ActUser *user, gint64 days_to_warn, gint64 days_after_expiration_until_lock) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy)); @@ -1425,7 +1426,7 @@ void act_user_set_email (ActUser *user, const char *email) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (email != NULL); @@ -1456,7 +1457,7 @@ void act_user_set_language (ActUser *user, const char *language) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (language != NULL); @@ -1488,7 +1489,7 @@ void act_user_set_languages (ActUser *user, const char * const *languages) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (languages != NULL); @@ -1521,7 +1522,7 @@ void act_user_set_x_session (ActUser *user, const char *x_session) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (x_session != NULL); @@ -1551,7 +1552,7 @@ void act_user_set_session (ActUser *user, const char *session) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (session != NULL); @@ -1581,7 +1582,7 @@ void act_user_set_session_type (ActUser *user, const char *session_type) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (session_type != NULL); @@ -1611,7 +1612,7 @@ void act_user_set_location (ActUser *user, const char *location) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (location != NULL); @@ -1641,7 +1642,7 @@ void act_user_set_user_name (ActUser *user, const char *user_name) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (user_name != NULL); @@ -1671,7 +1672,7 @@ void act_user_set_real_name (ActUser *user, const char *real_name) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (real_name != NULL); @@ -1701,7 +1702,7 @@ void act_user_set_icon_file (ActUser *user, const char *icon_file) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (icon_file != NULL); @@ -1728,10 +1729,10 @@ act_user_set_icon_file (ActUser *user, * Note this function is synchronous and ignores errors. **/ void -act_user_set_account_type (ActUser *user, - ActUserAccountType account_type) +act_user_set_account_type (ActUser *user, + ActUserAccountType account_type) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy)); @@ -1767,8 +1768,8 @@ salt_char (GRand *rand) static gchar * generate_salt_for_crypt_hash (void) { - g_autoptr(GString) salt = NULL; - g_autoptr(GRand) rand = NULL; + g_autoptr (GString) salt = NULL; + g_autoptr (GRand) rand = NULL; gint i; rand = g_rand_new (); @@ -1806,11 +1807,11 @@ make_crypted (const gchar *plain) * Note this function is synchronous and ignores errors. **/ void -act_user_set_password (ActUser *user, - const gchar *password, - const gchar *hint) +act_user_set_password (ActUser *user, + const gchar *password, + const gchar *hint) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_autofree gchar *crypted = NULL; g_return_if_fail (ACT_IS_USER (user)); @@ -1844,7 +1845,7 @@ void act_user_set_password_hint (ActUser *user, const gchar *hint) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy)); @@ -1873,10 +1874,10 @@ act_user_set_password_hint (ActUser *user, * Note this function is synchronous and ignores errors. **/ void -act_user_set_password_mode (ActUser *user, - ActUserPasswordMode password_mode) +act_user_set_password_mode (ActUser *user, + ActUserPasswordMode password_mode) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy)); @@ -1899,10 +1900,10 @@ act_user_set_password_mode (ActUser *user, * Note this function is synchronous and ignores errors. **/ void -act_user_set_locked (ActUser *user, - gboolean locked) +act_user_set_locked (ActUser *user, + gboolean locked) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy)); @@ -1930,10 +1931,10 @@ act_user_set_locked (ActUser *user, * Note this function is synchronous and ignores errors. **/ void -act_user_set_automatic_login (ActUser *user, - gboolean enabled) +act_user_set_automatic_login (ActUser *user, + gboolean enabled) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_return_if_fail (ACT_IS_USER (user)); g_return_if_fail (ACCOUNTS_IS_USER (user->accounts_proxy)); diff --git a/src/libaccountsservice/act-user.h b/src/libaccountsservice/act-user.h index 7ce41b1..fe9a8a4 100644 --- a/src/libaccountsservice/act-user.h +++ b/src/libaccountsservice/act-user.h @@ -28,105 +28,107 @@ #include <glib.h> #include <glib-object.h> -#define ACT_TYPE_USER (act_user_get_type()) +#define ACT_TYPE_USER (act_user_get_type ()) G_DECLARE_FINAL_TYPE (ActUser, act_user, ACT, USER, GObject) -typedef enum { +typedef enum +{ ACT_USER_ACCOUNT_TYPE_STANDARD, ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR, } ActUserAccountType; -typedef enum { +typedef enum +{ ACT_USER_PASSWORD_MODE_REGULAR, ACT_USER_PASSWORD_MODE_SET_AT_LOGIN, ACT_USER_PASSWORD_MODE_NONE, } ActUserPasswordMode; -const char *act_user_get_object_path (ActUser *user); +const char *act_user_get_object_path (ActUser *user); -uid_t act_user_get_uid (ActUser *user); -const char *act_user_get_user_name (ActUser *user); -const char *act_user_get_real_name (ActUser *user); -ActUserAccountType act_user_get_account_type (ActUser *user); -ActUserPasswordMode act_user_get_password_mode (ActUser *user); -const char *act_user_get_password_hint (ActUser *user); -const char *act_user_get_home_dir (ActUser *user); -const char *act_user_get_shell (ActUser *user); -const char *act_user_get_email (ActUser *user); -const char *act_user_get_location (ActUser *user); -guint act_user_get_num_sessions (ActUser *user); -guint act_user_get_num_sessions_anywhere (ActUser *user); -gboolean act_user_is_logged_in (ActUser *user); -gboolean act_user_is_logged_in_anywhere (ActUser *user); -int act_user_get_login_frequency (ActUser *user); -gint64 act_user_get_login_time (ActUser *user); -const GVariant*act_user_get_login_history (ActUser *user); -gboolean act_user_get_saved (ActUser *user); -gboolean act_user_get_locked (ActUser *user); -gboolean act_user_get_automatic_login (ActUser *user); -gboolean act_user_is_system_account (ActUser *user); -gboolean act_user_is_local_account (ActUser *user); -gboolean act_user_is_nonexistent (ActUser *user); -const char *act_user_get_icon_file (ActUser *user); -const char *act_user_get_language (ActUser *user); -const char * const *act_user_get_languages (ActUser *user); -const char *act_user_get_x_session (ActUser *user); -const char *act_user_get_session (ActUser *user); -const char *act_user_get_session_type (ActUser *user); -const char *act_user_get_primary_session_id (ActUser *user); +uid_t act_user_get_uid (ActUser *user); +const char *act_user_get_user_name (ActUser *user); +const char *act_user_get_real_name (ActUser *user); +ActUserAccountType act_user_get_account_type (ActUser *user); +ActUserPasswordMode act_user_get_password_mode (ActUser *user); +const char *act_user_get_password_hint (ActUser *user); +const char *act_user_get_home_dir (ActUser *user); +const char *act_user_get_shell (ActUser *user); +const char *act_user_get_email (ActUser *user); +const char *act_user_get_location (ActUser *user); +guint act_user_get_num_sessions (ActUser *user); +guint act_user_get_num_sessions_anywhere (ActUser *user); +gboolean act_user_is_logged_in (ActUser *user); +gboolean act_user_is_logged_in_anywhere (ActUser *user); +int act_user_get_login_frequency (ActUser *user); +gint64 act_user_get_login_time (ActUser *user); +const GVariant *act_user_get_login_history (ActUser *user); +gboolean act_user_get_saved (ActUser *user); +gboolean act_user_get_locked (ActUser *user); +gboolean act_user_get_automatic_login (ActUser *user); +gboolean act_user_is_system_account (ActUser *user); +gboolean act_user_is_local_account (ActUser *user); +gboolean act_user_is_nonexistent (ActUser *user); +const char *act_user_get_icon_file (ActUser *user); +const char *act_user_get_language (ActUser *user); +const char * const *act_user_get_languages (ActUser *user); +const char *act_user_get_x_session (ActUser *user); +const char *act_user_get_session (ActUser *user); +const char *act_user_get_session_type (ActUser *user); +const char *act_user_get_primary_session_id (ActUser *user); -gint act_user_collate (ActUser *user1, - ActUser *user2); -gboolean act_user_is_loaded (ActUser *user); +gint act_user_collate (ActUser *user1, + ActUser *user2); +gboolean act_user_is_loaded (ActUser *user); -void act_user_get_password_expiration_policy (ActUser *user, - gint64 *expiration_time, - gint64 *last_change_time, - gint64 *min_days_between_changes, - gint64 *max_days_between_changes, - gint64 *days_to_warn, - gint64 *days_after_expiration_until_lock); +void act_user_get_password_expiration_policy (ActUser *user, + gint64 *expiration_time, + gint64 *last_change_time, + gint64 *min_days_between_changes, + gint64 *max_days_between_changes, + gint64 *days_to_warn, + gint64 *days_after_expiration_until_lock); -void act_user_set_password_expiration_policy (ActUser *user, - gint64 min_days_between_changes, - gint64 max_days_between_changes, - gint64 days_to_warn, - gint64 days_after_expiration_until_lock); +void act_user_set_password_expiration_policy (ActUser *user, + gint64 min_days_between_changes, + gint64 max_days_between_changes, + gint64 days_to_warn, + gint64 days_after_expiration_until_lock); -void act_user_set_user_expiration_policy (ActUser *user, - gint64 expiration_time); +void act_user_set_user_expiration_policy (ActUser *user, + gint64 expiration_time); -void act_user_set_language (ActUser *user, - const char *language); -void act_user_set_languages (ActUser *user, - const char * const *languages); +void act_user_set_language (ActUser *user, + const char *language); +void act_user_set_languages (ActUser *user, + const char * const *languages); -void act_user_set_email (ActUser *user, - const char *email); -void act_user_set_x_session (ActUser *user, - const char *x_session); -void act_user_set_session (ActUser *user, - const char *session); -void act_user_set_session_type (ActUser *user, - const char *session_type); -void act_user_set_location (ActUser *user, - const char *location); -void act_user_set_user_name (ActUser *user, - const char *user_name); -void act_user_set_real_name (ActUser *user, - const char *real_name); -void act_user_set_icon_file (ActUser *user, - const char *icon_file); -void act_user_set_account_type (ActUser *user, - ActUserAccountType account_type); -void act_user_set_password (ActUser *user, - const gchar *password, - const gchar *hint); -void act_user_set_password_hint (ActUser *user, - const gchar *hint); -void act_user_set_password_mode (ActUser *user, - ActUserPasswordMode password_mode); -void act_user_set_locked (ActUser *user, - gboolean locked); -void act_user_set_automatic_login (ActUser *user, - gboolean enabled); +void act_user_set_email (ActUser *user, + const char *email); +void act_user_set_x_session (ActUser *user, + const char *x_session); +void act_user_set_session (ActUser *user, + const char *session); +void act_user_set_session_type (ActUser *user, + const char *session_type); +void act_user_set_location (ActUser *user, + const char *location); +void act_user_set_user_name (ActUser *user, + const char *user_name); +void act_user_set_real_name (ActUser *user, + const char *real_name); +void act_user_set_icon_file (ActUser *user, + const char *icon_file); +void act_user_set_account_type (ActUser *user, + ActUserAccountType account_type); +void act_user_set_password (ActUser *user, + const gchar *password, + const gchar *hint); +void act_user_set_password_hint (ActUser *user, + const gchar *hint); +void act_user_set_password_mode (ActUser *user, + ActUserPasswordMode password_mode); +void act_user_set_locked (ActUser *user, + gboolean locked); +void act_user_set_automatic_login (ActUser *user, + gboolean enabled); @@ -40,9 +40,9 @@ #define NAME_TO_CLAIM "org.freedesktop.Accounts" static gboolean -ensure_directory (const char *path, - gint mode, - GError **error) +ensure_directory (const char *path, + gint mode, + GError **error) { GStatBuf stat_buffer = { 0 }; @@ -81,9 +81,9 @@ ensure_directory (const char *path, } static gboolean -ensure_file_permissions (const char *dir_path, - gint file_mode, - GError **error) +ensure_file_permissions (const char *dir_path, + gint file_mode, + GError **error) { GDir *dir = NULL; const gchar *filename; @@ -126,13 +126,14 @@ ensure_file_permissions (const char *dir_path, } static void -on_bus_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data) +on_bus_acquired (GDBusConnection *connection, + const gchar *name, + gpointer user_data) { GMainLoop *loop = user_data; Daemon *daemon; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; if (!ensure_directory (get_icondir (), 0775, &error) || !ensure_directory (get_userdir (), 0700, &error) || @@ -155,9 +156,9 @@ on_bus_acquired (GDBusConnection *connection, } static void -on_name_lost (GDBusConnection *connection, - const gchar *name, - gpointer user_data) +on_name_lost (GDBusConnection *connection, + const gchar *name, + gpointer user_data) { GMainLoop *loop = user_data; @@ -168,12 +169,12 @@ on_name_lost (GDBusConnection *connection, static gboolean debug; static void -on_log_debug (const gchar *log_domain, +on_log_debug (const gchar *log_domain, GLogLevelFlags log_level, - const gchar *message, - gpointer user_data) + const gchar *message, + gpointer user_data) { - g_autoptr(GString) string = NULL; + g_autoptr (GString) string = NULL; const gchar *progname; int ret G_GNUC_UNUSED; @@ -181,7 +182,7 @@ on_log_debug (const gchar *log_domain, progname = g_get_prgname (); g_string_append_printf (string, "(%s:%lu): %s%sDEBUG: %s\n", - progname ? progname : "process", (gulong)getpid (), + progname ? progname : "process", (gulong) getpid (), log_domain ? log_domain : "", log_domain ? "-" : "", message ? message : "(NULL) message"); @@ -211,18 +212,19 @@ on_signal_quit (gpointer data) } int -main (int argc, char *argv[]) +main (int argc, + char *argv[]) { - g_autoptr(GMainLoop) loop = NULL; - g_autoptr(GError) error = NULL; + g_autoptr (GMainLoop) loop = NULL; + g_autoptr (GError) error = NULL; GBusNameOwnerFlags flags; - g_autoptr(GOptionContext) context = NULL; + g_autoptr (GOptionContext) context = NULL; static gboolean replace; static gboolean show_version; static GOptionEntry entries[] = { - { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Output version information and exit"), NULL }, - { "replace", 0, 0, G_OPTION_ARG_NONE, &replace, N_("Replace existing instance"), NULL }, - { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL }, + { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_ ("Output version information and exit"), NULL }, + { "replace", 0, 0, G_OPTION_ARG_NONE, &replace, N_ ("Replace existing instance"), NULL }, + { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_ ("Enable debugging code"), NULL }, { NULL } }; @@ -241,7 +243,7 @@ main (int argc, char *argv[]) context = g_option_context_new (NULL); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - g_option_context_set_summary (context, _("Provides D-Bus interfaces for querying and manipulating\nuser account information.")); + g_option_context_set_summary (context, _ ("Provides D-Bus interfaces for querying and manipulating\nuser account information.")); g_option_context_add_main_entries (context, entries, NULL); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_warning ("%s", error->message); @@ -286,4 +288,3 @@ main (int argc, char *argv[]) return EXIT_SUCCESS; } - diff --git a/src/user-classify.h b/src/user-classify.h index 5eab070..9314ccf 100644 --- a/src/user-classify.h +++ b/src/user-classify.h @@ -23,6 +23,6 @@ #include <sys/types.h> #include <glib.h> -gboolean user_classify_is_human (uid_t uid, - const gchar *username, - const gchar *shell); +gboolean user_classify_is_human (uid_t uid, + const gchar *username, + const gchar *shell); @@ -1,24 +1,24 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>. - * Copyright (C) 2007-2008 William Jon McCann <mccann@jhu.edu> - * Copyright (C) 2009-2010 Red Hat, Inc. - * Copyright © 2013 Canonical Limited - * - * 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; either version 2 of the License, or - * (at your option) any later version. - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ + * + * Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>. + * Copyright (C) 2007-2008 William Jon McCann <mccann@jhu.edu> + * Copyright (C) 2009-2010 Red Hat, Inc. + * Copyright © 2013 Canonical Limited + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ #define _BSD_SOURCE @@ -48,35 +48,36 @@ #include "accounts-user-generated.h" #include "util.h" -struct User { +struct User +{ AccountsUserSkeleton parent; - GDBusConnection *system_bus_connection; - gchar *object_path; + GDBusConnection *system_bus_connection; + gchar *object_path; + + Daemon *daemon; + + GKeyFile *keyfile; - Daemon *daemon; - - GKeyFile *keyfile; - - gid_t gid; - GDateTime *user_expiration_time; - GDateTime *last_change_time; - gint64 min_days_between_changes; - gint64 max_days_between_changes; - gint64 days_to_warn; - gint64 days_after_expiration_until_lock; - GVariant *login_history; - gchar *icon_file; - gchar *default_icon_file; - gchar *gecos; - gboolean account_expiration_policy_known; - gboolean cached; - gboolean template_loaded; - - guint *extension_ids; - guint n_extension_ids; - - guint changed_timeout_id; + gid_t gid; + GDateTime *user_expiration_time; + GDateTime *last_change_time; + gint64 min_days_between_changes; + gint64 max_days_between_changes; + gint64 days_to_warn; + gint64 days_after_expiration_until_lock; + GVariant *login_history; + gchar *icon_file; + gchar *default_icon_file; + gchar *gecos; + gboolean account_expiration_policy_known; + gboolean cached; + gboolean template_loaded; + + guint *extension_ids; + guint n_extension_ids; + + guint changed_timeout_id; }; typedef struct UserClass @@ -85,7 +86,8 @@ typedef struct UserClass } UserClass; static void user_accounts_user_iface_init (AccountsUserIface *iface); -static void user_update_from_keyfile (User *user, GKeyFile *keyfile); +static void user_update_from_keyfile (User *user, + GKeyFile *keyfile); G_DEFINE_TYPE_WITH_CODE (User, user, ACCOUNTS_TYPE_USER_SKELETON, G_IMPLEMENT_INTERFACE (ACCOUNTS_TYPE_USER, user_accounts_user_iface_init)); @@ -119,7 +121,7 @@ static void user_reset_icon_file (User *user) { const char *icon_file; - gboolean icon_is_default; + gboolean icon_is_default; const char *home_dir; icon_file = accounts_user_get_icon_file (ACCOUNTS_USER (user)); @@ -155,8 +157,8 @@ is_valid_shell_identifier_character (char c, gboolean first) { return (!first && g_ascii_isdigit (c)) || - c == '_' || - g_ascii_isalpha (c); + c == '_' || + g_ascii_isalpha (c); } static char * @@ -198,8 +200,9 @@ expand_template_variables (User *user, } start = p; while (*p != '\0' && - is_valid_shell_identifier_character (*p, p == start)) + is_valid_shell_identifier_character (*p, p == start)) { p++; + } if (p == start || (brackets && *p != '}')) { g_string_append_c (s, '$'); if (brackets) @@ -233,6 +236,7 @@ load_template_environment_file (User *user, const char *file) { g_autofree char *contents = NULL; + g_auto (GStrv) lines = NULL; g_autoptr (GError) error = NULL; gboolean file_loaded; @@ -255,24 +259,28 @@ load_template_environment_file (User *user, const char *value; p = lines[i]; - while (g_ascii_isspace (*p)) + while (g_ascii_isspace (*p)) { p++; + } if (*p == '#' || *p == '\0') continue; variable = p; - while (is_valid_shell_identifier_character (*p, p == variable)) + while (is_valid_shell_identifier_character (*p, p == variable)) { p++; + } variable_end = p; - while (g_ascii_isspace (*p)) + while (g_ascii_isspace (*p)) { p++; + } if (variable_end == variable || *p != '=') { g_debug ("template environment file %s has invalid line '%s'\n", file, lines[i]); continue; } *variable_end = '\0'; p++; - while (g_ascii_isspace (*p)) + while (g_ascii_isspace (*p)) { p++; + } value = p; if (g_hash_table_lookup (variables, variable) == NULL) { @@ -280,7 +288,6 @@ load_template_environment_file (User *user, g_strdup (variable), g_strdup (value)); } - } } @@ -306,6 +313,7 @@ static void user_update_from_template (User *user) { g_autofree char *filename = NULL; + g_autoptr (GKeyFile) key_file = NULL; g_autoptr (GError) error = NULL; g_autoptr (GHashTable) template_variables = NULL; @@ -316,12 +324,14 @@ user_update_from_template (User *user) g_get_system_data_dirs (), NULL }; + g_autoptr (GPtrArray) dirs = NULL; AccountType account_type; const char *account_type_string; size_t i, j; g_autofree char *contents = NULL; g_autofree char *expanded = NULL; + g_auto (GStrv) lines = NULL; if (user->template_loaded) @@ -403,7 +413,8 @@ user_update_from_pwent (User *user, g_autofree gchar *real_name = NULL; gboolean is_system_account; const gchar *passwd; - g_autoptr(GDateTime) start_time = NULL; + + g_autoptr (GDateTime) start_time = NULL; gboolean locked; PasswordMode mode; AccountType account_type; @@ -419,8 +430,7 @@ user_update_from_pwent (User *user, valid_utf8_name = pwent->pw_gecos; first_comma = g_utf8_strchr (valid_utf8_name, -1, ','); user->gecos = g_strdup (pwent->pw_gecos); - } - else { + } else { g_warning ("User %s has invalid UTF-8 in GECOS field. " "It would be a good thing to check /etc/passwd.", pwent->pw_name ? pwent->pw_name : ""); @@ -428,20 +438,17 @@ user_update_from_pwent (User *user, if (first_comma) { real_name = g_strndup (valid_utf8_name, - (first_comma - valid_utf8_name)); - } - else if (valid_utf8_name) { + (first_comma - valid_utf8_name)); + } else if (valid_utf8_name) { real_name = g_strdup (valid_utf8_name); - } - else { + } else { real_name = NULL; } if (real_name && real_name[0] == '\0') { g_clear_pointer (&real_name, g_free); } - } - else { + } else { real_name = NULL; } @@ -465,8 +472,7 @@ user_update_from_pwent (User *user, if (passwd && passwd[0] == '!') { locked = TRUE; - } - else { + } else { locked = FALSE; } @@ -474,8 +480,7 @@ user_update_from_pwent (User *user, if (passwd == NULL || passwd[0] != 0) { mode = PASSWORD_MODE_REGULAR; - } - else { + } else { mode = PASSWORD_MODE_NONE; } @@ -487,15 +492,14 @@ user_update_from_pwent (User *user, start_time = g_date_time_new_from_unix_utc (0); if (spent->sp_expire < 0) { user->user_expiration_time = NULL; - } - else { + } else { user->user_expiration_time = g_date_time_add_days (start_time, spent->sp_expire); } user->last_change_time = g_date_time_add_days (start_time, spent->sp_lstchg); user->min_days_between_changes = spent->sp_min; user->max_days_between_changes = spent->sp_max; - user->days_to_warn = spent->sp_warn; + user->days_to_warn = spent->sp_warn; user->days_after_expiration_until_lock = spent->sp_inact; user->account_expiration_policy_known = TRUE; } @@ -582,10 +586,10 @@ user_update_from_keyfile (User *user, } if (g_key_file_has_key (keyfile, "User", "SystemAccount", NULL)) { - gboolean system_account; + gboolean system_account; - system_account = g_key_file_get_boolean (keyfile, "User", "SystemAccount", NULL); - accounts_user_set_system_account (ACCOUNTS_USER (user), system_account); + system_account = g_key_file_get_boolean (keyfile, "User", "SystemAccount", NULL); + accounts_user_set_system_account (ACCOUNTS_USER (user), system_account); } g_clear_pointer (&user->keyfile, g_key_file_unref); @@ -596,7 +600,8 @@ void user_update_from_cache (User *user) { g_autofree gchar *filename = NULL; - g_autoptr(GKeyFile) key_file = NULL; + + g_autoptr (GKeyFile) key_file = NULL; filename = g_build_filename (get_userdir (), accounts_user_get_user_name (ACCOUNTS_USER (user)), NULL); @@ -613,15 +618,15 @@ user_update_from_cache (User *user) } void -user_update_local_account_property (User *user, - gboolean local) +user_update_local_account_property (User *user, + gboolean local) { accounts_user_set_local_account (ACCOUNTS_USER (user), local); } void -user_update_system_account_property (User *user, - gboolean system) +user_update_system_account_property (User *user, + gboolean system) { accounts_user_set_system_account (ACCOUNTS_USER (user), system); } @@ -636,7 +641,7 @@ user_save_to_keyfile (User *user, g_key_file_set_string (keyfile, "User", "Email", accounts_user_get_email (ACCOUNTS_USER (user))); if (accounts_user_get_languages (ACCOUNTS_USER (user))) { - const gchar * const* languages; + const gchar * const *languages; languages = accounts_user_get_languages (ACCOUNTS_USER (user)); g_key_file_set_string_list (keyfile, "User", "Languages", languages, g_strv_length ((char **) languages)); } else if (accounts_user_get_language (ACCOUNTS_USER (user))) { @@ -674,7 +679,8 @@ save_extra_data (User *user) { g_autofree gchar *data = NULL; g_autofree gchar *filename = NULL; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; user_save_to_keyfile (user, user->keyfile); @@ -733,8 +739,7 @@ user_extension_get_value (User *user, if (g_str_equal (annotation->key, "org.freedesktop.Accounts.DefaultValue.String")) { if (g_str_equal (property->signature, "s")) return g_variant_ref_sink (g_variant_new_string (annotation->value)); - } - else if (g_str_equal (annotation->key, "org.freedesktop.Accounts.DefaultValue")) { + } else if (g_str_equal (annotation->key, "org.freedesktop.Accounts.DefaultValue")) { value = g_variant_parse (type, annotation->value, NULL, NULL, NULL); if (value != NULL) return value; @@ -752,14 +757,14 @@ user_extension_get_property (User *user, GDBusMethodInvocation *invocation) { const GDBusPropertyInfo *property = g_dbus_method_invocation_get_property_info (invocation); - g_autoptr(GVariant) value = NULL; + + g_autoptr (GVariant) value = NULL; value = user_extension_get_value (user, interface, property); if (value) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("(v)", value)); - } - else { + } else { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "Key '%s' is not set and has no default value", property->name); @@ -778,7 +783,7 @@ user_extension_get_all_properties (User *user, g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT); for (i = 0; interface->properties && interface->properties[i]; i++) { GDBusPropertyInfo *property = interface->properties[i]; - g_autoptr(GVariant) value = NULL; + g_autoptr (GVariant) value = NULL; value = user_extension_get_value (user, interface, property); @@ -796,7 +801,8 @@ user_extension_set_property (User *user, GDBusMethodInvocation *invocation) { const GDBusPropertyInfo *property = g_dbus_method_invocation_get_property_info (invocation); - g_autoptr(GVariant) value = NULL; + + g_autoptr (GVariant) value = NULL; g_autofree gchar *printed = NULL; g_autofree gchar *prev = NULL; @@ -885,19 +891,16 @@ user_extension_method_call (GDBusConnection *connection, if (g_str_equal (method_name, "Set")) { annotation_name = "org.freedesktop.Accounts.Authentication.ChangeOwn"; action_id = "org.freedesktop.accounts.change-own-user-data"; - } - else { + } else { annotation_name = "org.freedesktop.Accounts.Authentication.ReadOwn"; action_id = ""; /* reading allowed by default */ } - } - else { + } else { /* Operation on someone else's User object */ if (g_str_equal (method_name, "Set")) { annotation_name = "org.freedesktop.Accounts.Authentication.ChangeAny"; action_id = "org.freedesktop.accounts.user-administration"; - } - else { + } else { annotation_name = "org.freedesktop.Accounts.Authentication.ReadAny"; action_id = ""; /* reading allowed by default */ } @@ -916,8 +919,7 @@ user_extension_method_call (GDBusConnection *connection, if (action_id[0] == '\0') { /* Should always allow this call, so just do it now */ user_extension_authentication_done (user->daemon, user, invocation, iface_info); - } - else { + } else { daemon_local_check_auth (user->daemon, user, action_id, user_extension_authentication_done, invocation, iface_info, NULL); @@ -949,10 +951,11 @@ user_register_extensions (User *user) * they won't happen and (b) even if they do, we still want to * publish the main user interface. */ - while (g_hash_table_iter_next (&iter, NULL, &iface)) + while (g_hash_table_iter_next (&iter, NULL, &iface)) { user->extension_ids[i++] = g_dbus_connection_register_object (user->system_bus_connection, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (user)), iface, &vtable, user, NULL, NULL); + } } static gchar * @@ -987,7 +990,7 @@ on_user_property_notify (User *user) void user_register (User *user) { - g_autoptr(GError) error = NULL; + g_autoptr (GError) error = NULL; g_autofree gchar *object_path = NULL; user->system_bus_connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); @@ -1016,7 +1019,7 @@ user_register (User *user) void user_save (User *user) { - save_extra_data (user); + save_extra_data (user); } void @@ -1076,7 +1079,7 @@ user_get_system_account (User *user) gboolean user_get_local_account (User *user) { - return accounts_user_get_local_account (ACCOUNTS_USER (user));; + return accounts_user_get_local_account (ACCOUNTS_USER (user)); } const gchar * @@ -1092,9 +1095,9 @@ user_get_uid (User *user) } const gchar * -user_get_shell(User *user) +user_get_shell (User *user) { - return accounts_user_get_shell (ACCOUNTS_USER (user)); + return accounts_user_get_shell (ACCOUNTS_USER (user)); } gboolean @@ -1104,15 +1107,15 @@ user_get_cached (User *user) } void -user_set_cached (User *user, - gboolean cached) +user_set_cached (User *user, + gboolean cached) { user->cached = cached; } void -user_set_saved (User *user, - gboolean saved) +user_set_saved (User *user, + gboolean saved) { accounts_user_set_saved (ACCOUNTS_USER (user), saved); } @@ -1142,7 +1145,8 @@ user_change_real_name_authorized_cb (Daemon *daemon, { gchar *name = data; g_autofree gchar *new_gecos = NULL; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; const gchar *first_comma = NULL; const gchar *argv[6]; @@ -1188,7 +1192,7 @@ user_set_real_name (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *real_name) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1213,7 +1217,7 @@ user_set_real_name (AccountsUser *auser, user_change_real_name_authorized_cb, context, g_strdup (real_name), - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } @@ -1227,7 +1231,8 @@ user_change_user_name_authorized_cb (Daemon *daemon, { gchar *name = data; gchar *old_name; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; const gchar *argv[6]; if (g_strcmp0 (accounts_user_get_user_name (ACCOUNTS_USER (user)), name) != 0) { @@ -1264,14 +1269,15 @@ user_set_user_name (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *user_name) { - User *user = (User*)auser; + User *user = (User *) auser; + daemon_local_check_auth (user->daemon, user, "org.freedesktop.accounts.user-administration", user_change_user_name_authorized_cb, context, g_strdup (user_name), - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } @@ -1301,7 +1307,7 @@ user_set_email (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *email) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1321,7 +1327,7 @@ user_set_email (AccountsUser *auser, user_change_email_authorized_cb, context, g_strdup (email), - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } @@ -1333,7 +1339,7 @@ user_change_languages_authorized_cb (Daemon *daemon, gpointer data) { - const gchar * const* languages = data; + const gchar * const *languages = data; guint i; for (i = 0; languages[i] != NULL; i++) { @@ -1362,7 +1368,7 @@ user_set_languages (AccountsUser *auser, GDBusMethodInvocation *context, const gchar * const *languages) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1382,7 +1388,7 @@ user_set_languages (AccountsUser *auser, user_change_languages_authorized_cb, context, g_strdupv ((gchar **) languages), - (GDestroyNotify)g_strfreev); + (GDestroyNotify) g_strfreev); return TRUE; } @@ -1424,7 +1430,7 @@ user_set_language (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *language) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1444,7 +1450,7 @@ user_set_language (AccountsUser *auser, user_change_language_authorized_cb, context, g_strdup (language), - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } @@ -1472,7 +1478,7 @@ user_set_session (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *session) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1520,7 +1526,7 @@ user_set_session_type (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *session_type) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1568,7 +1574,7 @@ user_set_x_session (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *x_session) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1600,7 +1606,7 @@ user_get_password_expiration_policy_authorized_cb (Daemon *daemon gpointer data) { - gint64 user_expiration_time; + gint64 user_expiration_time; guint64 last_change_time; if (!user->account_expiration_policy_known) { @@ -1609,8 +1615,7 @@ user_get_password_expiration_policy_authorized_cb (Daemon *daemon } if (user->user_expiration_time == NULL) { user_expiration_time = -1; - } - else { + } else { user_expiration_time = g_date_time_to_unix (user->user_expiration_time); } last_change_time = g_date_time_to_unix (user->last_change_time); @@ -1628,7 +1633,7 @@ static gboolean user_get_password_expiration_policy (AccountsUser *auser, GDBusMethodInvocation *context) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1655,11 +1660,10 @@ user_get_password_expiration_policy (AccountsUser *auser, typedef struct PasswordExpirationPolicy { - char *min_days_between_changes; - char *max_days_between_changes; - char *days_to_warn; - char *days_after_expiration_until_lock; - + char *min_days_between_changes; + char *max_days_between_changes; + char *days_to_warn; + char *days_after_expiration_until_lock; } PasswordExpirationPolicy; static void @@ -1680,7 +1684,8 @@ user_set_password_expiration_policy_authorized_cb (Daemon *daemon { PasswordExpirationPolicy *pwd_expiration = data; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; const gchar *argv[11]; sys_log (context, @@ -1719,7 +1724,7 @@ user_set_password_expiration_policy (AccountsUser *auser, gint64 days_to_warn, gint64 days_after_expiration_until_lock) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; PasswordExpirationPolicy *pwd_expiration = NULL; @@ -1746,7 +1751,7 @@ user_set_password_expiration_policy (AccountsUser *auser, user_set_password_expiration_policy_authorized_cb, context, pwd_expiration, - (GDestroyNotify)free_password_expiration); + (GDestroyNotify) free_password_expiration); return TRUE; } @@ -1759,6 +1764,7 @@ user_set_user_expiration_policy_authorized_cb (Daemon *daemon, { g_autofree gchar *expiration_time = NULL; + g_autoptr (GError) error = NULL; g_autoptr (GDateTime) time = NULL; const gchar *argv[5]; @@ -1770,11 +1776,10 @@ user_set_user_expiration_policy_authorized_cb (Daemon *daemon, g_object_freeze_notify (G_OBJECT (user)); - if ((gint64)data != -1) { - time = g_date_time_new_from_unix_local ((gint64)data); + if ((gint64) data != -1) { + time = g_date_time_new_from_unix_local ((gint64) data); expiration_time = g_date_time_format (time, "%F"); - } - else { + } else { expiration_time = g_strdup ("-1"); } argv[0] = "/usr/bin/chage"; @@ -1798,7 +1803,7 @@ user_set_user_expiration_policy (AccountsUser *auser, GDBusMethodInvocation *context, gint64 user_expiration_time) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1817,7 +1822,7 @@ user_set_user_expiration_policy (AccountsUser *auser, action_id, user_set_user_expiration_policy_authorized_cb, context, - (gpointer)user_expiration_time, + (gpointer) user_expiration_time, NULL); return TRUE; @@ -1846,7 +1851,7 @@ user_set_location (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *location) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -1866,7 +1871,7 @@ user_set_location (AccountsUser *auser, user_change_location_authorized_cb, context, g_strdup (location), - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } @@ -1879,7 +1884,8 @@ user_change_home_dir_authorized_cb (Daemon *daemon, { gchar *home_dir = data; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; const gchar *argv[7]; if (g_strcmp0 (accounts_user_get_home_directory (ACCOUNTS_USER (user)), home_dir) != 0) { @@ -1915,14 +1921,15 @@ user_set_home_directory (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *home_dir) { - User *user = (User*)auser; + User *user = (User *) auser; + daemon_local_check_auth (user->daemon, user, "org.freedesktop.accounts.user-administration", user_change_home_dir_authorized_cb, context, g_strdup (home_dir), - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } @@ -1935,7 +1942,8 @@ user_change_shell_authorized_cb (Daemon *daemon, { gchar *shell = data; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; const gchar *argv[6]; if (g_strcmp0 (accounts_user_get_shell (ACCOUNTS_USER (user)), shell) != 0) { @@ -1968,14 +1976,15 @@ user_set_shell (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *shell) { - User *user = (User*)auser; + User *user = (User *) auser; + daemon_local_check_auth (user->daemon, user, "org.freedesktop.accounts.user-administration", user_change_shell_authorized_cb, context, g_strdup (shell), - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } @@ -2001,8 +2010,9 @@ user_change_icon_file_authorized_cb (Daemon *daemon, { g_autofree gchar *filename = NULL; - g_autoptr(GFile) file = NULL; - g_autoptr(GFileInfo) info = NULL; + + g_autoptr (GFile) file = NULL; + g_autoptr (GFileInfo) info = NULL; guint32 mode; GFileType type; guint64 size; @@ -2012,8 +2022,8 @@ user_change_icon_file_authorized_cb (Daemon *daemon, if (filename == NULL || *filename == '\0') { g_autofree gchar *dest_path = NULL; - g_autoptr(GFile) dest = NULL; - g_autoptr(GError) error = NULL; + g_autoptr (GFile) dest = NULL; + g_autoptr (GError) error = NULL; g_clear_pointer (&filename, g_free); @@ -2038,8 +2048,8 @@ user_change_icon_file_authorized_cb (Daemon *daemon, filename = g_file_get_path (file); info = g_file_query_info (file, G_FILE_ATTRIBUTE_UNIX_MODE "," - G_FILE_ATTRIBUTE_STANDARD_TYPE "," - G_FILE_ATTRIBUTE_STANDARD_SIZE, + G_FILE_ATTRIBUTE_STANDARD_TYPE "," + G_FILE_ATTRIBUTE_STANDARD_SIZE, 0, NULL, NULL); mode = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE); type = g_file_info_get_file_type (info); @@ -2062,12 +2072,12 @@ user_change_icon_file_authorized_cb (Daemon *daemon, (!g_str_has_prefix (filename, DATADIR) && !g_str_has_prefix (filename, get_icondir ()))) { g_autofree gchar *dest_path = NULL; - g_autoptr(GFile) dest = NULL; + g_autoptr (GFile) dest = NULL; const gchar *argv[3]; gint std_out; - g_autoptr(GError) error = NULL; - g_autoptr(GInputStream) input = NULL; - g_autoptr(GOutputStream) output = NULL; + g_autoptr (GError) error = NULL; + g_autoptr (GInputStream) input = NULL; + g_autoptr (GOutputStream) output = NULL; gint uid; gssize bytes; struct passwd *pw; @@ -2092,7 +2102,7 @@ user_change_icon_file_authorized_cb (Daemon *daemon, pw = getpwuid (uid); - if (!g_spawn_async_with_pipes (NULL, (gchar**)argv, NULL, 0, become_user, pw, NULL, NULL, &std_out, NULL, &error)) { + if (!g_spawn_async_with_pipes (NULL, (gchar **) argv, NULL, 0, become_user, pw, NULL, NULL, &std_out, NULL, &error)) { throw_error (context, ERROR_FAILED, "reading file '%s' failed: %s", filename, error->message); return; } @@ -2100,7 +2110,7 @@ user_change_icon_file_authorized_cb (Daemon *daemon, input = g_unix_input_stream_new (std_out, FALSE); bytes = g_output_stream_splice (output, input, G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET, NULL, &error); - if (bytes < 0 || (gsize)bytes != size) { + if (bytes < 0 || (gsize) bytes != size) { throw_error (context, ERROR_FAILED, "copying file '%s' to '%s' failed: %s", filename, dest_path, error ? error->message : "unknown reason"); g_file_delete (dest, NULL, NULL); return; @@ -2124,7 +2134,7 @@ user_set_icon_file (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *filename) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -2144,7 +2154,7 @@ user_set_icon_file (AccountsUser *auser, user_change_icon_file_authorized_cb, context, g_strdup (filename), - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } @@ -2157,7 +2167,8 @@ user_change_locked_authorized_cb (Daemon *daemon, { gboolean locked = GPOINTER_TO_INT (data); - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; const gchar *argv[5]; if (accounts_user_get_locked (ACCOUNTS_USER (user)) != locked) { @@ -2180,25 +2191,25 @@ user_change_locked_authorized_cb (Daemon *daemon, accounts_user_set_locked (ACCOUNTS_USER (user), locked); if (accounts_user_get_automatic_login (ACCOUNTS_USER (user))) { - User *automatic_login_user; - - automatic_login_user = daemon_local_get_automatic_login_user (daemon); - if (accounts_user_get_locked (ACCOUNTS_USER (user))) { - /* If automatic login is enabled for the user then - * disable it in the config file, but keep the state - * attached to the user unharmed so it can be restored - * later in the session - */ - if (user == automatic_login_user) { - daemon_local_set_automatic_login (daemon, user, FALSE, NULL); - accounts_user_set_automatic_login (ACCOUNTS_USER (user), TRUE); - } - } else { - if (automatic_login_user == NULL) { - accounts_user_set_automatic_login (ACCOUNTS_USER (user), FALSE); - daemon_local_set_automatic_login (daemon, user, TRUE, NULL); - } - } + User *automatic_login_user; + + automatic_login_user = daemon_local_get_automatic_login_user (daemon); + if (accounts_user_get_locked (ACCOUNTS_USER (user))) { + /* If automatic login is enabled for the user then + * disable it in the config file, but keep the state + * attached to the user unharmed so it can be restored + * later in the session + */ + if (user == automatic_login_user) { + daemon_local_set_automatic_login (daemon, user, FALSE, NULL); + accounts_user_set_automatic_login (ACCOUNTS_USER (user), TRUE); + } + } else { + if (automatic_login_user == NULL) { + accounts_user_set_automatic_login (ACCOUNTS_USER (user), FALSE); + daemon_local_set_automatic_login (daemon, user, TRUE, NULL); + } + } } accounts_user_emit_changed (ACCOUNTS_USER (user)); @@ -2214,7 +2225,8 @@ user_set_locked (AccountsUser *auser, GDBusMethodInvocation *context, gboolean locked) { - User *user = (User*)auser; + User *user = (User *) auser; + daemon_local_check_auth (user->daemon, user, "org.freedesktop.accounts.user-administration", @@ -2234,11 +2246,13 @@ user_change_account_type_authorized_cb (Daemon *daemon, { AccountType account_type = GPOINTER_TO_INT (data); - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; gid_t *groups; gint ngroups; - g_autoptr(GString) str = NULL; - g_auto(GStrv) extra_admin_groups = NULL; + + g_autoptr (GString) str = NULL; + g_auto (GStrv) extra_admin_groups = NULL; g_autofree gid_t *extra_admin_groups_gids = NULL; gsize n_extra_admin_groups_gids = 0; gid_t admin_gid; @@ -2265,17 +2279,19 @@ user_change_account_type_authorized_cb (Daemon *daemon, if (groups[i] == admin_gid) group_is_admin = TRUE; - for (gsize j = 0; j < n_extra_admin_groups_gids; j++) + for (gsize j = 0; j < n_extra_admin_groups_gids; j++) { if (groups[i] == extra_admin_groups_gids[j]) group_is_admin = TRUE; + } if (!group_is_admin) g_string_append_printf (str, "%d,", groups[i]); } switch (account_type) { case ACCOUNT_TYPE_ADMINISTRATOR: - for (i = 0; i < n_extra_admin_groups_gids; i++) + for (i = 0; i < n_extra_admin_groups_gids; i++) { g_string_append_printf (str, "%d,", extra_admin_groups_gids[i]); + } g_string_append_printf (str, "%d", admin_gid); break; @@ -2315,7 +2331,8 @@ user_set_account_type (AccountsUser *auser, GDBusMethodInvocation *context, gint account_type) { - User *user = (User*)auser; + User *user = (User *) auser; + if (account_type < 0 || account_type > ACCOUNT_TYPE_LAST) { throw_error (context, ERROR_FAILED, "unknown account type: %d", account_type); return TRUE; @@ -2340,7 +2357,8 @@ user_change_password_mode_authorized_cb (Daemon *daemon, { PasswordMode mode = GPOINTER_TO_INT (data); - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; const gchar *argv[6]; if (((PasswordMode) accounts_user_get_password_mode (ACCOUNTS_USER (user))) != mode) { @@ -2354,7 +2372,6 @@ user_change_password_mode_authorized_cb (Daemon *daemon, if (mode == PASSWORD_MODE_SET_AT_LOGIN || mode == PASSWORD_MODE_NONE) { - argv[0] = "/usr/bin/passwd"; argv[1] = "-d"; argv[2] = "--"; @@ -2386,8 +2403,7 @@ user_change_password_mode_authorized_cb (Daemon *daemon, * unlocking the account */ accounts_user_set_locked (ACCOUNTS_USER (user), FALSE); - } - else if (accounts_user_get_locked (ACCOUNTS_USER (user))) { + } else if (accounts_user_get_locked (ACCOUNTS_USER (user))) { argv[0] = "/usr/sbin/usermod"; argv[1] = "-U"; argv[2] = "--"; @@ -2417,7 +2433,7 @@ user_set_password_mode (AccountsUser *auser, GDBusMethodInvocation *context, gint mode) { - User *user = (User*)auser; + User *user = (User *) auser; const gchar *action_id; gint uid; @@ -2455,7 +2471,8 @@ user_change_password_authorized_cb (Daemon *daemon, { gchar **strings = data; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; const gchar *argv[6]; sys_log (context, @@ -2501,7 +2518,7 @@ user_set_password (AccountsUser *auser, const gchar *password, const gchar *hint) { - User *user = (User*)auser; + User *user = (User *) auser; gchar **data; const gchar *action_id; gint uid; @@ -2527,9 +2544,9 @@ user_set_password (AccountsUser *auser, user_change_password_authorized_cb, context, data, - (GDestroyNotify)free_passwords); + (GDestroyNotify) free_passwords); - memset ((char*)password, 0, strlen (password)); + memset ((char *) password, 0, strlen (password)); return TRUE; } @@ -2561,7 +2578,7 @@ user_set_password_hint (AccountsUser *auser, GDBusMethodInvocation *context, const gchar *hint) { - User *user = (User*)auser; + User *user = (User *) auser; int uid; const gchar *action_id; @@ -2581,7 +2598,7 @@ user_set_password_hint (AccountsUser *auser, user_change_password_hint_authorized_cb, context, g_strdup (hint), - (GDestroyNotify)g_free); + (GDestroyNotify) g_free); return TRUE; } @@ -2593,7 +2610,8 @@ user_change_automatic_login_authorized_cb (Daemon *daemon, gpointer data) { gboolean enabled = GPOINTER_TO_INT (data); - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; sys_log (context, "%s automatic login for user '%s' (%d)", @@ -2619,7 +2637,8 @@ user_set_automatic_login (AccountsUser *auser, GDBusMethodInvocation *context, gboolean enabled) { - User *user = (User*)auser; + User *user = (User *) auser; + daemon_local_check_auth (user->daemon, user, "org.freedesktop.accounts.user-administration", @@ -2639,7 +2658,7 @@ user_finalize (GObject *object) user = USER (object); if (user->changed_timeout_id != 0) - g_source_remove (user->changed_timeout_id); + g_source_remove (user->changed_timeout_id); g_clear_pointer (&user->keyfile, g_key_file_unref); @@ -34,13 +34,15 @@ #define USER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), TYPE_USER, User)) #define IS_USER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), TYPE_USER)) -typedef enum { +typedef enum +{ ACCOUNT_TYPE_STANDARD, ACCOUNT_TYPE_ADMINISTRATOR, #define ACCOUNT_TYPE_LAST ACCOUNT_TYPE_ADMINISTRATOR } AccountType; -typedef enum { +typedef enum +{ PASSWORD_MODE_REGULAR, PASSWORD_MODE_SET_AT_LOGIN, PASSWORD_MODE_NONE, @@ -49,33 +51,33 @@ typedef enum { /* local methods */ -GType user_get_type (void) G_GNUC_CONST; -User * user_new (Daemon *daemon, - uid_t uid); +GType user_get_type (void) G_GNUC_CONST; +User * user_new (Daemon *daemon, + uid_t uid); -void user_update_from_pwent (User *user, - struct passwd *pwent, - struct spwd *spent); -void user_update_from_cache (User *user); -void user_update_local_account_property (User *user, - gboolean local); -void user_update_system_account_property (User *user, - gboolean system); -gboolean user_get_cached (User *user); -void user_set_cached (User *user, - gboolean cached); -void user_set_saved (User *user, - gboolean saved); +void user_update_from_pwent (User *user, + struct passwd *pwent, + struct spwd *spent); +void user_update_from_cache (User *user); +void user_update_local_account_property (User *user, + gboolean local); +void user_update_system_account_property (User *user, + gboolean system); +gboolean user_get_cached (User *user); +void user_set_cached (User *user, + gboolean cached); +void user_set_saved (User *user, + gboolean saved); -void user_register (User *user); -void user_unregister (User *user); -void user_changed (User *user); +void user_register (User *user); +void user_unregister (User *user); +void user_changed (User *user); -void user_save (User *user); +void user_save (User *user); -const gchar * user_get_user_name (User *user); -gboolean user_get_system_account (User *user); -gboolean user_get_local_account (User *user); -const gchar * user_get_object_path (User *user); -uid_t user_get_uid (User *user); -const gchar * user_get_shell (User *user); +const gchar * user_get_user_name (User *user); +gboolean user_get_system_account (User *user); +gboolean user_get_local_account (User *user); +const gchar * user_get_object_path (User *user); +uid_t user_get_uid (User *user); +const gchar * user_get_shell (User *user); @@ -41,7 +41,8 @@ get_cmdline_of_pid (GPid pid) g_autofree gchar *filename = NULL; g_autofree gchar *contents = NULL; gsize contents_len; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; guint n; filename = g_strdup_printf ("/proc/%d/cmdline", (int) pid); @@ -70,8 +71,8 @@ static gboolean get_caller_pid (GDBusMethodInvocation *context, GPid *pid) { - g_autoptr(GVariant) reply = NULL; - g_autoptr(GError) error = NULL; + g_autoptr (GVariant) reply = NULL; + g_autoptr (GError) error = NULL; guint32 pid_as_int; reply = g_dbus_connection_call_sync (g_dbus_method_invocation_get_connection (context), @@ -103,7 +104,7 @@ get_caller_pid (GDBusMethodInvocation *context, void sys_log (GDBusMethodInvocation *context, const gchar *format, - ...) + ...) { va_list args; g_autofree gchar *msg = NULL; @@ -159,7 +160,7 @@ static gboolean compat_check_exit_status (int estatus, GError **error) { -#if GLIB_CHECK_VERSION(2, 33, 12) +#if GLIB_CHECK_VERSION (2, 33, 12) return g_spawn_check_exit_status (estatus, error); #else if (!WIFEXITED (estatus)) { @@ -174,7 +175,7 @@ compat_check_exit_status (int estatus, G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED, "Exited with code %d", - WEXITSTATUS(estatus)); + WEXITSTATUS (estatus)); return FALSE; } return TRUE; @@ -182,26 +183,26 @@ compat_check_exit_status (int estatus, } gboolean -spawn_sync (const gchar *argv[], - GError **error) +spawn_sync (const gchar *argv[], + GError **error) { gboolean ret = FALSE; gint status; - if (!g_spawn_sync (NULL, (gchar**) argv, NULL, 0, NULL, NULL, NULL, NULL, &status, error)) + if (!g_spawn_sync (NULL, (gchar **) argv, NULL, 0, NULL, NULL, NULL, NULL, &status, error)) goto out; if (!compat_check_exit_status (status, error)) goto out; ret = TRUE; - out: +out: return ret; } gint -get_user_groups (const gchar *user, - gid_t group, - gid_t **groups) +get_user_groups (const gchar *user, + gid_t group, + gid_t **groups) { gint res; gint ngroups; @@ -239,7 +240,7 @@ get_admin_groups (gid_t *admin_gid_out, gid_t **groups_out, gsize *n_groups_out) { - g_auto(GStrv) extra_admin_groups = NULL; + g_auto (GStrv) extra_admin_groups = NULL; g_autofree gid_t *extra_admin_groups_gids = NULL; gsize n_extra_admin_groups_gids = 0; gsize i; @@ -292,8 +293,8 @@ gboolean get_caller_uid (GDBusMethodInvocation *context, gint *uid) { - g_autoptr(GVariant) reply = NULL; - g_autoptr(GError) error = NULL; + g_autoptr (GVariant) reply = NULL; + g_autoptr (GError) error = NULL; reply = g_dbus_connection_call_sync (g_dbus_method_invocation_get_connection (context), "org.freedesktop.DBus", @@ -325,18 +326,18 @@ get_caller_uid (GDBusMethodInvocation *context, */ enum { - COMPONENT_CODESET = 1 << 0, + COMPONENT_CODESET = 1 << 0, COMPONENT_TERRITORY = 1 << 1, - COMPONENT_MODIFIER = 1 << 2, - COMPONENT_LANGUAGE = 1 << 3, + COMPONENT_MODIFIER = 1 << 2, + COMPONENT_LANGUAGE = 1 << 3, }; /* Returns TRUE if value was non-empty */ static gboolean -match_info_fetch_named_non_empty (GMatchInfo *match_info, - const char *match_name, - char **variable) +match_info_fetch_named_non_empty (GMatchInfo *match_info, + const char *match_name, + char **variable) { g_autofree char *value = NULL; @@ -349,14 +350,14 @@ match_info_fetch_named_non_empty (GMatchInfo *match_info, } static guint -explode_locale (const gchar *locale, - gchar **language, - gchar **territory, - gchar **codeset, - gchar **modifier) +explode_locale (const gchar *locale, + gchar **language, + gchar **territory, + gchar **codeset, + gchar **modifier) { - g_autoptr(GRegex) regex = NULL; - g_autoptr(GMatchInfo) match_info = NULL; + g_autoptr (GRegex) regex = NULL; + g_autoptr (GMatchInfo) match_info = NULL; guint mask = 0; if (locale == NULL) @@ -387,7 +388,7 @@ explode_locale (const gchar *locale, gboolean verify_xpg_locale (const char *locale) { - return (explode_locale (locale, NULL, NULL, NULL, NULL) & COMPONENT_LANGUAGE); + return explode_locale (locale, NULL, NULL, NULL, NULL) & COMPONENT_LANGUAGE; } gboolean @@ -405,8 +406,8 @@ static char *icondir = NULL; void init_dirs (void) { - if (getuid() != 0 && - geteuid() != 0 && + if (getuid () != 0 && + geteuid () != 0 && g_getenv ("ROOTDIR") != NULL) { userdir = g_build_filename (g_getenv ("ROOTDIR"), USERDIR, NULL); icondir = g_build_filename (g_getenv ("ROOTDIR"), ICONDIR, NULL); @@ -442,5 +443,5 @@ get_sysconfdir (void) const char * get_icondir (void) { - return icondir; + return icondir; } @@ -25,23 +25,24 @@ void sys_log (GDBusMethodInvocation *context, const gchar *format, - ...); + ...); -gboolean get_caller_uid (GDBusMethodInvocation *context, gint *uid); +gboolean get_caller_uid (GDBusMethodInvocation *context, + gint *uid); -gboolean spawn_sync (const gchar *argv[], - GError **error); +gboolean spawn_sync (const gchar *argv[], + GError **error); gboolean get_admin_groups (gid_t *admin_gid_out, gid_t **groups_out, gsize *n_groups_out); -gint get_user_groups (const gchar *username, - gid_t group, - gid_t **groups); +gint get_user_groups (const gchar *username, + gid_t group, + gid_t **groups); gboolean verify_xpg_locale (const char *locale); -gboolean verify_locale (const char *locale); +gboolean verify_locale (const char *locale); void init_dirs (void); void free_dirs (void); diff --git a/src/wtmp-helper.c b/src/wtmp-helper.c index 01caa2e..1e3b942 100644 --- a/src/wtmp-helper.c +++ b/src/wtmp-helper.c @@ -29,16 +29,18 @@ #include <utmpx.h> -typedef struct { +typedef struct +{ guint64 frequency; - gint64 time; - GList *previous_logins; + gint64 time; + GList *previous_logins; } UserAccounting; -typedef struct { - gchar *id; - gint64 login_time; - gint64 logout_time; +typedef struct +{ + gchar *id; + gint64 login_time; + gint64 logout_time; } UserPreviousLogin; static void @@ -52,20 +54,20 @@ static gboolean wtmp_helper_start (void) { #if defined(HAVE_SETUTXDB) - if (setutxdb (UTXDB_LOG, NULL) != 0) { - return FALSE; - } + if (setutxdb (UTXDB_LOG, NULL) != 0) { + return FALSE; + } #elif defined(PATH_WTMP) - if (utmpxname (PATH_WTMP) != 0) { - return FALSE; - } + if (utmpxname (PATH_WTMP) != 0) { + return FALSE; + } - setutxent (); + setutxent (); #else #error You have utmpx.h, but no known way to use it for wtmp entries #endif - return TRUE; + return TRUE; } void @@ -87,7 +89,7 @@ wtmp_helper_update_login_frequencies (GHashTable *users) logout_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); while ((wtmp_entry = getutxent ())) { - UserAccounting *accounting; + UserAccounting *accounting; UserPreviousLogin *previous_login; gboolean shutdown_or_reboot = FALSE; @@ -157,11 +159,11 @@ wtmp_helper_update_login_frequencies (GHashTable *users) g_hash_table_iter_init (&iter, login_hash); while (g_hash_table_iter_next (&iter, &key, &value)) { - UserAccounting *accounting = (UserAccounting *) value; + UserAccounting *accounting = (UserAccounting *) value; UserPreviousLogin *previous_login; - gboolean changed = FALSE; - guint64 old_login_frequency; - guint64 old_login_time; + gboolean changed = FALSE; + guint64 old_login_frequency; + guint64 old_login_time; user = g_hash_table_lookup (users, key); if (user == NULL) { diff --git a/src/wtmp-helper.h b/src/wtmp-helper.h index ff076ef..9cb7521 100644 --- a/src/wtmp-helper.h +++ b/src/wtmp-helper.h @@ -26,5 +26,5 @@ #include <shadow.h> #endif -const gchar * wtmp_helper_get_path_for_monitor (void); -void wtmp_helper_update_login_frequencies (GHashTable *users); +const gchar * wtmp_helper_get_path_for_monitor (void); +void wtmp_helper_update_login_frequencies (GHashTable *users); diff --git a/tests/util.c b/tests/util.c index abfc03e..b166d10 100644 --- a/tests/util.c +++ b/tests/util.c @@ -8,7 +8,7 @@ main (int argc, { guint i; - setlocale(LC_ALL, "C.UTF-8"); + setlocale (LC_ALL, "C.UTF-8"); if (argc > 1) { for (i = 1; i < argc; i++) { @@ -33,36 +33,37 @@ main (int argc, return 0; } - struct { + struct + { const char *locale; const char *lang; const char *territory; const char *codeset; const char *modifier; } tests[] = { - { "en", "en", NULL, NULL, NULL }, - { "en_GB", "en", "GB", NULL, NULL }, - { "en_GB.UTF-8", "en", "GB", "UTF-8", NULL }, - { "en_GB.UTF-8@latin", "en", "GB", "UTF-8", "latin" }, - { "en_GB@latin", "en", "GB", NULL, "latin" }, - { "en_GB.iso8859-1", "en", "GB", "iso8859-1", NULL }, - { "1234", NULL, NULL, NULL, NULL }, - { "Test Language 1", NULL, NULL, NULL, NULL }, - { "en_GB.UTF-8@latin WOOP", NULL, NULL, NULL, NULL }, - { "ace", "ace", NULL, NULL, NULL }, - { "be@latin", "be", NULL, NULL, "latin" }, - { "ca.us-ascii", "ca", NULL, "us-ascii", NULL }, - { "cs.cp1250", "cs", NULL, "cp1250", NULL }, - { "_GB.UTF-8", NULL, NULL, NULL, NULL }, + { "en", "en", NULL, NULL, NULL }, + { "en_GB", "en", "GB", NULL, NULL }, + { "en_GB.UTF-8", "en", "GB", "UTF-8", NULL }, + { "en_GB.UTF-8@latin", "en", "GB", "UTF-8", "latin" }, + { "en_GB@latin", "en", "GB", NULL, "latin" }, + { "en_GB.iso8859-1", "en", "GB", "iso8859-1", NULL }, + { "1234", NULL, NULL, NULL, NULL }, + { "Test Language 1", NULL, NULL, NULL, NULL }, + { "en_GB.UTF-8@latin WOOP", NULL, NULL, NULL, NULL }, + { "ace", "ace", NULL, NULL, NULL }, + { "be@latin", "be", NULL, NULL, "latin" }, + { "ca.us-ascii", "ca", NULL, "us-ascii", NULL }, + { "cs.cp1250", "cs", NULL, "cp1250", NULL }, + { "_GB.UTF-8", NULL, NULL, NULL, NULL }, /* qaa-qtz is a fake locale erroneously generated by some * downstream distributions because of a mistaken entry * shipped in iso-codes. The ISO 639.2 registration authority * intended all codes starting with "q" less than "qu" to be * reserved for local use. Ensure the fake locale isn't * allowed. */ - { "qaa-qtz", NULL, NULL, NULL, NULL }, - { "ru_RU.KOI8-R", "ru", "RU", "KOI8-R", NULL }, - { "", NULL, NULL, NULL, NULL }, + { "qaa-qtz", NULL, NULL, NULL, NULL }, + { "ru_RU.KOI8-R", "ru", "RU", "KOI8-R", NULL }, + { "", NULL, NULL, NULL, NULL }, { NULL }, }; |