[gdm/wip/wayland-rebase: 6/12] Integrate the slaves into the main daemon process
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm/wip/wayland-rebase: 6/12] Integrate the slaves into the main daemon process
- Date: Fri, 14 Feb 2014 20:51:11 +0000 (UTC)
commit 8d1987c8b21cf4750be5fffa506fef9a8391eb6c
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Thu Feb 13 16:21:33 2014 -0500
Integrate the slaves into the main daemon process
For no particular reason, the slave has been kept as a separate process.
Integrate this into the main display process by simply making the display
keep a handle to a GdmSlave object. To keep the cleanup simple, we won't
remove the GdmSlave subtypes yet. A future cleanup should merge the slave
functionality into GdmDisplay and its subtypes.
daemon/Makefile.am | 120 +--------
daemon/gdm-display.c | 462 +++++------------------------------
daemon/gdm-display.h | 49 +---
daemon/gdm-display.xml | 6 -
daemon/gdm-manager.c | 113 ++-------
daemon/gdm-simple-slave.c | 15 --
daemon/gdm-simple-slave.h | 1 -
daemon/gdm-slave-job.c | 478 ------------------------------------
daemon/gdm-slave-job.h | 65 -----
daemon/gdm-slave.c | 340 +++++---------------------
daemon/gdm-slave.h | 9 +-
daemon/gdm-slave.xml | 23 --
daemon/gdm-xdmcp-chooser-display.c | 91 ++------
daemon/gdm-xdmcp-chooser-display.h | 1 -
daemon/gdm-xdmcp-chooser-slave.c | 58 ++---
daemon/gdm-xdmcp-chooser-slave.h | 1 -
daemon/gdm-xdmcp-chooser-slave.xml | 8 -
daemon/gdm-xdmcp-display-factory.c | 18 +-
daemon/simple-slave-main.c | 191 --------------
daemon/xdmcp-chooser-slave-main.c | 188 --------------
20 files changed, 221 insertions(+), 2016 deletions(-)
---
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 1195144..eb2aa8c 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -33,8 +33,6 @@ AM_CPPFLAGS = \
$(NULL)
BUILT_SOURCES = \
- gdm-slave-glue.h \
- gdm-xdmcp-chooser-slave-glue.h \
gdm-display-glue.h \
gdm-manager-glue.h \
gdm-static-display-glue.h \
@@ -100,20 +98,6 @@ gdm-session-worker-glue.c gdm-session-worker-glue.h : gdm-session-worker.xml Mak
--generate-c-code=gdm-session-worker-glue \
$(srcdir)/gdm-session-worker.xml
-gdm-slave-glue.c gdm-slave-glue.h: gdm-slave.xml Makefile.am
- $(AM_V_GEN)gdbus-codegen \
- --c-namespace=GdmDBus \
- --interface-prefix=org.gnome.DisplayManager \
- --generate-c-code=gdm-slave-glue \
- $(srcdir)/gdm-slave.xml
-
-gdm-xdmcp-chooser-slave-glue.c gdm-xdmcp-chooser-slave-glue.h: gdm-xdmcp-chooser-slave.xml Makefile.am
- $(AM_V_GEN)gdbus-codegen \
- --c-namespace=GdmDBus \
- --interface-prefix=org.gnome.DisplayManager \
- --generate-c-code=gdm-xdmcp-chooser-slave-glue \
- $(srcdir)/gdm-xdmcp-chooser-slave.xml
-
noinst_PROGRAMS = \
test-session-client \
$(NULL)
@@ -134,86 +118,10 @@ test_session_client_LDADD = \
$(NULL)
libexec_PROGRAMS = \
- gdm-simple-slave \
gdm-session-worker \
$(NULL)
-if XDMCP_SUPPORT
-libexec_PROGRAMS += \
- gdm-xdmcp-chooser-slave \
- $(NULL)
-endif
-
-gdm_simple_slave_SOURCES = \
- simple-slave-main.c \
- gdm-launch-environment.c \
- gdm-launch-environment.h \
- gdm-server.c \
- gdm-server.h \
- gdm-session.c \
- gdm-session.h \
- gdm-session-record.c \
- gdm-session-record.h \
- gdm-session-worker-common.c \
- gdm-session-worker-common.h \
- gdm-session-worker-job.c \
- gdm-session-worker-job.h \
- gdm-xerrors.h \
- gdm-xerrors.c \
- gdm-slave.c \
- gdm-slave.h \
- gdm-simple-slave.c \
- gdm-simple-slave.h \
- gdm-dbus-util.c \
- gdm-dbus-util.h \
- $(NULL)
-
-nodist_gdm_simple_slave_SOURCES = \
- gdm-display-glue.c \
- gdm-display-glue.h \
- gdm-session-enum-types.c \
- gdm-session-enum-types.h \
- gdm-session-glue.c \
- gdm-session-glue.h \
- gdm-session-worker-glue.c \
- gdm-session-worker-glue.h \
- gdm-slave-glue.c \
- gdm-slave-glue.h \
- $(NULL)
-
-gdm_simple_slave_LDFLAGS = \
- $(PAM_LIBS) \
- $(NULL)
-
-gdm_simple_slave_LDADD = \
- $(top_builddir)/common/libgdmcommon.la \
- $(XLIB_LIBS) \
- $(DAEMON_LIBS) \
- $(EXTRA_DAEMON_LIBS) \
- $(SYSTEMD_LIBS) \
- $(JOURNALD_LIBS) \
- $(NULL)
-
gdm_xdmcp_chooser_slave_SOURCES = \
- xdmcp-chooser-slave-main.c \
- gdm-session.c \
- gdm-session.h \
- gdm-session-record.c \
- gdm-session-record.h \
- gdm-session-worker-common.c \
- gdm-session-worker-common.h \
- gdm-session-worker-job.c \
- gdm-session-worker-job.h \
- gdm-launch-environment.c \
- gdm-launch-environment.h \
- gdm-xerrors.h \
- gdm-xerrors.c \
- gdm-slave.c \
- gdm-slave.h \
- gdm-xdmcp-chooser-slave.c \
- gdm-xdmcp-chooser-slave.h \
- gdm-dbus-util.c \
- gdm-dbus-util.h \
$(NULL)
nodist_gdm_xdmcp_chooser_slave_SOURCES = \
@@ -225,10 +133,6 @@ nodist_gdm_xdmcp_chooser_slave_SOURCES = \
gdm-session-enum-types.h \
gdm-display-glue.c \
gdm-display-glue.h \
- gdm-slave-glue.c \
- gdm-slave-glue.h \
- gdm-xdmcp-chooser-slave-glue.c \
- gdm-xdmcp-chooser-slave-glue.h \
$(NULL)
gdm_xdmcp_chooser_slave_LDADD = \
@@ -312,8 +216,12 @@ gdm_SOURCES = \
gdm-static-display.h \
gdm-transient-display.c \
gdm-transient-display.h \
+ gdm-launch-environment.c \
+ gdm-launch-environment.h \
gdm-manager.c \
gdm-manager.h \
+ gdm-server.c \
+ gdm-server.h \
gdm-session.c \
gdm-session.h \
gdm-session-record.c \
@@ -322,10 +230,14 @@ gdm_SOURCES = \
gdm-session-worker-common.h \
gdm-session-worker-job.c \
gdm-session-worker-job.h \
- gdm-slave-job.c \
- gdm-slave-job.h \
+ gdm-slave.c \
+ gdm-slave.h \
+ gdm-simple-slave.c \
+ gdm-simple-slave.h \
gdm-dbus-util.c \
gdm-dbus-util.h \
+ gdm-xerrors.c \
+ gdm-xerrors.h \
$(NULL)
nodist_gdm_SOURCES = \
@@ -339,8 +251,6 @@ nodist_gdm_SOURCES = \
gdm-transient-display-glue.c \
gdm-static-display-glue.h \
gdm-static-display-glue.c \
- gdm-slave-glue.h \
- gdm-slave-glue.c \
gdm-session-glue.h \
gdm-session-glue.c \
gdm-session-worker-glue.c \
@@ -358,16 +268,12 @@ XDMCP_SOURCES = \
gdm-xdmcp-greeter-display.h \
gdm-xdmcp-chooser-display.c \
gdm-xdmcp-chooser-display.h \
- $(NULL)
-
-XDMCP_nodist_SOURCES = \
- gdm-xdmcp-chooser-slave-glue.c \
- gdm-xdmcp-chooser-slave-glue.h \
+ gdm-xdmcp-chooser-slave.c \
+ gdm-xdmcp-chooser-slave.h \
$(NULL)
if XDMCP_SUPPORT
gdm_SOURCES += $(XDMCP_SOURCES)
-nodist_gdm_SOURCES += $(XDMCP_nodist_SOURCES)
endif
EXTRA_gdm_SOURCES = \
@@ -406,10 +312,8 @@ CLEANFILES = \
gdm-session-glue.c \
gdm-session-worker-glue.c \
gdm-session-enum-types.c \
- gdm-slave-glue.c \
gdm-static-display-glue.c \
gdm-transient-display-glue.c \
- gdm-xdmcp-chooser-slave-glue.c \
$(BUILT_SOURCES) \
$(NULL)
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
index 07240e9..5c73208 100644
--- a/daemon/gdm-display.c
+++ b/daemon/gdm-display.c
@@ -41,15 +41,11 @@
#include "gdm-settings-direct.h"
#include "gdm-settings-keys.h"
-#include "gdm-slave-job.h"
-#include "gdm-slave-glue.h"
+#include "gdm-simple-slave.h"
#include "gdm-dbus-util.h"
#define GDM_DISPLAY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_DISPLAY, GdmDisplayPrivate))
-#define GDM_SLAVE_PATH "/org/gnome/DisplayManager/Slave"
-#define DEFAULT_SLAVE_COMMAND LIBEXECDIR "/gdm-simple-slave"
-
struct GdmDisplayPrivate
{
char *id;
@@ -62,19 +58,15 @@ struct GdmDisplayPrivate
int status;
time_t creation_time;
GTimer *slave_timer;
- char *slave_command;
+ GType slave_type;
char *x11_cookie;
gsize x11_cookie_size;
GdmDisplayAccessFile *access_file;
gboolean is_local;
- guint finish_idle_id;
- GdmSlaveJob *slave_job;
- char *slave_bus_name;
- GdmDBusSlave *slave_proxy;
- int slave_name_id;
+ GdmSlave *slave;
GDBusConnection *connection;
GdmDisplayAccessFile *user_access_file;
@@ -96,14 +88,13 @@ enum {
PROP_X11_COOKIE,
PROP_X11_AUTHORITY_FILE,
PROP_IS_LOCAL,
- PROP_SLAVE_COMMAND,
+ PROP_SLAVE_TYPE,
PROP_IS_INITIAL
};
static void gdm_display_class_init (GdmDisplayClass *klass);
static void gdm_display_init (GdmDisplay *display);
static void gdm_display_finalize (GObject *object);
-static void queue_finish (GdmDisplay *display);
static void _gdm_display_set_status (GdmDisplay *display,
int status);
@@ -291,96 +282,6 @@ gdm_display_add_user_authorization (GdmDisplay *display,
}
static void
-on_name_vanished (GDBusConnection *connection,
- const char *name,
- gpointer user_data)
-{
- queue_finish (GDM_DISPLAY (user_data));
-}
-
-static void
-on_slave_started (GdmDBusSlave *slave_proxy,
- GdmDisplay *display)
-{
- _gdm_display_set_status (display, GDM_DISPLAY_MANAGED);
-}
-
-static void
-gdm_display_real_set_slave_bus_name_finish (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GdmDisplay *display = user_data;
-
- display->priv->slave_proxy = GDM_DBUS_SLAVE (gdm_dbus_slave_proxy_new_finish (res, NULL));
- g_object_bind_property (G_OBJECT (display->priv->slave_proxy),
- "session-id",
- G_OBJECT (display),
- "session-id",
- G_BINDING_DEFAULT);
- g_signal_connect (G_OBJECT (display->priv->slave_proxy),
- "started",
- G_CALLBACK (on_slave_started),
- display);
-}
-
-static gboolean
-gdm_display_real_set_slave_bus_name (GdmDisplay *display,
- const char *name,
- GError **error)
-{
- g_free (display->priv->slave_bus_name);
- display->priv->slave_bus_name = g_strdup (name);
-
- if (display->priv->slave_name_id > 0) {
- g_bus_unwatch_name (display->priv->slave_name_id);
- }
-
- display->priv->slave_name_id = g_bus_watch_name_on_connection (display->priv->connection,
- name,
- G_BUS_NAME_WATCHER_FLAGS_NONE,
- NULL, /* name appeared */
- on_name_vanished,
- g_object_ref (display),
- NULL);
-
- g_clear_object (&display->priv->slave_proxy);
- gdm_dbus_slave_proxy_new (display->priv->connection,
- G_DBUS_PROXY_FLAGS_NONE,
- name,
- GDM_SLAVE_PATH,
- NULL,
- gdm_display_real_set_slave_bus_name_finish,
- display);
-
- display->priv->slave_proxy = GDM_DBUS_SLAVE (gdm_dbus_slave_proxy_new_sync
(display->priv->connection,
- G_DBUS_PROXY_FLAGS_NONE,
- name,
- GDM_SLAVE_PATH,
- NULL, NULL));
-
- return TRUE;
-}
-
-gboolean
-gdm_display_set_slave_bus_name (GdmDisplay *display,
- const char *name,
- GError **error)
-{
- gboolean ret;
-
- g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
-
- g_debug ("GdmDisplay: Setting slave bus name:%s on display %s", name,
display->priv->x11_display_name);
-
- g_object_ref (display);
- ret = GDM_DISPLAY_GET_CLASS (display)->set_slave_bus_name (display, name, error);
- g_object_unref (display);
-
- return ret;
-}
-
-static void
gdm_display_real_get_timed_login_details (GdmDisplay *display,
gboolean *enabledp,
char **usernamep,
@@ -522,17 +423,19 @@ gdm_display_remove_user_authorization (GdmDisplay *display,
}
gboolean
-gdm_display_get_x11_cookie (GdmDisplay *display,
- GArray **x11_cookie,
- GError **error)
+gdm_display_get_x11_cookie (GdmDisplay *display,
+ const char **x11_cookie,
+ gsize *x11_cookie_size,
+ GError **error)
{
g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
if (x11_cookie != NULL) {
- *x11_cookie = g_array_new (TRUE, FALSE, sizeof (char));
- g_array_append_vals (*x11_cookie,
- display->priv->x11_cookie,
- display->priv->x11_cookie_size);
+ *x11_cookie = display->priv->x11_cookie;
+ }
+
+ if (x11_cookie_size != NULL) {
+ *x11_cookie_size = display->priv->x11_cookie_size;
}
return TRUE;
@@ -611,44 +514,6 @@ gdm_display_is_initial (GdmDisplay *display,
return TRUE;
}
-static gboolean
-finish_idle (GdmDisplay *display)
-{
- display->priv->finish_idle_id = 0;
- /* finish may end up finalizing object */
- gdm_display_finish (display);
- return FALSE;
-}
-
-static void
-queue_finish (GdmDisplay *display)
-{
- if (display->priv->finish_idle_id == 0) {
- display->priv->finish_idle_id = g_idle_add ((GSourceFunc)finish_idle, display);
- }
-}
-
-static void
-slave_exited (GdmSlaveJob *job,
- int code,
- GdmDisplay *display)
-{
- g_debug ("GdmDisplay: Slave exited: %d", code);
-
- queue_finish (display);
-}
-
-static void
-slave_died (GdmSlaveJob *job,
- int signum,
- GdmDisplay *display)
-{
- g_debug ("GdmDisplay: Slave died: %d", signum);
-
- queue_finish (display);
-}
-
-
static void
_gdm_display_set_status (GdmDisplay *display,
int status)
@@ -659,19 +524,20 @@ _gdm_display_set_status (GdmDisplay *display,
}
}
+static void
+on_slave_started (GdmSlave *slave,
+ GdmDisplay *display)
+{
+ _gdm_display_set_status (display, GDM_DISPLAY_MANAGED);
+}
+
static gboolean
gdm_display_real_prepare (GdmDisplay *display)
{
- char *command;
- char *log_file;
- char *log_path;
-
g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
g_debug ("GdmDisplay: prepare display");
- g_assert (display->priv->slave_job == NULL);
-
if (!gdm_display_create_authority (display)) {
g_warning ("Unable to set up access control for display %d",
display->priv->x11_display_number);
@@ -680,27 +546,12 @@ gdm_display_real_prepare (GdmDisplay *display)
_gdm_display_set_status (display, GDM_DISPLAY_PREPARED);
- display->priv->slave_job = gdm_slave_job_new ();
- g_signal_connect (display->priv->slave_job,
- "exited",
- G_CALLBACK (slave_exited),
- display);
- g_signal_connect (display->priv->slave_job,
- "died",
- G_CALLBACK (slave_died),
- display);
-
- log_file = g_strdup_printf ("%s-slave.log", display->priv->x11_display_name);
- log_path = g_build_filename (LOGDIR, log_file, NULL);
- g_free (log_file);
- gdm_slave_job_set_log_path (display->priv->slave_job, log_path);
- g_free (log_path);
-
- command = g_strdup_printf ("%s --display-id %s",
- display->priv->slave_command,
- display->priv->id);
- gdm_slave_job_set_command (display->priv->slave_job, command);
- g_free (command);
+ display->priv->slave = GDM_SLAVE (g_object_new (display->priv->slave_type,
+ "display", display,
+ NULL));
+ g_signal_connect (display->priv->slave, "started",
+ G_CALLBACK (on_slave_started), display);
+ gdm_slave_start (display->priv->slave);
return TRUE;
}
@@ -738,12 +589,8 @@ gdm_display_real_manage (GdmDisplay *display)
}
}
- g_assert (display->priv->slave_job != NULL);
-
g_timer_start (display->priv->slave_timer);
- gdm_slave_job_start (display->priv->slave_job);
-
return TRUE;
}
@@ -802,11 +649,10 @@ gdm_display_real_unmanage (GdmDisplay *display)
g_timer_stop (display->priv->slave_timer);
- if (display->priv->slave_job != NULL) {
- gdm_slave_job_stop (display->priv->slave_job);
-
- g_object_unref (display->priv->slave_job);
- display->priv->slave_job = NULL;
+ if (display->priv->slave != NULL) {
+ gdm_slave_stop (display->priv->slave);
+ g_object_unref (display->priv->slave);
+ display->priv->slave = NULL;
}
if (display->priv->user_access_file != NULL) {
@@ -829,11 +675,6 @@ gdm_display_real_unmanage (GdmDisplay *display)
_gdm_display_set_status (display, GDM_DISPLAY_UNMANAGED);
}
- if (display->priv->slave_name_id > 0) {
- g_bus_unwatch_name (display->priv->slave_name_id);
- display->priv->slave_name_id = 0;
- }
-
return TRUE;
}
@@ -958,11 +799,10 @@ _gdm_display_set_is_local (GdmDisplay *display,
}
static void
-_gdm_display_set_slave_command (GdmDisplay *display,
- const char *command)
+_gdm_display_set_slave_type (GdmDisplay *display,
+ GType type)
{
- g_free (display->priv->slave_command);
- display->priv->slave_command = g_strdup (command);
+ display->priv->slave_type = type;
}
static void
@@ -1010,8 +850,8 @@ gdm_display_set_property (GObject *object,
case PROP_IS_LOCAL:
_gdm_display_set_is_local (self, g_value_get_boolean (value));
break;
- case PROP_SLAVE_COMMAND:
- _gdm_display_set_slave_command (self, g_value_get_string (value));
+ case PROP_SLAVE_TYPE:
+ _gdm_display_set_slave_type (self, g_value_get_gtype (value));
break;
case PROP_IS_INITIAL:
_gdm_display_set_is_initial (self, g_value_get_boolean (value));
@@ -1064,8 +904,8 @@ gdm_display_get_property (GObject *object,
case PROP_IS_LOCAL:
g_value_set_boolean (value, self->priv->is_local);
break;
- case PROP_SLAVE_COMMAND:
- g_value_set_string (value, self->priv->slave_command);
+ case PROP_SLAVE_TYPE:
+ g_value_set_gtype (value, self->priv->slave_type);
break;
case PROP_IS_INITIAL:
g_value_set_boolean (value, self->priv->is_initial);
@@ -1168,18 +1008,18 @@ handle_get_x11_cookie (GdmDBusDisplay *skeleton,
GDBusMethodInvocation *invocation,
GdmDisplay *display)
{
- GArray *cookie = NULL;
+ const char *x11_cookie;
+ gsize x11_cookie_size;
GVariant *variant;
- gdm_display_get_x11_cookie (display, &cookie, NULL);
+ gdm_display_get_x11_cookie (display, &x11_cookie, &x11_cookie_size, NULL);
variant = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
- cookie->data,
- cookie->len,
+ x11_cookie,
+ x11_cookie_size,
sizeof (char));
gdm_dbus_display_complete_get_x11_cookie (skeleton, invocation, variant);
- g_array_unref (cookie);
return TRUE;
}
@@ -1241,41 +1081,6 @@ handle_is_initial (GdmDBusDisplay *skeleton,
}
static gboolean
-handle_get_slave_bus_name (GdmDBusDisplay *skeleton,
- GDBusMethodInvocation *invocation,
- GdmDisplay *display)
-{
- if (display->priv->slave_bus_name != NULL) {
- gdm_dbus_display_complete_get_slave_bus_name (skeleton, invocation,
- display->priv->slave_bus_name);
- } else {
- g_dbus_method_invocation_return_dbus_error (invocation,
- "org.gnome.DisplayManager.NotReady",
- "Slave is not yet registered");
- }
-
- return TRUE;
-}
-
-static gboolean
-handle_set_slave_bus_name (GdmDBusDisplay *skeleton,
- GDBusMethodInvocation *invocation,
- const char *bus_name,
- GdmDisplay *display)
-{
- GError *error = NULL;
-
- if (gdm_display_set_slave_bus_name (display, bus_name, &error)) {
- gdm_dbus_display_complete_set_slave_bus_name (skeleton, invocation);
- } else {
- g_dbus_method_invocation_return_gerror (invocation, error);
- g_error_free (error);
- }
-
- return TRUE;
-}
-
-static gboolean
handle_add_user_authorization (GdmDBusDisplay *skeleton,
GDBusMethodInvocation *invocation,
const char *username,
@@ -1351,10 +1156,6 @@ register_display (GdmDisplay *display)
G_CALLBACK (handle_is_local), display);
g_signal_connect (display->priv->display_skeleton, "handle-is-initial",
G_CALLBACK (handle_is_initial), display);
- g_signal_connect (display->priv->display_skeleton, "handle-get-slave-bus-name",
- G_CALLBACK (handle_get_slave_bus_name), display);
- g_signal_connect (display->priv->display_skeleton, "handle-set-slave-bus-name",
- G_CALLBACK (handle_set_slave_bus_name), display);
g_signal_connect (display->priv->display_skeleton, "handle-add-user-authorization",
G_CALLBACK (handle_add_user_authorization), display);
g_signal_connect (display->priv->display_skeleton, "handle-remove-user-authorization",
@@ -1409,16 +1210,10 @@ gdm_display_dispose (GObject *object)
g_debug ("GdmDisplay: Disposing display");
- if (display->priv->finish_idle_id > 0) {
- g_source_remove (display->priv->finish_idle_id);
- display->priv->finish_idle_id = 0;
- }
-
- if (display->priv->slave_job != NULL) {
- gdm_slave_job_stop (display->priv->slave_job);
-
- g_object_unref (display->priv->slave_job);
- display->priv->slave_job = NULL;
+ if (display->priv->slave != NULL) {
+ gdm_slave_stop (display->priv->slave);
+ g_object_unref (display->priv->slave);
+ display->priv->slave = NULL;
}
if (display->priv->user_access_file != NULL) {
@@ -1433,11 +1228,6 @@ gdm_display_dispose (GObject *object)
display->priv->access_file = NULL;
}
- if (display->priv->slave_name_id > 0) {
- g_bus_unwatch_name (display->priv->slave_name_id);
- display->priv->slave_name_id = 0;
- }
-
G_OBJECT_CLASS (gdm_display_parent_class)->dispose (object);
}
@@ -1455,7 +1245,6 @@ gdm_display_class_init (GdmDisplayClass *klass)
klass->create_authority = gdm_display_real_create_authority;
klass->add_user_authorization = gdm_display_real_add_user_authorization;
klass->remove_user_authorization = gdm_display_real_remove_user_authorization;
- klass->set_slave_bus_name = gdm_display_real_set_slave_bus_name;
klass->get_timed_login_details = gdm_display_real_get_timed_login_details;
klass->prepare = gdm_display_real_prepare;
klass->manage = gdm_display_real_manage;
@@ -1537,12 +1326,12 @@ gdm_display_class_init (GdmDisplayClass *klass)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class,
- PROP_SLAVE_COMMAND,
- g_param_spec_string ("slave-command",
- "slave command",
- "slave command",
- DEFAULT_SLAVE_COMMAND,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ PROP_SLAVE_TYPE,
+ g_param_spec_gtype ("slave-type",
+ "slave type",
+ "slave type",
+ GDM_TYPE_SIMPLE_SLAVE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class,
PROP_STATUS,
g_param_spec_int ("status",
@@ -1584,8 +1373,6 @@ gdm_display_finalize (GObject *object)
g_free (display->priv->remote_hostname);
g_free (display->priv->x11_display_name);
g_free (display->priv->x11_cookie);
- g_free (display->priv->slave_command);
- g_free (display->priv->slave_bus_name);
g_clear_object (&display->priv->display_skeleton);
g_clear_object (&display->priv->object_skeleton);
@@ -1612,153 +1399,34 @@ gdm_display_get_object_skeleton (GdmDisplay *display)
return display->priv->object_skeleton;
}
-static void
-on_slave_set_up (GdmDBusSlave *slave,
- GAsyncResult *result,
- GTask *task)
-{
- GError *error = NULL;
- char *username = NULL;
-
- if (!gdm_dbus_slave_call_set_up_initial_session_finish (slave, &username, result, &error)) {
- g_task_return_error (task, error);
- return;
- }
-
- g_debug ("GdmDisplay: slave set up for %s user to connect",
- username);
-
- g_task_return_pointer (task, username, NULL);
-}
-
void
-gdm_display_set_up_initial_session (GdmDisplay *display,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GTask *task;
-
- task = g_task_new (display, cancellable, callback, user_data);
-
- gdm_dbus_slave_call_set_up_initial_session (display->priv->slave_proxy,
- cancellable,
- (GAsyncReadyCallback)
- on_slave_set_up,
- task);
-}
-
-char *
-gdm_display_set_up_initial_session_finish (GdmDisplay *display,
- GAsyncResult *result,
- GError **error)
+gdm_display_set_up_initial_session (GdmDisplay *display,
+ char **username)
{
- char *username;
-
- username = g_task_propagate_pointer (G_TASK (result), error);
- g_object_unref (G_OBJECT (result));
-
- return username;
-}
-
-static void
-on_slave_started_initial_session (GdmDBusSlave *slave,
- GAsyncResult *result,
- GTask *task)
-{
- GError *error = NULL;
-
- if (!gdm_dbus_slave_call_start_initial_session_finish (slave, result, &error)) {
- g_task_return_error (task, error);
- return;
- }
-
- g_debug ("GdmDisplay: slave started initial session");
-
- g_task_return_boolean (task, TRUE);
+ gdm_slave_set_up_initial_session (display->priv->slave, username);
}
void
-gdm_display_start_initial_session (GdmDisplay *display,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GTask *task;
-
- task = g_task_new (display, cancellable, callback, user_data);
-
- gdm_dbus_slave_call_start_initial_session (display->priv->slave_proxy,
- cancellable,
- (GAsyncReadyCallback)
- on_slave_started_initial_session,
- task);
-}
-
-gboolean
-gdm_display_start_initial_session_finish (GdmDisplay *display,
- GAsyncResult *result,
- GError **error)
-{
- gboolean outcome;
-
- outcome = g_task_propagate_boolean (G_TASK (result), error);
- g_object_unref (G_OBJECT (result));
-
- return outcome;
-}
-
-static void
-on_slave_initial_session_stopped (GdmDBusSlave *slave,
- GAsyncResult *result,
- GTask *task)
+gdm_display_start_initial_session (GdmDisplay *display)
{
- GError *error = NULL;
-
- if (!gdm_dbus_slave_call_stop_initial_session_finish (slave, result, &error)) {
- g_task_return_error (task, error);
- return;
- }
-
- g_debug ("GdmDisplay: slave set up for user session to start");
-
- g_task_return_boolean (task, TRUE);
+ gdm_slave_start_initial_session (display->priv->slave);
}
void
-gdm_display_stop_initial_session (GdmDisplay *display,
- const char *username,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
+gdm_display_stop_initial_session (GdmDisplay *display,
+ const char *username)
{
- GTask *task;
-
- task = g_task_new (display, cancellable, callback, user_data);
-
- gdm_dbus_slave_call_stop_initial_session (display->priv->slave_proxy,
- username,
- cancellable,
- (GAsyncReadyCallback)
- on_slave_initial_session_stopped,
- task);
+ gdm_slave_stop_initial_session (display->priv->slave, username);
}
gboolean
-gdm_display_stop_initial_session_finish (GdmDisplay *display,
- GAsyncResult *result,
- GError **error)
+gdm_display_run_pre_session_script (GdmDisplay *display)
{
- gboolean outcome;
-
- outcome = g_task_propagate_boolean (G_TASK (result), error);
- g_object_unref (G_OBJECT (result));
-
- return outcome;
+ return FALSE;
}
-gboolean
-gdm_display_run_pre_session_script (GdmDisplay *display)
+GdmSlave *
+gdm_display_get_slave (GdmDisplay *display)
{
- return FALSE;
+ return display->priv->slave;
}
diff --git a/daemon/gdm-display.h b/daemon/gdm-display.h
index 391c2dd..abab3d4 100644
--- a/daemon/gdm-display.h
+++ b/daemon/gdm-display.h
@@ -24,6 +24,7 @@
#include <glib-object.h>
#include <gio/gio.h>
+#include "gdm-slave.h"
G_BEGIN_DECLS
@@ -63,9 +64,6 @@ typedef struct
gboolean (*remove_user_authorization) (GdmDisplay *display,
const char *username,
GError **error);
- gboolean (*set_slave_bus_name) (GdmDisplay *display,
- const char *name,
- GError **error);
gboolean (*prepare) (GdmDisplay *display);
gboolean (*manage) (GdmDisplay *display);
gboolean (*finish) (GdmDisplay *display);
@@ -127,10 +125,10 @@ gboolean gdm_display_is_initial (GdmDisplay *dis
gboolean *initial,
GError **error);
-/* exported but protected */
-gboolean gdm_display_get_x11_cookie (GdmDisplay *display,
- GArray **x11_cookie,
- GError **error);
+gboolean gdm_display_get_x11_cookie (GdmDisplay *display,
+ const char **x11_cookie,
+ gsize *x11_cookie_size,
+ GError **error);
gboolean gdm_display_get_x11_authority_file (GdmDisplay *display,
char **filename,
GError **error);
@@ -141,36 +139,15 @@ gboolean gdm_display_add_user_authorization (GdmDisplay *disp
gboolean gdm_display_remove_user_authorization (GdmDisplay *display,
const char *username,
GError **error);
-gboolean gdm_display_set_slave_bus_name (GdmDisplay *display,
- const char *name,
- GError **error);
-void gdm_display_set_up_initial_session (GdmDisplay *display,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-char * gdm_display_set_up_initial_session_finish (GdmDisplay *display,
- GAsyncResult *result,
- GError **error);
-void gdm_display_start_initial_session (GdmDisplay *display,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean gdm_display_start_initial_session_finish (GdmDisplay *display,
- GAsyncResult *result,
- GError **error);
-void gdm_display_stop_initial_session (GdmDisplay *display,
- const char *username,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean gdm_display_stop_initial_session_finish (GdmDisplay *display,
- GAsyncResult *result,
- GError **error);
-gboolean gdm_display_run_pre_session_script (GdmDisplay *display);
+void gdm_display_set_up_initial_session (GdmDisplay *display,
+ char **username);
+void gdm_display_start_initial_session (GdmDisplay *display);
+void gdm_display_stop_initial_session (GdmDisplay *display,
+ const char *username);
+gboolean gdm_display_run_pre_session_script (GdmDisplay *display);
+
+GdmSlave * gdm_display_get_slave (GdmDisplay *display);
G_END_DECLS
diff --git a/daemon/gdm-display.xml b/daemon/gdm-display.xml
index 48d03db..bc27995 100644
--- a/daemon/gdm-display.xml
+++ b/daemon/gdm-display.xml
@@ -37,12 +37,6 @@
<method name="RemoveUserAuthorization">
<arg name="username" direction="in" type="s"/>
</method>
- <method name="GetSlaveBusName">
- <arg name="name" direction="out" type="s"/>
- </method>
- <method name="SetSlaveBusName">
- <arg name="name" direction="in" type="s"/>
- </method>
<method name="GetTimedLoginDetails">
<arg name="enabled" direction="out" type="b"/>
<arg name="username" direction="out" type="s"/>
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index 0db6886..ab85a92 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -102,9 +102,6 @@ static guint signals [LAST_SIGNAL] = { 0, };
static void gdm_manager_class_init (GdmManagerClass *klass);
static void gdm_manager_init (GdmManager *manager);
static void gdm_manager_finalize (GObject *object);
-static void on_initial_session_set_up (GdmDisplay *display,
- GAsyncResult *result,
- GdmManager *manager);
static void create_session_for_display (GdmManager *manager,
GdmDisplay *display,
uid_t allowed_user);
@@ -743,6 +740,28 @@ manager_interface_init (GdmDBusManagerIface *interface)
}
static void
+set_up_initial_session (GdmManager *manager,
+ GdmDisplay *display)
+{
+ char *allowed_user;
+ struct passwd *passwd_entry;
+
+ gdm_display_set_up_initial_session (display, &allowed_user);
+
+ if (!gdm_get_pwent_for_name (allowed_user, &passwd_entry)) {
+ g_warning ("GdmManager: couldn't look up username %s",
+ allowed_user);
+ gdm_display_finish (display);
+ return;
+ }
+
+ create_session_for_display (manager, display, passwd_entry->pw_uid);
+ g_free (allowed_user);
+
+ gdm_display_start_initial_session (display);
+}
+
+static void
on_display_status_changed (GdmDisplay *display,
GParamSpec *arg1,
GdmManager *manager)
@@ -753,11 +772,7 @@ on_display_status_changed (GdmDisplay *display,
switch (status) {
case GDM_DISPLAY_MANAGED:
- gdm_display_set_up_initial_session (display,
- NULL,
- (GAsyncReadyCallback)
- on_initial_session_set_up,
- manager);
+ set_up_initial_session (manager, display);
break;
case GDM_DISPLAY_FAILED:
case GDM_DISPLAY_UNMANAGED:
@@ -843,28 +858,6 @@ start_user_session (GdmManager *manager,
destroy_start_user_session_operation (operation);
}
-static void
-on_initial_session_stopped (GdmDisplay *display,
- GAsyncResult *result,
- StartUserSessionOperation *operation)
-{
- GError *error = NULL;
- gboolean stopped;
-
- stopped = gdm_display_stop_initial_session_finish (display, result, &error);
-
- if (!stopped) {
- g_warning ("Couldn't stop initial session on display: %s",
- error->message);
- g_error_free (error);
- gdm_display_unmanage (display);
- gdm_display_finish (display);
- return;
- }
-
- start_user_session (operation->manager, display, operation);
-}
-
static gboolean
on_start_user_session (StartUserSessionOperation *operation)
{
@@ -894,13 +887,10 @@ on_start_user_session (StartUserSessionOperation *operation)
display = get_display_for_session (operation->manager, operation->session);
username = gdm_session_get_username (operation->session);
- gdm_display_stop_initial_session (display,
- username,
- NULL,
- (GAsyncReadyCallback)
- on_initial_session_stopped,
- operation);
+ gdm_display_stop_initial_session (display, username);
g_free (username);
+
+ start_user_session (operation->manager, display, operation);
}
return G_SOURCE_REMOVE;
@@ -1426,20 +1416,6 @@ touch_marker_file (GdmManager *manager)
}
static void
-on_initial_session_started (GdmDisplay *display,
- GAsyncResult *result,
- GdmManager *manager)
-{
- GError *error = NULL;
- if (!gdm_display_start_initial_session_finish (display, result, &error)) {
- g_warning ("GdmManager: couldn't start initial session: %s", error->message);
- gdm_display_unmanage (display);
- gdm_display_finish (display);
- return;
- }
-}
-
-static void
create_session_for_display (GdmManager *manager,
GdmDisplay *display,
uid_t allowed_user)
@@ -1533,43 +1509,6 @@ create_session_for_display (GdmManager *manager,
}
static void
-on_initial_session_set_up (GdmDisplay *display,
- GAsyncResult *result,
- GdmManager *manager)
-{
- GError *error = NULL;
- char *allowed_user;
- struct passwd *passwd_entry;
-
- allowed_user = gdm_display_set_up_initial_session_finish (display, result, &error);
-
- if (allowed_user == NULL) {
- g_warning ("Couldn't start initial session on display: %s",
- error->message);
- g_error_free (error);
- gdm_display_unmanage (display);
- gdm_display_finish (display);
- return;
- }
-
- if (!gdm_get_pwent_for_name (allowed_user, &passwd_entry)) {
- g_warning ("GdmManager: couldn't look up username %s",
- allowed_user);
- gdm_display_finish (display);
- return;
- }
-
- create_session_for_display (manager, display, passwd_entry->pw_uid);
- g_free (allowed_user);
-
- gdm_display_start_initial_session (display,
- NULL,
- (GAsyncReadyCallback)
- on_initial_session_started,
- manager);
-}
-
-static void
on_display_added (GdmDisplayStore *display_store,
const char *id,
GdmManager *manager)
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index c78677d..f571bc2 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -57,9 +57,6 @@
#define GDM_SIMPLE_SLAVE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_SIMPLE_SLAVE,
GdmSimpleSlavePrivate))
-#define GDM_DBUS_NAME "org.gnome.DisplayManager"
-#define GDM_DBUS_DISPLAY_INTERFACE "org.gnome.DisplayManager.Display"
-
#define MAX_CONNECT_ATTEMPTS 10
#define DEFAULT_PING_INTERVAL 15
@@ -1057,15 +1054,3 @@ gdm_simple_slave_finalize (GObject *object)
G_OBJECT_CLASS (gdm_simple_slave_parent_class)->finalize (object);
}
-
-GdmSlave *
-gdm_simple_slave_new (const char *id)
-{
- GObject *object;
-
- object = g_object_new (GDM_TYPE_SIMPLE_SLAVE,
- "display-id", id,
- NULL);
-
- return GDM_SLAVE (object);
-}
diff --git a/daemon/gdm-simple-slave.h b/daemon/gdm-simple-slave.h
index f958a15..376aeda 100644
--- a/daemon/gdm-simple-slave.h
+++ b/daemon/gdm-simple-slave.h
@@ -48,7 +48,6 @@ typedef struct
} GdmSimpleSlaveClass;
GType gdm_simple_slave_get_type (void);
-GdmSlave * gdm_simple_slave_new (const char *id);
G_END_DECLS
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
index 2276677..a207578 100644
--- a/daemon/gdm-slave.c
+++ b/daemon/gdm-slave.c
@@ -51,18 +51,13 @@
#include "gdm-xerrors.h"
#include "gdm-slave.h"
-#include "gdm-slave-glue.h"
+#include "gdm-display.h"
#include "gdm-display-glue.h"
#include "gdm-server.h"
#define GDM_SLAVE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_SLAVE, GdmSlavePrivate))
-#define GDM_DBUS_NAME "org.gnome.DisplayManager"
-#define GDM_DBUS_DISPLAY_INTERFACE "org.gnome.DisplayManager.Display"
-
-#define GDM_SLAVE_PATH "/org/gnome/DisplayManager/Slave"
-
struct GdmSlavePrivate
{
GPid pid;
@@ -73,8 +68,9 @@ struct GdmSlavePrivate
char *session_id;
+ GdmDisplay *display;
+
/* cached display values */
- char *display_id;
char *display_name;
int display_number;
char *display_hostname;
@@ -86,16 +82,12 @@ struct GdmSlavePrivate
char *windowpath;
GBytes *display_x11_cookie;
gboolean display_is_initial;
-
- GdmDBusDisplay *display_proxy;
- GDBusConnection *connection;
- GdmDBusSlave *skeleton;
};
enum {
PROP_0,
PROP_SESSION_ID,
- PROP_DISPLAY_ID,
+ PROP_DISPLAY,
PROP_DISPLAY_NAME,
PROP_DISPLAY_NUMBER,
PROP_DISPLAY_HOSTNAME,
@@ -106,6 +98,7 @@ enum {
};
enum {
+ STARTED,
STOPPED,
LAST_SIGNAL
};
@@ -525,94 +518,25 @@ gdm_slave_connect_to_x11_display (GdmSlave *slave)
}
if (ret) {
- gdm_dbus_slave_emit_started (slave->priv->skeleton);
+ g_signal_emit (slave, signals [STARTED], 0);
}
return ret;
}
static gboolean
-gdm_slave_set_slave_bus_name (GdmSlave *slave)
-{
- gboolean res;
- GError *error;
- const char *name;
-
- name = g_dbus_connection_get_unique_name (slave->priv->connection);
-
- error = NULL;
- res = gdm_dbus_display_call_set_slave_bus_name_sync (slave->priv->display_proxy,
- name,
- NULL,
- &error);
- if (! res) {
- g_warning ("Failed to set slave bus name on parent: %s", error->message);
- g_error_free (error);
- }
-
- return res;
-}
-
-static gboolean
gdm_slave_real_start (GdmSlave *slave)
{
gboolean res;
- char *id = NULL;
GError *error;
- GVariant *x11_cookie;
- const char *x11_cookie_bytes;
+ const char *x11_cookie;
gsize x11_cookie_size;
g_debug ("GdmSlave: Starting slave");
- g_assert (slave->priv->display_proxy == NULL);
-
- if (! g_variant_is_object_path (slave->priv->display_id)) {
- g_warning ("Display ID isn't valid");
- return FALSE;
- }
-
- g_debug ("GdmSlave: Creating proxy for %s", slave->priv->display_id);
- error = NULL;
- slave->priv->display_proxy = GDM_DBUS_DISPLAY (gdm_dbus_display_proxy_new_sync
(slave->priv->connection,
-
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
- GDM_DBUS_NAME,
-
slave->priv->display_id,
- NULL,
- &error));
-
- if (slave->priv->display_proxy == NULL) {
- g_warning ("Failed to create display proxy %s: %s", slave->priv->display_id, error->message);
- g_error_free (error);
- return FALSE;
- }
-
- error = NULL;
- res = gdm_dbus_display_call_get_id_sync (slave->priv->display_proxy,
- &id,
- NULL,
- &error);
- if (! res || !id) {
- g_warning ("Failed to get display ID %s: %s", slave->priv->display_id, error->message);
- g_error_free (error);
- return FALSE;
- }
-
- g_debug ("GdmSlave: Got display ID: %s", id);
-
- if (strcmp (id, slave->priv->display_id) != 0) {
- g_warning ("Display ID doesn't match");
- return FALSE;
- }
-
- gdm_slave_set_slave_bus_name (slave);
-
/* cache some values up front */
error = NULL;
- res = gdm_dbus_display_call_is_local_sync (slave->priv->display_proxy,
- &slave->priv->display_is_local,
- NULL,
- &error);
+ res = gdm_display_is_local (slave->priv->display, &slave->priv->display_is_local, &error);
if (! res) {
g_warning ("Failed to get value: %s", error->message);
g_error_free (error);
@@ -620,10 +544,7 @@ gdm_slave_real_start (GdmSlave *slave)
}
error = NULL;
- res = gdm_dbus_display_call_get_x11_display_name_sync (slave->priv->display_proxy,
- &slave->priv->display_name,
- NULL,
- &error);
+ res = gdm_display_get_x11_display_name (slave->priv->display, &slave->priv->display_name, &error);
if (! res) {
g_warning ("Failed to get value: %s", error->message);
g_error_free (error);
@@ -631,10 +552,7 @@ gdm_slave_real_start (GdmSlave *slave)
}
error = NULL;
- res = gdm_dbus_display_call_get_x11_display_number_sync (slave->priv->display_proxy,
- &slave->priv->display_number,
- NULL,
- &error);
+ res = gdm_display_get_x11_display_number (slave->priv->display, &slave->priv->display_number,
&error);
if (! res) {
g_warning ("Failed to get value: %s", error->message);
g_error_free (error);
@@ -642,10 +560,7 @@ gdm_slave_real_start (GdmSlave *slave)
}
error = NULL;
- res = gdm_dbus_display_call_get_remote_hostname_sync (slave->priv->display_proxy,
- &slave->priv->display_hostname,
- NULL,
- &error);
+ res = gdm_display_get_remote_hostname (slave->priv->display, &slave->priv->display_hostname, &error);
if (! res) {
g_warning ("Failed to get value: %s", error->message);
g_error_free (error);
@@ -653,33 +568,20 @@ gdm_slave_real_start (GdmSlave *slave)
}
error = NULL;
- res = gdm_dbus_display_call_get_x11_cookie_sync (slave->priv->display_proxy,
- &x11_cookie,
- NULL,
- &error);
+ res = gdm_display_get_x11_cookie (slave->priv->display, &x11_cookie, &x11_cookie_size, &error);
if (! res) {
g_warning ("Failed to get value: %s", error->message);
g_error_free (error);
return FALSE;
}
- x11_cookie_bytes = g_variant_get_fixed_array (x11_cookie,
- &x11_cookie_size,
- sizeof (char));
-
- if (x11_cookie_bytes != NULL && x11_cookie_size > 0) {
+ if (x11_cookie != NULL && x11_cookie_size > 0) {
g_bytes_unref (slave->priv->display_x11_cookie);
- slave->priv->display_x11_cookie = g_bytes_new (x11_cookie_bytes,
- x11_cookie_size);
+ slave->priv->display_x11_cookie = g_bytes_new (x11_cookie, x11_cookie_size);
}
- g_variant_unref (x11_cookie);
-
error = NULL;
- res = gdm_dbus_display_call_get_x11_authority_file_sync (slave->priv->display_proxy,
- &slave->priv->display_x11_authority_file,
- NULL,
- &error);
+ res = gdm_display_get_x11_authority_file (slave->priv->display,
&slave->priv->display_x11_authority_file, &error);
if (! res) {
g_warning ("Failed to get value: %s", error->message);
g_error_free (error);
@@ -687,10 +589,7 @@ gdm_slave_real_start (GdmSlave *slave)
}
error = NULL;
- res = gdm_dbus_display_call_get_seat_id_sync (slave->priv->display_proxy,
- &slave->priv->display_seat_id,
- NULL,
- &error);
+ res = gdm_display_get_seat_id (slave->priv->display, &slave->priv->display_seat_id, &error);
if (! res) {
g_warning ("Failed to get value: %s", error->message);
g_error_free (error);
@@ -698,10 +597,7 @@ gdm_slave_real_start (GdmSlave *slave)
}
error = NULL;
- res = gdm_dbus_display_call_is_initial_sync (slave->priv->display_proxy,
- &slave->priv->display_is_initial,
- NULL,
- &error);
+ res = gdm_display_is_initial (slave->priv->display, &slave->priv->display_is_initial, &error);
if (! res) {
g_warning ("Failed to get value: %s", error->message);
g_error_free (error);
@@ -716,7 +612,7 @@ gdm_slave_real_stop (GdmSlave *slave)
{
g_debug ("GdmSlave: Stopping slave");
- g_clear_object (&slave->priv->display_proxy);
+ g_clear_object (&slave->priv->display);
return TRUE;
}
@@ -776,11 +672,10 @@ gdm_slave_add_user_authorization (GdmSlave *slave,
g_debug ("GdmSlave: Requesting user authorization");
error = NULL;
- res = gdm_dbus_display_call_add_user_authorization_sync (slave->priv->display_proxy,
- username,
- &filename,
- NULL,
- &error);
+ res = gdm_display_add_user_authorization (slave->priv->display,
+ username,
+ &filename,
+ &error);
if (! res) {
g_warning ("Failed to add user authorization: %s", error->message);
@@ -916,12 +811,11 @@ gdm_slave_get_timed_login_details (GdmSlave *slave,
g_debug ("GdmSlave: Requesting timed login details");
error = NULL;
- res = gdm_dbus_display_call_get_timed_login_details_sync (slave->priv->display_proxy,
- &enabled,
- &username,
- &delay,
- NULL,
- &error);
+ res = gdm_display_get_timed_login_details (slave->priv->display,
+ &enabled,
+ &username,
+ &delay,
+ &error);
if (! res) {
g_warning ("Failed to get timed login details: %s", error->message);
g_error_free (error);
@@ -980,14 +874,6 @@ _gdm_slave_set_session_id (GdmSlave *slave,
}
static void
-_gdm_slave_set_display_id (GdmSlave *slave,
- const char *id)
-{
- g_free (slave->priv->display_id);
- slave->priv->display_id = g_strdup (id);
-}
-
-static void
gdm_slave_set_property (GObject *object,
guint prop_id,
const GValue *value,
@@ -1001,8 +887,8 @@ gdm_slave_set_property (GObject *object,
case PROP_SESSION_ID:
_gdm_slave_set_session_id (self, g_value_get_string (value));
break;
- case PROP_DISPLAY_ID:
- _gdm_slave_set_display_id (self, g_value_get_string (value));
+ case PROP_DISPLAY:
+ self->priv->display = g_value_dup_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1024,8 +910,8 @@ gdm_slave_get_property (GObject *object,
case PROP_SESSION_ID:
g_value_set_string (value, self->priv->session_id);
break;
- case PROP_DISPLAY_ID:
- g_value_set_string (value, self->priv->display_id);
+ case PROP_DISPLAY:
+ g_value_set_object (value, self->priv->display);
break;
case PROP_DISPLAY_NAME:
g_value_set_string (value, self->priv->display_name);
@@ -1054,136 +940,24 @@ gdm_slave_get_property (GObject *object,
}
}
-static gboolean
-handle_set_up_initial_session (GdmDBusSlave *skeleton,
- GDBusMethodInvocation *invocation,
- GdmSlave *slave)
-{
- GdmSlaveClass *slave_class;
- char *username;
-
- slave_class = GDM_SLAVE_GET_CLASS (slave);
- if (slave_class->set_up_initial_session == NULL) {
- g_dbus_method_invocation_return_dbus_error (invocation,
- "org.gnome.DisplayManager.Slave.Unsupported",
- "Connections to the slave are not supported by
this slave");
- return TRUE;
- }
-
- username = NULL;
- slave_class->set_up_initial_session (slave, &username);
-
- gdm_dbus_slave_complete_set_up_initial_session (skeleton, invocation, username);
-
- g_free (username);
- return TRUE;
-}
-
-static gboolean
-handle_start_initial_session (GdmDBusSlave *skeleton,
- GDBusMethodInvocation *invocation,
- GdmSlave *slave)
+void
+gdm_slave_set_up_initial_session (GdmSlave *slave,
+ char **username)
{
- GdmSlaveClass *slave_class;
-
- slave_class = GDM_SLAVE_GET_CLASS (slave);
- if (slave_class->start_initial_session == NULL) {
- g_dbus_method_invocation_return_dbus_error (invocation,
- "org.gnome.DisplayManager.Slave.Unsupported",
- "Connections to the slave are not supported by
this slave");
- return TRUE;
- }
-
- slave_class->start_initial_session (slave);
-
- gdm_dbus_slave_complete_start_initial_session (skeleton, invocation);
-
- return TRUE;
+ GDM_SLAVE_GET_CLASS (slave)->set_up_initial_session (slave, username);
}
-static gboolean
-handle_stop_initial_session (GdmDBusSlave *skeleton,
- GDBusMethodInvocation *invocation,
- const char *username,
- GdmSlave *slave)
+void
+gdm_slave_start_initial_session (GdmSlave *slave)
{
- GdmSlaveClass *slave_class;
-
- slave_class = GDM_SLAVE_GET_CLASS (slave);
- if (slave_class->stop_initial_session == NULL) {
- g_dbus_method_invocation_return_dbus_error (invocation,
- "org.gnome.DisplayManager.Slave.Unsupported",
- "Connections to the slave are not supported by
this slave");
- return TRUE;
- }
-
- slave_class->stop_initial_session (slave, username);
-
- gdm_dbus_slave_complete_stop_initial_session (skeleton, invocation);
-
- return TRUE;
+ GDM_SLAVE_GET_CLASS (slave)->start_initial_session (slave);
}
-static gboolean
-register_slave (GdmSlave *slave)
-{
- GError *error;
-
- error = NULL;
- slave->priv->connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM,
- NULL,
- &error);
- if (slave->priv->connection == NULL) {
- g_critical ("error getting system bus: %s", error->message);
- g_error_free (error);
- exit (1);
- }
-
- slave->priv->skeleton = GDM_DBUS_SLAVE (gdm_dbus_slave_skeleton_new ());
-
- g_signal_connect (slave->priv->skeleton,
- "handle-set-up-initial-session",
- G_CALLBACK (handle_set_up_initial_session),
- slave);
- g_signal_connect (slave->priv->skeleton,
- "handle-start-initial-session",
- G_CALLBACK (handle_start_initial_session),
- slave);
- g_signal_connect (slave->priv->skeleton,
- "handle-stop-initial-session",
- G_CALLBACK (handle_stop_initial_session),
- slave);
- g_object_bind_property (G_OBJECT (slave),
- "session-id",
- G_OBJECT (slave->priv->skeleton),
- "session-id",
- G_BINDING_DEFAULT);
-
- gdm_slave_export_interface (slave,
- G_DBUS_INTERFACE_SKELETON (slave->priv->skeleton));
-
- return TRUE;
-}
-
-static GObject *
-gdm_slave_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
+void
+gdm_slave_stop_initial_session (GdmSlave *slave,
+ const char *username)
{
- GdmSlave *slave;
- gboolean res;
-
- slave = GDM_SLAVE (G_OBJECT_CLASS (gdm_slave_parent_class)->constructor (type,
- n_construct_properties,
- construct_properties));
- g_debug ("GdmSlave: Registering");
-
- res = register_slave (slave);
- if (! res) {
- g_warning ("Unable to register slave with system bus");
- }
-
- return G_OBJECT (slave);
+ GDM_SLAVE_GET_CLASS (slave)->stop_initial_session (slave, username);
}
static void
@@ -1193,7 +967,6 @@ gdm_slave_class_init (GdmSlaveClass *klass)
object_class->get_property = gdm_slave_get_property;
object_class->set_property = gdm_slave_set_property;
- object_class->constructor = gdm_slave_constructor;
object_class->finalize = gdm_slave_finalize;
klass->start = gdm_slave_real_start;
@@ -1209,11 +982,11 @@ gdm_slave_class_init (GdmSlaveClass *klass)
NULL,
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
- PROP_DISPLAY_ID,
- g_param_spec_string ("display-id",
+ PROP_DISPLAY,
+ g_param_spec_object ("display",
"id",
"id",
- NULL,
+ GDM_TYPE_DISPLAY,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
PROP_DISPLAY_NAME,
@@ -1267,6 +1040,17 @@ gdm_slave_class_init (GdmSlaveClass *klass)
FALSE,
G_PARAM_READABLE));
+ signals [STARTED] =
+ g_signal_new ("started",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
signals [STOPPED] =
g_signal_new ("stopped",
G_TYPE_FROM_CLASS (object_class),
@@ -1282,7 +1066,6 @@ gdm_slave_class_init (GdmSlaveClass *klass)
static void
gdm_slave_init (GdmSlave *slave)
{
-
slave->priv = GDM_SLAVE_GET_PRIVATE (slave);
slave->priv->pid = -1;
@@ -1302,7 +1085,6 @@ gdm_slave_finalize (GObject *object)
gdm_slave_real_stop (slave);
- g_free (slave->priv->display_id);
g_free (slave->priv->display_name);
g_free (slave->priv->display_hostname);
g_free (slave->priv->display_seat_id);
@@ -1314,13 +1096,3 @@ gdm_slave_finalize (GObject *object)
G_OBJECT_CLASS (gdm_slave_parent_class)->finalize (object);
}
-
-void
-gdm_slave_export_interface (GdmSlave *slave,
- GDBusInterfaceSkeleton *interface)
-{
- g_dbus_interface_skeleton_export (interface,
- slave->priv->connection,
- GDM_SLAVE_PATH,
- NULL);
-}
diff --git a/daemon/gdm-slave.h b/daemon/gdm-slave.h
index e3264f8..d33a6df 100644
--- a/daemon/gdm-slave.h
+++ b/daemon/gdm-slave.h
@@ -89,8 +89,13 @@ void gdm_slave_set_initial_cursor_position (GdmSlave *slave);
gboolean gdm_slave_run_script (GdmSlave *slave,
const char *dir,
const char *username);
-void gdm_slave_export_interface (GdmSlave *slave,
- GDBusInterfaceSkeleton *interface);
+
+void gdm_slave_set_up_initial_session (GdmSlave *slave,
+ char **username);
+void gdm_slave_start_initial_session (GdmSlave *slave);
+void gdm_slave_stop_initial_session (GdmSlave *slave,
+ const char *username);
+
G_END_DECLS
#endif /* __GDM_SLAVE_H */
diff --git a/daemon/gdm-xdmcp-chooser-display.c b/daemon/gdm-xdmcp-chooser-display.c
index 706d2e8..72e3d07 100644
--- a/daemon/gdm-xdmcp-chooser-display.c
+++ b/daemon/gdm-xdmcp-chooser-display.c
@@ -37,23 +37,11 @@
#include "gdm-display.h"
#include "gdm-xdmcp-chooser-display.h"
-#include "gdm-xdmcp-chooser-slave-glue.h"
+#include "gdm-xdmcp-chooser-slave.h"
#include "gdm-common.h"
#include "gdm-address.h"
-#define DEFAULT_SLAVE_COMMAND LIBEXECDIR"/gdm-xdmcp-chooser-slave"
-
-
-#define GDM_SLAVE_PATH "/org/gnome/DisplayManager/Slave"
-
-#define GDM_XDMCP_CHOOSER_DISPLAY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o),
GDM_TYPE_XDMCP_CHOOSER_DISPLAY, GdmXdmcpChooserDisplayPrivate))
-
-struct GdmXdmcpChooserDisplayPrivate
-{
- GdmDBusXdmcpChooserSlave *slave_proxy;
-};
-
enum {
HOSTNAME_SELECTED,
LAST_SIGNAL
@@ -63,13 +51,13 @@ static guint signals [LAST_SIGNAL] = { 0, };
static void gdm_xdmcp_chooser_display_class_init (GdmXdmcpChooserDisplayClass *klass);
static void gdm_xdmcp_chooser_display_init (GdmXdmcpChooserDisplay *xdmcp_chooser_display);
-static void gdm_xdmcp_chooser_display_finalize (GObject *object);
-static gboolean gdm_xdmcp_chooser_display_finish (GdmDisplay *display);
+static gboolean gdm_xdmcp_chooser_display_prepare (GdmDisplay *display);
+static gboolean gdm_xdmcp_chooser_display_finish (GdmDisplay *display);
G_DEFINE_TYPE (GdmXdmcpChooserDisplay, gdm_xdmcp_chooser_display, GDM_TYPE_XDMCP_DISPLAY)
static void
-on_hostname_selected (GdmDBusXdmcpChooserSlave *proxy,
+on_hostname_selected (GdmXdmcpChooserSlave *slave,
const char *hostname,
GdmXdmcpChooserDisplay *display)
{
@@ -77,57 +65,13 @@ on_hostname_selected (GdmDBusXdmcpChooserSlave *proxy,
g_signal_emit (display, signals [HOSTNAME_SELECTED], 0, hostname);
}
-static gboolean
-gdm_xdmcp_chooser_display_set_slave_bus_name (GdmDisplay *display,
- const char *name,
- GError **error)
-{
- GDBusConnection *connection;
- GError *local_error;
- GdmXdmcpChooserDisplay *chooser_display;
-
- chooser_display = GDM_XDMCP_CHOOSER_DISPLAY (display);
- g_clear_object (&chooser_display->priv->slave_proxy);
-
- local_error = NULL;
- connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &local_error);
- if (connection == NULL) {
- g_critical ("error getting system bus: %s", local_error->message);
- g_error_free (local_error);
- }
-
- g_debug ("GdmXdmcpChooserDisplay: creating proxy for slave on %s" , name);
-
- chooser_display->priv->slave_proxy = GDM_DBUS_XDMCP_CHOOSER_SLAVE (
- gdm_dbus_xdmcp_chooser_slave_proxy_new_sync (connection,
- G_DBUS_PROXY_FLAGS_NONE,
- name,
- GDM_SLAVE_PATH,
- NULL,
- &local_error));
- if (chooser_display->priv->slave_proxy == NULL) {
- g_warning ("Failed to connect to the slave object: %s", local_error->message);
- g_error_free (local_error);
- goto out;
- }
-
- g_signal_connect (chooser_display->priv->slave_proxy,
- "hostname-selected",
- G_CALLBACK (on_hostname_selected),
- display);
- out:
- return GDM_DISPLAY_CLASS (gdm_xdmcp_chooser_display_parent_class)->set_slave_bus_name (display,
name, error);
-}
-
static void
gdm_xdmcp_chooser_display_class_init (GdmXdmcpChooserDisplayClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass);
- object_class->finalize = gdm_xdmcp_chooser_display_finalize;
-
- display_class->set_slave_bus_name = gdm_xdmcp_chooser_display_set_slave_bus_name;
+ display_class->prepare = gdm_xdmcp_chooser_display_prepare;
display_class->finish = gdm_xdmcp_chooser_display_finish;
signals [HOSTNAME_SELECTED] =
@@ -141,32 +85,27 @@ gdm_xdmcp_chooser_display_class_init (GdmXdmcpChooserDisplayClass *klass)
G_TYPE_NONE,
1,
G_TYPE_STRING);
-
- g_type_class_add_private (klass, sizeof (GdmXdmcpChooserDisplayPrivate));
}
static void
gdm_xdmcp_chooser_display_init (GdmXdmcpChooserDisplay *xdmcp_chooser_display)
{
-
- xdmcp_chooser_display->priv = GDM_XDMCP_CHOOSER_DISPLAY_GET_PRIVATE (xdmcp_chooser_display);
}
-static void
-gdm_xdmcp_chooser_display_finalize (GObject *object)
+static gboolean
+gdm_xdmcp_chooser_display_prepare (GdmDisplay *display)
{
- GdmXdmcpChooserDisplay *chooser_display;
+ GdmXdmcpChooserSlave *slave;
- g_return_if_fail (object != NULL);
- g_return_if_fail (GDM_IS_XDMCP_CHOOSER_DISPLAY (object));
+ if (!GDM_DISPLAY_CLASS (gdm_xdmcp_chooser_display_parent_class)->prepare (display))
+ return FALSE;
- chooser_display = GDM_XDMCP_CHOOSER_DISPLAY (object);
+ slave = GDM_XDMCP_CHOOSER_SLAVE (gdm_display_get_slave (display));
- g_return_if_fail (chooser_display->priv != NULL);
+ g_signal_connect (slave, "hostname-selected",
+ G_CALLBACK (on_hostname_selected), display);
- g_clear_object (&chooser_display->priv->slave_proxy);
-
- G_OBJECT_CLASS (gdm_xdmcp_chooser_display_parent_class)->finalize (object);
+ return TRUE;
}
static gboolean
@@ -192,7 +131,7 @@ gdm_xdmcp_chooser_display_new (const char *hostname,
x11_display = g_strdup_printf ("%s:%d", hostname, number);
object = g_object_new (GDM_TYPE_XDMCP_CHOOSER_DISPLAY,
- "slave-command", DEFAULT_SLAVE_COMMAND,
+ "slave-type", GDM_TYPE_XDMCP_CHOOSER_SLAVE,
"remote-hostname", hostname,
"x11-display-number", number,
"x11-display-name", x11_display,
diff --git a/daemon/gdm-xdmcp-chooser-display.h b/daemon/gdm-xdmcp-chooser-display.h
index 86cef65..7890afa 100644
--- a/daemon/gdm-xdmcp-chooser-display.h
+++ b/daemon/gdm-xdmcp-chooser-display.h
@@ -43,7 +43,6 @@ typedef struct GdmXdmcpChooserDisplayPrivate GdmXdmcpChooserDisplayPrivate;
typedef struct
{
GdmXdmcpDisplay parent;
- GdmXdmcpChooserDisplayPrivate *priv;
} GdmXdmcpChooserDisplay;
typedef struct
diff --git a/daemon/gdm-xdmcp-chooser-slave.c b/daemon/gdm-xdmcp-chooser-slave.c
index 7745c74..890584a 100644
--- a/daemon/gdm-xdmcp-chooser-slave.c
+++ b/daemon/gdm-xdmcp-chooser-slave.c
@@ -39,7 +39,6 @@
#include "gdm-common.h"
#include "gdm-xdmcp-chooser-slave.h"
-#include "gdm-xdmcp-chooser-slave-glue.h"
#include "gdm-server.h"
#include "gdm-launch-environment.h"
@@ -65,17 +64,21 @@ struct GdmXdmcpChooserSlavePrivate
guint connection_attempts;
GdmLaunchEnvironment *chooser_environment;
+};
- GdmDBusXdmcpChooserSlave *skeleton;
+enum {
+ HOSTNAME_SELECTED,
+ LAST_SIGNAL
};
+static guint signals [LAST_SIGNAL] = { 0, };
+
static void gdm_xdmcp_chooser_slave_class_init (GdmXdmcpChooserSlaveClass *klass);
static void gdm_xdmcp_chooser_slave_init (GdmXdmcpChooserSlave *xdmcp_chooser_slave);
static void gdm_xdmcp_chooser_slave_finalize (GObject *object);
G_DEFINE_TYPE (GdmXdmcpChooserSlave, gdm_xdmcp_chooser_slave, GDM_TYPE_SLAVE)
-
static void
on_chooser_session_opened (GdmLaunchEnvironment *chooser,
GdmXdmcpChooserSlave *slave)
@@ -137,8 +140,7 @@ on_chooser_hostname_selected (GdmSession *session,
GdmXdmcpChooserSlave *slave)
{
g_debug ("GdmXdmcpChooserSlave: connecting to host %s", name);
- gdm_dbus_xdmcp_chooser_slave_emit_hostname_selected (slave->priv->skeleton,
- name);
+ g_signal_emit (slave, signals [HOSTNAME_SELECTED], 0, name);
}
static void
@@ -345,37 +347,29 @@ gdm_xdmcp_chooser_slave_stop (GdmSlave *slave)
return TRUE;
}
-static GObject *
-gdm_xdmcp_chooser_slave_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GdmXdmcpChooserSlave *slave;
-
- slave = GDM_XDMCP_CHOOSER_SLAVE (G_OBJECT_CLASS (gdm_xdmcp_chooser_slave_parent_class)->constructor
(type,
- n_construct_properties,
- construct_properties));
-
- slave->priv->skeleton = GDM_DBUS_XDMCP_CHOOSER_SLAVE (gdm_dbus_xdmcp_chooser_slave_skeleton_new ());
- gdm_slave_export_interface (GDM_SLAVE (slave),
- G_DBUS_INTERFACE_SKELETON (slave->priv->skeleton));
-
- return G_OBJECT (slave);
-}
-
static void
gdm_xdmcp_chooser_slave_class_init (GdmXdmcpChooserSlaveClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GdmSlaveClass *slave_class = GDM_SLAVE_CLASS (klass);
- object_class->constructor = gdm_xdmcp_chooser_slave_constructor;
object_class->finalize = gdm_xdmcp_chooser_slave_finalize;
slave_class->start = gdm_xdmcp_chooser_slave_start;
slave_class->stop = gdm_xdmcp_chooser_slave_stop;
g_type_class_add_private (klass, sizeof (GdmXdmcpChooserSlavePrivate));
+
+ signals [HOSTNAME_SELECTED] =
+ g_signal_new ("hostname-selected",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ G_TYPE_NONE,
+ 1, G_TYPE_STRING);
}
static void
@@ -394,25 +388,9 @@ gdm_xdmcp_chooser_slave_finalize (GObject *object)
xdmcp_chooser_slave = GDM_XDMCP_CHOOSER_SLAVE (object);
- g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (xdmcp_chooser_slave->priv->skeleton));
-
- g_clear_object (&xdmcp_chooser_slave->priv->skeleton);
-
g_return_if_fail (xdmcp_chooser_slave->priv != NULL);
gdm_slave_stop (GDM_SLAVE (xdmcp_chooser_slave));
G_OBJECT_CLASS (gdm_xdmcp_chooser_slave_parent_class)->finalize (object);
}
-
-GdmSlave *
-gdm_xdmcp_chooser_slave_new (const char *id)
-{
- GObject *object;
-
- object = g_object_new (GDM_TYPE_XDMCP_CHOOSER_SLAVE,
- "display-id", id,
- NULL);
-
- return GDM_SLAVE (object);
-}
diff --git a/daemon/gdm-xdmcp-chooser-slave.h b/daemon/gdm-xdmcp-chooser-slave.h
index e5b5e47..b948ef8 100644
--- a/daemon/gdm-xdmcp-chooser-slave.h
+++ b/daemon/gdm-xdmcp-chooser-slave.h
@@ -49,7 +49,6 @@ typedef struct
} GdmXdmcpChooserSlaveClass;
GType gdm_xdmcp_chooser_slave_get_type (void);
-GdmSlave * gdm_xdmcp_chooser_slave_new (const char *id);
G_END_DECLS
diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c
index 69d18dc..8e7e4df 100644
--- a/daemon/gdm-xdmcp-display-factory.c
+++ b/daemon/gdm-xdmcp-display-factory.c
@@ -2355,11 +2355,13 @@ gdm_xdmcp_handle_request (GdmXdmcpDisplayFactory *factory,
ARRAY8 authorization_name;
ARRAY8 authorization_data;
gint32 session_number;
- GArray *cookie;
+ const char *x11_cookie;
+ gsize x11_cookie_size;
char *name;
- cookie = NULL;
- gdm_display_get_x11_cookie (display, &cookie, NULL);
+ x11_cookie = NULL;
+ x11_cookie_size = 0;
+ gdm_display_get_x11_cookie (display, &x11_cookie, &x11_cookie_size, NULL);
name = NULL;
gdm_display_get_x11_display_name (display, &name, NULL);
@@ -2367,12 +2369,12 @@ gdm_xdmcp_handle_request (GdmXdmcpDisplayFactory *factory,
g_debug ("GdmXdmcpDisplayFactory: Sending authorization key for display %s",
name ? name : "(null)");
g_free (name);
- g_debug ("GdmXdmcpDisplayFactory: cookie len %d", (int) cookie->len);
+ g_debug ("GdmXdmcpDisplayFactory: cookie len %d", (int) x11_cookie_size);
session_number = gdm_xdmcp_display_get_session_number (GDM_XDMCP_DISPLAY
(display));
/* the send accept will fail if cookie is null */
- g_assert (cookie != NULL);
+ g_assert (x11_cookie != NULL);
authentication_name.data = NULL;
authentication_name.length = 0;
@@ -2382,8 +2384,8 @@ gdm_xdmcp_handle_request (GdmXdmcpDisplayFactory *factory,
authorization_name.data = (CARD8 *) "MIT-MAGIC-COOKIE-1";
authorization_name.length = strlen ((char *) authorization_name.data);
- authorization_data.data = (CARD8 *) cookie->data;
- authorization_data.length = cookie->len;
+ authorization_data.data = (CARD8 *) x11_cookie;
+ authorization_data.length = x11_cookie_size;
/* the addrs are NOT copied */
gdm_xdmcp_send_accept (factory,
@@ -2393,8 +2395,6 @@ gdm_xdmcp_handle_request (GdmXdmcpDisplayFactory *factory,
&authentication_data,
&authorization_name,
&authorization_data);
-
- g_array_free (cookie, TRUE);
}
}
} else {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]