void account_update (Account *acc, ActUser *user) { acc->u = user; if (user) { cockpit_account_set_user_name (COCKPIT_ACCOUNT (acc), act_user_get_user_name (user)); cockpit_account_set_real_name (COCKPIT_ACCOUNT (acc), act_user_get_real_name (user)); cockpit_account_set_locked (COCKPIT_ACCOUNT (acc), act_user_get_locked (user)); cockpit_account_set_last_login (COCKPIT_ACCOUNT (acc), act_user_get_login_time (user)); cockpit_account_set_logged_in (COCKPIT_ACCOUNT (acc), act_user_is_logged_in_anywhere (user)); cockpit_account_set_groups (COCKPIT_ACCOUNT (acc), act_user_get_groups (user)); cockpit_account_emit_changed (COCKPIT_ACCOUNT (acc)); } }
gboolean would_demote_only_admin (ActUser *user) { ActUserManager *um = act_user_manager_get_default (); /* Prevent the user from demoting the only admin account. * Returns TRUE when user is an administrator and there is only * one enabled administrator. */ if (act_user_get_account_type (user) == ACT_USER_ACCOUNT_TYPE_STANDARD || act_user_get_locked (user)) return FALSE; if (get_num_active_admin (um) > 1) return FALSE; return TRUE; }
static gboolean visible_func (GtkTreeModel *model, GtkTreeIter *iter, UmPasswordDialog *um) { if (um->user) { gint mode; gboolean locked = act_user_get_locked (um->user); gtk_tree_model_get (model, iter, 1, &mode, -1); if (mode == UM_PASSWORD_DIALOG_MODE_LOCK_ACCOUNT && locked) return FALSE; if (mode == UM_PASSWORD_DIALOG_MODE_UNLOCK_ACCOUNT && !locked) return FALSE; return TRUE; } return TRUE; }
static guint get_num_active_admin (ActUserManager *um) { GSList *list; GSList *l; guint num_admin = 0; list = act_user_manager_list_users (um); for (l = list; l != NULL; l = l->next) { ActUser *u = l->data; if (act_user_get_account_type (u) == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR && !act_user_get_locked (u)) { num_admin++; } } g_slist_free (list); return num_admin; }