summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2012-07-06 14:48:37 -0400
committerRay Strode <rstrode@redhat.com>2012-07-06 15:29:42 -0400
commitc8bffea9ec259e018aa61be9b9900e777013d87c (patch)
tree96902a4edcc32d4f3b381fd75b6d30d98362342e
parent84c9c43416ba09207d23d9191f94c131c6a31ca5 (diff)
downloadgdm-c8bffea9ec259e018aa61be9b9900e777013d87c.tar.gz
daemon: clean house (drop factory mode)
GDM has a currently unused feature called "factory mode", where the login screen gets allocated its own VT and any subsequent logins from that login screen go to their own VT. Any time there's a user switch GDM just jumps back to initial VT where the login screen is patiently waiting. This feature has a lot of upsides, and we've had it as a TODO item to start using it for while now. It doesn't look it's going to happen in the near term, though, and factory mode has downsides as well: - a VT switch after the user hits enter at the login screen would be jarring and would ruin the "flicker free" boot experience we've tried to acheive at various points in the past. This could theoretically be fixed by Wayland. - it adds a bunch of untested, unused code to the codebase. This latter reason makes me want to kill it for now. It shouldn't be hard to resurrect later if we end up needing the feature. This commit drops that code.
-rw-r--r--.gitignore3
-rw-r--r--daemon/INTERNALS22
-rw-r--r--daemon/Makefile.am91
-rw-r--r--daemon/gdm-factory-slave.c940
-rw-r--r--daemon/gdm-factory-slave.h55
-rw-r--r--daemon/gdm-factory-slave.xml5
-rw-r--r--daemon/gdm-local-display-factory.c49
-rw-r--r--daemon/gdm-local-display-factory.h7
-rw-r--r--daemon/gdm-local-display-factory.xml5
-rw-r--r--daemon/gdm-product-display.c269
-rw-r--r--daemon/gdm-product-display.h63
-rw-r--r--daemon/gdm-product-display.xml8
-rw-r--r--daemon/gdm-product-slave.c1407
-rw-r--r--daemon/gdm-product-slave.h55
-rw-r--r--daemon/gdm-product-slave.xml5
-rw-r--r--daemon/gdm-session-relay.h64
-rw-r--r--daemon/product-slave-main.c270
17 files changed, 0 insertions, 3318 deletions
diff --git a/.gitignore b/.gitignore
index b9b97e68..2404329c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,12 +28,9 @@ configure.lineno
gdm.conf
gdm.conf-custom
gdm-display-glue.h
-gdm-factory-slave-glue.h
gdm-local-display-factory-glue.h
gdm-manager-glue.h
gdm.pot
-gdm-product-display-glue.h
-gdm-product-slave-glue.h
gdm-restart
gdm-safe-restart
gdm.schemas
diff --git a/daemon/INTERNALS b/daemon/INTERNALS
index 9e6ee41c..13f8ba3d 100644
--- a/daemon/INTERNALS
+++ b/daemon/INTERNALS
@@ -35,12 +35,6 @@ Server diplay.
A subclass of GdmDisplay that represents a local display.
-*** GdmProductDisplay
-
-A subclass of GdmDisplay that only runs a user session. It does not
-run a login greeter interface. It will also be destroyed when
-the user session ends.
-
*** GdmXdmcpDisplay
A subclass of GdmDisplay that represents a remote XDMCP display.
@@ -57,15 +51,6 @@ slave communicates with the parent display using the D-Bus protocol.
A subclass of GdmSlave that runs both a login greeter and a user
session.
-*** GdmFactorySlave
-
-A subclass of GdmSlave that only runs a login greeter.
-
-*** GdmProductSlave
-
-A subclass of GdmSlave that only runs a user session.
-
-
** GdmServer
A class that manages running a local X Server.
@@ -93,13 +78,6 @@ A class of object that implements the GdmSession interface. It is
used to start and directly control a GdmSessionWorker subprocess by
creating a D-Bus server on a private connection.
-*** GdmSessionRelay
-
-A class of object that implements the GdmSession interface. It is
-used to relay session controls to a remote listener. In particular,
-it is used to relay messages between the GreeterServer in a
-GdmFactorySlave and the GdmSessionDirect in a GdmProductSlave.
-
** GdmSessionWorkerJob
A class that manages running a GdmSessionWorker subprocess. This will
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 9b64d880..d0d75a07 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -31,8 +31,6 @@ AM_CPPFLAGS = \
BUILT_SOURCES = \
gdm-slave-glue.h \
gdm-simple-slave-glue.h \
- gdm-factory-slave-glue.h \
- gdm-product-slave-glue.h \
gdm-xdmcp-chooser-slave-glue.h \
gdm-session-direct-glue.h \
gdm-manager-glue.h \
@@ -42,7 +40,6 @@ BUILT_SOURCES = \
gdm-static-display-glue.h \
gdm-transient-display-glue.h \
gdm-local-display-factory-glue.h \
- gdm-product-display-glue.h \
$(NULL)
gdm-manager-glue.h: gdm-manager.xml Makefile.am
@@ -51,10 +48,6 @@ gdm-slave-glue.h: gdm-slave.xml Makefile.am
dbus-binding-tool --prefix=gdm_slave --mode=glib-server --output=gdm-slave-glue.h $(srcdir)/gdm-slave.xml
gdm-simple-slave-glue.h: gdm-simple-slave.xml Makefile.am
dbus-binding-tool --prefix=gdm_simple_slave --mode=glib-server --output=gdm-simple-slave-glue.h $(srcdir)/gdm-simple-slave.xml
-gdm-factory-slave-glue.h: gdm-factory-slave.xml Makefile.am
- dbus-binding-tool --prefix=gdm_factory_slave --mode=glib-server --output=gdm-factory-slave-glue.h $(srcdir)/gdm-factory-slave.xml
-gdm-product-slave-glue.h: gdm-product-slave.xml Makefile.am
- dbus-binding-tool --prefix=gdm_product_slave --mode=glib-server --output=gdm-product-slave-glue.h $(srcdir)/gdm-product-slave.xml
gdm-xdmcp-chooser-slave-glue.h: gdm-xdmcp-chooser-slave.xml Makefile.am
dbus-binding-tool --prefix=gdm_xdmcp_chooser_slave --mode=glib-server --output=gdm-xdmcp-chooser-slave-glue.h $(srcdir)/gdm-xdmcp-chooser-slave.xml
gdm-session-direct-glue.h: gdm-session-direct.xml Makefile.am
@@ -71,8 +64,6 @@ gdm-transient-display-glue.h: gdm-transient-display.xml Makefile.am
dbus-binding-tool --prefix=gdm_transient_display --mode=glib-server --output=gdm-transient-display-glue.h $(srcdir)/gdm-transient-display.xml
gdm-local-display-factory-glue.h: gdm-local-display-factory.xml Makefile.am
dbus-binding-tool --prefix=gdm_local_display_factory --mode=glib-server --output=gdm-local-display-factory-glue.h $(srcdir)/gdm-local-display-factory.xml
-gdm-product-display-glue.h: gdm-product-display.xml Makefile.am
- dbus-binding-tool --prefix=gdm_product_display --mode=glib-server --output=gdm-product-display-glue.h $(srcdir)/gdm-product-display.xml
noinst_PROGRAMS = \
test-session \
@@ -101,8 +92,6 @@ test_session_LDADD = \
libexec_PROGRAMS = \
gdm-simple-slave \
- gdm-factory-slave \
- gdm-product-slave \
gdm-session-worker \
$(NULL)
@@ -152,82 +141,6 @@ gdm_simple_slave_LDADD = \
$(SYSTEMD_LIBS) \
$(NULL)
-gdm_factory_slave_SOURCES = \
- factory-slave-main.c \
- gdm-greeter-server.c \
- gdm-greeter-server.h \
- gdm-welcome-session.c \
- gdm-welcome-session.h \
- gdm-greeter-session.c \
- gdm-greeter-session.h \
- gdm-server.c \
- gdm-server.h \
- gdm-session.c \
- gdm-session.h \
- gdm-session-direct.c \
- gdm-session-direct.h \
- gdm-session-private.h \
- gdm-session-record.c \
- gdm-session-record.h \
- gdm-session-relay.c \
- gdm-session-relay.h \
- gdm-session-worker-job.c \
- gdm-session-worker-job.h \
- gdm-xerrors.h \
- gdm-xerrors.c \
- gdm-slave.c \
- gdm-slave.h \
- gdm-factory-slave.c \
- gdm-factory-slave.h \
- $(NULL)
-
-gdm_factory_slave_LDFLAGS = \
- $(PAM_LIBS) \
- $(LIBXKLAVIER_LIBS) \
- $(NULL)
-
-gdm_factory_slave_LDADD = \
- $(top_builddir)/common/libgdmcommon.la \
- $(XLIB_LIBS) \
- $(DAEMON_LIBS) \
- $(SYSTEMD_LIBS) \
- $(NULL)
-
-gdm_product_slave_SOURCES = \
- product-slave-main.c \
- gdm-server.c \
- gdm-server.h \
- gdm-session.c \
- gdm-session.h \
- gdm-session-private.h \
- gdm-session-direct.c \
- gdm-session-direct.h \
- gdm-session-record.c \
- gdm-session-record.h \
- gdm-session-worker-job.c \
- gdm-session-worker-job.h \
- gdm-xerrors.h \
- gdm-xerrors.c \
- gdm-slave.c \
- gdm-slave.h \
- gdm-product-slave.c \
- gdm-product-slave.h \
- $(NULL)
-
-gdm_product_slave_LDFLAGS = \
- $(PAM_LIBS) \
- $(LIBXKLAVIER_LIBS) \
- $(NULL)
-
-gdm_product_slave_LDADD = \
- $(top_builddir)/common/libgdmcommon.la \
- $(XLIB_LIBS) \
- $(DAEMON_LIBS) \
- $(EXTRA_DAEMON_LIBS) \
- $(LIBXKLAVIER_LIBS) \
- $(SYSTEMD_LIBS) \
- $(NULL)
-
gdm_xdmcp_chooser_slave_SOURCES = \
xdmcp-chooser-slave-main.c \
gdm-chooser-server.c \
@@ -313,8 +226,6 @@ gdm_binary_SOURCES = \
gdm-static-display.h \
gdm-transient-display.c \
gdm-transient-display.h \
- gdm-product-display.c \
- gdm-product-display.h \
gdm-manager.c \
gdm-manager.h \
gdm-slave-proxy.c \
@@ -380,7 +291,6 @@ EXTRA_DIST = \
gdm.in \
gdm-slave.xml \
gdm-simple-slave.xml \
- gdm-factory-slave.xml \
gdm-product-slave.xml \
gdm-xdmcp-chooser-slave.xml \
gdm-session-direct.xml \
@@ -391,5 +301,4 @@ EXTRA_DIST = \
gdm-static-display.xml \
gdm-transient-display.xml \
gdm-local-display-factory.xml \
- gdm-product-display.xml \
$(NULL)
diff --git a/daemon/gdm-factory-slave.c b/daemon/gdm-factory-slave.c
deleted file mode 100644
index 35386279..00000000
--- a/daemon/gdm-factory-slave.c
+++ /dev/null
@@ -1,940 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <pwd.h>
-#include <grp.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-#include <glib-object.h>
-
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-
-#include <X11/Xlib.h> /* for Display */
-
-#include "gdm-common.h"
-
-#include "gdm-factory-slave.h"
-#include "gdm-factory-slave-glue.h"
-
-#include "gdm-server.h"
-#include "gdm-greeter-session.h"
-#include "gdm-greeter-server.h"
-
-#include "gdm-session-relay.h"
-
-extern char **environ;
-
-#define GDM_FACTORY_SLAVE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_FACTORY_SLAVE, GdmFactorySlavePrivate))
-
-#define GDM_DBUS_NAME "org.gnome.DisplayManager"
-#define GDM_DBUS_LOCAL_DISPLAY_FACTORY_PATH "/org/gnome/DisplayManager/LocalDisplayFactory"
-#define GDM_DBUS_LOCAL_DISPLAY_FACTORY_INTERFACE "org.gnome.DisplayManager.LocalDisplayFactory"
-
-#define MAX_CONNECT_ATTEMPTS 10
-
-struct GdmFactorySlavePrivate
-{
- char *id;
- GPid pid;
- guint greeter_reset_id;
-
- GPid server_pid;
- Display *server_display;
- guint connection_attempts;
-
- GdmServer *server;
- GdmSessionRelay *session;
- GdmGreeterServer *greeter_server;
- GdmGreeterSession *greeter;
- DBusGProxy *factory_proxy;
- DBusGConnection *connection;
-};
-
-static void gdm_factory_slave_class_init (GdmFactorySlaveClass *klass);
-static void gdm_factory_slave_init (GdmFactorySlave *factory_slave);
-static void gdm_factory_slave_finalize (GObject *object);
-
-G_DEFINE_TYPE (GdmFactorySlave, gdm_factory_slave, GDM_TYPE_SLAVE)
-
-static gboolean
-greeter_reset_timeout (GdmFactorySlave *slave)
-{
- gdm_greeter_server_reset (slave->priv->greeter_server);
- slave->priv->greeter_reset_id = 0;
- return FALSE;
-}
-
-static void
-queue_greeter_reset (GdmFactorySlave *slave)
-{
- if (slave->priv->greeter_reset_id > 0) {
- return;
- }
-
- slave->priv->greeter_reset_id = g_timeout_add_seconds (2, (GSourceFunc)greeter_reset_timeout, slave);
-}
-
-static void
-on_greeter_session_start (GdmGreeterSession *greeter,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Greeter started");
-}
-
-static void
-on_greeter_session_stop (GdmGreeterSession *greeter,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Greeter stopped");
-
- g_object_unref (GDM_FACTORY_SLAVE (slave)->priv->greeter);
- GDM_FACTORY_SLAVE (slave)->priv->greeter = NULL;
-}
-
-static void
-on_greeter_session_exited (GdmGreeterSession *greeter,
- int code,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmSimpleSlave: Greeter exited: %d", code);
- gdm_slave_stopped (GDM_SLAVE (slave));
-}
-
-static void
-on_greeter_session_died (GdmGreeterSession *greeter,
- int signal,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmSimpleSlave: Greeter died: %d", signal);
- gdm_slave_stopped (GDM_SLAVE (slave));
-}
-
-
-static void
-on_session_info (GdmSession *session,
- const char *service_name,
- const char *text,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Info: %s", text);
- gdm_greeter_server_info (slave->priv->greeter_server, service_name, text);
-}
-
-static void
-on_session_problem (GdmSession *session,
- const char *service_name,
- const char *text,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Problem: %s", text);
- gdm_greeter_server_problem (slave->priv->greeter_server, service_name, text);
-}
-
-static void
-on_session_info_query (GdmSession *session,
- const char *service_name,
- const char *text,
- GdmFactorySlave *slave)
-{
-
- g_debug ("GdmFactorySlave: Info query: %s", text);
- gdm_greeter_server_info_query (slave->priv->greeter_server, service_name, text);
-}
-
-static void
-on_session_secret_info_query (GdmSession *session,
- const char *service_name,
- const char *text,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Secret info query: %s", text);
- gdm_greeter_server_secret_info_query (slave->priv->greeter_server, service_name, text);
-}
-
-static void
-on_session_conversation_started (GdmSession *session,
- const char *service_name,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: session conversation started");
-
- gdm_greeter_server_ready (slave->priv->greeter_server,
- service_name);
-}
-
-static void
-on_session_setup_complete (GdmSession *session,
- const char *service_name,
- GdmFactorySlave *slave)
-{
- gdm_session_authenticate (session, service_name);
-}
-
-static void
-on_session_setup_failed (GdmSession *session,
- const char *service_name,
- const char *message,
- GdmFactorySlave *slave)
-{
- gdm_greeter_server_problem (slave->priv->greeter_server, service_name, _("Unable to initialize login system"));
-
- queue_greeter_reset (slave);
-}
-
-static void
-on_session_reset_complete (GdmSession *session,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: PAM reset");
-}
-
-static void
-on_session_reset_failed (GdmSession *session,
- const char *message,
- GdmFactorySlave *slave)
-{
- g_critical ("Unable to reset PAM");
-}
-
-static void
-on_session_authenticated (GdmSession *session,
- const char *service_name,
- GdmFactorySlave *slave)
-{
- gdm_session_authorize (session, service_name);
-}
-
-static void
-on_session_authentication_failed (GdmSession *session,
- const char *service_name,
- const char *message,
- GdmFactorySlave *slave)
-{
- gdm_greeter_server_problem (slave->priv->greeter_server, service_name, _("Unable to authenticate user"));
-
- queue_greeter_reset (slave);
-}
-
-static void
-on_session_authorized (GdmSession *session,
- const char *service_name,
- GdmFactorySlave *slave)
-{
- int flag;
-
- /* FIXME: check for migration? */
- flag = GDM_SESSION_CRED_ESTABLISH;
-
- gdm_session_accredit (session, service_name, flag);
-}
-
-static void
-on_session_authorization_failed (GdmSession *session,
- const char *service_name,
- const char *message,
- GdmFactorySlave *slave)
-{
- gdm_greeter_server_problem (slave->priv->greeter_server, service_name, _("Unable to authorize user"));
-
- queue_greeter_reset (slave);
-}
-
-static void
-on_session_accredited (GdmSession *session,
- const char *service_name,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: session user verified");
-
- gdm_session_open_session (session, service_name);
-}
-
-static void
-on_session_accreditation_failed (GdmSession *session,
- const char *service_name,
- const char *message,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: could not successfully authenticate user: %s",
- message);
-
- gdm_greeter_server_problem (slave->priv->greeter_server, service_name, _("Unable to establish credentials"));
-
- queue_greeter_reset (slave);
-}
-
-static void
-on_session_opened (GdmSession *session,
- const char *service_name,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: session opened");
-
- gdm_session_start_session (session, service_name);
-
- gdm_greeter_server_reset (slave->priv->greeter_server);
-}
-
-static void
-on_session_open_failed (GdmSession *session,
- const char *service_name,
- const char *message,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: could not open session: %s", message);
-
- gdm_greeter_server_problem (slave->priv->greeter_server, service_name, _("Unable to open session"));
-
- queue_greeter_reset (slave);
-}
-
-static void
-on_session_session_started (GdmSession *session,
- int pid,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Relay session started");
-
- gdm_greeter_server_reset (slave->priv->greeter_server);
-}
-
-static gboolean
-create_product_display (GdmFactorySlave *slave)
-{
- char *parent_display_id;
- char *server_address;
- char *product_id;
- GError *error;
- gboolean res;
- gboolean ret;
-
- ret = FALSE;
-
- g_debug ("GdmFactorySlave: Create product display");
-
- g_debug ("GdmFactorySlave: Connecting to local display factory");
- slave->priv->factory_proxy = dbus_g_proxy_new_for_name (slave->priv->connection,
- GDM_DBUS_NAME,
- GDM_DBUS_LOCAL_DISPLAY_FACTORY_PATH,
- GDM_DBUS_LOCAL_DISPLAY_FACTORY_INTERFACE);
- if (slave->priv->factory_proxy == NULL) {
- g_warning ("Failed to create local display factory proxy");
- goto out;
- }
-
- server_address = gdm_session_relay_get_address (slave->priv->session);
-
- g_object_get (slave,
- "display-id", &parent_display_id,
- NULL);
-
- error = NULL;
- res = dbus_g_proxy_call (slave->priv->factory_proxy,
- "CreateProductDisplay",
- &error,
- DBUS_TYPE_G_OBJECT_PATH, parent_display_id,
- G_TYPE_STRING, server_address,
- G_TYPE_INVALID,
- DBUS_TYPE_G_OBJECT_PATH, &product_id,
- G_TYPE_INVALID);
- g_free (server_address);
- g_free (parent_display_id);
-
- if (! res) {
- if (error != NULL) {
- g_warning ("Failed to create product display: %s", error->message);
- g_error_free (error);
- } else {
- g_warning ("Failed to create product display");
- }
- goto out;
- }
-
- ret = TRUE;
-
- out:
- return ret;
-}
-
-static void
-on_session_relay_disconnected (GdmSessionRelay *session,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Relay disconnected");
-
- /* FIXME: do some kind of loop detection */
- gdm_greeter_server_reset (slave->priv->greeter_server);
- create_product_display (slave);
-}
-
-static void
-on_session_relay_connected (GdmSessionRelay *session,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Relay Connected");
-}
-
-static void
-on_greeter_start_conversation (GdmGreeterServer *greeter_server,
- const char *service_name,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: start conversation");
-
- gdm_session_start_conversation (GDM_SESSION (slave->priv->session), service_name);
-}
-
-static void
-on_greeter_begin_verification (GdmGreeterServer *greeter_server,
- const char *service_name,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: begin verification");
- gdm_session_setup (GDM_SESSION (slave->priv->session),
- service_name);
-}
-
-static void
-on_greeter_begin_verification_for_user (GdmGreeterServer *greeter_server,
- const char *service_name,
- const char *username,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: begin verification for user");
- gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
- service_name,
- username);
-}
-
-static void
-on_greeter_answer (GdmGreeterServer *greeter_server,
- const char *service_name,
- const char *text,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Greeter answer");
- gdm_session_answer_query (GDM_SESSION (slave->priv->session), service_name, text);
-}
-
-static void
-on_greeter_session_selected (GdmGreeterServer *greeter_server,
- const char *text,
- GdmFactorySlave *slave)
-{
- gdm_session_select_session (GDM_SESSION (slave->priv->session), text);
-}
-
-static void
-on_greeter_language_selected (GdmGreeterServer *greeter_server,
- const char *text,
- GdmFactorySlave *slave)
-{
- gdm_session_select_language (GDM_SESSION (slave->priv->session), text);
-}
-
-static void
-on_greeter_user_selected (GdmGreeterServer *greeter_server,
- const char *text,
- GdmFactorySlave *slave)
-{
- gdm_session_select_user (GDM_SESSION (slave->priv->session), text);
-}
-
-static void
-on_greeter_cancel (GdmGreeterServer *greeter_server,
- GdmFactorySlave *slave)
-{
- gdm_session_cancel (GDM_SESSION (slave->priv->session));
-}
-
-static void
-on_greeter_connected (GdmGreeterServer *greeter_server,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Greeter started");
-
- create_product_display (slave);
-}
-
-static void
-setup_server (GdmFactorySlave *slave)
-{
- /* Set the busy cursor */
- gdm_slave_set_busy_cursor (GDM_SLAVE (slave));
-}
-
-static void
-run_greeter (GdmFactorySlave *slave)
-{
- gboolean display_is_local;
- char *display_id;
- char *display_name;
- char *seat_id;
- char *display_device;
- char *display_hostname;
- char *auth_file;
- char *address;
-
- g_debug ("GdmFactorySlave: Running greeter");
-
- display_is_local = FALSE;
- display_id = NULL;
- display_name = NULL;
- seat_id = NULL;
- auth_file = NULL;
- display_device = NULL;
- display_hostname = NULL;
-
- g_object_get (slave,
- "display-is-local", &display_is_local,
- "display-id", &display_id,
- "display-name", &display_name,
- "display-seat-id", &seat_id,
- "display-hostname", &display_hostname,
- "display-x11-authority-file", &auth_file,
- NULL);
-
- if (slave->priv->server != NULL) {
- display_device = gdm_server_get_display_device (slave->priv->server);
- }
-
- /* FIXME: send a signal back to the master */
-
- /* Run the init script. gdmslave suspends until script has terminated */
- gdm_slave_run_script (GDM_SLAVE (slave), GDMCONFDIR "/Init", GDM_USERNAME);
-
- slave->priv->greeter_server = gdm_greeter_server_new (display_id);
- g_signal_connect (slave->priv->greeter_server,
- "start-conversation",
- G_CALLBACK (on_greeter_start_conversation),
- slave);
- g_signal_connect (slave->priv->greeter_server,
- "begin-verification",
- G_CALLBACK (on_greeter_begin_verification),
- slave);
- g_signal_connect (slave->priv->greeter_server,
- "begin-verification-for-user",
- G_CALLBACK (on_greeter_begin_verification_for_user),
- slave);
- g_signal_connect (slave->priv->greeter_server,
- "query-answer",
- G_CALLBACK (on_greeter_answer),
- slave);
- g_signal_connect (slave->priv->greeter_server,
- "session-selected",
- G_CALLBACK (on_greeter_session_selected),
- slave);
- g_signal_connect (slave->priv->greeter_server,
- "language-selected",
- G_CALLBACK (on_greeter_language_selected),
- slave);
- g_signal_connect (slave->priv->greeter_server,
- "user-selected",
- G_CALLBACK (on_greeter_user_selected),
- slave);
- g_signal_connect (slave->priv->greeter_server,
- "connected",
- G_CALLBACK (on_greeter_connected),
- slave);
- g_signal_connect (slave->priv->greeter_server,
- "cancelled",
- G_CALLBACK (on_greeter_cancel),
- slave);
- gdm_greeter_server_start (slave->priv->greeter_server);
-
- address = gdm_greeter_server_get_address (slave->priv->greeter_server);
-
- g_debug ("GdmFactorySlave: Creating greeter on %s %s", display_name, display_device);
- slave->priv->greeter = gdm_greeter_session_new (display_name,
- seat_id,
- display_device,
- display_hostname,
- display_is_local);
- g_signal_connect (slave->priv->greeter,
- "started",
- G_CALLBACK (on_greeter_session_start),
- slave);
- g_signal_connect (slave->priv->greeter,
- "stopped",
- G_CALLBACK (on_greeter_session_stop),
- slave);
- g_signal_connect (slave->priv->greeter,
- "exited",
- G_CALLBACK (on_greeter_session_exited),
- slave);
- g_signal_connect (slave->priv->greeter,
- "died",
- G_CALLBACK (on_greeter_session_died),
- slave);
- g_object_set (slave->priv->greeter,
- "x11-authority-file", auth_file,
- NULL);
- gdm_welcome_session_set_server_address (GDM_WELCOME_SESSION (slave->priv->greeter), address);
- gdm_welcome_session_start (GDM_WELCOME_SESSION (slave->priv->greeter));
-
- g_free (address);
-
- g_free (display_id);
- g_free (display_name);
- g_free (seat_id);
- g_free (display_device);
- g_free (display_hostname);
- g_free (auth_file);
-}
-
-static gboolean
-idle_connect_to_display (GdmFactorySlave *slave)
-{
- gboolean res;
-
- slave->priv->connection_attempts++;
-
- g_debug ("GdmFactorySlave: Connect to display");
-
- res = gdm_slave_connect_to_x11_display (GDM_SLAVE (slave));
- if (res) {
- /* FIXME: handle wait-for-go */
-
- setup_server (slave);
- run_greeter (slave);
- } else {
- if (slave->priv->connection_attempts >= MAX_CONNECT_ATTEMPTS) {
- g_warning ("Unable to connect to display after %d tries - bailing out", slave->priv->connection_attempts);
- exit (1);
- }
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-on_server_ready (GdmServer *server,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: Server ready");
-
- g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
-}
-
-static void
-on_server_exited (GdmServer *server,
- int exit_code,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: server exited with code %d\n", exit_code);
-
- gdm_slave_stopped (GDM_SLAVE (slave));
-}
-
-static void
-on_server_died (GdmServer *server,
- int signal_number,
- GdmFactorySlave *slave)
-{
- g_debug ("GdmFactorySlave: server died with signal %d, (%s)",
- signal_number,
- g_strsignal (signal_number));
-
- gdm_slave_stopped (GDM_SLAVE (slave));
-}
-
-static gboolean
-gdm_factory_slave_run (GdmFactorySlave *slave)
-{
- char *display_name;
- char *seat_id;
- char *auth_file;
- gboolean display_is_local;
-
- g_object_get (slave,
- "display-is-local", &display_is_local,
- "display-name", &display_name,
- "display-seat-id", &seat_id,
- "display-x11-authority-file", &auth_file,
- NULL);
-
- /* if this is local display start a server if one doesn't
- * exist */
- if (display_is_local) {
- gboolean res;
-
- slave->priv->server = gdm_server_new (display_name, seat_id, auth_file);
- g_signal_connect (slave->priv->server,
- "exited",
- G_CALLBACK (on_server_exited),
- slave);
- g_signal_connect (slave->priv->server,
- "died",
- G_CALLBACK (on_server_died),
- slave);
- g_signal_connect (slave->priv->server,
- "ready",
- G_CALLBACK (on_server_ready),
- slave);
-
- res = gdm_server_start (slave->priv->server);
- if (! res) {
- g_warning (_("Could not start the X "
- "server (your graphical environment) "
- "due to an internal error. "
- "Please contact your system administrator "
- "or check your syslog to diagnose. "
- "In the meantime this display will be "
- "disabled. Please restart GDM when "
- "the problem is corrected."));
- exit (1);
- }
-
- g_debug ("GdmFactorySlave: Started X server");
- } else {
- g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
- }
-
- g_free (display_name);
- g_free (auth_file);
-
- return TRUE;
-}
-
-static gboolean
-gdm_factory_slave_start (GdmSlave *slave)
-{
- gboolean ret;
-
- ret = FALSE;
-
- g_debug ("GdmFactorySlave: Starting factory slave");
-
- GDM_SLAVE_CLASS (gdm_factory_slave_parent_class)->start (slave);
-
- GDM_FACTORY_SLAVE (slave)->priv->session = gdm_session_relay_new ();
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "conversation-started",
- G_CALLBACK (on_session_conversation_started),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "setup-complete",
- G_CALLBACK (on_session_setup_complete),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "setup-failed",
- G_CALLBACK (on_session_setup_failed),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "reset-complete",
- G_CALLBACK (on_session_reset_complete),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "reset-failed",
- G_CALLBACK (on_session_reset_failed),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "authenticated",
- G_CALLBACK (on_session_authenticated),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "authentication-failed",
- G_CALLBACK (on_session_authentication_failed),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "authorized",
- G_CALLBACK (on_session_authorized),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "authorization-failed",
- G_CALLBACK (on_session_authorization_failed),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "accredited",
- G_CALLBACK (on_session_accredited),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "accreditation-failed",
- G_CALLBACK (on_session_accreditation_failed),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "session-opened",
- G_CALLBACK (on_session_opened),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "session-open-failed",
- G_CALLBACK (on_session_open_failed),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "info",
- G_CALLBACK (on_session_info),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "problem",
- G_CALLBACK (on_session_problem),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "info-query",
- G_CALLBACK (on_session_info_query),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "secret-info-query",
- G_CALLBACK (on_session_secret_info_query),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "session-started",
- G_CALLBACK (on_session_session_started),
- slave);
-
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "connected",
- G_CALLBACK (on_session_relay_connected),
- slave);
- g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "disconnected",
- G_CALLBACK (on_session_relay_disconnected),
- slave);
-
- gdm_session_relay_start (GDM_FACTORY_SLAVE (slave)->priv->session);
-
- gdm_factory_slave_run (GDM_FACTORY_SLAVE (slave));
-
- ret = TRUE;
-
- return ret;
-}
-
-static gboolean
-gdm_factory_slave_stop (GdmSlave *slave)
-{
- g_debug ("GdmFactorySlave: Stopping factory_slave");
-
- GDM_SLAVE_CLASS (gdm_factory_slave_parent_class)->stop (slave);
-
- if (GDM_FACTORY_SLAVE (slave)->priv->session != NULL) {
- gdm_session_relay_stop (GDM_FACTORY_SLAVE (slave)->priv->session);
- g_object_unref (GDM_FACTORY_SLAVE (slave)->priv->session);
- GDM_FACTORY_SLAVE (slave)->priv->session = NULL;
- }
-
- if (GDM_FACTORY_SLAVE (slave)->priv->greeter_server != NULL) {
- gdm_greeter_server_stop (GDM_FACTORY_SLAVE (slave)->priv->greeter_server);
- g_object_unref (GDM_FACTORY_SLAVE (slave)->priv->greeter_server);
- GDM_FACTORY_SLAVE (slave)->priv->greeter_server = NULL;
- }
-
- if (GDM_FACTORY_SLAVE (slave)->priv->greeter != NULL) {
- gdm_welcome_session_stop (GDM_WELCOME_SESSION (GDM_FACTORY_SLAVE (slave)->priv->greeter));
- }
-
- if (GDM_FACTORY_SLAVE (slave)->priv->server != NULL) {
- gdm_server_stop (GDM_FACTORY_SLAVE (slave)->priv->server);
- g_object_unref (GDM_FACTORY_SLAVE (slave)->priv->server);
- GDM_FACTORY_SLAVE (slave)->priv->server = NULL;
- }
-
- if (GDM_FACTORY_SLAVE (slave)->priv->factory_proxy != NULL) {
- g_object_unref (GDM_FACTORY_SLAVE (slave)->priv->factory_proxy);
- }
-
- return TRUE;
-}
-
-static void
-gdm_factory_slave_class_init (GdmFactorySlaveClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GdmSlaveClass *slave_class = GDM_SLAVE_CLASS (klass);
-
- object_class->finalize = gdm_factory_slave_finalize;
-
- slave_class->start = gdm_factory_slave_start;
- slave_class->stop = gdm_factory_slave_stop;
-
- g_type_class_add_private (klass, sizeof (GdmFactorySlavePrivate));
-
- dbus_g_object_type_install_info (GDM_TYPE_FACTORY_SLAVE, &dbus_glib_gdm_factory_slave_object_info);
-}
-
-static void
-gdm_factory_slave_init (GdmFactorySlave *slave)
-{
- GError *error;
-
- slave->priv = GDM_FACTORY_SLAVE_GET_PRIVATE (slave);
-
- slave->priv->pid = -1;
-
- error = NULL;
- slave->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (slave->priv->connection == NULL) {
- if (error != NULL) {
- g_critical ("error getting system bus: %s", error->message);
- g_error_free (error);
- }
- exit (1);
- }
-}
-
-static void
-gdm_factory_slave_finalize (GObject *object)
-{
- GdmFactorySlave *factory_slave;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GDM_IS_FACTORY_SLAVE (object));
-
- factory_slave = GDM_FACTORY_SLAVE (object);
-
- g_debug ("GdmFactorySlave: Finalizing slave");
-
- g_return_if_fail (factory_slave->priv != NULL);
-
- gdm_factory_slave_stop (GDM_SLAVE (factory_slave));
-
- if (factory_slave->priv->greeter_reset_id > 0) {
- g_source_remove (factory_slave->priv->greeter_reset_id);
- factory_slave->priv->greeter_reset_id = 0;
- }
-
- G_OBJECT_CLASS (gdm_factory_slave_parent_class)->finalize (object);
-}
-
-GdmSlave *
-gdm_factory_slave_new (const char *id)
-{
- GObject *object;
-
- object = g_object_new (GDM_TYPE_FACTORY_SLAVE,
- "display-id", id,
- NULL);
-
- return GDM_SLAVE (object);
-}
diff --git a/daemon/gdm-factory-slave.h b/daemon/gdm-factory-slave.h
deleted file mode 100644
index 9e9770f0..00000000
--- a/daemon/gdm-factory-slave.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-
-#ifndef __GDM_FACTORY_SLAVE_H
-#define __GDM_FACTORY_SLAVE_H
-
-#include <glib-object.h>
-#include "gdm-slave.h"
-
-G_BEGIN_DECLS
-
-#define GDM_TYPE_FACTORY_SLAVE (gdm_factory_slave_get_type ())
-#define GDM_FACTORY_SLAVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_FACTORY_SLAVE, GdmFactorySlave))
-#define GDM_FACTORY_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_FACTORY_SLAVE, GdmFactorySlaveClass))
-#define GDM_IS_FACTORY_SLAVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_FACTORY_SLAVE))
-#define GDM_IS_FACTORY_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_FACTORY_SLAVE))
-#define GDM_FACTORY_SLAVE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_FACTORY_SLAVE, GdmFactorySlaveClass))
-
-typedef struct GdmFactorySlavePrivate GdmFactorySlavePrivate;
-
-typedef struct
-{
- GdmSlave parent;
- GdmFactorySlavePrivate *priv;
-} GdmFactorySlave;
-
-typedef struct
-{
- GdmSlaveClass parent_class;
-} GdmFactorySlaveClass;
-
-GType gdm_factory_slave_get_type (void);
-GdmSlave * gdm_factory_slave_new (const char *id);
-
-G_END_DECLS
-
-#endif /* __GDM_FACTORY_SLAVE_H */
diff --git a/daemon/gdm-factory-slave.xml b/daemon/gdm-factory-slave.xml
deleted file mode 100644
index 74520ffb..00000000
--- a/daemon/gdm-factory-slave.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
-<node>
- <interface name="org.gnome.DisplayManager.FactorySlave">
- </interface>
-</node>
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
index cb69a88b..9d823eb8 100644
--- a/daemon/gdm-local-display-factory.c
+++ b/daemon/gdm-local-display-factory.c
@@ -41,7 +41,6 @@
#include "gdm-display-store.h"
#include "gdm-static-display.h"
#include "gdm-transient-display.h"
-#include "gdm-product-display.h"
#define GDM_LOCAL_DISPLAY_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_LOCAL_DISPLAY_FACTORY, GdmLocalDisplayFactoryPrivate))
@@ -252,54 +251,6 @@ gdm_local_display_factory_create_transient_display (GdmLocalDisplayFactory *fact
return ret;
}
-gboolean
-gdm_local_display_factory_create_product_display (GdmLocalDisplayFactory *factory,
- const char *parent_display_id,
- const char *relay_address,
- char **id,
- GError **error)
-{
- gboolean ret;
- GdmDisplay *display;
- guint32 num;
- const char *seat_id;
-
- g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
-
- ret = FALSE;
-
- g_debug ("GdmLocalDisplayFactory: Creating product display parent %s address:%s",
- parent_display_id, relay_address);
-
- num = take_next_display_number (factory);
-
- g_debug ("GdmLocalDisplayFactory: got display num %u", num);
-
- display = gdm_product_display_new (num, relay_address);
-
- seat_id = get_seat_of_transient_display (factory);
- g_object_set (display, "seat-id", seat_id, NULL);
-
- store_display (factory, num, display);
-
- if (! gdm_display_manage (display)) {
- display = NULL;
- goto out;
- }
-
- if (! gdm_display_get_id (display, id, NULL)) {
- display = NULL;
- goto out;
- }
-
- ret = TRUE;
- out:
- /* ref either held by store or not at all */
- g_object_unref (display);
-
- return ret;
-}
-
static void
on_static_display_status_changed (GdmDisplay *display,
GParamSpec *arg1,
diff --git a/daemon/gdm-local-display-factory.h b/daemon/gdm-local-display-factory.h
index 2abb0530..36514316 100644
--- a/daemon/gdm-local-display-factory.h
+++ b/daemon/gdm-local-display-factory.h
@@ -64,13 +64,6 @@ GdmLocalDisplayFactory * gdm_local_display_factory_new (G
gboolean gdm_local_display_factory_create_transient_display (GdmLocalDisplayFactory *factory,
char **id,
GError **error);
-
-gboolean gdm_local_display_factory_create_product_display (GdmLocalDisplayFactory *factory,
- const char *parent_display_id,
- const char *relay_address,
- char **id,
- GError **error);
-
G_END_DECLS
#endif /* __GDM_LOCAL_DISPLAY_FACTORY_H */
diff --git a/daemon/gdm-local-display-factory.xml b/daemon/gdm-local-display-factory.xml
index 51f5153b..515d9913 100644
--- a/daemon/gdm-local-display-factory.xml
+++ b/daemon/gdm-local-display-factory.xml
@@ -1,11 +1,6 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node name="/org/gnome/DisplayManager/LocalDisplayFactory">
<interface name="org.gnome.DisplayManager.LocalDisplayFactory">
- <method name="CreateProductDisplay">
- <arg name="parent_display_id" direction="in" type="o"/>
- <arg name="relay_address" direction="in" type="s"/>
- <arg name="id" direction="out" type="o"/>
- </method>
<method name="CreateTransientDisplay">
<arg name="id" direction="out" type="o"/>
</method>
diff --git a/daemon/gdm-product-display.c b/daemon/gdm-product-display.c
deleted file mode 100644
index 9b68cb9a..00000000
--- a/daemon/gdm-product-display.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib-object.h>
-
-#include "gdm-display.h"
-#include "gdm-product-display.h"
-#include "gdm-product-display-glue.h"
-
-#define GDM_PRODUCT_DISPLAY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_PRODUCT_DISPLAY, GdmProductDisplayPrivate))
-
-#define DEFAULT_SLAVE_COMMAND LIBEXECDIR"/gdm-product-slave"
-
-struct GdmProductDisplayPrivate
-{
- char *relay_address;
-};
-
-enum {
- PROP_0,
- PROP_RELAY_ADDRESS,
-};
-
-static void gdm_product_display_class_init (GdmProductDisplayClass *klass);
-static void gdm_product_display_init (GdmProductDisplay *product_display);
-static void gdm_product_display_finalize (GObject *object);
-
-G_DEFINE_TYPE (GdmProductDisplay, gdm_product_display, GDM_TYPE_DISPLAY)
-
-static gboolean
-gdm_product_display_create_authority (GdmDisplay *display)
-{
- g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
-
- GDM_DISPLAY_CLASS (gdm_product_display_parent_class)->create_authority (display);
-
- return TRUE;
-}
-
-static gboolean
-gdm_product_display_add_user_authorization (GdmDisplay *display,
- const char *username,
- char **filename,
- GError **error)
-{
- return GDM_DISPLAY_CLASS (gdm_product_display_parent_class)->add_user_authorization (display, username, filename, error);
-}
-
-static gboolean
-gdm_product_display_remove_user_authorization (GdmDisplay *display,
- const char *username,
- GError **error)
-{
- return GDM_DISPLAY_CLASS (gdm_product_display_parent_class)->remove_user_authorization (display, username, error);
-}
-
-static gboolean
-gdm_product_display_manage (GdmDisplay *display)
-{
- g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
-
- GDM_DISPLAY_CLASS (gdm_product_display_parent_class)->manage (display);
-
- return TRUE;
-}
-
-static gboolean
-gdm_product_display_finish (GdmDisplay *display)
-{
- g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
-
- GDM_DISPLAY_CLASS (gdm_product_display_parent_class)->finish (display);
-
- /* when a product display is done it is done */
- gdm_display_unmanage (display);
-
- return TRUE;
-}
-
-static gboolean
-gdm_product_display_unmanage (GdmDisplay *display)
-{
- g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
-
- GDM_DISPLAY_CLASS (gdm_product_display_parent_class)->unmanage (display);
-
- return TRUE;
-}
-
-gboolean
-gdm_product_display_get_relay_address (GdmProductDisplay *display,
- char **address,
- GError **error)
-{
- g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
-
- if (address != NULL) {
- *address = g_strdup (display->priv->relay_address);
- g_debug ("GdmProductDisplay: Returning address: %s", display->priv->relay_address);
- }
-
- return TRUE;
-}
-
-static void
-gdm_product_display_set_relay_address (GdmProductDisplay *display,
- const char *address)
-{
- g_free (display->priv->relay_address);
- display->priv->relay_address = g_strdup (address);
-}
-
-
-static void
-gdm_product_display_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GdmProductDisplay *self;
-
- self = GDM_PRODUCT_DISPLAY (object);
-
- switch (prop_id) {
- case PROP_RELAY_ADDRESS:
- gdm_product_display_set_relay_address (self, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gdm_product_display_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GdmProductDisplay *self;
-
- self = GDM_PRODUCT_DISPLAY (object);
-
- switch (prop_id) {
- case PROP_RELAY_ADDRESS:
- g_value_set_string (value, self->priv->relay_address);
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GObject *
-gdm_product_display_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GdmProductDisplay *display;
-
- display = GDM_PRODUCT_DISPLAY (G_OBJECT_CLASS (gdm_product_display_parent_class)->constructor (type,
- n_construct_properties,
- construct_properties));
- return G_OBJECT (display);
-}
-
-static void
-gdm_product_display_class_init (GdmProductDisplayClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass);
-
- object_class->get_property = gdm_product_display_get_property;
- object_class->set_property = gdm_product_display_set_property;
- object_class->constructor = gdm_product_display_constructor;
- object_class->finalize = gdm_product_display_finalize;
-
- display_class->create_authority = gdm_product_display_create_authority;
- display_class->add_user_authorization = gdm_product_display_add_user_authorization;
- display_class->remove_user_authorization = gdm_product_display_remove_user_authorization;
- display_class->manage = gdm_product_display_manage;
- display_class->finish = gdm_product_display_finish;
- display_class->unmanage = gdm_product_display_unmanage;
-
- g_type_class_add_private (klass, sizeof (GdmProductDisplayPrivate));
-
- g_object_class_install_property (object_class,
- PROP_RELAY_ADDRESS,
- g_param_spec_string ("relay-address",
- "relay address",
- "relay address",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- dbus_g_object_type_install_info (GDM_TYPE_PRODUCT_DISPLAY, &dbus_glib_gdm_product_display_object_info);
-}
-
-static void
-gdm_product_display_init (GdmProductDisplay *product_display)
-{
-
- product_display->priv = GDM_PRODUCT_DISPLAY_GET_PRIVATE (product_display);
-}
-
-static void
-gdm_product_display_finalize (GObject *object)
-{
- GdmProductDisplay *product_display;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GDM_IS_PRODUCT_DISPLAY (object));
-
- product_display = GDM_PRODUCT_DISPLAY (object);
-
- g_return_if_fail (product_display->priv != NULL);
-
- g_free (product_display->priv->relay_address);
-
- G_OBJECT_CLASS (gdm_product_display_parent_class)->finalize (object);
-}
-
-GdmDisplay *
-gdm_product_display_new (int display_number,
- const char *relay_address)
-{
- GObject *object;
- char *x11_display;
-
- x11_display = g_strdup_printf (":%d", display_number);
- object = g_object_new (GDM_TYPE_PRODUCT_DISPLAY,
- "slave-command", DEFAULT_SLAVE_COMMAND,
- "x11-display-number", display_number,
- "x11-display-name", x11_display,
- "relay-address", relay_address,
- NULL);
- g_free (x11_display);
-
- return GDM_DISPLAY (object);
-}
diff --git a/daemon/gdm-product-display.h b/daemon/gdm-product-display.h
deleted file mode 100644
index 8806c1f9..00000000
--- a/daemon/gdm-product-display.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-
-#ifndef __GDM_PRODUCT_DISPLAY_H
-#define __GDM_PRODUCT_DISPLAY_H
-
-#include <glib-object.h>
-#include <dbus/dbus-glib.h>
-#include "gdm-display.h"
-
-G_BEGIN_DECLS
-
-#define GDM_TYPE_PRODUCT_DISPLAY (gdm_product_display_get_type ())
-#define GDM_PRODUCT_DISPLAY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_PRODUCT_DISPLAY, GdmProductDisplay))
-#define GDM_PRODUCT_DISPLAY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_PRODUCT_DISPLAY, GdmProductDisplayClass))
-#define GDM_IS_PRODUCT_DISPLAY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_PRODUCT_DISPLAY))
-#define GDM_IS_PRODUCT_DISPLAY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_PRODUCT_DISPLAY))
-#define GDM_PRODUCT_DISPLAY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_PRODUCT_DISPLAY, GdmProductDisplayClass))
-
-typedef struct GdmProductDisplayPrivate GdmProductDisplayPrivate;
-
-typedef struct
-{
- GdmDisplay parent;
- GdmProductDisplayPrivate *priv;
-} GdmProductDisplay;
-
-typedef struct
-{
- GdmDisplayClass parent_class;
-
-} GdmProductDisplayClass;
-
-GType gdm_product_display_get_type (void);
-GdmDisplay * gdm_product_display_new (int display_number,
- const char *server_address);
-
-gboolean gdm_product_display_get_relay_address (GdmProductDisplay *display,
- char **address,
- GError **error);
-
-
-G_END_DECLS
-
-#endif /* __GDM_PRODUCT_DISPLAY_H */
diff --git a/daemon/gdm-product-display.xml b/daemon/gdm-product-display.xml
deleted file mode 100644
index b8d31c3d..00000000
--- a/daemon/gdm-product-display.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
-<node>
- <interface name="org.gnome.DisplayManager.ProductDisplay">
- <method name="GetRelayAddress">
- <arg name="address" direction="out" type="s"/>
- </method>
- </interface>
-</node>
diff --git a/daemon/gdm-product-slave.c b/daemon/gdm-product-slave.c
deleted file mode 100644
index 844af485..00000000
--- a/daemon/gdm-product-slave.c
+++ /dev/null
@@ -1,1407 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <pwd.h>
-#include <grp.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-#include <glib-object.h>
-
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-
-#include <X11/Xlib.h> /* for Display */
-
-#include "gdm-common.h"
-
-#include "gdm-product-slave.h"
-#include "gdm-product-slave-glue.h"
-
-#include "gdm-server.h"
-#include "gdm-session-direct.h"
-
-extern char **environ;
-
-#define GDM_PRODUCT_SLAVE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_PRODUCT_SLAVE, GdmProductSlavePrivate))
-
-#define GDM_DBUS_NAME "org.gnome.DisplayManager"
-#define GDM_DBUS_PRODUCT_DISPLAY_INTERFACE "org.gnome.DisplayManager.ProductDisplay"
-
-#define RELAY_SERVER_DBUS_PATH "/org/gnome/DisplayManager/SessionRelay"
-#define RELAY_SERVER_DBUS_INTERFACE "org.gnome.DisplayManager.SessionRelay"
-
-#define MAX_CONNECT_ATTEMPTS 10
-
-struct GdmProductSlavePrivate
-{
- char *id;
- GPid pid;
-
- char *relay_address;
-
- GPid server_pid;
- Display *server_display;
- guint connection_attempts;
-
- GdmServer *server;
- GdmSessionDirect *session;
- DBusConnection *session_relay_connection;
-
- DBusGProxy *product_display_proxy;
- DBusGConnection *connection;
-
- char *start_session_service_name;
-};
-
-static void gdm_product_slave_class_init (GdmProductSlaveClass *klass);
-static void gdm_product_slave_init (GdmProductSlave *product_slave);
-static void gdm_product_slave_finalize (GObject *object);
-
-G_DEFINE_TYPE (GdmProductSlave, gdm_product_slave, GDM_TYPE_SLAVE)
-
-static gboolean
-send_dbus_string_string_method (DBusConnection *connection,
- const char *method,
- const char *payload1,
- const char *payload2)
-{
- DBusError error;
- DBusMessage *message;
- DBusMessage *reply;
- DBusMessageIter iter;
- const char *str;
-
- g_debug ("GdmProductSlave: Calling %s", method);
- message = dbus_message_new_method_call (NULL,
- RELAY_SERVER_DBUS_PATH,
- RELAY_SERVER_DBUS_INTERFACE,
- method);
- if (message == NULL) {
- g_warning ("Couldn't allocate the D-Bus message");
- return FALSE;
- }
-
- dbus_message_iter_init_append (message, &iter);
-
- if (payload1 != NULL) {
- str = payload1;
- } else {
- str = "";
- }
- dbus_message_iter_append_basic (&iter,
- DBUS_TYPE_STRING,
- &str);
- if (payload2 != NULL) {
- str = payload2;
- } else {
- str = "";
- }
- dbus_message_iter_append_basic (&iter,
- DBUS_TYPE_STRING,
- &str);
- dbus_error_init (&error);
- reply = dbus_connection_send_with_reply_and_block (connection,
- message,
- -1,
- &error);
-
- dbus_message_unref (message);
-
- if (dbus_error_is_set (&error)) {
- g_warning ("%s %s raised: %s\n",
- method,
- error.name,
- error.message);
- return FALSE;
- }
- if (reply != NULL) {
- dbus_message_unref (reply);
- }
- dbus_connection_flush (connection);
-
- return TRUE;
-}
-static gboolean
-send_dbus_string_method (DBusConnection *connection,
- const char *method,
- const char *payload)
-{
- DBusError error;
- DBusMessage *message;
- DBusMessage *reply;
- DBusMessageIter iter;
- const char *str;
-
- if (payload != NULL) {
- str = payload;
- } else {
- str = "";
- }
-
- g_debug ("GdmProductSlave: Calling %s", method);
- message = dbus_message_new_method_call (NULL,
- RELAY_SERVER_DBUS_PATH,
- RELAY_SERVER_DBUS_INTERFACE,
- method);
- if (message == NULL) {
- g_warning ("Couldn't allocate the D-Bus message");
- return FALSE;
- }
-
- dbus_message_iter_init_append (message, &iter);
- dbus_message_iter_append_basic (&iter,
- DBUS_TYPE_STRING,
- &str);
-
- dbus_error_init (&error);
- reply = dbus_connection_send_with_reply_and_block (connection,
- message,
- -1,
- &error);
-
- dbus_message_unref (message);
-
- if (dbus_error_is_set (&error)) {
- g_warning ("%s %s raised: %s\n",
- method,
- error.name,
- error.message);
- return FALSE;
- }
- if (reply != NULL) {
- dbus_message_unref (reply);
- }
- dbus_connection_flush (connection);
-
- return TRUE;
-}
-
-static gboolean
-send_dbus_void_method (DBusConnection *connection,
- const char *method)
-{
- DBusError error;
- DBusMessage *message;
- DBusMessage *reply;
-
- g_debug ("GdmProductSlave: Calling %s", method);
- message = dbus_message_new_method_call (NULL,
- RELAY_SERVER_DBUS_PATH,
- RELAY_SERVER_DBUS_INTERFACE,
- method);
- if (message == NULL) {
- g_warning ("Couldn't allocate the D-Bus message");
- return FALSE;
- }
-
- dbus_error_init (&error);
- reply = dbus_connection_send_with_reply_and_block (connection,
- message,
- -1,
- &error);
-
- dbus_message_unref (message);
-
- if (dbus_error_is_set (&error)) {
- g_warning ("%s %s raised: %s\n",
- method,
- error.name,
- error.message);
- return FALSE;
- }
- if (reply != NULL) {
- dbus_message_unref (reply);
- }
- dbus_connection_flush (connection);
-
- return TRUE;
-}
-
-
-static gboolean
-send_dbus_int_method (DBusConnection *connection,
- const char *method,
- int payload)
-{
- DBusError error;
- DBusMessage *message;
- DBusMessage *reply;
- DBusMessageIter iter;
-
- g_debug ("GdmSessionWorker: Calling %s", method);
- message = dbus_message_new_method_call (NULL,
- RELAY_SERVER_DBUS_PATH,
- RELAY_SERVER_DBUS_INTERFACE,
- method);
- if (message == NULL) {
- g_warning ("Couldn't allocate the D-Bus message");
- return FALSE;
- }
-
- dbus_message_iter_init_append (message, &iter);
- dbus_message_iter_append_basic (&iter,
- DBUS_TYPE_INT32,
- &payload);
-
- dbus_error_init (&error);
- reply = dbus_connection_send_with_reply_and_block (connection,
- message,
- -1,
- &error);
- dbus_message_unref (message);
- if (reply != NULL) {
- dbus_message_unref (reply);
- }
- dbus_connection_flush (connection);
-
- if (dbus_error_is_set (&error)) {
- g_debug ("%s %s raised: %s\n",
- method,
- error.name,
- error.message);
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-relay_session_started (GdmProductSlave *slave,
- int pid)
-{
- send_dbus_int_method (slave->priv->session_relay_connection,
- "SessionStarted",
- pid);
-}
-
-static void
-relay_session_conversation_started (GdmProductSlave *slave,
- const char *service_name)
-{
- send_dbus_string_method (slave->priv->session_relay_connection,
- "ConversationStarted", service_name);
-}
-
-static void
-on_session_conversation_started (GdmSession *session,
- const char *service_name,
- GdmProductSlave *slave)
-{
- g_debug ("GdmProductSlave: session conversation started");
-
- relay_session_conversation_started (slave, service_name);
-}
-
-static void
-disconnect_relay (GdmProductSlave *slave)
-{
- /* drop the connection */
-
- dbus_connection_close (slave->priv->session_relay_connection);
- slave->priv->session_relay_connection = NULL;
-}
-
-static void
-on_session_started (GdmSession *session,
- int pid,
- GdmProductSlave *slave)
-{
- g_debug ("GdmProductSlave: session started");
-
- relay_session_started (slave, pid);
-
- disconnect_relay (slave);
-}
-
-static void
-on_session_exited (GdmSession *session,
- int exit_code,
- GdmProductSlave *slave)
-{
- g_debug ("GdmProductSlave: session exited with code %d", exit_code);
-
- gdm_slave_stopped (GDM_SLAVE (slave));
-}
-
-static void
-on_session_died (GdmSession *session,
- int signal_number,
- GdmProductSlave *slave)
-{
- g_debug ("GdmProductSlave: session died with signal %d, (%s)",
- signal_number,
- g_strsignal (signal_number));
-
- gdm_slave_stopped (GDM_SLAVE (slave));
-}
-
-static void
-setup_server (GdmProductSlave *slave)
-{
- /* Set the busy cursor */
- gdm_slave_set_busy_cursor (GDM_SLAVE (slave));
-}
-
-static gboolean
-add_user_authorization (GdmProductSlave *slave,
- char **filename)
-{
- char *username;
- gboolean ret;
-
- username = gdm_session_direct_get_username (slave->priv->session);
-
- ret = gdm_slave_add_user_authorization (GDM_SLAVE (slave),
- username,
- filename);
- g_debug ("GdmProductSlave: Adding user authorization for %s: %s", username, *filename);
-
- g_free (username);
-
- return ret;
-}
-
-static gboolean
-setup_session (GdmProductSlave *slave)
-{
- char *auth_file;
- char *display_device;
-
- auth_file = NULL;
- add_user_authorization (slave, &auth_file);
-
- g_assert (auth_file != NULL);
-
- display_device = NULL;
- if (slave->priv->server != NULL) {
- display_device = gdm_server_get_display_device (slave->priv->server);
- }
-
- g_object_set (slave->priv->session,
- "display-device", display_device,
- "user-x11-authority-file", auth_file,
- NULL);
-
- g_free (display_device);
- g_free (auth_file);
-
- gdm_session_start_session (GDM_SESSION (slave->priv->session),
- slave->priv->start_session_service_name);
-
- return TRUE;
-}
-
-static gboolean
-idle_connect_to_display (GdmProductSlave *slave)
-{
- gboolean res;
-
- slave->priv->connection_attempts++;
-
- res = gdm_slave_connect_to_x11_display (GDM_SLAVE (slave));
- if (res) {
- /* FIXME: handle wait-for-go */
-
- setup_server (slave);
- setup_session (slave);
- } else {
- if (slave->priv->connection_attempts >= MAX_CONNECT_ATTEMPTS) {
- g_warning ("Unable to connect to display after %d tries - bailing out", slave->priv->connection_attempts);
- exit (1);
- }
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-on_server_ready (GdmServer *server,
- GdmProductSlave *slave)
-{
- g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
-}
-
-static void
-on_server_exited (GdmServer *server,
- int exit_code,
- GdmProductSlave *slave)
-{
- g_debug ("GdmProductSlave: server exited with code %d\n", exit_code);
-
- gdm_slave_stopped (GDM_SLAVE (slave));
-}
-
-static void
-on_server_died (GdmServer *server,
- int signal_number,
- GdmProductSlave *slave)
-{
- g_debug ("GdmProductSlave: server died with signal %d, (%s)",
- signal_number,
- g_strsignal (signal_number));
-
- gdm_slave_stopped (GDM_SLAVE (slave));
-}
-
-static gboolean
-gdm_product_slave_create_server (GdmProductSlave *slave)
-{
- char *display_name;
- char *auth_file;
- char *seat_id;
- gboolean display_is_local;
-
- g_object_get (slave,
- "display-is-local", &display_is_local,
- "display-name", &display_name,
- "display-seat-id", &seat_id,
- "display-x11-authority-file", &auth_file,
- NULL);
-
- /* if this is local display start a server if one doesn't
- * exist */
- if (display_is_local) {
- gboolean res;
-
- slave->priv->server = gdm_server_new (display_name, seat_id, auth_file);
- g_signal_connect (slave->priv->server,
- "exited",
- G_CALLBACK (on_server_exited),
- slave);
- g_signal_connect (slave->priv->server,
- "died",
- G_CALLBACK (on_server_died),
- slave);
- g_signal_connect (slave->priv->server,
- "ready",
- G_CALLBACK (on_server_ready),
- slave);
-
- res = gdm_server_start (slave->priv->server);
- if (! res) {
- g_warning (_("Could not start the X "
- "server (your graphical environment) "
- "due to an internal error. "
- "Please contact your system administrator "
- "or check your syslog to diagnose. "
- "In the meantime this display will be "
- "disabled. Please restart GDM when "
- "the problem is corrected."));
- exit (1);
- }
-
- g_debug ("GdmProductSlave: Started X server");
- } else {
- g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
- }
-
- g_free (display_name);
- g_free (auth_file);
-
- return TRUE;
-}
-
-static void
-on_session_setup_complete (GdmSession *session,
- GdmProductSlave *slave)
-{
- send_dbus_void_method (slave->priv->session_relay_connection,
- "SetupComplete");
-}
-
-static void
-on_session_setup_failed (GdmSession *session,
- const char *message,
- GdmProductSlave *slave)
-{
- send_dbus_string_method (slave->priv->session_relay_connection,
- "SetupFailed",
- message);
-}
-
-static void
-on_session_reset_complete (GdmSession *session,
- GdmProductSlave *slave)
-{
- send_dbus_void_method (slave->priv->session_relay_connection,
- "ResetComplete");
-}
-
-static void
-on_session_reset_failed (GdmSession *session,
- const char *message,
- GdmProductSlave *slave)
-{
- send_dbus_string_method (slave->priv->session_relay_connection,
- "ResetFailed",
- message);
-}
-
-static void
-on_session_authenticated (GdmSession *session,
- const char *service_name,
- GdmProductSlave *slave)
-{
- send_dbus_string_method (slave->priv->session_relay_connection,
- "Authenticated", service_name);
-}
-
-static void
-on_session_authentication_failed (GdmSession *session,
- const char *service_name,
- const char *message,
- GdmProductSlave *slave)
-{
- send_dbus_string_string_method (slave->priv->session_relay_connection,
- "AuthenticationFailed",
- service_name,
- message);
-}
-
-static void
-on_session_authorized (GdmSession *session,
- const char *service_name,
- GdmProductSlave *slave)
-{
- send_dbus_string_method (slave->priv->session_relay_connection,
- "Authorized", service_name);
-}
-
-static void
-on_session_authorization_failed (GdmSession *session,
- const char *service_name,
- const char *message,
- GdmProductSlave *slave)
-{
- send_dbus_string_string_method (slave->priv->session_relay_connection,
- "AuthorizationFailed",
- service_name,
- message);
-}
-
-static void
-on_session_accredited (GdmSession *session,
- const char *service_name,
- GdmProductSlave *slave)
-{
- send_dbus_string_method (slave->priv->session_relay_connection,
- "Accredited", service_name);
-}
-
-static void
-on_session_accreditation_failed (GdmSession *session,
- const char *service_name,
- const char *message,
- GdmProductSlave *slave)
-{
- send_dbus_string_string_method (slave->priv->session_relay_connection,
- "AccreditationFailed",
- service_name,
- message);
-}
-
-static void
-on_session_opened (GdmSession *session,
- const char *service_name,
- GdmProductSlave *slave)
-{
- send_dbus_string_method (slave->priv->session_relay_connection,
- "SessionOpened", service_name);
-}
-
-static void
-on_session_open_failed (GdmSession *session,
- const char *service_name,
- const char *message,
- GdmProductSlave *slave)
-{
- send_dbus_string_string_method (slave->priv->session_relay_connection,
- "SessionOpenFailed",
- service_name,
- message);
-}
-
-static void
-on_session_info (GdmSession *session,
- const char *service_name,
- const char *text,
- GdmProductSlave *slave)
-{
- send_dbus_string_string_method (slave->priv->session_relay_connection,
- "Info",
- service_name,
- text);
-}
-
-static void
-on_session_problem (GdmSession *session,
- const char *service_name,
- const char *text,
- GdmProductSlave *slave)
-{
- send_dbus_string_string_method (slave->priv->session_relay_connection,
- "Problem",
- service_name,
- text);
-}
-
-static void
-on_session_info_query (GdmSession *session,
- const char *service_name,
- const char *text,
- GdmProductSlave *slave)
-{
- send_dbus_string_string_method (slave->priv->session_relay_connection,
- "InfoQuery",
- service_name, text);
-}
-
-static void
-on_session_secret_info_query (GdmSession *session,
- const char *service_name,
- const char *text,
- GdmProductSlave *slave)
-{
- send_dbus_string_string_method (slave->priv->session_relay_connection,
- "SecretInfoQuery",
- service_name,
- text);
-}
-
-static void
-on_relay_setup (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- const char *service_name;
- dbus_bool_t res;
-
- service_name = NULL;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &service_name,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Relay Setup");
- gdm_session_setup (GDM_SESSION (slave->priv->session),
- service_name);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
-}
-
-static void
-on_relay_setup_for_user (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- const char *service_name;
- const char *username;
- dbus_bool_t res;
-
- username = NULL;
- service_name = NULL;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &service_name,
- DBUS_TYPE_STRING, &username,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Relay SetupForUser");
- gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
- service_name,
- username);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
-}
-
-static void
-on_relay_authenticate (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- char *service_name;
- dbus_bool_t res;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &service_name,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Relay Authenticate");
- gdm_session_authenticate (GDM_SESSION (slave->priv->session), service_name);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
- dbus_error_free (&error);
-}
-
-static void
-on_relay_authorize (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- char *service_name;
- dbus_bool_t res;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &service_name,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Relay Authorize");
- gdm_session_authorize (GDM_SESSION (slave->priv->session), service_name);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
- dbus_error_free (&error);
-}
-
-static void
-on_relay_establish_credentials (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- char *service_name;
- dbus_bool_t res;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &service_name,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Relay EstablishCredentials");
- gdm_session_accredit (GDM_SESSION (slave->priv->session), service_name, GDM_SESSION_CRED_ESTABLISH);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
- dbus_error_free (&error);
-}
-
-static void
-on_relay_refresh_credentials (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- char *service_name;
- dbus_bool_t res;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &service_name,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Relay RefreshCredentials");
- gdm_session_accredit (GDM_SESSION (slave->priv->session), service_name, GDM_SESSION_CRED_REFRESH);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
- dbus_error_free (&error);
-}
-
-static void
-on_relay_answer_query (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- const char *text;
- const char *service_name;
- dbus_bool_t res;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &service_name,
- DBUS_TYPE_STRING, &text,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Relay AnswerQuery");
- gdm_session_answer_query (GDM_SESSION (slave->priv->session), service_name, text);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
-}
-
-static void
-on_relay_session_selected (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- const char *text;
- dbus_bool_t res;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &text,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Session selected %s", text);
- gdm_session_select_session (GDM_SESSION (slave->priv->session), text);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
-}
-
-static void
-on_relay_language_selected (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- const char *text;
- dbus_bool_t res;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &text,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Language selected %s", text);
- gdm_session_select_language (GDM_SESSION (slave->priv->session), text);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
-}
-
-static void
-on_relay_user_selected (GdmProductSlave *slave,
- DBusMessage *message)
-{
- g_debug ("GdmProductSlave: Greeter user selected");
-}
-
-static void
-on_relay_start_conversation (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- char *service_name;
- dbus_bool_t res;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &service_name,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Started conversation with %s service", service_name);
- gdm_session_start_conversation (GDM_SESSION (slave->priv->session),
- service_name);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- }
-
- dbus_error_free (&error);
-}
-
-static void
-on_relay_open_session (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- const char *text;
- dbus_bool_t res;
-
- dbus_error_init (&error);
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &text,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: open session %s", text);
- gdm_session_open_session (GDM_SESSION (slave->priv->session),
- text);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
-}
-
-static void
-on_relay_start_session (GdmProductSlave *slave,
- DBusMessage *message)
-{
- DBusError error;
- const char *service_name;
- dbus_bool_t res;
-
- dbus_error_init (&error);
-
- res = dbus_message_get_args (message,
- &error,
- DBUS_TYPE_STRING, &service_name,
- DBUS_TYPE_INVALID);
- if (res) {
- g_debug ("GdmProductSlave: Relay StartSession");
- g_free (slave->priv->start_session_service_name);
- slave->priv->start_session_service_name = g_strdup (service_name);
- gdm_product_slave_create_server (slave);
- } else {
- g_warning ("Unable to get arguments: %s", error.message);
- dbus_error_free (&error);
- }
-}
-
-static void
-create_new_session (GdmProductSlave *slave)
-{
- gboolean display_is_local;
- char *display_id;
- char *display_name;
- char *display_hostname;
- char *display_device;
- char *display_seat_id;
- char *display_x11_authority_file;
-
- g_debug ("GdmProductSlave: Creating new session");
-
- g_object_get (slave,
- "display-id", &display_id,
- "display-name", &display_name,
- "display-hostname", &display_hostname,
- "display-is-local", &display_is_local,
- "display-x11-authority-file", &display_x11_authority_file,
- "display-seat-id", &display_seat_id,
- NULL);
-
- /* FIXME: we don't yet have a display device! */
- display_device = g_strdup ("");
-
- slave->priv->session = gdm_session_direct_new (display_id,
- display_name,
- display_hostname,
- display_device,
- display_seat_id,
- display_x11_authority_file,
- display_is_local);
- g_free (display_id);
- g_free (display_name);
- g_free (display_hostname);
- g_free (display_x11_authority_file);
- g_free (display_device);
-
- g_signal_connect (slave->priv->session,
- "conversation-started",
- G_CALLBACK (on_session_conversation_started),
- slave);
- g_signal_connect (slave->priv->session,
- "setup-complete",
- G_CALLBACK (on_session_setup_complete),
- slave);
- g_signal_connect (slave->priv->session,
- "setup-failed",
- G_CALLBACK (on_session_setup_failed),
- slave);
- g_signal_connect (slave->priv->session,
- "reset-complete",
- G_CALLBACK (on_session_reset_complete),
- slave);
- g_signal_connect (slave->priv->session,
- "reset-failed",
- G_CALLBACK (on_session_reset_failed),
- slave);
- g_signal_connect (slave->priv->session,
- "authenticated",
- G_CALLBACK (on_session_authenticated),
- slave);
- g_signal_connect (slave->priv->session,
- "authentication-failed",
- G_CALLBACK (on_session_authentication_failed),
- slave);
- g_signal_connect (slave->priv->session,
- "authorized",
- G_CALLBACK (on_session_authorized),
- slave);
- g_signal_connect (slave->priv->session,
- "authorization-failed",
- G_CALLBACK (on_session_authorization_failed),
- slave);
- g_signal_connect (slave->priv->session,
- "accredited",
- G_CALLBACK (on_session_accredited),
- slave);
- g_signal_connect (slave->priv->session,
- "accreditation-failed",
- G_CALLBACK (on_session_accreditation_failed),
- slave);
- g_signal_connect (slave->priv->session,
- "session-opened",
- G_CALLBACK (on_session_opened),
- slave);
- g_signal_connect (slave->priv->session,
- "session-open-failed",
- G_CALLBACK (on_session_open_failed),
- slave);
- g_signal_connect (slave->priv->session,
- "info",
- G_CALLBACK (on_session_info),
- slave);
- g_signal_connect (slave->priv->session,
- "problem",
- G_CALLBACK (on_session_problem),
- slave);
- g_signal_connect (slave->priv->session,
- "info-query",
- G_CALLBACK (on_session_info_query),
- slave);
- g_signal_connect (slave->priv->session,
- "secret-info-query",
- G_CALLBACK (on_session_secret_info_query),
- slave);
-
- g_signal_connect (slave->priv->session,
- "session-started",
- G_CALLBACK (on_session_started),
- slave);
- g_signal_connect (slave->priv->session,
- "session-exited",
- G_CALLBACK (on_session_exited),
- slave);
- g_signal_connect (slave->priv->session,
- "session-died",
- G_CALLBACK (on_session_died),
- slave);
-}
-
-static void
-on_relay_cancelled (GdmProductSlave *slave,
- DBusMessage *message)
-{
- g_debug ("GdmProductSlave: Relay cancelled");
-
- if (slave->priv->session != NULL) {
- gdm_session_close (GDM_SESSION (slave->priv->session));
- g_object_unref (slave->priv->session);
- }
-
- create_new_session (slave);
-}
-
-static void
-get_relay_address (GdmProductSlave *slave)
-{
- GError *error;
- char *text;
- gboolean res;
-
- text = NULL;
- error = NULL;
- res = dbus_g_proxy_call (slave->priv->product_display_proxy,
- "GetRelayAddress",
- &error,
- G_TYPE_INVALID,
- G_TYPE_STRING, &text,
- G_TYPE_INVALID);
- if (! res) {
- g_warning ("Unable to get relay address: %s", error->message);
- g_error_free (error);
- } else {
- g_free (slave->priv->relay_address);
- slave->priv->relay_address = g_strdup (text);
- g_debug ("GdmProductSlave: Got relay address: %s", slave->priv->relay_address);
- }
-
- g_free (text);
-}
-
-static DBusHandlerResult
-relay_dbus_handle_message (DBusConnection *connection,
- DBusMessage *message,
- void *user_data,
- dbus_bool_t local_interface)
-{
- GdmProductSlave *slave = GDM_PRODUCT_SLAVE (user_data);
-
-#if 0
- g_message ("obj_path=%s interface=%s method=%s destination=%s",
- dbus_message_get_path (message),
- dbus_message_get_interface (message),
- dbus_message_get_member (message),
- dbus_message_get_destination (message));
-#endif
-
- g_return_val_if_fail (connection != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
- g_return_val_if_fail (message != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-
- if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "Setup")) {
- on_relay_setup (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "SetupForUser")) {
- on_relay_setup_for_user (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "Authenticate")) {
- on_relay_authenticate (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "Authorize")) {
- on_relay_authorize (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "EstablishCredentials")) {
- on_relay_establish_credentials (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "RefreshCredentials")) {
- on_relay_refresh_credentials (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "AnswerQuery")) {
- on_relay_answer_query (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "SessionSelected")) {
- on_relay_session_selected (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "LanguageSelected")) {
- on_relay_language_selected (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "UserSelected")) {
- on_relay_user_selected (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "OpenSession")) {
- on_relay_open_session (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "StartSession")) {
- on_relay_start_session (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "StartConversation")) {
- on_relay_start_conversation (slave, message);
- } else if (dbus_message_is_signal (message, RELAY_SERVER_DBUS_INTERFACE, "Cancelled")) {
- on_relay_cancelled (slave, message);
- } else {
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult
-relay_dbus_filter_function (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- GdmProductSlave *slave = GDM_PRODUCT_SLAVE (user_data);
- const char *path;
-
- path = dbus_message_get_path (message);
-
- g_debug ("GdmProductSlave: obj_path=%s interface=%s method=%s",
- dbus_message_get_path (message),
- dbus_message_get_interface (message),
- dbus_message_get_member (message));
-
- if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected")
- && strcmp (path, DBUS_PATH_LOCAL) == 0) {
-
- g_debug ("GdmProductSlave: Got disconnected from the server");
-
- dbus_connection_unref (connection);
- slave->priv->connection = NULL;
-
- } else if (dbus_message_is_signal (message,
- DBUS_INTERFACE_DBUS,
- "NameOwnerChanged")) {
- g_debug ("GdmProductSlave: Name owner changed?");
- } else {
- return relay_dbus_handle_message (connection, message, user_data, FALSE);
- }
-
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static gboolean
-connect_to_session_relay (GdmProductSlave *slave)
-{
- DBusError error;
-
- get_relay_address (slave);
-
- g_debug ("GdmProductSlave: connecting to session relay address: %s", slave->priv->relay_address);
-
- dbus_error_init (&error);
- slave->priv->session_relay_connection = dbus_connection_open_private (slave->priv->relay_address, &error);
- if (slave->priv->session_relay_connection == NULL) {
- if (dbus_error_is_set (&error)) {
- g_warning ("error opening connection: %s", error.message);
- dbus_error_free (&error);
- } else {
- g_warning ("Unable to open connection");
- }
- exit (1);
- }
-
- dbus_connection_setup_with_g_main (slave->priv->session_relay_connection, NULL);
- dbus_connection_set_exit_on_disconnect (slave->priv->session_relay_connection, FALSE);
-
- dbus_connection_add_filter (slave->priv->session_relay_connection,
- relay_dbus_filter_function,
- slave,
- NULL);
-
- return TRUE;
-}
-
-static gboolean
-gdm_product_slave_start (GdmSlave *slave)
-{
- gboolean ret;
- GError *error;
- char *display_id;
-
- ret = FALSE;
-
- GDM_SLAVE_CLASS (gdm_product_slave_parent_class)->start (slave);
-
- g_object_get (slave,
- "display-id", &display_id,
- NULL);
-
- error = NULL;
- GDM_PRODUCT_SLAVE (slave)->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (GDM_PRODUCT_SLAVE (slave)->priv->connection == NULL) {
- if (error != NULL) {
- g_critical ("error getting system bus: %s", error->message);
- g_error_free (error);
- }
- exit (1);
- }
-
- error = NULL;
- GDM_PRODUCT_SLAVE (slave)->priv->product_display_proxy = dbus_g_proxy_new_for_name_owner (GDM_PRODUCT_SLAVE (slave)->priv->connection,
- GDM_DBUS_NAME,
- display_id,
- GDM_DBUS_PRODUCT_DISPLAY_INTERFACE,
- &error);
- if (GDM_PRODUCT_SLAVE (slave)->priv->product_display_proxy == NULL) {
- if (error != NULL) {
- g_warning ("Failed to create display proxy %s: %s", display_id, error->message);
- g_error_free (error);
- } else {
- g_warning ("Unable to create display proxy");
- }
- goto out;
- }
-
- create_new_session (GDM_PRODUCT_SLAVE (slave));
-
- connect_to_session_relay (GDM_PRODUCT_SLAVE (slave));
-
- ret = TRUE;
-
- out:
- g_free (display_id);
-
- return ret;
-}
-
-static gboolean
-gdm_product_slave_stop (GdmSlave *slave)
-{
- g_debug ("GdmProductSlave: Stopping product_slave");
-
- GDM_SLAVE_CLASS (gdm_product_slave_parent_class)->stop (slave);
-
- if (GDM_PRODUCT_SLAVE (slave)->priv->session != NULL) {
- gdm_session_close (GDM_SESSION (GDM_PRODUCT_SLAVE (slave)->priv->session));
- g_object_unref (GDM_PRODUCT_SLAVE (slave)->priv->session);
- GDM_PRODUCT_SLAVE (slave)->priv->session = NULL;
- }
-
- if (GDM_PRODUCT_SLAVE (slave)->priv->server != NULL) {
- gdm_server_stop (GDM_PRODUCT_SLAVE (slave)->priv->server);
- g_object_unref (GDM_PRODUCT_SLAVE (slave)->priv->server);
- GDM_PRODUCT_SLAVE (slave)->priv->server = NULL;
- }
-
- if (GDM_PRODUCT_SLAVE (slave)->priv->product_display_proxy != NULL) {
- g_object_unref (GDM_PRODUCT_SLAVE (slave)->priv->product_display_proxy);
- }
-
- return TRUE;
-}
-
-static void
-gdm_product_slave_class_init (GdmProductSlaveClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GdmSlaveClass *slave_class = GDM_SLAVE_CLASS (klass);
-
- object_class->finalize = gdm_product_slave_finalize;
-
- slave_class->start = gdm_product_slave_start;
- slave_class->stop = gdm_product_slave_stop;
-
- g_type_class_add_private (klass, sizeof (GdmProductSlavePrivate));
-
- dbus_g_object_type_install_info (GDM_TYPE_PRODUCT_SLAVE, &dbus_glib_gdm_product_slave_object_info);
-}
-
-static void
-gdm_product_slave_init (GdmProductSlave *slave)
-{
- slave->priv = GDM_PRODUCT_SLAVE_GET_PRIVATE (slave);
-}
-
-static void
-gdm_product_slave_finalize (GObject *object)
-{
- GdmProductSlave *slave;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GDM_IS_PRODUCT_SLAVE (object));
-
- slave = GDM_PRODUCT_SLAVE (object);
-
- g_return_if_fail (slave->priv != NULL);
-
- gdm_product_slave_stop (GDM_SLAVE (slave));
-
- g_free (slave->priv->relay_address);
-
- G_OBJECT_CLASS (gdm_product_slave_parent_class)->finalize (object);
-}
-
-GdmSlave *
-gdm_product_slave_new (const char *id)
-{
- GObject *object;
-
- object = g_object_new (GDM_TYPE_PRODUCT_SLAVE,
- "display-id", id,
- NULL);
-
- return GDM_SLAVE (object);
-}
diff --git a/daemon/gdm-product-slave.h b/daemon/gdm-product-slave.h
deleted file mode 100644
index ce0d9489..00000000
--- a/daemon/gdm-product-slave.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-
-#ifndef __GDM_PRODUCT_SLAVE_H
-#define __GDM_PRODUCT_SLAVE_H
-
-#include <glib-object.h>
-#include "gdm-slave.h"
-
-G_BEGIN_DECLS
-
-#define GDM_TYPE_PRODUCT_SLAVE (gdm_product_slave_get_type ())
-#define GDM_PRODUCT_SLAVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_PRODUCT_SLAVE, GdmProductSlave))
-#define GDM_PRODUCT_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_PRODUCT_SLAVE, GdmProductSlaveClass))
-#define GDM_IS_PRODUCT_SLAVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_PRODUCT_SLAVE))
-#define GDM_IS_PRODUCT_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_PRODUCT_SLAVE))
-#define GDM_PRODUCT_SLAVE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_PRODUCT_SLAVE, GdmProductSlaveClass))
-
-typedef struct GdmProductSlavePrivate GdmProductSlavePrivate;
-
-typedef struct
-{
- GdmSlave parent;
- GdmProductSlavePrivate *priv;
-} GdmProductSlave;
-
-typedef struct
-{
- GdmSlaveClass parent_class;
-} GdmProductSlaveClass;
-
-GType gdm_product_slave_get_type (void);
-GdmSlave * gdm_product_slave_new (const char *id);
-
-G_END_DECLS
-
-#endif /* __GDM_PRODUCT_SLAVE_H */
diff --git a/daemon/gdm-product-slave.xml b/daemon/gdm-product-slave.xml
deleted file mode 100644
index d2eb2cae..00000000
--- a/daemon/gdm-product-slave.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
-<node>
- <interface name="org.gnome.DisplayManager.ProductSlave">
- </interface>
-</node>
diff --git a/daemon/gdm-session-relay.h b/daemon/gdm-session-relay.h
deleted file mode 100644
index 5efd2bd3..00000000
--- a/daemon/gdm-session-relay.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-
-#ifndef __GDM_SESSION_RELAY_H
-#define __GDM_SESSION_RELAY_H
-
-#include <glib-object.h>
-
-#include "gdm-session.h"
-
-G_BEGIN_DECLS
-
-#define GDM_TYPE_SESSION_RELAY (gdm_session_relay_get_type ())
-#define GDM_SESSION_RELAY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_SESSION_RELAY, GdmSessionRelay))
-#define GDM_SESSION_RELAY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_SESSION_RELAY, GdmSessionRelayClass))
-#define GDM_IS_SESSION_RELAY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_SESSION_RELAY))
-#define GDM_IS_SESSION_RELAY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_SESSION_RELAY))
-#define GDM_SESSION_RELAY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_SESSION_RELAY, GdmSessionRelayClass))
-
-typedef struct GdmSessionRelayPrivate GdmSessionRelayPrivate;
-
-typedef struct
-{
- GObject parent;
- GdmSessionRelayPrivate *priv;
-} GdmSessionRelay;
-
-typedef struct
-{
- GObjectClass parent_class;
-
- /* Signals */
- void (* connected) (GdmSessionRelay *session_relay);
- void (* disconnected) (GdmSessionRelay *session_relay);
-} GdmSessionRelayClass;
-
-GType gdm_session_relay_get_type (void);
-GdmSessionRelay * gdm_session_relay_new (void);
-
-gboolean gdm_session_relay_start (GdmSessionRelay *session_relay);
-gboolean gdm_session_relay_stop (GdmSessionRelay *session_relay);
-char * gdm_session_relay_get_address (GdmSessionRelay *session_relay);
-
-G_END_DECLS
-
-#endif /* __GDM_SESSION_RELAY_H */
diff --git a/daemon/product-slave-main.c b/daemon/product-slave-main.c
deleted file mode 100644
index b8e47555..00000000
--- a/daemon/product-slave-main.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <locale.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib-object.h>
-
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-
-#include "gdm-xerrors.h"
-#include "gdm-signal-handler.h"
-#include "gdm-log.h"
-#include "gdm-common.h"
-#include "gdm-product-slave.h"
-
-#include "gdm-settings.h"
-#include "gdm-settings-direct.h"
-#include "gdm-settings-keys.h"
-
-static GdmSettings *settings = NULL;
-static int gdm_return_code = 0;
-
-static DBusGConnection *
-get_system_bus (void)
-{
- GError *error;
- DBusGConnection *bus;
- DBusConnection *connection;
-
- error = NULL;
- bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (bus == NULL) {
- g_warning ("Couldn't connect to system bus: %s",
- error->message);
- g_error_free (error);
- goto out;
- }
-
- connection = dbus_g_connection_get_connection (bus);
- dbus_connection_set_exit_on_disconnect (connection, FALSE);
-
- out:
- return bus;
-}
-
-static gboolean
-signal_cb (int signo,
- gpointer data)
-{
- int ret;
-
- g_debug ("Got callback for signal %d", signo);
-
- ret = TRUE;
-
- switch (signo) {
- case SIGSEGV:
- case SIGBUS:
- case SIGILL:
- case SIGABRT:
- g_debug ("Caught signal %d.", signo);
-
- ret = FALSE;
- break;
-
- case SIGFPE:
- case SIGPIPE:
- /* let the fatal signals interrupt us */
- g_debug ("Caught signal %d, shutting down abnormally.", signo);
- ret = FALSE;
-
- break;
-
- case SIGINT:
- case SIGTERM:
- /* let the fatal signals interrupt us */
- g_debug ("Caught signal %d, shutting down normally.", signo);
- ret = FALSE;
-
- break;
-
- case SIGHUP:
- g_debug ("Got HUP signal");
- /* FIXME:
- * Reread config stuff like system config files, VPN service files, etc
- */
- ret = TRUE;
-
- break;
-
- case SIGUSR1:
- g_debug ("Got USR1 signal");
- /* we get this from xorg - can't use for anything else */
- ret = TRUE;
-
- break;
-
- case SIGUSR2:
- g_debug ("Got USR2 signal");
- ret = TRUE;
-
- gdm_log_toggle_debug ();
-
- break;
-
- default:
- g_debug ("Caught unhandled signal %d", signo);
- ret = TRUE;
-
- break;
- }
-
- return ret;
-}
-
-static void
-on_slave_stopped (GdmSlave *slave,
- GMainLoop *main_loop)
-{
- g_debug ("slave finished");
- gdm_return_code = 0;
- g_main_loop_quit (main_loop);
-}
-
-static gboolean
-is_debug_set (void)
-{
- gboolean debug = FALSE;
-
- /* enable debugging for unstable builds */
- if (gdm_is_version_unstable ()) {
- return TRUE;
- }
-
- gdm_settings_direct_get_boolean (GDM_KEY_DEBUG, &debug);
- return debug;
-}
-
-int
-main (int argc,
- char **argv)
-{
- GMainLoop *main_loop;
- GOptionContext *context;
- DBusGConnection *connection;
- GdmSlave *slave;
- static char *display_id = NULL;
- GdmSignalHandler *signal_handler;
- static GOptionEntry entries [] = {
- { "display-id", 0, 0, G_OPTION_ARG_STRING, &display_id, N_("Display ID"), N_("ID") },
- { NULL }
- };
-
- bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
- textdomain (GETTEXT_PACKAGE);
- setlocale (LC_ALL, "");
-
- g_type_init ();
-
- context = g_option_context_new (_("GNOME Display Manager Slave"));
- g_option_context_add_main_entries (context, entries, NULL);
-
- g_option_context_parse (context, &argc, &argv, NULL);
- g_option_context_free (context);
-
- connection = get_system_bus ();
- if (connection == NULL) {
- goto out;
- }
-
- gdm_xerrors_init ();
- gdm_log_init ();
-
- settings = gdm_settings_new ();
- if (settings == NULL) {
- g_warning ("Unable to initialize settings");
- goto out;
- }
-
- if (! gdm_settings_direct_init (settings, DATADIR "/gdm/gdm.schemas", "/")) {
- g_warning ("Unable to initialize settings");
- goto out;
- }
-
- gdm_log_set_debug (is_debug_set ());
-
- if (display_id == NULL) {
- g_critical ("No display ID set");
- exit (1);
- }
-
- main_loop = g_main_loop_new (NULL, FALSE);
-
- signal_handler = gdm_signal_handler_new ();
- gdm_signal_handler_set_fatal_func (signal_handler,
- (GDestroyNotify)g_main_loop_quit,
- main_loop);
- gdm_signal_handler_add (signal_handler, SIGTERM, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGINT, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGILL, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGABRT, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL);
-
- slave = gdm_product_slave_new (display_id);
- if (slave == NULL) {
- goto out;
- }
- g_signal_connect (slave,
- "stopped",
- G_CALLBACK (on_slave_stopped),
- main_loop);
- gdm_slave_start (slave);
-
- g_main_loop_run (main_loop);
-
- if (slave != NULL) {
- g_object_unref (slave);
- }
-
- if (signal_handler != NULL) {
- g_object_unref (signal_handler);
- }
-
- if (main_loop != NULL) {
- g_main_loop_unref (main_loop);
- }
-
- out:
-
- g_debug ("Slave finished");
-
- return gdm_return_code;
-}