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

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