diff options
Diffstat (limited to 'src/libaccountsservice/act-user-manager.c')
-rw-r--r-- | src/libaccountsservice/act-user-manager.c | 245 |
1 files changed, 244 insertions, 1 deletions
diff --git a/src/libaccountsservice/act-user-manager.c b/src/libaccountsservice/act-user-manager.c index 3c9ccac..68adc67 100644 --- a/src/libaccountsservice/act-user-manager.c +++ b/src/libaccountsservice/act-user-manager.c @@ -86,6 +86,7 @@ * @ACT_USER_MANAGER_ERROR_USER_DOES_NOT_EXIST: The user does not exist * @ACT_USER_MANAGER_ERROR_PERMISSION_DENIED: Permission denied * @ACT_USER_MANAGER_ERROR_NOT_SUPPORTED: Operation not supported + * @ACT_USER_MANAGER_ERROR_USER_NOT_GUEST: The user is not a guest account * * Various error codes returned by the accounts service. */ @@ -255,7 +256,8 @@ static const GDBusErrorEntry error_entries[] = { { 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" }, + { ACT_USER_MANAGER_ERROR_USER_NOT_GUEST, "org.freedesktop.Accounts.Error.UserNotGuest" } }; GQuark @@ -3121,6 +3123,130 @@ act_user_manager_create_user_finish (ActUserManager *manager, } /** + * act_user_manager_create_guest: + * @manager: a #ActUserManager + * @error: a #GError + * + * Creates a guest account on the system. + * + * Returns: (transfer full): user object + * + * Since: 0.6.46 + */ +ActUser * +act_user_manager_create_guest (ActUserManager *manager, + GError **error) +{ + GError *local_error = NULL; + gboolean res; + gchar *path; + ActUser *user; + + g_debug ("ActUserManager: Creating guest"); + + g_assert (manager->priv->accounts_proxy != NULL); + + local_error = NULL; + res = accounts_accounts_call_create_guest_sync (manager->priv->accounts_proxy, + &path, + NULL, + &local_error); + if (! res) { + g_propagate_error (error, local_error); + return NULL; + } + + user = add_new_user_for_object_path (path, manager); + + g_free (path); + + return user; +} + +/** + * act_user_manager_create_guest_async: + * @manager: a #ActUserManager + * @cancellable: (allow-none): optional #GCancellable object, + * %NULL to ignore + * @callback: (scope async): a #GAsyncReadyCallback to call + * when the request is satisfied + * @user_data: (closure): the data to pass to @callback + * + * Asynchronously creates a guest account on the system. + * + * For more details, see act_user_manager_create_guest(), which + * is the synchronous version of this call. + * + * Since: 0.6.46 + */ +void +act_user_manager_create_guest_async (ActUserManager *manager, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task; + + g_return_if_fail (ACT_IS_USER_MANAGER (manager)); + g_return_if_fail (manager->priv->accounts_proxy != NULL); + + g_debug ("ActUserManager: Creating guest (async)"); + + g_assert (manager->priv->accounts_proxy != NULL); + + task = g_task_new (G_OBJECT (manager), + cancellable, + callback, user_data); + + accounts_accounts_call_create_guest (manager->priv->accounts_proxy, + cancellable, + act_user_manager_async_complete_handler, task); +} + +/** + * act_user_manager_create_guest_finish: + * @manager: a #ActUserManager + * @result: a #GAsyncResult + * @error: a #GError + * + * Finishes an asynchronous guest creation. + * + * See act_user_manager_create_guest_async(). + * + * Returns: (transfer full): user object + * + * Since: 0.6.46 + */ +ActUser * +act_user_manager_create_guest_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error) +{ + GAsyncResult *inner_result; + ActUser *user = NULL; + gchar *path; + GError *remote_error = NULL; + + inner_result = g_task_propagate_pointer (G_TASK (result), error); + if (inner_result == NULL) { + return FALSE; + } + + if (accounts_accounts_call_create_guest_finish (manager->priv->accounts_proxy, + &path, inner_result, &remote_error)) { + user = add_new_user_for_object_path (path, manager); + g_free (path); + } + + if (remote_error) { + g_dbus_error_strip_remote_error (remote_error); + g_propagate_error (error, remote_error); + } + + return user; +} + +/** * act_user_manager_cache_user: * @manager: a #ActUserManager * @username: a user name @@ -3479,3 +3605,120 @@ act_user_manager_delete_user_finish (ActUserManager *manager, return success; } + +/** + * act_user_manager_delete_guest: + * @manager: a #ActUserManager + * @user: an #ActUser object + * @error: a #GError + * + * Deletes a guest account on the system. + * + * Returns: %TRUE if the user account was successfully deleted + * + * Since: 0.6.46 + */ +gboolean +act_user_manager_delete_guest (ActUserManager *manager, + ActUser *user, + GError **error) +{ + GError *local_error = NULL; + + g_debug ("ActUserManager: Deleting guest '%s' (uid %ld)", act_user_get_user_name (user), (long) act_user_get_uid (user)); + + g_return_val_if_fail (ACT_IS_USER_MANAGER (manager), FALSE); + g_return_val_if_fail (ACT_IS_USER (user), FALSE); + g_return_val_if_fail (manager->priv->accounts_proxy != NULL, FALSE); + + if (!accounts_accounts_call_delete_guest_sync (manager->priv->accounts_proxy, + act_user_get_uid (user), + NULL, + &local_error)) { + g_propagate_error (error, local_error); + return FALSE; + } + + return TRUE; +} + +/** + * act_user_manager_delete_guest_async: + * @manager: a #ActUserManager + * @user: a #ActUser object + * @remove_files: %TRUE to delete the users home directory + * @cancellable: (allow-none): optional #GCancellable object, + * %NULL to ignore + * @callback: (scope async): a #GAsyncReadyCallback to call + * when the request is satisfied + * @user_data: (closure): the data to pass to @callback + * + * Asynchronously deletes a user account from the system. + * + * For more details, see act_user_manager_delete_guest(), which + * is the synchronous version of this call. + * + * Since: 0.6.46 + */ +void +act_user_manager_delete_guest_async (ActUserManager *manager, + ActUser *user, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task; + + g_return_if_fail (ACT_IS_USER_MANAGER (manager)); + g_return_if_fail (ACT_IS_USER (user)); + g_return_if_fail (manager->priv->accounts_proxy != NULL); + + task = g_task_new (G_OBJECT (manager), + cancellable, + callback, user_data); + + g_debug ("ActUserManager: Deleting (async) guest '%s' (uid %ld)", act_user_get_user_name (user), (long) act_user_get_uid (user)); + + accounts_accounts_call_delete_guest (manager->priv->accounts_proxy, + act_user_get_uid (user), + cancellable, + act_user_manager_async_complete_handler, task); +} + +/** + * act_user_manager_delete_guest_finish: + * @manager: a #ActUserManager + * @result: a #GAsyncResult + * @error: a #GError + * + * Finishes an asynchronous guest account deletion. + * + * See act_user_manager_delete_guest_async(). + * + * Returns: %TRUE if the guest account was successfully deleted + * + * Since: 0.6.46 + */ +gboolean +act_user_manager_delete_guest_finish (ActUserManager *manager, + GAsyncResult *result, + GError **error) +{ + GAsyncResult *inner_result; + gboolean success; + GError *remote_error = NULL; + + inner_result = g_task_propagate_pointer (G_TASK (result), error); + if (inner_result == NULL) { + return FALSE; + } + + success = accounts_accounts_call_delete_guest_finish (manager->priv->accounts_proxy, + inner_result, &remote_error); + if (remote_error) { + g_dbus_error_strip_remote_error (remote_error); + g_propagate_error (error, remote_error); + } + + return success; +} |