author | yippi |
Mon, 27 Sep 2010 21:07:51 +0000 | |
changeset 20108 | 51df67ca9307 |
parent 14401 | b95c41e67d3f |
permissions | -rw-r--r-- |
13240 | 1 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/Makefile.am gnome-system-tools-2.14.0/src/users/Makefile.am |
2 |
--- gnome-system-tools-2.14.0.orig/src/users/Makefile.am 2008-08-20 09:37:14.200348000 +0800 |
|
3 |
+++ gnome-system-tools-2.14.0/src/users/Makefile.am 2008-08-22 07:19:34.724969000 +0800 |
|
4 |
@@ -32,6 +32,7 @@ |
|
5 |
user-group-xml.c user-group-xml.h \ |
|
6 |
profiles-table.c profiles-table.h \ |
|
7 |
profile-settings.c profile-settings.h \ |
|
8 |
- privileges-table.c privileges-table.h |
|
9 |
+ privileges-table.c privileges-table.h \ |
|
10 |
+ roles-table.c roles-table.h |
|
11 |
||
12 |
toolpixmaps = |
|
13 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/callbacks.c gnome-system-tools-2.14.0/src/users/callbacks.c |
|
14 |
--- gnome-system-tools-2.14.0.orig/src/users/callbacks.c 2008-08-20 09:37:14.203441000 +0800 |
|
15 |
+++ gnome-system-tools-2.14.0/src/users/callbacks.c 2008-08-20 09:39:07.030442000 +0800 |
|
16 |
@@ -641,7 +641,11 @@ |
|
17 |
combo_add_shells (shells_combo); |
|
18 |
combo_add_groups (groups_option_menu, TRUE); |
|
19 |
profile_settings_set_data (node); |
|
20 |
+#ifndef __sun |
|
21 |
populate_privileges_table_from_profile (privileges, node); |
|
22 |
+#else |
|
23 |
+ populate_privileges_table(privileges, node); |
|
24 |
+#endif |
|
25 |
||
26 |
g_object_set_data (G_OBJECT (dialog), "data", node); |
|
27 |
||
28 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/group-settings.c gnome-system-tools-2.14.0/src/users/group-settings.c |
|
29 |
--- gnome-system-tools-2.14.0.orig/src/users/group-settings.c 2008-08-20 09:37:14.205458000 +0800 |
|
30 |
+++ gnome-system-tools-2.14.0/src/users/group-settings.c 2008-08-20 09:39:07.023541000 +0800 |
|
7859
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
31 |
@@ -79,6 +79,7 @@ |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
32 |
GtkWidget *group_settings_all = gst_dialog_get_widget (tool->main_dialog, "group_settings_all"); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
33 |
GtkWidget *group_settings_members = gst_dialog_get_widget (tool->main_dialog, "group_settings_members"); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
34 |
GtkWidget *widget; |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
35 |
+ GtkSpinButton *spin_button; |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
36 |
gchar *buf; |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
37 |
GList *group_settings_all_list = NULL; |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
38 |
|
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
39 |
@@ -90,11 +91,12 @@ |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
40 |
widget = gst_dialog_get_widget (tool->main_dialog, "group_settings_dialog"); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
41 |
gtk_window_set_title (GTK_WINDOW (widget), _("Create New Group")); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
42 |
|
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
43 |
+ spin_button = GTK_SPIN_BUTTON (gst_dialog_get_widget (tool->main_dialog, "group_settings_gid")); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
44 |
+ gtk_spin_button_set_range (spin_button, 0, IDMAX); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
45 |
/* Fill in first available gid */ |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
46 |
buf = (gchar *) find_new_id (gd->node, NULL); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
47 |
if (buf) { |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
48 |
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (gst_dialog_get_widget (tool->main_dialog, "group_settings_gid")), |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
49 |
- g_strtod (buf, NULL)); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
50 |
+ gtk_spin_button_set_value (spin_button, g_strtod (buf, NULL)); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
51 |
g_free (buf); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
52 |
} |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
53 |
|
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
54 |
@@ -357,6 +359,7 @@ |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
55 |
txt = gst_xml_get_child_content (gd->node, "gid"); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
56 |
w0 = gst_dialog_get_widget (tool->main_dialog, "group_settings_gid"); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
57 |
gtk_widget_set_sensitive (w0, gst_tool_get_access (tool)); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
58 |
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON (w0), 0, IDMAX); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
59 |
gtk_spin_button_set_value (GTK_SPIN_BUTTON (w0), g_strtod (txt, NULL)); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
60 |
|
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
61 |
/* Show group settings dialog */ |
13240 | 62 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/passwd.c gnome-system-tools-2.14.0/src/users/passwd.c |
63 |
--- gnome-system-tools-2.14.0.orig/src/users/passwd.c 2008-08-20 09:37:14.206361000 +0800 |
|
64 |
+++ gnome-system-tools-2.14.0/src/users/passwd.c 2008-08-20 09:39:07.029785000 +0800 |
|
7859
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
65 |
@@ -191,10 +191,14 @@ |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
66 |
else |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
67 |
password = g_strdup (pwd); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
68 |
|
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
69 |
+#ifdef USE_AUTHEN_PAM |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
70 |
+ buf = g_strdup(password); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
71 |
+#else |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
72 |
if (uses_md5 ()) |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
73 |
buf = g_strdup (crypt_md5 (password, rand_str (salt, 8))); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
74 |
else |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
75 |
buf = g_strdup (crypt (password, rand_str (salt, 2))); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
76 |
+#endif |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
77 |
|
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
78 |
gst_xml_set_child_content (node, "password", buf); |
8517272aace0
Unbump gnome-system-tools back to 2.14.0. Other modules need work before it can
dc144907
parents:
diff
changeset
|
79 |
|
13240 | 80 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/privileges-table.c gnome-system-tools-2.14.0/src/users/privileges-table.c |
81 |
--- gnome-system-tools-2.14.0.orig/src/users/privileges-table.c 2008-08-20 09:37:14.222946000 +0800 |
|
82 |
+++ gnome-system-tools-2.14.0/src/users/privileges-table.c 2008-08-20 09:39:07.031073000 +0800 |
|
8121 | 83 |
@@ -97,6 +97,7 @@ |
84 |
create_privileges_table (list); |
|
85 |
} |
|
86 |
||
87 |
+#ifndef __sun |
|
88 |
void |
|
89 |
populate_privileges_table (GtkWidget *list, gchar *username) |
|
90 |
{ |
|
8438 | 91 |
@@ -271,3 +272,152 @@ |
8121 | 92 |
valid = gtk_tree_model_iter_next (model, &iter); |
93 |
} |
|
94 |
} |
|
95 |
+#else /* __sun */ |
|
96 |
+static gboolean |
|
97 |
+user_has_rbac_profile( xmlNodePtr user_node, gchar *profile_name ) |
|
98 |
+{ |
|
99 |
+ xmlNodePtr user_rbac, assigned_profiles, profile; |
|
100 |
+ gchar *buf; |
|
101 |
+ gboolean rval = FALSE; |
|
102 |
+ |
|
103 |
+ user_rbac = gst_xml_element_find_first (user_node, "rbac"); |
|
104 |
+ |
|
105 |
+ /* It's possible that the profile has no entries */ |
|
106 |
+ if (user_rbac == NULL) |
|
107 |
+ return(FALSE); |
|
108 |
+ |
|
109 |
+ assigned_profiles = gst_xml_element_find_first (user_rbac, "rbac_profiles"); |
|
110 |
+ g_return_val_if_fail( assigned_profiles != NULL, FALSE ); |
|
111 |
+ |
|
112 |
+ for (profile = gst_xml_element_find_first (assigned_profiles, "rbac_profile"); |
|
113 |
+ profile != NULL; |
|
114 |
+ profile = gst_xml_element_find_next (profile, "rbac_profile")) { |
|
115 |
+ buf = gst_xml_element_get_content (profile); |
|
116 |
+ |
|
117 |
+ if (strcmp (profile_name, buf) == 0) { |
|
118 |
+ g_free (buf); |
|
119 |
+ rval = TRUE; |
|
120 |
+ break; |
|
121 |
+ } |
|
122 |
+ |
|
123 |
+ g_free (buf); |
|
124 |
+ } |
|
125 |
+ |
|
126 |
+ return rval; |
|
127 |
+} |
|
128 |
+ |
|
129 |
+void |
|
130 |
+populate_privileges_table (GtkWidget *list, xmlNodePtr user_node) |
|
131 |
+{ |
|
132 |
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); |
|
133 |
+ xmlNodePtr rbacdb_root = get_root_node (NODE_RBAC); |
|
134 |
+ xmlNodePtr profiles, profile, user; |
|
135 |
+ GtkTreeIter iter; |
|
136 |
+ gchar *name, *desc, *buf; |
|
137 |
+ gboolean val; |
|
138 |
+ |
|
139 |
+ gtk_list_store_clear (GTK_LIST_STORE (model)); |
|
140 |
+ |
|
141 |
+ profiles = gst_xml_element_find_first (rbacdb_root, "rbac_profiles"); |
|
142 |
+ for (profile = gst_xml_element_find_first (profiles, "rbac_profile"); |
|
143 |
+ profile != NULL; |
|
144 |
+ profile = gst_xml_element_find_next (profile, "rbac_profile")) { |
|
145 |
+ name = gst_xml_get_child_content (profile, "name"); |
|
146 |
+ desc = gst_xml_get_child_content (profile, "description"); |
|
147 |
+ |
|
148 |
+ if (name) { |
|
149 |
+ gchar *combined_str; |
|
150 |
+ |
|
151 |
+ val = FALSE; |
|
152 |
+ |
|
153 |
+ /* check whether the user already has RBAC profile */ |
|
154 |
+ if (user_node ) { |
|
155 |
+ if ( user_has_rbac_profile( user_node, name )) { |
|
156 |
+ val = TRUE; |
|
157 |
+ } |
|
158 |
+ } |
|
159 |
+ |
|
160 |
+ if ( desc != NULL ) { |
|
161 |
+ combined_str = g_strdup_printf("%s (%s)", name, desc ); |
|
162 |
+ } |
|
163 |
+ else { |
|
164 |
+ combined_str = name; |
|
165 |
+ } |
|
166 |
+ |
|
167 |
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter); |
|
168 |
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, |
|
169 |
+ 0, val, |
|
170 |
+ 1, combined_str, |
|
171 |
+ 2, name, |
|
172 |
+ -1); |
|
173 |
+ if ( desc != NULL && combined_str != name ) |
|
174 |
+ g_free( combined_str ); |
|
175 |
+ g_free (desc); |
|
176 |
+ g_free (name); |
|
177 |
+ } |
|
178 |
+ } |
|
179 |
+} |
|
180 |
+ |
|
8438 | 181 |
+static void |
182 |
+privileges_save_data (xmlNodePtr profile, const gchar* widget_name ) |
|
8121 | 183 |
+{ |
8438 | 184 |
+ |
185 |
+ GtkWidget *list = NULL; |
|
186 |
+ GtkTreeModel *model = NULL; |
|
8121 | 187 |
+ GtkTreeIter iter; |
188 |
+ xmlNodePtr rbac_node, rbac_profiles_node, rbac_profile_node; |
|
189 |
+ gboolean valid, active; |
|
190 |
+ gchar *name; |
|
191 |
+ |
|
192 |
+ g_return_if_fail (profile != NULL); |
|
8438 | 193 |
+ g_return_if_fail (widget_name != NULL); |
8121 | 194 |
+ |
8438 | 195 |
+ list = gst_dialog_get_widget (tool->main_dialog, widget_name); |
196 |
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); |
|
8121 | 197 |
+ rbac_node = gst_xml_element_find_first (profile, "rbac"); |
198 |
+ |
|
199 |
+ if ( rbac_node != NULL ) { |
|
200 |
+ rbac_profiles_node = gst_xml_element_find_first (rbac_node, "rbac_profiles"); |
|
201 |
+ if (rbac_profiles_node) { |
|
202 |
+ gst_xml_element_destroy_children (rbac_profiles_node); |
|
203 |
+ } |
|
204 |
+ else { |
|
205 |
+ rbac_profiles_node = gst_xml_element_add (profile, "rbac_profiles"); |
|
206 |
+ } |
|
207 |
+ } |
|
208 |
+ else { |
|
209 |
+ rbac_node = gst_xml_element_add (profile, "rbac"); |
|
210 |
+ rbac_profiles_node = gst_xml_element_add (rbac_node, "rbac_profiles"); |
|
211 |
+ } |
|
212 |
+ |
|
213 |
+ valid = gtk_tree_model_get_iter_first (model, &iter); |
|
214 |
+ |
|
215 |
+ while (valid) { |
|
216 |
+ gtk_tree_model_get (model, &iter, |
|
217 |
+ 0, &active, |
|
218 |
+ 2, &name, |
|
219 |
+ -1); |
|
220 |
+ |
|
221 |
+ if (active) { |
|
222 |
+ rbac_profile_node = gst_xml_element_add (rbac_profiles_node, "rbac_profile"); |
|
223 |
+ gst_xml_element_set_content (rbac_profile_node, name); |
|
224 |
+ } |
|
225 |
+ |
|
226 |
+ g_free (name); |
|
227 |
+ valid = gtk_tree_model_iter_next (model, &iter); |
|
228 |
+ } |
|
229 |
+} |
|
8438 | 230 |
+ |
231 |
+void |
|
232 |
+user_privileges_save_data (xmlNodePtr node) |
|
233 |
+{ |
|
234 |
+ privileges_save_data( node, "user_privileges"); |
|
235 |
+} |
|
236 |
+ |
|
237 |
+void |
|
238 |
+profile_privileges_save_data (xmlNodePtr node) |
|
239 |
+{ |
|
240 |
+ privileges_save_data( node, "profile_privileges"); |
|
241 |
+} |
|
242 |
+ |
|
8121 | 243 |
+#endif /* __sun */ |
13240 | 244 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/privileges-table.h gnome-system-tools-2.14.0/src/users/privileges-table.h |
245 |
--- gnome-system-tools-2.14.0.orig/src/users/privileges-table.h 2008-08-20 09:37:14.223386000 +0800 |
|
246 |
+++ gnome-system-tools-2.14.0/src/users/privileges-table.h 2008-08-20 09:39:07.031423000 +0800 |
|
8438 | 247 |
@@ -27,7 +27,13 @@ |
8121 | 248 |
void create_user_privileges_table (void); |
249 |
void create_profile_privileges_table (void); |
|
250 |
||
251 |
+#ifndef __sun |
|
252 |
void populate_privileges_table (GtkWidget*, gchar*); |
|
8438 | 253 |
+void user_privileges_save_data (xmlNodePtr); |
254 |
+void profile_privileges_save_data (xmlNodePtr); |
|
8121 | 255 |
+#else |
256 |
+void populate_privileges_table (GtkWidget *list, xmlNodePtr user_node); |
|
257 |
+#endif |
|
258 |
void populate_privileges_table_from_profile (GtkWidget*, xmlNodePtr); |
|
259 |
||
260 |
GList* user_privileges_get_list (GList*); |
|
13240 | 261 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/profile-settings.c gnome-system-tools-2.14.0/src/users/profile-settings.c |
262 |
--- gnome-system-tools-2.14.0.orig/src/users/profile-settings.c 2008-08-20 09:37:14.222032000 +0800 |
|
263 |
+++ gnome-system-tools-2.14.0/src/users/profile-settings.c 2008-08-20 09:39:07.033086000 +0800 |
|
8438 | 264 |
@@ -110,7 +110,11 @@ |
265 |
gst_xml_element_add_with_content (node, "mailbox_dir", "/var/mail"); |
|
266 |
gst_xml_element_add_with_content (node, "skel_dir", "/etc/skel/"); |
|
267 |
gst_xml_element_add_with_content (node, "login_defs", "1"); |
|
268 |
+#ifndef __sun |
|
269 |
profile_groups_save_data (node); |
|
270 |
+#else |
|
271 |
+ profile_privileges_save_data (node); |
|
272 |
+#endif |
|
273 |
} |
|
274 |
||
275 |
gchar* |
|
13240 | 276 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/roles-table.c gnome-system-tools-2.14.0/src/users/roles-table.c |
277 |
--- gnome-system-tools-2.14.0.orig/src/users/roles-table.c 1970-01-01 08:00:00.000000000 +0800 |
|
13396 | 278 |
+++ gnome-system-tools-2.14.0/src/users/roles-table.c 2008-09-04 06:47:02.898745000 +0800 |
279 |
@@ -0,0 +1,217 @@ |
|
13240 | 280 |
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ |
281 |
+/* roles-table.c: this file is part of users-admin, a ximian-setup-tool frontend |
|
282 |
+ * for user administration. |
|
283 |
+ * |
|
284 |
+ * Copyright (C) 2004 Carlos Garnacho |
|
285 |
+ * Copyright (C) 2005 Carlos Garnacho, Sivan Greenberg |
|
286 |
+ * |
|
287 |
+ * This program is free software; you can redistribute it and/or modify |
|
288 |
+ * it under the terms of the GNU General Public License as |
|
289 |
+ * published by the Free Software Foundation; either version 2 of the |
|
290 |
+ * License, or (at your option) any later version. |
|
291 |
+ * |
|
292 |
+ * This program is distributed in the hope that it will be useful, |
|
293 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
294 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
295 |
+ * GNU General Public License for more details. |
|
296 |
+ * |
|
297 |
+ * You should have received a copy of the GNU General Public License |
|
298 |
+ * along with this program; if not, write to the Free Software |
|
299 |
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. |
|
300 |
+ * |
|
301 |
+ * Authors: Carlos Garnacho Parro <[email protected]> |
|
302 |
+ * Sivan Greenberg <[email protected]> |
|
303 |
+ */ |
|
304 |
+ |
|
305 |
+#ifdef HAVE_CONFIG_H |
|
306 |
+# include <config.h> |
|
307 |
+#endif |
|
308 |
+ |
|
309 |
+#include <gtk/gtk.h> |
|
310 |
+ |
|
311 |
+#include "gst.h" |
|
312 |
+#include "roles-table.h" |
|
313 |
+#include "user_group.h" |
|
314 |
+ |
|
315 |
+extern GstTool *tool; |
|
316 |
+ |
|
317 |
+static void |
|
318 |
+on_user_role_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data) |
|
319 |
+{ |
|
320 |
+ GtkTreeModel *model = (GtkTreeModel*) data; |
|
321 |
+ GtkTreePath *path = gtk_tree_path_new_from_string (path_str); |
|
322 |
+ GtkTreeIter iter; |
|
323 |
+ gboolean value; |
|
324 |
+ |
|
325 |
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, path); |
|
326 |
+ gtk_tree_model_get (model, &iter, 0, &value, -1); |
|
327 |
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, !value, -1); |
|
328 |
+} |
|
329 |
+ |
|
330 |
+void |
|
331 |
+create_roles_table (void) |
|
332 |
+{ |
|
333 |
+ GtkTreeModel *model; |
|
334 |
+ GtkCellRenderer *renderer; |
|
335 |
+ GtkTreeViewColumn *column; |
|
336 |
+ GtkTreeIter iter; |
|
337 |
+ |
|
338 |
+ GtkWidget *list = gst_dialog_get_widget (tool->main_dialog, "user_roles"); |
|
339 |
+ |
|
340 |
+ model = GTK_TREE_MODEL (gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING)); |
|
341 |
+ |
|
342 |
+ gtk_tree_view_set_model (GTK_TREE_VIEW (list), model); |
|
343 |
+ g_object_unref (model); |
|
344 |
+ |
|
345 |
+ column = gtk_tree_view_column_new (); |
|
346 |
+ |
|
347 |
+ renderer = gtk_cell_renderer_toggle_new (); |
|
348 |
+ gtk_tree_view_column_pack_start (column, renderer, FALSE); |
|
349 |
+ gtk_tree_view_column_set_attributes (column, |
|
350 |
+ renderer, |
|
351 |
+ "active", 0, |
|
352 |
+ NULL); |
|
353 |
+ g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (on_user_role_toggled), model); |
|
354 |
+ |
|
355 |
+ renderer = gtk_cell_renderer_text_new (); |
|
356 |
+ gtk_tree_view_column_pack_end (column, renderer, TRUE); |
|
357 |
+ gtk_tree_view_column_set_attributes (column, |
|
358 |
+ renderer, |
|
359 |
+ "text", 1, |
|
360 |
+ NULL); |
|
361 |
+ |
|
362 |
+ gtk_tree_view_column_set_sort_column_id (column, 1); |
|
363 |
+ gtk_tree_view_insert_column (GTK_TREE_VIEW (list), column, 0); |
|
364 |
+ gtk_tree_view_column_clicked (column); |
|
365 |
+} |
|
366 |
+ |
|
367 |
+#ifndef __sun |
|
368 |
+#else /* __sun */ |
|
369 |
+static gboolean |
|
370 |
+user_has_rbac_role( xmlNodePtr user_node, gchar *role_name ) |
|
371 |
+{ |
|
372 |
+ xmlNodePtr user_role, assigned_roles, role; |
|
373 |
+ gchar *buf; |
|
374 |
+ gboolean rval = FALSE; |
|
375 |
+ |
|
376 |
+ user_role = gst_xml_element_find_first (user_node, "role"); |
|
377 |
+ |
|
378 |
+ /* It's possible that the profile has no entries */ |
|
379 |
+ if (user_role == NULL) |
|
380 |
+ return(FALSE); |
|
381 |
+ |
|
382 |
+ assigned_roles = gst_xml_element_find_first (user_role, "rbac_roles"); |
|
383 |
+ g_return_val_if_fail( assigned_roles != NULL, FALSE ); |
|
384 |
+ |
|
385 |
+ for (role = gst_xml_element_find_first (assigned_roles, "rbac_role"); |
|
386 |
+ role != NULL; |
|
387 |
+ role = gst_xml_element_find_next (role, "rbac_role")) { |
|
388 |
+ buf = gst_xml_element_get_content (role); |
|
389 |
+ |
|
390 |
+ if (strcmp (role_name, buf) == 0) { |
|
391 |
+ g_free (buf); |
|
392 |
+ rval = TRUE; |
|
393 |
+ break; |
|
394 |
+ } |
|
395 |
+ |
|
396 |
+ g_free (buf); |
|
397 |
+ } |
|
398 |
+ |
|
399 |
+ return rval; |
|
400 |
+} |
|
401 |
+ |
|
402 |
+void |
|
403 |
+populate_roles_table (GtkWidget *list, xmlNodePtr user_node) |
|
404 |
+{ |
|
405 |
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); |
|
406 |
+ xmlNodePtr roledb_root = get_root_node (NODE_ROLE); |
|
407 |
+ xmlNodePtr roles, role, user; |
|
408 |
+ GtkTreeIter iter; |
|
409 |
+ gchar *name, *desc, *buf; |
|
410 |
+ gboolean val; |
|
411 |
+ |
|
412 |
+ gtk_list_store_clear (GTK_LIST_STORE (model)); |
|
413 |
+ |
|
414 |
+ roles = gst_xml_element_find_first (roledb_root, "rbac_roles"); |
|
415 |
+ for (role = gst_xml_element_find_first (roles, "rbac_role"); |
|
416 |
+ role != NULL; |
|
417 |
+ role = gst_xml_element_find_next (role, "rbac_role")) { |
|
418 |
+ name = gst_xml_get_child_content (role, "role"); |
|
419 |
+ |
|
420 |
+ if (name) { |
|
421 |
+ gchar *combined_str; |
|
422 |
+ |
|
423 |
+ val = FALSE; |
|
424 |
+ |
|
425 |
+ /* check whether the user already has RBAC profile */ |
|
426 |
+ if (user_node ) { |
|
427 |
+ if ( user_has_rbac_role ( user_node, name )) { |
|
428 |
+ val = TRUE; |
|
429 |
+ } |
|
430 |
+ } |
|
431 |
+ |
|
432 |
+ combined_str = name; |
|
433 |
+ |
|
434 |
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter); |
|
435 |
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, |
|
436 |
+ 0, val, |
|
437 |
+ 1, combined_str, |
|
438 |
+ 2, name, |
|
439 |
+ -1); |
|
13396 | 440 |
+ if ( combined_str != name ) |
13240 | 441 |
+ g_free( combined_str ); |
442 |
+ g_free (name); |
|
443 |
+ } |
|
444 |
+ } |
|
445 |
+} |
|
446 |
+ |
|
447 |
+void |
|
448 |
+roles_save_data (xmlNodePtr node ) |
|
449 |
+{ |
|
450 |
+ |
|
451 |
+ GtkWidget *list = NULL; |
|
452 |
+ GtkTreeModel *model = NULL; |
|
453 |
+ GtkTreeIter iter; |
|
454 |
+ xmlNodePtr role_node, rbac_roles_node, rbac_role_node; |
|
455 |
+ gboolean valid, active; |
|
456 |
+ gchar *name; |
|
457 |
+ |
|
458 |
+ g_return_if_fail (node != NULL); |
|
459 |
+ |
|
460 |
+ list = gst_dialog_get_widget (tool->main_dialog, "user_roles"); |
|
461 |
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); |
|
462 |
+ role_node = gst_xml_element_find_first (node, "role"); |
|
463 |
+ |
|
464 |
+ if ( role_node != NULL ) { |
|
465 |
+ rbac_roles_node = gst_xml_element_find_first (role_node, "rbac_roles"); |
|
466 |
+ if (rbac_roles_node) { |
|
467 |
+ gst_xml_element_destroy_children (rbac_roles_node); |
|
468 |
+ } |
|
469 |
+ else { |
|
470 |
+ rbac_roles_node = gst_xml_element_add (node, "rbac_roles"); |
|
471 |
+ } |
|
472 |
+ } |
|
473 |
+ else { |
|
474 |
+ role_node = gst_xml_element_add (node, "role"); |
|
475 |
+ rbac_roles_node = gst_xml_element_add (role_node, "rbac_roles"); |
|
476 |
+ } |
|
477 |
+ |
|
478 |
+ valid = gtk_tree_model_get_iter_first (model, &iter); |
|
479 |
+ |
|
480 |
+ while (valid) { |
|
481 |
+ gtk_tree_model_get (model, &iter, |
|
482 |
+ 0, &active, |
|
483 |
+ 2, &name, |
|
484 |
+ -1); |
|
485 |
+ |
|
486 |
+ if (active) { |
|
487 |
+ rbac_role_node = gst_xml_element_add (rbac_roles_node, "rbac_role"); |
|
488 |
+ gst_xml_element_set_content (rbac_role_node, name); |
|
489 |
+ } |
|
490 |
+ |
|
491 |
+ g_free (name); |
|
492 |
+ valid = gtk_tree_model_iter_next (model, &iter); |
|
493 |
+ } |
|
494 |
+} |
|
495 |
+ |
|
496 |
+#endif /* __sun */ |
|
497 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/roles-table.h gnome-system-tools-2.14.0/src/users/roles-table.h |
|
498 |
--- gnome-system-tools-2.14.0.orig/src/users/roles-table.h 1970-01-01 08:00:00.000000000 +0800 |
|
499 |
+++ gnome-system-tools-2.14.0/src/users/roles-table.h 2008-08-22 02:54:54.495726000 +0800 |
|
500 |
@@ -0,0 +1,34 @@ |
|
501 |
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ |
|
502 |
+/* roles-table.h: this file is part of users-admin, a ximian-setup-tool frontend |
|
503 |
+ * for user administration. |
|
504 |
+ * |
|
505 |
+ * Copyright (C) 2004 Carlos Garnacho |
|
506 |
+ * |
|
507 |
+ * This program is free software; you can redistribute it and/or modify |
|
508 |
+ * it under the terms of the GNU General Public License as |
|
509 |
+ * published by the Free Software Foundation; either version 2 of the |
|
510 |
+ * License, or (at your option) any later version. |
|
511 |
+ * |
|
512 |
+ * This program is distributed in the hope that it will be useful, |
|
513 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
514 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
515 |
+ * GNU General Public License for more details. |
|
516 |
+ * |
|
517 |
+ * You should have received a copy of the GNU General Public License |
|
518 |
+ * along with this program; if not, write to the Free Software |
|
519 |
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. |
|
520 |
+ * |
|
521 |
+ * Authors: Carlos Garnacho Parro <[email protected]> |
|
522 |
+ */ |
|
523 |
+ |
|
524 |
+#ifndef __ROLES_TABLE_H |
|
525 |
+#define __ROLES_TABLE_H |
|
526 |
+ |
|
527 |
+void create_roles_table (void); |
|
528 |
+ |
|
529 |
+void populate_roles_table (GtkWidget *list, xmlNodePtr user_node); |
|
530 |
+ |
|
531 |
+GList* user_roles_get_list (GList*); |
|
532 |
+ |
|
533 |
+ |
|
534 |
+#endif /* __ROLES_TABLE_H */ |
|
535 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/table.c gnome-system-tools-2.14.0/src/users/table.c |
|
536 |
--- gnome-system-tools-2.14.0.orig/src/users/table.c 2008-08-20 09:37:14.219170000 +0800 |
|
537 |
+++ gnome-system-tools-2.14.0/src/users/table.c 2008-08-22 04:54:52.664655000 +0800 |
|
538 |
@@ -38,6 +38,7 @@ |
|
539 |
#include "user_group.h" |
|
540 |
#include "callbacks.h" |
|
541 |
#include "user-group-xml.h" |
|
542 |
+#include "roles-table.h" |
|
8601 | 543 |
|
13240 | 544 |
extern GstTool *tool; |
545 |
||
546 |
@@ -199,6 +200,7 @@ |
|
547 |
create_profiles_table (); |
|
548 |
create_user_privileges_table (); |
|
549 |
create_profile_privileges_table (); |
|
550 |
+ create_roles_table(); |
|
8601 | 551 |
} |
552 |
||
553 |
void |
|
13240 | 554 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/user-group-xml.c gnome-system-tools-2.14.0/src/users/user-group-xml.c |
555 |
--- gnome-system-tools-2.14.0.orig/src/users/user-group-xml.c 2008-08-20 09:37:14.220155000 +0800 |
|
556 |
+++ gnome-system-tools-2.14.0/src/users/user-group-xml.c 2008-08-22 04:50:57.271572000 +0800 |
|
557 |
@@ -484,7 +484,12 @@ |
|
558 |
gst_xml_set_child_content (node, "passwd_min_life", data->pwd_mindays); |
|
559 |
gst_xml_set_child_content (node, "passwd_exp_warn", data->pwd_warndays); |
|
560 |
||
561 |
+#ifndef __sun |
|
562 |
user_add_extra_groups (data->extra_groups, data->login); |
|
563 |
+#else |
|
564 |
+ user_privileges_save_data( node ); |
|
565 |
+ roles_save_data( node ); |
|
566 |
+#endif |
|
567 |
} |
|
568 |
||
569 |
static void |
|
570 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/user-settings.c gnome-system-tools-2.14.0/src/users/user-settings.c |
|
571 |
--- gnome-system-tools-2.14.0.orig/src/users/user-settings.c 2008-08-20 09:37:14.204485000 +0800 |
|
572 |
+++ gnome-system-tools-2.14.0/src/users/user-settings.c 2008-08-22 04:53:25.526544000 +0800 |
|
11175 | 573 |
@@ -31,6 +31,7 @@ |
574 |
#include <stdlib.h> |
|
575 |
#include <utmp.h> |
|
576 |
#include <ctype.h> |
|
577 |
+#include <pwd.h> |
|
578 |
||
579 |
#include <glib/gi18n.h> |
|
580 |
||
13240 | 581 |
@@ -154,8 +155,21 @@ |
8612 | 582 |
g_free (buf); |
583 |
*/ |
|
584 |
||
8659 | 585 |
+#if ! (defined(sun) && defined(__SVR4) ) |
8612 | 586 |
populate_privileges_table_from_profile (gst_dialog_get_widget (tool->main_dialog, "user_privileges"), |
587 |
profile); |
|
588 |
+#else |
|
589 |
+ populate_privileges_table(gst_dialog_get_widget (tool->main_dialog, "user_privileges"), |
|
590 |
+ profile); |
|
591 |
+#endif |
|
13240 | 592 |
+ |
593 |
+#if ! (defined(sun) && defined(__SVR4) ) |
|
594 |
+ populate_roles_table(gst_dialog_get_widget (tool->main_dialog, "user_roles"), |
|
595 |
+ profile); |
|
596 |
+#else |
|
597 |
+ populate_roles_table(gst_dialog_get_widget (tool->main_dialog, "user_roles"), |
|
598 |
+ profile); |
|
599 |
+#endif |
|
8612 | 600 |
|
601 |
value = gst_xml_get_child_content (profile, "group"); |
|
602 |
element = g_list_first (groups_list); |
|
13240 | 603 |
@@ -185,6 +199,8 @@ |
8612 | 604 |
GtkWidget *button; |
605 |
gchar *buf; |
|
606 |
GtkWidget *widget = gst_dialog_get_widget (tool->main_dialog, "user_settings_dialog"); |
|
607 |
+ GList *element; |
|
608 |
+ gint counter = 0; |
|
609 |
||
610 |
gtk_window_set_title (GTK_WINDOW (widget), _("User Account Editor")); |
|
611 |
g_object_set_data (G_OBJECT (widget), "data", ud); |
|
13240 | 612 |
@@ -195,6 +211,16 @@ |
8612 | 613 |
combo_add_groups (gst_dialog_get_widget (tool->main_dialog, "user_settings_group"), TRUE); |
614 |
combo_add_shells (gst_dialog_get_widget (tool->main_dialog, "user_settings_shell")); |
|
615 |
combo_add_profiles (gst_dialog_get_widget (tool->main_dialog, "user_settings_profile_menu")); |
|
616 |
+ |
|
617 |
+ element = g_list_first (groups_list); |
|
13240 | 618 |
+ |
8612 | 619 |
+ while ((element != NULL) && (strcmp (element->data, "other") != 0)) { |
620 |
+ element = element->next; |
|
621 |
+ counter++; |
|
622 |
+ } |
|
623 |
+ if (element == NULL) /* here group_list should have some entries in, so element is Null only because not find "other" */ |
|
624 |
+ counter == 0; |
|
625 |
+ gtk_combo_box_set_active (GTK_COMBO_BOX (gst_dialog_get_widget (tool->main_dialog, "user_settings_group")), counter); |
|
13240 | 626 |
|
8612 | 627 |
#ifdef HAVE_LIBCRACK |
628 |
/* If we have libcrack, password quality check is enabled */ |
|
14401 | 629 |
@@ -271,6 +297,30 @@ |
11816 | 630 |
} |
11175 | 631 |
|
11816 | 632 |
static gboolean |
633 |
+is_new_login_valid (const gchar *login) |
|
634 |
+{ |
|
635 |
+ gchar *primary_text = NULL; |
|
636 |
+ gchar *secondary_text = NULL; |
|
637 |
+ struct utmp ut; |
|
638 |
+ |
|
639 |
+ g_return_val_if_fail (login != NULL, FALSE); |
|
640 |
+ |
|
641 |
+ if ( getpwnam (login) != NULL) { |
|
14401 | 642 |
+ /* SUN_BRANDING */ |
11816 | 643 |
+ primary_text = g_strdup_printf (_("User name new\"%s\" already exists"), login); |
14401 | 644 |
+ /* SUN_BRANDING */ |
11816 | 645 |
+ secondary_text = g_strdup (_("Please select a different user name.")); |
646 |
+ show_error_message ("user_settings_dialog", primary_text, secondary_text); |
|
647 |
+ g_free (primary_text); |
|
648 |
+ g_free (secondary_text); |
|
649 |
+ |
|
650 |
+ return FALSE; |
|
651 |
+ } else { |
|
652 |
+ return TRUE; |
|
653 |
+ } |
|
654 |
+} |
|
655 |
+ |
|
656 |
+static gboolean |
|
657 |
is_login_valid (xmlNodePtr node, const gchar *login) |
|
658 |
{ |
|
659 |
gchar *primary_text = NULL; |
|
14401 | 660 |
@@ -393,7 +443,14 @@ |
8659 | 661 |
gchar *primary_text = NULL; |
662 |
gchar *secondary_text = NULL; |
|
663 |
struct stat s; |
|
13240 | 664 |
- |
8659 | 665 |
+#if defined(sun) && defined(__SVR4) |
666 |
+ struct stat base_s; |
|
667 |
+ gchar *basedir = NULL; |
|
13240 | 668 |
+ |
8659 | 669 |
+ if ( home != NULL ) { |
670 |
+ basedir = g_path_get_dirname( home ); |
|
671 |
+ } |
|
672 |
+#endif /* sun & __SVR4 */ |
|
673 |
if (!home || (strlen (home) < 1)) { |
|
674 |
primary_text = g_strdup (N_("Home directory should not be empty")); |
|
675 |
secondary_text = g_strdup (N_("Make sure you provide a home directory.")); |
|
14401 | 676 |
@@ -405,7 +462,20 @@ |
8659 | 677 |
primary_text = g_strdup (N_("Home directory of the \"root\" user should not be modified")); |
678 |
secondary_text = g_strdup (N_("This would leave the system unusable.")); |
|
679 |
} |
|
680 |
- |
|
681 |
+#if defined(sun) && defined(__SVR4) |
|
682 |
+ else if ( home != NULL && basedir != NULL |
|
683 |
+ && g_strncasecmp(basedir,".", 1 ) != 0 /* Do we actually have a basedir? */ |
|
684 |
+ && stat( home, &s ) == -1 /* If the home dir already exists skip */ |
|
685 |
+ && stat( basedir, &base_s ) == 0 ) { /* Now try stat the basedir */ |
|
686 |
+ /* Check whether homedir is auto mounted */ |
|
687 |
+ if ( g_strncasecmp(base_s.st_fstype, "autofs", strlen("autofs") ) == 0 ) { |
|
14401 | 688 |
+ /* SUN_BRANDING */ |
8659 | 689 |
+ primary_text = g_strdup (N_("Cannot create a home directory on an automounted filesystem.")); |
14401 | 690 |
+ /* SUN_BRANDING */ |
8659 | 691 |
+ secondary_text = g_strdup (N_("Please pick an alternative base directory for the users home directory.")); |
692 |
+ } |
|
693 |
+ } |
|
694 |
+#endif /* sun & __SVR4 */ |
|
695 |
/* else if (stat (home, &s)) |
|
696 |
{ |
|
697 |
switch (errno) { |
|
14401 | 698 |
@@ -416,6 +486,11 @@ |
8659 | 699 |
} |
700 |
} |
|
701 |
*/ |
|
702 |
+#if defined(sun) && defined(__SVR4) |
|
703 |
+ if ( basedir != NULL ) { |
|
704 |
+ g_free( basedir ); |
|
705 |
+ } |
|
706 |
+#endif /* sun & __SVR4 */ |
|
707 |
if (primary_text) { |
|
708 |
show_error_message ("user_settings_dialog", _(primary_text), _(secondary_text)); |
|
709 |
g_free (primary_text); |
|
14401 | 710 |
@@ -428,6 +453,28 @@ |
11816 | 711 |
} |
712 |
||
713 |
static gboolean |
|
714 |
+is_new_user_uid_valid (const gchar *uid) |
|
715 |
+{ |
|
716 |
+ gchar *primary_text = NULL; |
|
717 |
+ gchar *secondary_text = NULL; |
|
718 |
+ |
|
719 |
+ if ( getpwuid ( g_strtod (uid, NULL) ) != NULL ) { |
|
14401 | 720 |
+ /* SUN_BRANDING */ |
11175 | 721 |
+ primary_text = g_strdup_printf (_("User ID \"%s\" already exists"), uid); |
14401 | 722 |
+ /* SUN_BRANDING */ |
11175 | 723 |
+ secondary_text = g_strdup (_("Please select a different User ID.")); |
11816 | 724 |
+ |
725 |
+ show_error_message ("user_settings_dialog", _(primary_text), _(secondary_text)); |
|
726 |
+ g_free (primary_text); |
|
727 |
+ g_free (secondary_text); |
|
728 |
+ |
|
729 |
+ return FALSE; |
|
730 |
+ } else { |
|
731 |
+ return TRUE; |
|
732 |
+ } |
|
733 |
+} |
|
734 |
+ |
|
735 |
+static gboolean |
|
736 |
is_user_uid_valid (xmlNodePtr node, const gchar *uid) |
|
737 |
{ |
|
738 |
gchar *primary_text = NULL; |
|
14401 | 739 |
@@ -548,7 +645,11 @@ |
11816 | 740 |
if (!is_login_valid (ud->node, data->login)) { |
741 |
return FALSE; |
|
11175 | 742 |
} |
11816 | 743 |
- |
744 |
+ |
|
745 |
+ /* check new user login */ |
|
746 |
+ if ( ud->is_new && !is_new_login_valid (data->login)) { |
|
747 |
+ return FALSE; |
|
748 |
+ } |
|
749 |
/* check user comments */ |
|
750 |
data->name = (gchar *) gtk_entry_get_text (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "user_settings_comment"))); |
|
751 |
data->location = (gchar *) gtk_entry_get_text (GTK_ENTRY (gst_dialog_get_widget (tool->main_dialog, "user_settings_office"))); |
|
14401 | 752 |
@@ -574,12 +675,17 @@ |
11816 | 753 |
if (!is_home_valid (ud->node, data->home)) { |
754 |
return FALSE; |
|
755 |
} |
|
756 |
- |
|
757 |
+ |
|
758 |
/* check user uid */ |
|
759 |
data->uid = g_strdup_printf ("%i", gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (gst_dialog_get_widget (tool->main_dialog, "user_settings_uid")))); |
|
760 |
if (!is_user_uid_valid (ud->node, data->uid)) { |
|
761 |
return FALSE; |
|
762 |
} |
|
763 |
+ /* check new user uid */ |
|
764 |
+ if ( ud->is_new && !is_new_user_uid_valid (data->uid)) { |
|
765 |
+ return FALSE; |
|
766 |
+ } |
|
767 |
+ |
|
11175 | 768 |
|
11816 | 769 |
/* check user shell */ |
770 |
data->shell = (gchar *) gtk_entry_get_text (GTK_ENTRY (GTK_BIN (gst_dialog_get_widget (tool->main_dialog, "user_settings_shell"))->child)); |
|
14401 | 771 |
@@ -618,6 +724,9 @@ |
8612 | 772 |
|
773 |
/* get user main group GID*/ |
|
774 |
data->group = g_list_nth_data (groups_list, gtk_combo_box_get_active (GTK_COMBO_BOX (gst_dialog_get_widget (tool->main_dialog, "user_settings_group")))); |
|
775 |
+ if (!data->group) |
|
776 |
+ return FALSE; |
|
777 |
+ |
|
778 |
if (strcmp (data->group, "$user") == 0) |
|
779 |
data->group = data->login; |
|
780 |
||
14401 | 781 |
@@ -627,7 +736,9 @@ |
8612 | 782 |
|
783 |
data->extra_groups = NULL; |
|
784 |
data->extra_groups = user_get_groups (ud->node); |
|
8659 | 785 |
+#if ! (defined(sun) && defined(__SVR4) ) |
8612 | 786 |
data->extra_groups = user_privileges_get_list (data->extra_groups); |
787 |
+#endif |
|
788 |
||
789 |
data->pwd_maxdays = g_strdup_printf ("%i", gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (gst_dialog_get_widget (tool->main_dialog, "user_passwd_max")))); |
|
790 |
data->pwd_mindays = g_strdup_printf ("%i", gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (gst_dialog_get_widget (tool->main_dialog, "user_passwd_min")))); |
|
14401 | 791 |
@@ -718,6 +829,7 @@ |
8612 | 792 |
/* Set UID */ |
793 |
txt = gst_xml_get_child_content (ud->node, "uid"); |
|
794 |
w0 = gst_dialog_get_widget (tool->main_dialog, "user_settings_uid"); |
|
795 |
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON (w0), 0, IDMAX); |
|
796 |
gtk_spin_button_set_value (GTK_SPIN_BUTTON (w0), g_strtod (txt, NULL)); |
|
797 |
g_free (txt); |
|
798 |
||
14401 | 799 |
@@ -750,7 +862,19 @@ |
8612 | 800 |
} |
801 |
||
802 |
w0 = gst_dialog_get_widget (tool->main_dialog, "user_privileges"); |
|
8659 | 803 |
+#if ! (defined(sun) && defined(__SVR4) ) |
8612 | 804 |
populate_privileges_table (w0, name); |
805 |
+#else |
|
806 |
+ populate_privileges_table (w0, ud->node ); |
|
807 |
+#endif |
|
13240 | 808 |
+ |
809 |
+ w0 = gst_dialog_get_widget (tool->main_dialog, "user_roles"); |
|
810 |
+#if ! (defined(sun) && defined(__SVR4) ) |
|
811 |
+ populate_roles_table (w0, name); |
|
812 |
+#else |
|
813 |
+ populate_roles_table (w0, ud->node ); |
|
814 |
+#endif |
|
815 |
+ |
|
8612 | 816 |
|
817 |
/* Set password */ |
|
818 |
user_settings_dialog_prepare_password (); |
|
13240 | 819 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/user_group.c gnome-system-tools-2.14.0/src/users/user_group.c |
820 |
--- gnome-system-tools-2.14.0.orig/src/users/user_group.c 2008-08-20 09:37:14.208213000 +0800 |
|
821 |
+++ gnome-system-tools-2.14.0/src/users/user_group.c 2008-08-22 04:52:18.525007000 +0800 |
|
822 |
@@ -161,11 +161,12 @@ |
|
823 |
groups_list = g_list_sort (groups_list, my_strcmp); |
|
824 |
||
825 |
element = g_list_first (groups_list); |
|
826 |
- |
|
827 |
+ |
|
828 |
while (element) { |
|
829 |
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), element->data); |
|
830 |
element = g_list_next (element); |
|
831 |
} |
|
832 |
+ |
|
833 |
} |
|
834 |
||
835 |
void |
|
836 |
@@ -209,6 +210,12 @@ |
|
837 |
case NODE_PROFILE: |
|
838 |
node = gst_xml_element_find_first (root, "profiledb"); |
|
839 |
break; |
|
840 |
+ case NODE_RBAC: |
|
841 |
+ node = gst_xml_element_find_first (root, "rbacdb"); |
|
842 |
+ break; |
|
843 |
+ case NODE_ROLE: |
|
844 |
+ node = gst_xml_element_find_first (root, "roledb"); |
|
845 |
+ break; |
|
846 |
default: |
|
847 |
node = NULL; |
|
848 |
break; |
|
849 |
diff -urN gnome-system-tools-2.14.0.orig/src/users/user_group.h gnome-system-tools-2.14.0/src/users/user_group.h |
|
850 |
--- gnome-system-tools-2.14.0.orig/src/users/user_group.h 2008-08-20 09:37:14.208678000 +0800 |
|
851 |
+++ gnome-system-tools-2.14.0/src/users/user_group.h 2008-08-22 04:48:42.513878000 +0800 |
|
852 |
@@ -29,7 +29,12 @@ |
|
853 |
||
854 |
#include "gst.h" |
|
855 |
||
856 |
+#ifdef __sun |
|
857 |
+#include <sys/param.h> |
|
858 |
+#define IDMAX MAXUID |
|
859 |
+#else |
|
860 |
#define IDMAX 100000 |
|
861 |
+#endif |
|
862 |
||
863 |
enum { |
|
864 |
NODE_USER, |
|
865 |
@@ -37,7 +42,9 @@ |
|
866 |
NODE_DEFAULT, |
|
867 |
NODE_NET_GROUP, |
|
868 |
NODE_NET_USER, |
|
869 |
- NODE_PROFILE |
|
870 |
+ NODE_PROFILE, |
|
871 |
+ NODE_RBAC, |
|
872 |
+ NODE_ROLE |
|
873 |
}; |
|
874 |
||
875 |
typedef struct { |
|
876 |
--- gnome-system-tools-2.14.0.orig/interfaces/users.glade.in 2008-08-20 09:37:14.698348000 +0800 |
|
877 |
+++ gnome-system-tools-2.14.0/interfaces/users.glade.in 2008-08-22 03:48:20.676006000 +0800 |
|
878 |
@@ -888,7 +888,7 @@ |
|
879 |
<property name="update_policy">GTK_UPDATE_ALWAYS</property> |
|
880 |
<property name="snap_to_ticks">False</property> |
|
881 |
<property name="wrap">False</property> |
|
882 |
- <property name="adjustment">0 0 99999 1 10 10</property> |
|
883 |
+ <property name="adjustment">0 0 2147483647 1 10 10</property> |
|
884 |
</widget> |
|
885 |
<packing> |
|
886 |
<property name="left_attach">2</property> |
|
887 |
@@ -1447,7 +1447,7 @@ |
|
888 |
||
889 |
<child> |
|
890 |
<widget class="GtkTable" id="table48"> |
|
891 |
- <property name="visible">True</property> |
|
892 |
+ <property name="visible">False</property> |
|
893 |
<property name="n_rows">5</property> |
|
894 |
<property name="n_columns">3</property> |
|
895 |
<property name="homogeneous">False</property> |
|
896 |
@@ -2542,7 +2542,7 @@ |
|
897 |
<property name="update_policy">GTK_UPDATE_ALWAYS</property> |
|
898 |
<property name="snap_to_ticks">False</property> |
|
899 |
<property name="wrap">False</property> |
|
900 |
- <property name="adjustment">0 0 99999 1 10 10</property> |
|
901 |
+ <property name="adjustment">0 0 2147483647 1 10 10</property> |
|
902 |
</widget> |
|
903 |
<packing> |
|
904 |
<property name="left_attach">2</property> |
|
905 |
@@ -2917,7 +2917,98 @@ |
|
906 |
<child> |
|
907 |
<widget class="GtkLabel" id="label312"> |
|
908 |
<property name="visible">True</property> |
|
909 |
- <property name="label" translatable="yes">User privileges</property> |
|
910 |
+ <property name="label" translatable="yes">User profiles</property> |
|
911 |
+ <property name="use_underline">False</property> |
|
912 |
+ <property name="use_markup">False</property> |
|
913 |
+ <property name="justify">GTK_JUSTIFY_LEFT</property> |
|
914 |
+ <property name="wrap">False</property> |
|
915 |
+ <property name="selectable">False</property> |
|
916 |
+ <property name="xalign">0.5</property> |
|
917 |
+ <property name="yalign">0.5</property> |
|
918 |
+ <property name="xpad">0</property> |
|
919 |
+ <property name="ypad">0</property> |
|
920 |
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
|
921 |
+ <property name="width_chars">-1</property> |
|
922 |
+ <property name="single_line_mode">False</property> |
|
923 |
+ <property name="angle">0</property> |
|
924 |
+ </widget> |
|
925 |
+ <packing> |
|
926 |
+ <property name="type">tab</property> |
|
927 |
+ </packing> |
|
928 |
+ </child> |
|
929 |
+ |
|
930 |
+ <child> |
|
931 |
+ <widget class="GtkVBox" id="vbox489"> |
|
932 |
+ <property name="border_width">12</property> |
|
933 |
+ <property name="visible">True</property> |
|
934 |
+ <property name="homogeneous">False</property> |
|
935 |
+ <property name="spacing">6</property> |
|
936 |
+ |
|
937 |
+ <child> |
|
938 |
+ <widget class="GtkLabel" id="label316"> |
|
939 |
+ <property name="visible">True</property> |
|
940 |
+ <property name="label" translatable="yes">Allow user to:</property> |
|
941 |
+ <property name="use_underline">False</property> |
|
942 |
+ <property name="use_markup">True</property> |
|
943 |
+ <property name="justify">GTK_JUSTIFY_LEFT</property> |
|
944 |
+ <property name="wrap">False</property> |
|
945 |
+ <property name="selectable">False</property> |
|
946 |
+ <property name="xalign">0</property> |
|
947 |
+ <property name="yalign">0.5</property> |
|
948 |
+ <property name="xpad">0</property> |
|
949 |
+ <property name="ypad">0</property> |
|
950 |
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
|
951 |
+ <property name="width_chars">-1</property> |
|
952 |
+ <property name="single_line_mode">False</property> |
|
953 |
+ <property name="angle">0</property> |
|
954 |
+ </widget> |
|
955 |
+ <packing> |
|
956 |
+ <property name="padding">0</property> |
|
957 |
+ <property name="expand">False</property> |
|
958 |
+ <property name="fill">False</property> |
|
959 |
+ </packing> |
|
960 |
+ </child> |
|
961 |
+ |
|
962 |
+ <child> |
|
963 |
+ <widget class="GtkScrolledWindow" id="scrolledwindow3"> |
|
964 |
+ <property name="visible">True</property> |
|
965 |
+ <property name="can_focus">True</property> |
|
966 |
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> |
|
967 |
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> |
|
968 |
+ <property name="shadow_type">GTK_SHADOW_IN</property> |
|
969 |
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property> |
|
970 |
+ |
|
971 |
+ <child> |
|
972 |
+ <widget class="GtkTreeView" id="user_roles"> |
|
973 |
+ <property name="visible">True</property> |
|
974 |
+ <property name="can_focus">True</property> |
|
975 |
+ <property name="headers_visible">False</property> |
|
976 |
+ <property name="rules_hint">True</property> |
|
977 |
+ <property name="reorderable">False</property> |
|
978 |
+ <property name="enable_search">False</property> |
|
979 |
+ <property name="fixed_height_mode">False</property> |
|
980 |
+ <property name="hover_selection">False</property> |
|
981 |
+ <property name="hover_expand">False</property> |
|
982 |
+ </widget> |
|
983 |
+ </child> |
|
984 |
+ </widget> |
|
985 |
+ <packing> |
|
986 |
+ <property name="padding">0</property> |
|
987 |
+ <property name="expand">True</property> |
|
988 |
+ <property name="fill">True</property> |
|
989 |
+ </packing> |
|
990 |
+ </child> |
|
991 |
+ </widget> |
|
992 |
+ <packing> |
|
993 |
+ <property name="tab_expand">False</property> |
|
994 |
+ <property name="tab_fill">True</property> |
|
995 |
+ </packing> |
|
996 |
+ </child> |
|
997 |
+ |
|
998 |
+ <child> |
|
999 |
+ <widget class="GtkLabel" id="label313"> |
|
1000 |
+ <property name="visible">True</property> |
|
14401 | 1001 |
+ <property name="label" translatable="yes" comments="SUN_BRANDING">User roles</property> |
13240 | 1002 |
<property name="use_underline">False</property> |
1003 |
<property name="use_markup">False</property> |
|
1004 |
<property name="justify">GTK_JUSTIFY_LEFT</property> |
|
1005 |
@@ -3778,7 +3869,7 @@ |
|
1006 |
<property name="update_policy">GTK_UPDATE_ALWAYS</property> |
|
1007 |
<property name="snap_to_ticks">False</property> |
|
1008 |
<property name="wrap">False</property> |
|
1009 |
- <property name="adjustment">0 0 99999 1 10 10</property> |
|
1010 |
+ <property name="adjustment">0 0 2147483647 1 10 10</property> |
|
1011 |
</widget> |
|
1012 |
<packing> |
|
1013 |
<property name="left_attach">2</property> |
|
1014 |
@@ -3800,7 +3891,7 @@ |
|
1015 |
<property name="update_policy">GTK_UPDATE_ALWAYS</property> |
|
1016 |
<property name="snap_to_ticks">False</property> |
|
1017 |
<property name="wrap">False</property> |
|
1018 |
- <property name="adjustment">0 0 99999 1 10 10</property> |
|
1019 |
+ <property name="adjustment">0 0 2147483647 1 10 10</property> |
|
1020 |
</widget> |
|
1021 |
<packing> |
|
1022 |
<property name="left_attach">2</property> |
|
1023 |
@@ -3822,7 +3913,7 @@ |
|
1024 |
<property name="update_policy">GTK_UPDATE_ALWAYS</property> |
|
1025 |
<property name="snap_to_ticks">False</property> |
|
1026 |
<property name="wrap">False</property> |
|
1027 |
- <property name="adjustment">0 0 99999 1 10 10</property> |
|
1028 |
+ <property name="adjustment">0 0 2147483647 1 10 10</property> |
|
1029 |
</widget> |
|
1030 |
<packing> |
|
1031 |
<property name="left_attach">4</property> |
|
1032 |
@@ -3844,7 +3935,7 @@ |
|
1033 |
<property name="update_policy">GTK_UPDATE_ALWAYS</property> |
|
1034 |
<property name="snap_to_ticks">False</property> |
|
1035 |
<property name="wrap">False</property> |
|
1036 |
- <property name="adjustment">0 0 99999 1 10 10</property> |
|
1037 |
+ <property name="adjustment">0 0 2147483647 1 10 10</property> |
|
1038 |
</widget> |
|
1039 |
<packing> |
|
1040 |
<property name="left_attach">4</property> |