SecBSD's official ports repository
This commit is contained in:
commit
2c0afcbbf3
64331 changed files with 5339189 additions and 0 deletions
|
@ -0,0 +1,152 @@
|
|||
REVERT: (breaks listing users in gdm and gnome-cc and unlocking screenshield)
|
||||
From c7fa612023a163e8b2352e1170c6df3fceb19b27 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Thu, 19 Jul 2018 13:14:09 -0400
|
||||
Subject: [PATCH] lib: don't set loaded state until seat is fetched
|
||||
|
||||
Index: src/libaccountsservice/act-user-manager.c
|
||||
--- src/libaccountsservice/act-user-manager.c.orig
|
||||
+++ src/libaccountsservice/act-user-manager.c
|
||||
@@ -40,7 +40,11 @@
|
||||
#include <glib-object.h>
|
||||
#include <gio/gio.h>
|
||||
#include <gio/gunixinputstream.h>
|
||||
+#ifdef __linux__
|
||||
#include <systemd/sd-login.h>
|
||||
+#else
|
||||
+#include <ConsoleKit/sd-login.h>
|
||||
+#endif
|
||||
|
||||
#include "act-user-manager.h"
|
||||
#include "act-user-private.h"
|
||||
@@ -100,9 +104,11 @@ typedef struct
|
||||
char *id;
|
||||
char *session_id;
|
||||
guint load_idle_id;
|
||||
+#ifdef __linux__
|
||||
sd_login_monitor *session_monitor;
|
||||
GInputStream *session_monitor_stream;
|
||||
guint session_monitor_source_id;
|
||||
+#endif
|
||||
} ActUserManagerSeat;
|
||||
|
||||
typedef enum
|
||||
@@ -274,6 +280,7 @@ activate_systemd_session_id (ActUserManager *manager,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+#ifdef __linux__
|
||||
reply = g_dbus_connection_call_sync (connection,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
@@ -287,6 +294,21 @@ activate_systemd_session_id (ActUserManager *manager,
|
||||
-1,
|
||||
NULL,
|
||||
&error);
|
||||
+#else
|
||||
+ reply = g_dbus_connection_call_sync (connection,
|
||||
+ "org.freedesktop.ConsoleKit",
|
||||
+ "/org/freedesktop/ConsoleKit/Manager",
|
||||
+ "org.freedesktop.ConsoleKit.Manager",
|
||||
+ "ActivateSessionOnSeat",
|
||||
+ g_variant_new ("(ss)",
|
||||
+ seat_id,
|
||||
+ session_id),
|
||||
+ NULL,
|
||||
+ G_DBUS_CALL_FLAGS_NONE,
|
||||
+ -1,
|
||||
+ NULL,
|
||||
+ &error);
|
||||
+#endif
|
||||
if (reply == NULL) {
|
||||
g_warning ("Unable to activate session: %s", error->message);
|
||||
return FALSE;
|
||||
@@ -322,9 +344,7 @@ session_is_on_our_seat (ActUserManager *manager,
|
||||
g_autofree gchar *session_seat = NULL;
|
||||
|
||||
res = sd_session_get_seat (session_id, &session_seat);
|
||||
- if (res == -ENODATA) {
|
||||
- return FALSE;
|
||||
- } else if (res < 0) {
|
||||
+ if (res < 0) {
|
||||
g_debug ("failed to determine seat of session %s: %s",
|
||||
session_id,
|
||||
strerror (-res));
|
||||
@@ -641,9 +661,7 @@ get_seat_id_for_current_session (ActUserManager *manag
|
||||
|
||||
res = sd_session_get_seat (priv->seat.session_id, &seat_id);
|
||||
|
||||
- if (res == -ENODATA) {
|
||||
- seat_id = NULL;
|
||||
- } else if (res < 0) {
|
||||
+ if (res < 0) {
|
||||
g_warning ("Could not get current seat: %s",
|
||||
strerror (-res));
|
||||
unload_seat (manager);
|
||||
@@ -1391,8 +1409,12 @@ get_x11_display_for_new_session (ActUserManagerNewSess
|
||||
goto done;
|
||||
}
|
||||
|
||||
+#ifndef __OpenBSD__
|
||||
res = sd_session_get_display (new_session->id,
|
||||
&x11_display);
|
||||
+#else
|
||||
+ res = -1;
|
||||
+#endif
|
||||
if (res < 0) {
|
||||
g_debug ("ActUserManager: Failed to get the x11 display of session '%s': %s",
|
||||
new_session->id,
|
||||
@@ -1671,6 +1693,7 @@ reload_systemd_sessions (ActUserManager *manager)
|
||||
_remove_stale_systemd_sessions (manager, systemd_sessions);
|
||||
}
|
||||
|
||||
+#ifdef __linux__
|
||||
static gboolean
|
||||
on_session_monitor_event (GPollableInputStream *stream,
|
||||
ActUserManager *manager)
|
||||
@@ -1681,10 +1704,12 @@ on_session_monitor_event (GPollableInputStream *stream
|
||||
reload_systemd_sessions (manager);
|
||||
return TRUE;
|
||||
}
|
||||
+#endif
|
||||
|
||||
static void
|
||||
_monitor_for_systemd_session_changes (ActUserManager *manager)
|
||||
{
|
||||
+#ifdef __linux__
|
||||
ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager);
|
||||
int res;
|
||||
int fd;
|
||||
@@ -1711,6 +1736,7 @@ _monitor_for_systemd_session_changes (ActUserManager *
|
||||
NULL);
|
||||
priv->seat.session_monitor_source_id = g_source_attach (source, NULL);
|
||||
g_source_unref (source);
|
||||
+#endif
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2180,7 +2206,7 @@ maybe_set_is_loaded (ActUserManager *manager)
|
||||
/* Don't set is_loaded yet unless the seat is already loaded enough
|
||||
* or failed to load.
|
||||
*/
|
||||
- if (priv->seat.state > ACT_USER_MANAGER_SEAT_STATE_GET_ID) {
|
||||
+ if (priv->seat.state >= ACT_USER_MANAGER_SEAT_STATE_GET_ID) {
|
||||
g_debug ("ActUserManager: Seat loaded, so now setting loaded property");
|
||||
} else if (priv->seat.state == ACT_USER_MANAGER_SEAT_STATE_UNLOADED) {
|
||||
g_debug ("ActUserManager: Seat wouldn't load, so giving up on it and setting loaded property");
|
||||
@@ -2670,6 +2696,7 @@ act_user_manager_finalize (GObject *object)
|
||||
g_source_remove (priv->seat.load_idle_id);
|
||||
}
|
||||
|
||||
+#ifdef __linux__
|
||||
if (priv->seat.session_monitor != NULL) {
|
||||
sd_login_monitor_unref (priv->seat.session_monitor);
|
||||
}
|
||||
@@ -2681,6 +2708,7 @@ act_user_manager_finalize (GObject *object)
|
||||
if (priv->seat.session_monitor_source_id != 0) {
|
||||
g_source_remove (priv->seat.session_monitor_source_id);
|
||||
}
|
||||
+#endif
|
||||
|
||||
if (priv->accounts_proxy != NULL) {
|
||||
g_object_unref (priv->accounts_proxy);
|
Loading…
Add table
Add a link
Reference in a new issue