[gnome-system-tools] Bug 580182 – Don't allow creating groups overwriting existing ones



commit 90f34bc566857a037d65daaa302da43b2cf8a0b3
Author: Milan Bouchet-Valat <nalimilan club fr>
Date:   Sun Jul 26 22:49:28 2009 +0200

    Bug 580182 â?? Don't allow creating groups overwriting existing ones
    
    When creating an user, don't allow its main group to use an already existing name, which overwrites the group and its members. This was a security issue when destroying admin groups. Thanks to Jonathan Davies for the original patch.
    
    A trivial fix also restores the check that prevents a new group to be named as an already existing one using the "Create group" dialog.

 src/users/group-settings.c |   10 +++++-----
 src/users/group-settings.h |    1 +
 src/users/user-settings.c  |    3 +++
 3 files changed, 9 insertions(+), 5 deletions(-)
---
diff --git a/src/users/group-settings.c b/src/users/group-settings.c
index b4386a4..b042a24 100644
--- a/src/users/group-settings.c
+++ b/src/users/group-settings.c
@@ -163,7 +163,7 @@ group_settings_dialog_new (OobsGroup *group)
 	name = oobs_group_get_name (group);
 
 	if (!name) {
-		g_object_set_data (G_OBJECT (dialog), "is_new", GINT_TO_POINTER (FALSE));
+		g_object_set_data (G_OBJECT (dialog), "is_new", GINT_TO_POINTER (TRUE));
 		gtk_window_set_title (GTK_WINDOW (dialog), _("New group"));
 
 		widget = gst_dialog_get_widget (tool->main_dialog, "group_settings_gid");
@@ -212,8 +212,8 @@ is_group_root (OobsGroup *group)
 	return (strcmp (name, "root") == 0);
 }
 
-static gboolean
-group_exists (const gchar *name)
+gboolean
+group_settings_group_exists (const gchar *name)
 {
 	OobsGroupsConfig *config;
 	OobsList *groups_list;
@@ -282,9 +282,9 @@ check_name (gchar **primary_text, gchar **secondary_text, gpointer data)
 		*secondary_text = g_strdup (_("Please set a valid group name consisting of "
 					      "a lower case letter followed by lower case "
 					      "letters and numbers."));
-	} else if (group_settings_dialog_group_is_new () && group_exists (name)) {
+	} else if (group_settings_dialog_group_is_new () && group_settings_group_exists (name)) {
 		*primary_text = g_strdup_printf (_("Group \"%s\" already exists"), name);
-		*secondary_text = g_strdup (_("Please select a different user name."));
+		*secondary_text = g_strdup (_("Please choose a different group name."));
 	}
 }
 
diff --git a/src/users/group-settings.h b/src/users/group-settings.h
index 67be7dd..6c7ad7b 100644
--- a/src/users/group-settings.h
+++ b/src/users/group-settings.h
@@ -36,6 +36,7 @@ gint         group_settings_dialog_run          (GtkWidget    *dialog,
 						 OobsGroup    *group);
 
 gid_t        group_settings_find_new_gid        (void);
+gboolean     group_settings_group_exists	(const gchar *name);
 void         group_settings_dialog_get_data     (OobsGroup    *group);
 OobsGroup *  group_settings_dialog_get_group    (void);
 
diff --git a/src/users/user-settings.c b/src/users/user-settings.c
index 808f7c3..087ea26 100644
--- a/src/users/user-settings.c
+++ b/src/users/user-settings.c
@@ -557,6 +557,9 @@ check_login (gchar **primary_text, gchar **secondary_text, gpointer data)
 	} else if (!user && login_exists (login)) {
 		*primary_text = g_strdup_printf (_("User name \"%s\" already exists"), login);
 		*secondary_text = g_strdup (_("Please select a different user name."));
+	} else if (group_settings_group_exists (login)) {
+		*primary_text = g_strdup_printf (_("Group \"%s\" already exists"), login);
+		*secondary_text = g_strdup (_("Please choose a different group name."));
 	}
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]