[gnome-system-tools] Fix a few leaks of OobsUsers and OobsGroups



commit 63facc6d4995237c64e518616e2a5fa8dfd8c252
Author: Milan Bouchet-Valat <nalimilan club fr>
Date:   Mon Feb 8 20:29:01 2010 +0100

    Fix a few leaks of OobsUsers and OobsGroups
    
    Properly keeping refcounts allows destroying them on exit, erasing passwords from memory. Some objects still stay alive until the end, but that's an issue in liboobs.

 src/users/privileges-table.c |    2 ++
 src/users/user-profiles.c    |    6 +++---
 src/users/user-settings.c    |    6 ++++++
 src/users/users-tool.c       |    6 ++++++
 4 files changed, 17 insertions(+), 3 deletions(-)
---
diff --git a/src/users/privileges-table.c b/src/users/privileges-table.c
index 923649d..b16405f 100644
--- a/src/users/privileges-table.c
+++ b/src/users/privileges-table.c
@@ -239,6 +239,7 @@ privileges_table_set_from_user (OobsUser *user)
 				    COL_MEMBER, (g_list_find (users, user) != NULL),
 				    -1);
 		g_list_free (users);
+		g_object_unref (group);
 		valid = gtk_tree_model_iter_next (child_model, &iter);
 	}
 }
@@ -289,6 +290,7 @@ privileges_table_set_from_profile (GstUserProfile *profile)
 				    COL_MEMBER, find_group_in_profile (group, profile),
 				    -1);
 
+		g_object_unref (group);
 		valid = gtk_tree_model_iter_next (child_model, &iter);
 	}
 }
diff --git a/src/users/user-profiles.c b/src/users/user-profiles.c
index bc9a111..31c7d77 100644
--- a/src/users/user-profiles.c
+++ b/src/users/user-profiles.c
@@ -314,12 +314,12 @@ gst_user_profiles_get_for_user (GstUserProfiles *profiles,
 			group = oobs_groups_config_get_from_name (groups_config, (char *) m->data);
 			in_group = oobs_user_is_in_group (user, group);
 			if ((in_profile && !in_group) || (!in_profile && in_group)) {
-				if (group)
-					g_object_unref (group);
-
 				matched_groups = FALSE;
 				break;
 			}
+
+			if (group)
+				g_object_unref (group);
 		}
 
 		/* stop at first match, since the list has been reverted on loading,
diff --git a/src/users/user-settings.c b/src/users/user-settings.c
index e2c4be6..94f606b 100644
--- a/src/users/user-settings.c
+++ b/src/users/user-settings.c
@@ -356,6 +356,8 @@ user_settings_show (OobsUser *user)
 		gtk_widget_hide (disabled_label);
 		gtk_widget_hide (enable_button);
 	}
+
+	g_object_unref (group);
 }
 
 static void
@@ -553,6 +555,8 @@ user_settings_check_revoke_admin_rights ()
 		return (response == GTK_RESPONSE_OK);
 	}
 
+	g_object_unref (admin_group);
+
 	return TRUE;
 }
 
@@ -580,6 +584,8 @@ check_profile (OobsUser *user, GstUserProfile *profile)
 			  return user_settings_check_revoke_admin_rights (user);
 	  }
 
+	g_object_unref (admin_group);
+
 	return TRUE;
 }
 
diff --git a/src/users/users-tool.c b/src/users/users-tool.c
index 8b1957f..5aae962 100644
--- a/src/users/users-tool.c
+++ b/src/users/users-tool.c
@@ -116,9 +116,15 @@ gst_users_tool_finalize (GObject *object)
 	GstUsersTool *tool = GST_USERS_TOOL (object);
 
 	g_object_unref (tool->users_config);
+	g_object_unref (tool->self_config);
 	g_object_unref (tool->groups_config);
 	g_object_unref (tool->profiles);
 
+	/* Clear models to unreference OobsUsers and OobsGroups
+	 * to be sure they are finalized properly (passwords...) */
+	users_table_clear ();
+	groups_table_clear ();
+
 	(* G_OBJECT_CLASS (gst_users_tool_parent_class)->finalize) (object);
 }
 



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