|
Bernhard M. Wiedemann |
1defcc |
Index: accountsservice-0.6.40/src/libaccountsservice/act-user-manager.c
|
|
Bernhard M. Wiedemann |
1defcc |
===================================================================
|
|
Bernhard M. Wiedemann |
1defcc |
--- accountsservice-0.6.40.orig/src/libaccountsservice/act-user-manager.c
|
|
Bernhard M. Wiedemann |
1defcc |
+++ accountsservice-0.6.40/src/libaccountsservice/act-user-manager.c
|
|
Bernhard M. Wiedemann |
1defcc |
@@ -751,8 +751,17 @@ _get_systemd_seat_id (ActUserManager *ma
|
|
Bernhard M. Wiedemann |
1defcc |
char *seat_id;
|
|
Bernhard M. Wiedemann |
1defcc |
|
|
Bernhard M. Wiedemann |
1defcc |
res = sd_session_get_seat (NULL, &seat_id);
|
|
Bernhard M. Wiedemann |
1defcc |
-
|
|
Bernhard M. Wiedemann |
1defcc |
- if (res == -ENOENT) {
|
|
Bernhard M. Wiedemann |
1defcc |
+ /**
|
|
Bernhard M. Wiedemann |
1defcc |
+ * NOTE: There is no -ENOENT errnum for `sd_session_get_seat`. This
|
|
Bernhard M. Wiedemann |
1defcc |
+ * possibly an upstream bug. There are also other dubious occurrences of
|
|
Bernhard M. Wiedemann |
1defcc |
+ * -ENOENT within the source.
|
|
Bernhard M. Wiedemann |
1defcc |
+ *
|
|
Bernhard M. Wiedemann |
1defcc |
+ * Change to -ENODATA as this is the normal return for non-seated
|
|
Bernhard M. Wiedemann |
1defcc |
+ * session like VNC ones and should not report errors. O/w no user
|
|
Bernhard M. Wiedemann |
1defcc |
+ * sessions will be analyzed.
|
|
Bernhard M. Wiedemann |
1defcc |
+ */
|
|
Bernhard M. Wiedemann |
1defcc |
+ /* see https://www.freedesktop.org/software/systemd/man/sd_session_is_active.html */
|
|
Bernhard M. Wiedemann |
1defcc |
+ if (res == -ENODATA) {
|
|
Bernhard M. Wiedemann |
1defcc |
seat_id = NULL;
|
|
Bernhard M. Wiedemann |
1defcc |
} else if (res < 0) {
|
|
Bernhard M. Wiedemann |
1defcc |
g_warning ("Could not get current seat: %s",
|
|
Bernhard M. Wiedemann |
1defcc |
@@ -1700,12 +1709,22 @@ maybe_add_new_session (ActUserManagerNew
|
|
Bernhard M. Wiedemann |
1defcc |
if (new_session->x11_display == NULL) {
|
|
Bernhard M. Wiedemann |
1defcc |
g_debug ("AcUserManager: (mostly) ignoring session '%s' since it's not graphical",
|
|
Bernhard M. Wiedemann |
1defcc |
new_session->id);
|
|
Bernhard M. Wiedemann |
1defcc |
- is_ours = FALSE;
|
|
Bernhard M. Wiedemann |
1defcc |
+ /* SLE: ignore non-graphical session completely */
|
|
Bernhard M. Wiedemann |
1defcc |
+ /* see `act_user_is_logged_in_anywhere` */
|
|
Bernhard M. Wiedemann |
1defcc |
+ unload_new_session (new_session);
|
|
Bernhard M. Wiedemann |
1defcc |
+ return;
|
|
Bernhard M. Wiedemann |
1defcc |
} else if (session_is_login_window (manager, new_session->id)) {
|
|
Bernhard M. Wiedemann |
1defcc |
new_session->state = ACT_USER_MANAGER_NEW_SESSION_STATE_LOADED;
|
|
Bernhard M. Wiedemann |
1defcc |
unload_new_session (new_session);
|
|
Bernhard M. Wiedemann |
1defcc |
return;
|
|
Bernhard M. Wiedemann |
1defcc |
} else if (!session_is_on_our_seat (manager, new_session->id)) {
|
|
Bernhard M. Wiedemann |
1defcc |
+ /**
|
|
Bernhard M. Wiedemann |
1defcc |
+ * NOTE: if `manager->priv->seat.id` or `new_session->id` is
|
|
Bernhard M. Wiedemann |
1defcc |
+ * either NULL, it's not on our seat: this is reasonable, as
|
|
Bernhard M. Wiedemann |
1defcc |
+ * non-seat session is not switchable and thus no need to be
|
|
Bernhard M. Wiedemann |
1defcc |
+ * ours. However, this nondiscrimination for all non-seated
|
|
Bernhard M. Wiedemann |
1defcc |
+ * sessions is possibly a source for bugs.
|
|
Bernhard M. Wiedemann |
1defcc |
+ */
|
|
Bernhard M. Wiedemann |
1defcc |
is_ours = FALSE;
|
|
Bernhard M. Wiedemann |
1defcc |
}
|
|
Bernhard M. Wiedemann |
1defcc |
|
|
Bernhard M. Wiedemann |
1defcc |
Index: accountsservice-0.6.40/src/libaccountsservice/act-user.c
|
|
Bernhard M. Wiedemann |
1defcc |
===================================================================
|
|
Bernhard M. Wiedemann |
1defcc |
--- accountsservice-0.6.40.orig/src/libaccountsservice/act-user.c
|
|
Bernhard M. Wiedemann |
1defcc |
+++ accountsservice-0.6.40/src/libaccountsservice/act-user.c
|
|
Bernhard M. Wiedemann |
1defcc |
@@ -936,6 +936,8 @@ act_user_is_logged_in (ActUser *user)
|
|
Bernhard M. Wiedemann |
1defcc |
* (Currently, this function is only implemented for systemd-logind.
|
|
Bernhard M. Wiedemann |
1defcc |
* For ConsoleKit, it is equivalent to act_user_is_logged_in.)
|
|
Bernhard M. Wiedemann |
1defcc |
*
|
|
Bernhard M. Wiedemann |
1defcc |
+ * (SLE-12 SP2: 'other_sessions' have been modified to contain only X sessions)
|
|
Bernhard M. Wiedemann |
1defcc |
+ *
|
|
Bernhard M. Wiedemann |
1defcc |
* Returns: %TRUE or %FALSE
|
|
Bernhard M. Wiedemann |
1defcc |
*/
|
|
Bernhard M. Wiedemann |
1defcc |
gboolean
|
|
Bernhard M. Wiedemann |
1defcc |
@@ -945,6 +947,24 @@ act_user_is_logged_in_anywhere (ActUser
|
|
Bernhard M. Wiedemann |
1defcc |
}
|
|
Bernhard M. Wiedemann |
1defcc |
|
|
Bernhard M. Wiedemann |
1defcc |
/**
|
|
Bernhard M. Wiedemann |
1defcc |
+ * act_user_is_x_logged_in_remotely:
|
|
Bernhard M. Wiedemann |
1defcc |
+ * @user: a #ActUser
|
|
Bernhard M. Wiedemann |
1defcc |
+ *
|
|
Bernhard M. Wiedemann |
1defcc |
+ * Returns whether or not #ActUser is currently graphically logged in on a
|
|
Bernhard M. Wiedemann |
1defcc |
+ * different seat or no seat.
|
|
Bernhard M. Wiedemann |
1defcc |
+ *
|
|
Bernhard M. Wiedemann |
1defcc |
+ * (For SLE12-SP2: fate#318433)
|
|
Bernhard M. Wiedemann |
1defcc |
+ *
|
|
Bernhard M. Wiedemann |
1defcc |
+ * Returns: %TRUE or %FALSE
|
|
Bernhard M. Wiedemann |
1defcc |
+ */
|
|
Bernhard M. Wiedemann |
1defcc |
+gboolean
|
|
Bernhard M. Wiedemann |
1defcc |
+act_user_is_x_logged_in_remotely (ActUser *user)
|
|
Bernhard M. Wiedemann |
1defcc |
+{
|
|
Bernhard M. Wiedemann |
1defcc |
+ /* return user->remote_x_sessions; */
|
|
Bernhard M. Wiedemann |
1defcc |
+ return (user->other_sessions != NULL);
|
|
Bernhard M. Wiedemann |
1defcc |
+}
|
|
Bernhard M. Wiedemann |
1defcc |
+
|
|
Bernhard M. Wiedemann |
1defcc |
+/**
|
|
Bernhard M. Wiedemann |
1defcc |
* act_user_get_locked:
|
|
Bernhard M. Wiedemann |
1defcc |
* @user: a #ActUser
|
|
Bernhard M. Wiedemann |
1defcc |
*
|
|
Bernhard M. Wiedemann |
1defcc |
Index: accountsservice-0.6.40/src/libaccountsservice/act-user.h
|
|
Bernhard M. Wiedemann |
1defcc |
===================================================================
|
|
Bernhard M. Wiedemann |
1defcc |
--- accountsservice-0.6.40.orig/src/libaccountsservice/act-user.h
|
|
Bernhard M. Wiedemann |
1defcc |
+++ accountsservice-0.6.40/src/libaccountsservice/act-user.h
|
|
Bernhard M. Wiedemann |
1defcc |
@@ -67,6 +67,7 @@ guint act_user_get_num_sessions
|
|
Bernhard M. Wiedemann |
1defcc |
guint act_user_get_num_sessions_anywhere (ActUser *user);
|
|
Bernhard M. Wiedemann |
1defcc |
gboolean act_user_is_logged_in (ActUser *user);
|
|
Bernhard M. Wiedemann |
1defcc |
gboolean act_user_is_logged_in_anywhere (ActUser *user);
|
|
Bernhard M. Wiedemann |
1defcc |
+gboolean act_user_is_x_logged_in_remotely (ActUser *user);
|
|
Bernhard M. Wiedemann |
1defcc |
int act_user_get_login_frequency (ActUser *user);
|
|
Bernhard M. Wiedemann |
1defcc |
gint64 act_user_get_login_time (ActUser *user);
|
|
Bernhard M. Wiedemann |
1defcc |
const GVariant*act_user_get_login_history (ActUser *user);
|