Blame SOURCES/0001-manager-plug-leak-in-maybe_activate_other_session.patch

765e07
From 82006d15b70842d2b1ad7d47d9490e315436cb5f Mon Sep 17 00:00:00 2001
765e07
From: Ray Strode <rstrode@redhat.com>
765e07
Date: Fri, 22 Jun 2018 14:44:11 -0400
4f3de9
Subject: [PATCH 1/7] manager: plug leak in maybe_activate_other_session
765e07
765e07
The function asks logind what the currently active session is on the
765e07
given seat.  It then leaks the response.
765e07
765e07
This commit plugs the leak.
765e07
---
765e07
 daemon/gdm-manager.c | 4 +++-
765e07
 1 file changed, 3 insertions(+), 1 deletion(-)
765e07
765e07
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
765e07
index 7539acf11..129cc0de4 100644
765e07
--- a/daemon/gdm-manager.c
765e07
+++ b/daemon/gdm-manager.c
765e07
@@ -1394,79 +1394,81 @@ get_login_window_session_id (const char  *seat_id,
765e07
 out:
765e07
         if (sessions) {
765e07
                 for (i = 0; sessions[i]; i ++) {
765e07
                         free (sessions[i]);
765e07
                 }
765e07
 
765e07
                 free (sessions);
765e07
         }
765e07
 
765e07
         return ret;
765e07
 }
765e07
 
765e07
 static void
765e07
 activate_login_window_session_on_seat (GdmManager *self,
765e07
                                        const char *seat_id)
765e07
 {
765e07
         char *session_id;
765e07
 
765e07
         if (!get_login_window_session_id (seat_id, &session_id)) {
765e07
                 return;
765e07
         }
765e07
 
765e07
         activate_session_id (self, seat_id, session_id);
765e07
 }
765e07
 
765e07
 static void
765e07
 maybe_activate_other_session (GdmManager *self,
765e07
                               GdmDisplay *old_display)
765e07
 {
765e07
         char *seat_id = NULL;
765e07
-        char *session_id;
765e07
+        char *session_id = NULL;
765e07
         int ret;
765e07
 
765e07
         g_object_get (G_OBJECT (old_display),
765e07
                       "seat-id", &seat_id,
765e07
                       NULL);
765e07
 
765e07
         ret = sd_seat_get_active (seat_id, &session_id, NULL);
765e07
 
765e07
         if (ret == 0) {
765e07
                 GdmDisplay *display;
765e07
 
765e07
                 display = gdm_display_store_find (self->priv->display_store,
765e07
                                                   lookup_by_session_id,
765e07
                                                   (gpointer) session_id);
765e07
 
765e07
                 if (display == NULL) {
765e07
                         activate_login_window_session_on_seat (self, seat_id);
765e07
                 }
765e07
+
765e07
+                g_free (session_id);
765e07
         }
765e07
 
765e07
         g_free (seat_id);
765e07
 }
765e07
 
765e07
 static const char *
765e07
 get_username_for_greeter_display (GdmManager *manager,
765e07
                                   GdmDisplay *display)
765e07
 {
765e07
         gboolean doing_initial_setup = FALSE;
765e07
 
765e07
         g_object_get (G_OBJECT (display),
765e07
                       "doing-initial-setup", &doing_initial_setup,
765e07
                       NULL);
765e07
 
765e07
         if (doing_initial_setup) {
765e07
                 return INITIAL_SETUP_USERNAME;
765e07
         } else {
765e07
                 return GDM_USERNAME;
765e07
         }
765e07
 }
765e07
 
765e07
 static void
765e07
 set_up_automatic_login_session (GdmManager *manager,
765e07
                                 GdmDisplay *display)
765e07
 {
765e07
         GdmSession *session;
765e07
         char       *display_session_type = NULL;
765e07
         gboolean is_initial;
765e07
 
765e07
-- 
765e07
2.19.0
765e07