static gboolean group_exists (const gchar *name) { OobsGroupsConfig *config; OobsList *groups_list; OobsListIter iter; GObject *group; gboolean valid; const gchar *group_name; config = OOBS_GROUPS_CONFIG (GST_USERS_TOOL (tool)->groups_config); groups_list = oobs_groups_config_get_groups (config); valid = oobs_list_get_iter_first (groups_list, &iter); while (valid) { group = oobs_list_get (groups_list, &iter); group_name = oobs_group_get_name (OOBS_GROUP (group)); g_object_unref (group); if (group_name && strcmp (name, group_name) == 0) return TRUE; valid = oobs_list_iter_next (groups_list, &iter); } return FALSE; }
GtkWidget* group_settings_dialog_new (OobsGroup *group) { GtkWidget *dialog, *widget; const gchar *name; gchar *title; dialog = gst_dialog_get_widget (tool->main_dialog, "group_settings_dialog"); name = oobs_group_get_name (group); if (!name) { g_object_set_data (G_OBJECT (dialog), "is_new", GINT_TO_POINTER (FALSE)); gtk_window_set_title (GTK_WINDOW (dialog), _("New group")); widget = gst_dialog_get_widget (tool->main_dialog, "group_settings_gid"); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), group_settings_find_new_gid ()); } else { g_object_set_data (G_OBJECT (dialog), "is_new", GINT_TO_POINTER (FALSE)); title = g_strdup_printf (_("Group '%s' Properties"), name); gtk_window_set_title (GTK_WINDOW (dialog), title); g_free (title); widget = gst_dialog_get_widget (tool->main_dialog, "group_settings_gid"); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), oobs_group_get_gid (group)); } widget = gst_dialog_get_widget (tool->main_dialog, "group_settings_name"); set_entry_text (widget, name); group_members_table_set_from_group (group); return dialog; }
static void on_user_privilege_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data) { GtkTreeModel *model, *child_model; GtkTreePath *path = gtk_tree_path_new_from_string (path_str); GtkTreeIter iter, child_iter; OobsGroup *group; gboolean value; model = (GtkTreeModel*) data; if (gtk_tree_model_get_iter (model, &iter, path)) { child_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model)); gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), &child_iter, &iter); gtk_tree_model_get (child_model, &child_iter, COL_MEMBER, &value, COL_GROUP, &group, -1); /* check that current user should be allowed to lose admin rights, * possibly showing a warning/error dialog */ if (!value || strcmp (oobs_group_get_name (group), ADMIN_GROUP) != 0 || user_settings_check_revoke_admin_rights ()) gtk_list_store_set (GTK_LIST_STORE (child_model), &child_iter, COL_MEMBER, !value, -1); g_object_unref (group); } gtk_tree_path_free (path); }
static gboolean is_group_root (OobsGroup *group) { const gchar *name = oobs_group_get_name (group); if (!name) return FALSE; return (strcmp (name, "root") == 0); }
static gboolean check_group_delete (OobsGroup *group) { GtkWidget *parent; GtkWidget *dialog; gint reply; parent = gst_dialog_get_widget (tool->main_dialog, "group_settings_dialog"); if (oobs_group_get_gid (group) == 0) { dialog = gtk_message_dialog_new (GTK_WINDOW (parent), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Administrator group can not be deleted")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _("This would leave the system unusable.")); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); return FALSE; } /* FIXME: should check that any user of this group is logged in */ dialog = gtk_message_dialog_new (GTK_WINDOW (parent), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE, _("Are you sure you want to delete group \"%s\"?"), oobs_group_get_name (group)); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _("This may leave files with invalid group ID in the filesystem.")); gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_DELETE, GTK_RESPONSE_ACCEPT, NULL); reply = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); return (reply == GTK_RESPONSE_ACCEPT); }
static gboolean find_group_in_profile (OobsGroup *group, GstUserProfile *profile) { gchar **groups; const gchar *name; if (!profile->groups) return FALSE; groups = profile->groups; name = oobs_group_get_name (group); while (*groups) { if (strcmp (*groups, name) == 0) return TRUE; groups++; } return FALSE; }
void privileges_table_add_group (OobsGroup *group, OobsListIter *list_iter) { const PrivilegeDescription *p; GtkWidget *table; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; p = privilege_search (oobs_group_get_name (group)); table = gst_dialog_get_widget (tool->main_dialog, "user_privileges"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (table)); store = GTK_LIST_STORE (gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model))); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, COL_MEMBER, FALSE, COL_DESCRIPTION, (p) ? _(p->privilege) : NULL, COL_GROUP, group, -1); }