Blame as-fate318433-prevent-same-account-multi-logins.patch

Adrian Schröter 24cc53
diff -Nur accountsservice-22.08.8/src/libaccountsservice/act-user.c new/src/libaccountsservice/act-user.c
Adrian Schröter 24cc53
--- accountsservice-22.08.8/src/libaccountsservice/act-user.c	2022-02-23 16:27:48.000000000 +0100
Adrian Schröter 24cc53
+++ new/src/libaccountsservice/act-user.c	2022-04-30 22:34:42.160346848 +0200
Adrian Schröter 24cc53
@@ -878,6 +878,8 @@
Adrian Schröter 24cc53
  * (Currently, this function is only implemented for systemd-logind.
Adrian Schröter 24cc53
  * For ConsoleKit, it is equivalent to act_user_is_logged_in.)
Adrian Schröter 24cc53
  *
Adrian Schröter 24cc53
+ * (SLE-12 SP2: 'other_sessions' have been modified to contain only X sessions)
Adrian Schröter 24cc53
+ *
Adrian Schröter 24cc53
  * Returns: %TRUE or %FALSE
Adrian Schröter 24cc53
  */
Adrian Schröter 24cc53
 gboolean
Adrian Schröter 24cc53
@@ -906,6 +908,24 @@
Adrian Schröter 24cc53
 }
Adrian Schröter 24cc53
 
Adrian Schröter 24cc53
 /**
Adrian Schröter 24cc53
+ * act_user_is_x_logged_in_remotely:
Adrian Schröter 24cc53
+ * @user: a #ActUser
Adrian Schröter 24cc53
+ *
Adrian Schröter 24cc53
+ * Returns whether or not #ActUser is currently graphically logged in on a
Adrian Schröter 24cc53
+ * different seat or no seat.
Adrian Schröter 24cc53
+ *
Adrian Schröter 24cc53
+ * (For SLE12-SP2: fate#318433)
Adrian Schröter 24cc53
+ *
Adrian Schröter 24cc53
+ * Returns: %TRUE or %FALSE
Adrian Schröter 24cc53
+ */
Adrian Schröter 24cc53
+gboolean
Adrian Schröter 24cc53
+act_user_is_x_logged_in_remotely (ActUser *user)
Adrian Schröter 24cc53
+{
Adrian Schröter 24cc53
+        /* return user->remote_x_sessions; */
Adrian Schröter 24cc53
+        return (user->other_sessions != NULL);
Adrian Schröter 24cc53
+}
Adrian Schröter 24cc53
+
Adrian Schröter 24cc53
+/**
Adrian Schröter 24cc53
  * act_user_get_locked:
Adrian Schröter 24cc53
  * @user: a #ActUser
Adrian Schröter 24cc53
  *
Adrian Schröter 24cc53
diff -Nur accountsservice-22.08.8/src/libaccountsservice/act-user.h new/src/libaccountsservice/act-user.h
Adrian Schröter 24cc53
--- accountsservice-22.08.8/src/libaccountsservice/act-user.h	2022-02-23 16:27:48.000000000 +0100
Adrian Schröter 24cc53
+++ new/src/libaccountsservice/act-user.h	2022-04-30 22:34:42.164346848 +0200
Adrian Schröter 24cc53
@@ -61,6 +61,7 @@
Adrian Schröter 24cc53
 guint          act_user_get_num_sessions_anywhere (ActUser   *user);
Adrian Schröter 24cc53
 gboolean       act_user_is_logged_in              (ActUser   *user);
Adrian Schröter 24cc53
 gboolean       act_user_is_logged_in_anywhere     (ActUser   *user);
Adrian Schröter 24cc53
+gboolean       act_user_is_x_logged_in_remotely   (ActUser   *user);
Adrian Schröter 24cc53
 int            act_user_get_login_frequency       (ActUser   *user);
Adrian Schröter 24cc53
 gint64         act_user_get_login_time            (ActUser   *user);
Adrian Schröter 24cc53
 const GVariant*act_user_get_login_history         (ActUser   *user);
Adrian Schröter 24cc53
diff -Nur accountsservice-22.08.8/src/libaccountsservice/act-user-manager.c new/src/libaccountsservice/act-user-manager.c
Adrian Schröter 24cc53
--- accountsservice-22.08.8/src/libaccountsservice/act-user-manager.c	2022-02-23 16:27:48.000000000 +0100
Adrian Schröter 24cc53
+++ new/src/libaccountsservice/act-user-manager.c	2022-04-30 22:34:42.160346848 +0200
Adrian Schröter 24cc53
@@ -1366,12 +1366,22 @@
Adrian Schröter 24cc53
         if (new_session->x11_display == NULL) {
Adrian Schröter 24cc53
                 g_debug ("AcUserManager: (mostly) ignoring session '%s' since it's not graphical",
Adrian Schröter 24cc53
                          new_session->id);
Adrian Schröter 24cc53
-                is_ours = FALSE;
Adrian Schröter 24cc53
+                /* SLE: ignore non-graphical session completely */
Adrian Schröter 24cc53
+                /* see `act_user_is_logged_in_anywhere` */
Adrian Schröter 24cc53
+                unload_new_session (new_session);
Adrian Schröter 24cc53
+                return;
Adrian Schröter 24cc53
         } else if (session_is_login_window (manager, new_session->id)) {
Adrian Schröter 24cc53
                 new_session->state = ACT_USER_MANAGER_NEW_SESSION_STATE_LOADED;
Adrian Schröter 24cc53
                 unload_new_session (new_session);
Adrian Schröter 24cc53
                 return;
Adrian Schröter 24cc53
         } else if (!session_is_on_our_seat (manager, new_session->id)) {
Adrian Schröter 24cc53
+                /**
Adrian Schröter 24cc53
+                 * NOTE: if `manager->priv->seat.id` or `new_session->id` is
Adrian Schröter 24cc53
+                 * either NULL, it's not on our seat: this is reasonable, as
Adrian Schröter 24cc53
+                 * non-seat session is not switchable and thus no need to be
Adrian Schröter 24cc53
+                 * ours. However, this nondiscrimination for all non-seated
Adrian Schröter 24cc53
+                 * sessions is possibly a source for bugs.
Adrian Schröter 24cc53
+                 */
Adrian Schröter 24cc53
                 is_ours = FALSE;
Adrian Schröter 24cc53
         }
Adrian Schröter 24cc53