summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
-}