Accepting request 84752 from GNOME:Factory

Fix gdm not working

OBS-URL: https://build.opensuse.org/request/show/84752
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gdm?expand=0&rev=126
This commit is contained in:
Sascha Peilicke 2011-09-26 08:30:53 +00:00 committed by Git OBS Bridge
commit 65560516ce
8 changed files with 734 additions and 537 deletions

View File

@ -16,7 +16,6 @@ gdm_vars() {
DISPLAYMANAGER=/usr/sbin/gdm
STARTPROC=gdm_start_proc
return 0 ;;
;;
*) return 1 ;;
esac

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:623bc3cde0af193a989aea697ac44041eca554ff3fab24647be2393bbcc12eb3
size 2373276

3
gdm-3.1.92.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:56c43b8875ecf75aa30e22f849233fa63fee22b759dcfea9098eddd547ad4f7c
size 2363614

View File

@ -1,103 +0,0 @@
From aad28c8bce222e9d5461c3b35dbf5f9eb4a86e82 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 13 Sep 2011 14:26:59 +0000
Subject: daemon: fix autologin
In commit 6849f6f3b8a199bed5427b8d6f1e2dedbe035d6c
the code was changed to stop the greeter asynchronously
and start the session following its completion.
Autologin doesn't have a greeter though, so this broke
it.
This commit fixes autologin.
https://bugzilla.gnome.org/show_bug.cgi?id=658899
---
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 2f38bf6..ab69194 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -108,6 +108,7 @@ G_DEFINE_TYPE (GdmSimpleSlave, gdm_simple_slave, GDM_TYPE_SLAVE)
static void create_new_session (GdmSimpleSlave *slave);
static void destroy_session (GdmSimpleSlave *slave);
static void start_greeter (GdmSimpleSlave *slave);
+static void start_session (GdmSimpleSlave *slave);
static void queue_start_session (GdmSimpleSlave *slave,
const char *service_name);
@@ -449,6 +450,29 @@ stop_greeter (GdmSimpleSlave *slave)
gdm_welcome_session_stop (GDM_WELCOME_SESSION (slave->priv->greeter));
}
+static void
+start_session (GdmSimpleSlave *slave)
+{
+ char *auth_file;
+ auth_file = NULL;
+ add_user_authorization (slave, &auth_file);
+
+ g_assert (auth_file != NULL);
+
+ g_object_set (slave->priv->session,
+ "user-x11-authority-file", auth_file,
+ NULL);
+
+ g_free (auth_file);
+
+ gdm_session_start_session (GDM_SESSION (slave->priv->session),
+ slave->priv->start_session_service_name);
+
+ slave->priv->start_session_id = 0;
+ g_free (slave->priv->start_session_service_name);
+ slave->priv->start_session_service_name = NULL;
+}
+
static gboolean
start_session_timeout (GdmSimpleSlave *slave)
{
@@ -472,8 +496,13 @@ start_session_timeout (GdmSimpleSlave *slave)
g_free (slave->priv->start_session_service_name);
slave->priv->start_session_service_name = NULL;
} else {
- /* Session actually gets started from on_greeter_session_stopped */
- stop_greeter (slave);
+ if (slave->priv->greeter == NULL) {
+ /* auto login */
+ start_session (slave);
+ } else {
+ /* Session actually gets started from on_greeter_session_stop */
+ stop_greeter (slave);
+ }
}
return FALSE;
@@ -972,25 +1001,7 @@ on_greeter_session_stop (GdmGreeterSession *greeter,
gdm_slave_stopped (GDM_SLAVE (slave));
} else {
gdm_greeter_server_stop (slave->priv->greeter_server);
-
- char *auth_file;
- auth_file = NULL;
- add_user_authorization (slave, &auth_file);
-
- g_assert (auth_file != NULL);
-
- g_object_set (slave->priv->session,
- "user-x11-authority-file", auth_file,
- NULL);
-
- g_free (auth_file);
-
- gdm_session_start_session (GDM_SESSION (slave->priv->session),
- slave->priv->start_session_service_name);
-
- slave->priv->start_session_id = 0;
- g_free (slave->priv->start_session_service_name);
- slave->priv->start_session_service_name = NULL;
+ start_session (slave);
}
g_object_unref (slave->priv->greeter);
--
cgit v0.9.0.2

View File

@ -1,4 +1,4 @@
From 9768d9e2783de7e836421d9645070bb1917800dd Mon Sep 17 00:00:00 2001
From b865a1ec2965d26dea2db9de085d4d09c3830434 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 27 Nov 2009 18:27:53 -0500
Subject: [PATCH 1/2] Save root window to pixmap at _XROOTPMAP_ID
@ -6,109 +6,19 @@ Subject: [PATCH 1/2] Save root window to pixmap at _XROOTPMAP_ID
This combined with starting the X server with -nr
will give us a nice fade transition when g-s-d starts
---
daemon/gdm-simple-slave.c | 9 +++++
daemon/gdm-simple-slave.c | 8 +++++
daemon/gdm-slave.c | 72 +++++++++++++++++++++++++++++++++++++++++++++
daemon/gdm-slave.h | 1 +
3 files changed, 82 insertions(+), 0 deletions(-)
3 files changed, 81 insertions(+), 0 deletions(-)
Index: gdm-2.91.94/daemon/gdm-simple-slave.c
===================================================================
--- gdm-2.91.94.orig/daemon/gdm-simple-slave.c
+++ gdm-2.91.94/daemon/gdm-simple-slave.c
@@ -88,6 +88,7 @@ struct GdmSimpleSlavePrivate
guint start_session_when_ready : 1;
guint waiting_to_start_session : 1;
+ guint plymouth_is_running : 1;
#ifdef HAVE_LOGINDEVPERM
gboolean use_logindevperm;
#endif
@@ -95,6 +96,7 @@ struct GdmSimpleSlavePrivate
enum {
PROP_0,
+ FORCE_ACTIVE_VT
};
static void gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass);
@@ -1098,6 +1100,72 @@ on_start_session_later (GdmGreeterServer
slave->priv->start_session_when_ready = FALSE;
}
+static gboolean
+plymouth_is_running (void)
+{
+ int status;
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth --ping",
+ NULL, NULL, &status, &error);
+ if (! res) {
+ g_debug ("Could not ping plymouth: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return WIFEXITED (status) && WEXITSTATUS (status) == 0;
+}
+
+static void
+plymouth_prepare_for_transition (GdmSimpleSlave *slave)
+{
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth deactivate",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not deactivate plymouth: %s", error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+plymouth_quit_with_transition (GdmSimpleSlave *slave)
+{
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth quit --retain-splash",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not quit plymouth: %s", error->message);
+ g_error_free (error);
+ }
+ slave->priv->plymouth_is_running = FALSE;
+}
+
+static void
+plymouth_quit_without_transition (GdmSimpleSlave *slave)
+{
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth quit",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not quit plymouth: %s", error->message);
+ g_error_free (error);
+ }
+ slave->priv->plymouth_is_running = FALSE;
+}
+
static void
setup_server (GdmSimpleSlave *slave)
{
@@ -1106,6 +1174,20 @@ setup_server (GdmSimpleSlave *slave)
/* Set the busy cursor */
gdm_slave_set_busy_cursor (GDM_SLAVE (slave));
+
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index b9165fd..c091bdd 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -1212,6 +1212,14 @@ setup_server (GdmSimpleSlave *slave)
/* Set the initial keyboard layout to something reasonable */
gdm_slave_set_initial_keyboard_layout (GDM_SLAVE (slave));
+
+ /* The root window has a background that may be useful
+ * to cross fade or transition from when setting the
@ -117,99 +27,13 @@ Index: gdm-2.91.94/daemon/gdm-simple-slave.c
+ * so gnome-settings-daemon can get at it.
+ */
+ gdm_slave_save_root_windows (GDM_SLAVE (slave));
+
+ /* Plymouth is waiting for the go-ahead to exit */
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_with_transition (slave);
+ }
}
static void
@@ -1305,6 +1387,10 @@ on_server_exited (GdmServer *server
g_debug ("GdmSimpleSlave: server exited with code %d\n", exit_code);
gdm_slave_stopped (GDM_SLAVE (slave));
+
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_without_transition (slave);
+ }
}
static void
@@ -1317,6 +1403,10 @@ on_server_died (GdmServer *server,
g_strsignal (signal_number));
gdm_slave_stopped (GDM_SLAVE (slave));
+
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_without_transition (slave);
+ }
}
static gboolean
@@ -1325,11 +1415,13 @@ gdm_simple_slave_run (GdmSimpleSlave *sl
char *display_name;
char *auth_file;
gboolean display_is_local;
+ gboolean force_active_vt;
g_object_get (slave,
"display-is-local", &display_is_local,
"display-name", &display_name,
"display-x11-authority-file", &auth_file,
+ "force-active-vt", &force_active_vt,
NULL);
/* if this is local display start a server if one doesn't
@@ -1361,7 +1453,17 @@ gdm_simple_slave_run (GdmSimpleSlave *sl
G_CALLBACK (on_server_ready),
slave);
- res = gdm_server_start (slave->priv->server);
+ slave->priv->plymouth_is_running = plymouth_is_running ();
+
+ if (slave->priv->plymouth_is_running) {
+ plymouth_prepare_for_transition (slave);
+ res = gdm_server_start_on_active_vt (slave->priv->server);
+ } else {
+ if (force_active_vt)
+ res = gdm_server_start_on_active_vt (slave->priv->server);
+ else
+ res = gdm_server_start (slave->priv->server);
+ }
if (! res) {
g_warning (_("Could not start the X "
"server (your graphical environment) "
@@ -1371,6 +1473,9 @@ gdm_simple_slave_run (GdmSimpleSlave *sl
"In the meantime this display will be "
"disabled. Please restart GDM when "
"the problem is corrected."));
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_without_transition (slave);
+ }
exit (1);
}
@@ -1527,12 +1632,14 @@ gdm_simple_slave_finalize (GObject *obje
}
GdmSlave *
-gdm_simple_slave_new (const char *id)
+gdm_simple_slave_new (const char *id,
+ gboolean force_active_vt)
{
GObject *object;
object = g_object_new (GDM_TYPE_SIMPLE_SLAVE,
"display-id", id,
+ "force-active-vt", force_active_vt,
NULL);
return GDM_SLAVE (object);
Index: gdm-2.91.94/daemon/gdm-slave.c
===================================================================
--- gdm-2.91.94.orig/daemon/gdm-slave.c
+++ gdm-2.91.94/daemon/gdm-slave.c
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
index 787ef89..09df6de 100644
--- a/daemon/gdm-slave.c
+++ b/daemon/gdm-slave.c
@@ -43,6 +43,7 @@
#include <dbus/dbus-glib-lowlevel.h>
@ -218,23 +42,7 @@ Index: gdm-2.91.94/daemon/gdm-slave.c
#include <X11/cursorfont.h> /* for watch cursor */
#include <X11/extensions/Xrandr.h>
#include <X11/Xatom.h>
@@ -87,6 +88,7 @@ struct GdmSlavePrivate
char *display_hostname;
gboolean display_is_local;
gboolean display_is_parented;
+ gboolean force_active_vt;
char *display_seat_id;
char *display_x11_authority_file;
char *parent_display_name;
@@ -106,6 +108,7 @@ enum {
PROP_DISPLAY_NUMBER,
PROP_DISPLAY_HOSTNAME,
PROP_DISPLAY_IS_LOCAL,
+ PROP_FORCE_ACTIVE_VT,
PROP_DISPLAY_SEAT_ID,
PROP_DISPLAY_X11_AUTHORITY_FILE
};
@@ -434,6 +437,77 @@ gdm_slave_set_initial_cursor_position (G
@@ -483,6 +484,77 @@ gdm_slave_set_initial_cursor_position (GdmSlave *slave)
}
}
@ -312,60 +120,11 @@ Index: gdm-2.91.94/daemon/gdm-slave.c
void
gdm_slave_set_busy_cursor (GdmSlave *slave)
{
@@ -1531,6 +1605,13 @@ _gdm_slave_set_display_is_local (GdmSlav
}
static void
+_gdm_slave_set_force_active_vt (GdmSlave *slave,
+ gboolean force_active_vt)
+{
+ slave->priv->force_active_vt = force_active_vt;
+}
+
+static void
gdm_slave_set_property (GObject *object,
guint prop_id,
const GValue *value,
@@ -1562,6 +1643,9 @@ gdm_slave_set_property (GObject *ob
case PROP_DISPLAY_IS_LOCAL:
_gdm_slave_set_display_is_local (self, g_value_get_boolean (value));
break;
+ case PROP_FORCE_ACTIVE_VT:
+ _gdm_slave_set_force_active_vt (self, g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1600,6 +1684,9 @@ gdm_slave_get_property (GObject *obje
case PROP_DISPLAY_IS_LOCAL:
g_value_set_boolean (value, self->priv->display_is_local);
break;
+ case PROP_FORCE_ACTIVE_VT:
+ g_value_set_boolean (value, self->priv->force_active_vt);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1725,6 +1812,14 @@ gdm_slave_class_init (GdmSlaveClass *kla
TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class,
+ PROP_FORCE_ACTIVE_VT,
+ g_param_spec_boolean ("force-active-vt",
+ "Force Active VT",
+ "Force display to active VT",
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
signals [STOPPED] =
g_signal_new ("stopped",
G_TYPE_FROM_CLASS (object_class),
Index: gdm-2.91.94/daemon/gdm-slave.h
===================================================================
--- gdm-2.91.94.orig/daemon/gdm-slave.h
+++ gdm-2.91.94/daemon/gdm-slave.h
@@ -77,6 +77,7 @@ gboolean gdm_slave_connect_to
diff --git a/daemon/gdm-slave.h b/daemon/gdm-slave.h
index 7af20ed..aaaa8f2 100644
--- a/daemon/gdm-slave.h
+++ b/daemon/gdm-slave.h
@@ -78,6 +78,7 @@ void gdm_slave_set_initial_keyboard_layout (GdmSlave *slave);
void gdm_slave_set_initial_cursor_position (GdmSlave *slave);
void gdm_slave_set_busy_cursor (GdmSlave *slave);
@ -373,10 +132,159 @@ Index: gdm-2.91.94/daemon/gdm-slave.h
gboolean gdm_slave_run_script (GdmSlave *slave,
const char *dir,
const char *username);
Index: gdm-2.91.94/daemon/gdm-server.c
===================================================================
--- gdm-2.91.94.orig/daemon/gdm-server.c
+++ gdm-2.91.94/daemon/gdm-server.c
--
1.7.6.2
From 70dae28439a2ce54441fa24b7dca4a2933f9a348 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 27 Nov 2009 18:52:54 -0500
Subject: [PATCH 2/2] Enable smooth transition between plymouth and X
This commit checks if plymouth is running, and if so,
turns on the smooth transition between plymouth and X.
---
configure.ac | 17 +++++++
daemon/Makefile.am | 1 +
daemon/gdm-display.c | 30 +++++++++++-
daemon/gdm-server.c | 56 +++++++++++++++++++++++
daemon/gdm-server.h | 1 +
daemon/gdm-simple-slave.c | 102 ++++++++++++++++++++++++++++++++++++++++++-
daemon/gdm-simple-slave.h | 3 +-
daemon/gdm-slave.c | 23 ++++++++++
daemon/gdm-static-display.c | 17 +++++++
daemon/simple-slave-main.c | 4 +-
data/Makefile.am | 8 +++
11 files changed, 255 insertions(+), 7 deletions(-)
diff --git a/configure.ac b/configure.ac
index 10f6d60..bae6186 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1311,6 +1311,23 @@ GDM_SIMPLE_GREETER_EXTENSIONS_DATA_DIR=${datadir}/gdm/simple-greeter/extensions
AC_SUBST(GDM_SIMPLE_GREETER_EXTENSIONS_DATA_DIR)
dnl ---------------------------------------------------------------------------
+dnl - Directory to spool events from other processes
+dnl ---------------------------------------------------------------------------
+
+AC_ARG_WITH(spool-dir,
+ AS_HELP_STRING([--with-spool-dir=<dir>],
+ [spool directory]))
+
+if ! test -z "$with_spool_dir"; then
+ GDM_SPOOL_DIR=$with_spool_dir
+else
+ GDM_SPOOL_DIR=${localstatedir}/spool/gdm
+fi
+
+AC_SUBST(GDM_SPOOL_DIR)
+
+
+dnl ---------------------------------------------------------------------------
dnl - Finish
dnl ---------------------------------------------------------------------------
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 65e82b8..9ec0f4a 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -15,6 +15,7 @@ AM_CPPFLAGS = \
-DLOGDIR=\"$(logdir)\" \
-DSBINDIR=\"$(sbindir)\" \
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
+ -DGDM_SPOOL_DIR=\"$(GDM_SPOOL_DIR)\" \
-DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \
-DGDM_SCREENSHOT_DIR=\"$(GDM_SCREENSHOT_DIR)\" \
-DGDM_CACHE_DIR=\""$(localstatedir)/cache/gdm"\" \
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
index 6ee675a..83ae445 100644
--- a/daemon/gdm-display.c
+++ b/daemon/gdm-display.c
@@ -65,7 +65,9 @@ struct GdmDisplayPrivate
gsize x11_cookie_size;
GdmDisplayAccessFile *access_file;
- gboolean is_local;
+ guint is_local : 1;
+ guint force_active_vt : 1;
+
guint finish_idle_id;
GdmSlaveProxy *slave_proxy;
@@ -84,6 +86,7 @@ enum {
PROP_X11_COOKIE,
PROP_X11_AUTHORITY_FILE,
PROP_IS_LOCAL,
+ PROP_FORCE_ACTIVE_VT,
PROP_SLAVE_COMMAND,
};
@@ -574,9 +577,10 @@ gdm_display_real_prepare (GdmDisplay *display)
gdm_slave_proxy_set_log_path (display->priv->slave_proxy, log_path);
g_free (log_path);
- command = g_strdup_printf ("%s --display-id %s",
+ command = g_strdup_printf ("%s --display-id %s %s",
display->priv->slave_command,
- display->priv->id);
+ display->priv->id,
+ display->priv->force_active_vt? "--force-active-vt" : "");
gdm_slave_proxy_set_command (display->priv->slave_proxy, command);
g_free (command);
@@ -824,6 +828,13 @@ _gdm_display_set_is_local (GdmDisplay *display,
}
static void
+_gdm_display_set_force_active_vt (GdmDisplay *display,
+ gboolean force_active_vt)
+{
+ display->priv->force_active_vt = force_active_vt;
+}
+
+static void
_gdm_display_set_slave_command (GdmDisplay *display,
const char *command)
{
@@ -866,6 +877,9 @@ gdm_display_set_property (GObject *object,
case PROP_IS_LOCAL:
_gdm_display_set_is_local (self, g_value_get_boolean (value));
break;
+ case PROP_FORCE_ACTIVE_VT:
+ _gdm_display_set_force_active_vt (self, g_value_get_boolean (value));
+ break;
case PROP_SLAVE_COMMAND:
_gdm_display_set_slave_command (self, g_value_get_string (value));
break;
@@ -914,6 +928,9 @@ gdm_display_get_property (GObject *object,
case PROP_IS_LOCAL:
g_value_set_boolean (value, self->priv->is_local);
break;
+ case PROP_FORCE_ACTIVE_VT:
+ g_value_set_boolean (value, self->priv->force_active_vt);
+ break;
case PROP_SLAVE_COMMAND:
g_value_set_string (value, self->priv->slave_command);
break;
@@ -1084,6 +1101,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
NULL,
TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_FORCE_ACTIVE_VT,
+ g_param_spec_boolean ("force-active-vt",
+ NULL,
+ NULL,
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class,
PROP_SLAVE_COMMAND,
diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
index 62ffca1..8d270bb 100644
--- a/daemon/gdm-server.c
+++ b/daemon/gdm-server.c
@@ -32,8 +32,11 @@
#include <pwd.h>
#include <grp.h>
@ -434,11 +342,10 @@ Index: gdm-2.91.94/daemon/gdm-server.c
/**
* gdm_server_start:
* @disp: Pointer to a GdmDisplay structure
@@ -690,6 +731,21 @@ gdm_server_start (GdmServer *server)
@@ -691,6 +732,21 @@ gdm_server_start (GdmServer *server)
return res;
}
+
+gboolean
+gdm_server_start_on_active_vt (GdmServer *server)
+{
@ -453,14 +360,15 @@ Index: gdm-2.91.94/daemon/gdm-server.c
+
+ return res;
+}
+
static void
server_died (GdmServer *server)
Index: gdm-2.91.94/daemon/gdm-server.h
===================================================================
--- gdm-2.91.94.orig/daemon/gdm-server.h
+++ gdm-2.91.94/daemon/gdm-server.h
@@ -56,6 +56,7 @@ GType gdm_server_get_type
{
diff --git a/daemon/gdm-server.h b/daemon/gdm-server.h
index 535a69a..bd6c60a 100644
--- a/daemon/gdm-server.h
+++ b/daemon/gdm-server.h
@@ -56,6 +56,7 @@ GType gdm_server_get_type (void);
GdmServer * gdm_server_new (const char *display_id,
const char *auth_file);
gboolean gdm_server_start (GdmServer *server);
@ -468,122 +376,196 @@ Index: gdm-2.91.94/daemon/gdm-server.h
gboolean gdm_server_stop (GdmServer *server);
char * gdm_server_get_display_device (GdmServer *server);
Index: gdm-2.91.94/configure.ac
===================================================================
--- gdm-2.91.94.orig/configure.ac
+++ gdm-2.91.94/configure.ac
@@ -1271,6 +1271,23 @@ AC_SUBST(GDM_SCREENSHOT_DIR)
AC_SUBST(GDM_SIMPLE_GREETER_EXTENSIONS_DATA_DIR)
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index c091bdd..f8dd56f 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -90,6 +90,7 @@ struct GdmSimpleSlavePrivate
dnl ---------------------------------------------------------------------------
+dnl - Directory to spool events from other processes
+dnl ---------------------------------------------------------------------------
+
+AC_ARG_WITH(spool-dir,
+ AS_HELP_STRING([--with-spool-dir=<dir>],
+ [spool directory]))
+
+if ! test -z "$with_spool_dir"; then
+ GDM_SPOOL_DIR=$with_spool_dir
+else
+ GDM_SPOOL_DIR=${localstatedir}/spool/gdm
+fi
+
+AC_SUBST(GDM_SPOOL_DIR)
+
+
+dnl ---------------------------------------------------------------------------
dnl - Finish
dnl ---------------------------------------------------------------------------
guint start_session_when_ready : 1;
guint waiting_to_start_session : 1;
+ guint plymouth_is_running : 1;
#ifdef HAVE_LOGINDEVPERM
gboolean use_logindevperm;
#endif
@@ -97,6 +98,7 @@ struct GdmSimpleSlavePrivate
Index: gdm-2.91.94/daemon/gdm-display.c
===================================================================
--- gdm-2.91.94.orig/daemon/gdm-display.c
+++ gdm-2.91.94/daemon/gdm-display.c
@@ -65,7 +65,9 @@ struct GdmDisplayPrivate
gsize x11_cookie_size;
GdmDisplayAccessFile *access_file;
- gboolean is_local;
+ guint is_local : 1;
+ guint force_active_vt : 1;
+
guint finish_idle_id;
GdmSlaveProxy *slave_proxy;
@@ -84,6 +86,7 @@ enum {
PROP_X11_COOKIE,
PROP_X11_AUTHORITY_FILE,
PROP_IS_LOCAL,
+ PROP_FORCE_ACTIVE_VT,
PROP_SLAVE_COMMAND,
enum {
PROP_0,
+ FORCE_ACTIVE_VT
};
@@ -574,9 +577,10 @@ gdm_display_real_prepare (GdmDisplay *di
gdm_slave_proxy_set_log_path (display->priv->slave_proxy, log_path);
g_free (log_path);
- command = g_strdup_printf ("%s --display-id %s",
+ command = g_strdup_printf ("%s --display-id %s %s",
display->priv->slave_command,
- display->priv->id);
+ display->priv->id,
+ display->priv->force_active_vt? "--force-active-vt" : "");
gdm_slave_proxy_set_command (display->priv->slave_proxy, command);
g_free (command);
@@ -824,6 +828,13 @@ _gdm_display_set_is_local (GdmDisplay
static void gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass);
@@ -1201,6 +1203,72 @@ on_start_session_later (GdmGreeterServer *session,
slave->priv->start_session_when_ready = FALSE;
}
static void
+_gdm_display_set_force_active_vt (GdmDisplay *display,
+ gboolean force_active_vt)
+static gboolean
+plymouth_is_running (void)
+{
+ display->priv->force_active_vt = force_active_vt;
+ int status;
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth --ping",
+ NULL, NULL, &status, &error);
+ if (! res) {
+ g_debug ("Could not ping plymouth: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return WIFEXITED (status) && WEXITSTATUS (status) == 0;
+}
+
+static void
_gdm_display_set_slave_command (GdmDisplay *display,
const char *command)
+plymouth_prepare_for_transition (GdmSimpleSlave *slave)
+{
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth deactivate",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not deactivate plymouth: %s", error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+plymouth_quit_with_transition (GdmSimpleSlave *slave)
+{
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth quit --retain-splash",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not quit plymouth: %s", error->message);
+ g_error_free (error);
+ }
+ slave->priv->plymouth_is_running = FALSE;
+}
+
+static void
+plymouth_quit_without_transition (GdmSimpleSlave *slave)
+{
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth quit",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not quit plymouth: %s", error->message);
+ g_error_free (error);
+ }
+ slave->priv->plymouth_is_running = FALSE;
+}
+
static void
setup_server (GdmSimpleSlave *slave)
{
@@ -866,6 +877,9 @@ gdm_display_set_property (GObject
case PROP_IS_LOCAL:
_gdm_display_set_is_local (self, g_value_get_boolean (value));
break;
+ case PROP_FORCE_ACTIVE_VT:
+ _gdm_display_set_force_active_vt (self, g_value_get_boolean (value));
+ break;
case PROP_SLAVE_COMMAND:
_gdm_display_set_slave_command (self, g_value_get_string (value));
break;
@@ -914,6 +928,9 @@ gdm_display_get_property (GObject
case PROP_IS_LOCAL:
g_value_set_boolean (value, self->priv->is_local);
break;
+ case PROP_FORCE_ACTIVE_VT:
+ g_value_set_boolean (value, self->priv->force_active_vt);
+ break;
case PROP_SLAVE_COMMAND:
g_value_set_string (value, self->priv->slave_command);
break;
@@ -1084,6 +1101,13 @@ gdm_display_class_init (GdmDisplayClass
NULL,
TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_FORCE_ACTIVE_VT,
+ g_param_spec_boolean ("force-active-vt",
+ NULL,
+ NULL,
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
@@ -1220,6 +1288,11 @@ setup_server (GdmSimpleSlave *slave)
* so gnome-settings-daemon can get at it.
*/
gdm_slave_save_root_windows (GDM_SLAVE (slave));
+
+ /* Plymouth is waiting for the go-ahead to exit */
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_with_transition (slave);
+ }
}
g_object_class_install_property (object_class,
PROP_SLAVE_COMMAND,
Index: gdm-2.91.94/daemon/gdm-simple-slave.h
===================================================================
--- gdm-2.91.94.orig/daemon/gdm-simple-slave.h
+++ gdm-2.91.94/daemon/gdm-simple-slave.h
static void
@@ -1423,6 +1496,10 @@ on_server_exited (GdmServer *server,
g_debug ("GdmSimpleSlave: server exited with code %d\n", exit_code);
gdm_slave_stopped (GDM_SLAVE (slave));
+
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_without_transition (slave);
+ }
}
static void
@@ -1435,6 +1512,10 @@ on_server_died (GdmServer *server,
g_strsignal (signal_number));
gdm_slave_stopped (GDM_SLAVE (slave));
+
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_without_transition (slave);
+ }
}
static gboolean
@@ -1443,11 +1524,13 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
char *display_name;
char *auth_file;
gboolean display_is_local;
+ gboolean force_active_vt;
g_object_get (slave,
"display-is-local", &display_is_local,
"display-name", &display_name,
"display-x11-authority-file", &auth_file,
+ "force-active-vt", &force_active_vt,
NULL);
/* if this is local display start a server if one doesn't
@@ -1479,7 +1562,17 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
G_CALLBACK (on_server_ready),
slave);
- res = gdm_server_start (slave->priv->server);
+ slave->priv->plymouth_is_running = plymouth_is_running ();
+
+ if (slave->priv->plymouth_is_running) {
+ plymouth_prepare_for_transition (slave);
+ res = gdm_server_start_on_active_vt (slave->priv->server);
+ } else {
+ if (force_active_vt)
+ res = gdm_server_start_on_active_vt (slave->priv->server);
+ else
+ res = gdm_server_start (slave->priv->server);
+ }
if (! res) {
g_warning (_("Could not start the X "
"server (your graphical environment) "
@@ -1489,6 +1582,9 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
"In the meantime this display will be "
"disabled. Please restart GDM when "
"the problem is corrected."));
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_without_transition (slave);
+ }
exit (1);
}
@@ -1645,12 +1741,14 @@ gdm_simple_slave_finalize (GObject *object)
}
GdmSlave *
-gdm_simple_slave_new (const char *id)
+gdm_simple_slave_new (const char *id,
+ gboolean force_active_vt)
{
GObject *object;
object = g_object_new (GDM_TYPE_SIMPLE_SLAVE,
"display-id", id,
+ "force-active-vt", force_active_vt,
NULL);
return GDM_SLAVE (object);
diff --git a/daemon/gdm-simple-slave.h b/daemon/gdm-simple-slave.h
index 1f1aa1d..e9aa624 100644
--- a/daemon/gdm-simple-slave.h
+++ b/daemon/gdm-simple-slave.h
@@ -48,7 +48,8 @@ typedef struct
} GdmSimpleSlaveClass;
@ -594,11 +576,80 @@ Index: gdm-2.91.94/daemon/gdm-simple-slave.h
G_END_DECLS
Index: gdm-2.91.94/daemon/gdm-static-display.c
===================================================================
--- gdm-2.91.94.orig/daemon/gdm-static-display.c
+++ gdm-2.91.94/daemon/gdm-static-display.c
@@ -86,10 +86,27 @@ gdm_static_display_remove_user_authoriza
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
index 09df6de..ce467b2 100644
--- a/daemon/gdm-slave.c
+++ b/daemon/gdm-slave.c
@@ -92,6 +92,7 @@ struct GdmSlavePrivate
char *display_hostname;
gboolean display_is_local;
gboolean display_is_parented;
+ gboolean force_active_vt;
char *display_seat_id;
char *display_x11_authority_file;
char *parent_display_name;
@@ -111,6 +112,7 @@ enum {
PROP_DISPLAY_NUMBER,
PROP_DISPLAY_HOSTNAME,
PROP_DISPLAY_IS_LOCAL,
+ PROP_FORCE_ACTIVE_VT,
PROP_DISPLAY_SEAT_ID,
PROP_DISPLAY_X11_AUTHORITY_FILE
};
@@ -1651,6 +1653,13 @@ _gdm_slave_set_display_is_local (GdmSlave *slave,
}
static void
+_gdm_slave_set_force_active_vt (GdmSlave *slave,
+ gboolean force_active_vt)
+{
+ slave->priv->force_active_vt = force_active_vt;
+}
+
+static void
gdm_slave_set_property (GObject *object,
guint prop_id,
const GValue *value,
@@ -1682,6 +1691,9 @@ gdm_slave_set_property (GObject *object,
case PROP_DISPLAY_IS_LOCAL:
_gdm_slave_set_display_is_local (self, g_value_get_boolean (value));
break;
+ case PROP_FORCE_ACTIVE_VT:
+ _gdm_slave_set_force_active_vt (self, g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1720,6 +1732,9 @@ gdm_slave_get_property (GObject *object,
case PROP_DISPLAY_IS_LOCAL:
g_value_set_boolean (value, self->priv->display_is_local);
break;
+ case PROP_FORCE_ACTIVE_VT:
+ g_value_set_boolean (value, self->priv->force_active_vt);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1845,6 +1860,14 @@ gdm_slave_class_init (GdmSlaveClass *klass)
TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class,
+ PROP_FORCE_ACTIVE_VT,
+ g_param_spec_boolean ("force-active-vt",
+ "Force Active VT",
+ "Force display to active VT",
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
signals [STOPPED] =
g_signal_new ("stopped",
G_TYPE_FROM_CLASS (object_class),
diff --git a/daemon/gdm-static-display.c b/daemon/gdm-static-display.c
index 16953f9..397f07e 100644
--- a/daemon/gdm-static-display.c
+++ b/daemon/gdm-static-display.c
@@ -81,10 +81,27 @@ gdm_static_display_remove_user_authorization (GdmDisplay *display,
}
static gboolean
@ -626,22 +677,10 @@ Index: gdm-2.91.94/daemon/gdm-static-display.c
GDM_DISPLAY_CLASS (gdm_static_display_parent_class)->manage (display);
return TRUE;
Index: gdm-2.91.94/daemon/Makefile.am
===================================================================
--- gdm-2.91.94.orig/daemon/Makefile.am
+++ gdm-2.91.94/daemon/Makefile.am
@@ -15,6 +15,7 @@ AM_CPPFLAGS = \
-DLOGDIR=\"$(logdir)\" \
-DSBINDIR=\"$(sbindir)\" \
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
+ -DGDM_SPOOL_DIR=\"$(GDM_SPOOL_DIR)\" \
-DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \
-DGDM_SCREENSHOT_DIR=\"$(GDM_SCREENSHOT_DIR)\" \
-DGDM_CACHE_DIR=\""$(localstatedir)/cache/gdm"\" \
Index: gdm-2.91.94/daemon/simple-slave-main.c
===================================================================
--- gdm-2.91.94.orig/daemon/simple-slave-main.c
+++ gdm-2.91.94/daemon/simple-slave-main.c
diff --git a/daemon/simple-slave-main.c b/daemon/simple-slave-main.c
index 057492b..afa60a4 100644
--- a/daemon/simple-slave-main.c
+++ b/daemon/simple-slave-main.c
@@ -177,9 +177,11 @@ main (int argc,
DBusGConnection *connection;
GdmSlave *slave;
@ -654,7 +693,7 @@ Index: gdm-2.91.94/daemon/simple-slave-main.c
{ NULL }
};
@@ -248,7 +250,7 @@ main (int argc,
@@ -246,7 +248,7 @@ main (int argc,
gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL);
gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL);
@ -663,10 +702,10 @@ Index: gdm-2.91.94/daemon/simple-slave-main.c
if (slave == NULL) {
goto out;
}
Index: gdm-2.91.94/data/Makefile.am
===================================================================
--- gdm-2.91.94.orig/data/Makefile.am
+++ gdm-2.91.94/data/Makefile.am
diff --git a/data/Makefile.am b/data/Makefile.am
index 3175436..5c11b03 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -12,6 +12,7 @@ predir = $(gdmconfdir)/PreSession
postlogindir = $(gdmconfdir)/PostLogin
workingdir = $(GDM_WORKING_DIR)
@ -675,15 +714,16 @@ Index: gdm-2.91.94/data/Makefile.am
screenshotdir = $(GDM_SCREENSHOT_DIR)
cachedir = $(localstatedir)/cache/gdm
@@ -144,6 +145,7 @@ uninstall-hook:
$(DESTDIR)$(workingdir)/.config/dconf \
@@ -159,6 +160,7 @@ uninstall-hook:
$(DESTDIR)$(workingdir)/.config/dconf \
$(DESTDIR)$(screenshotdir) \
$(DESTDIR)$(xauthdir)
- $(DESTDIR)$(xauthdir)
+ $(DESTDIR)$(xauthdir) \
+ $(DESTDIR)$(spooldir)
-rmdir \
$(DESTDIR)$(sysconfdir)/dconf/db \
@@ -265,6 +267,12 @@ install-data-hook: gdm.conf-custom Xsess
-rmdir \
$(DESTDIR)$(sysconfdir)/dconf/db/gdm.d/locks \
@@ -303,6 +305,12 @@ install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession gconf.pa
chown root:gdm $(DESTDIR)$(cachedir) || : ; \
fi
@ -696,3 +736,6 @@ Index: gdm-2.91.94/data/Makefile.am
$(INSTALL_DATA) $(srcdir)/gconf.path $(DESTDIR)$(workingdir)/.gconf.path
gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --recursive-unset /
gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --load $(srcdir)/session-setup.entries
--
1.7.6.2

227
gdm-unified-auth.patch Normal file
View File

@ -0,0 +1,227 @@
From f91f017071ffa5f5999e6c2e2c0929e290482932 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 19 Sep 2011 22:16:25 +0000
Subject: daemon: add better unified authentication compatibility
The daemon and fallback greeter support --disable-split-authentication,
but the new shiny greeter doesn't. This posed a problem for
distributions that want to use the new shiny greeter (in an albeit
degraded mode) but don't yet have support at the system level for
split authentication.
This commit adds a small amount of goo to make the split authentication
pam service names translate to the unified pam service name and
thus give the shell greeter a level of compatibility with
--disable-split-authentication.
---
diff --git a/configure.ac b/configure.ac
index 6893c26..8d746c8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -234,6 +234,10 @@ AC_ARG_ENABLE(split-authentication,
enable_split_authentication=yes)
AM_CONDITIONAL(ENABLE_SPLIT_AUTHENTICATION, test x$enable_split_authentication = xyes)
+if test x$enable_split_authentication = xyes; then
+ AC_DEFINE(ENABLE_SPLIT_AUTHENTICATION, 1, [Define if split authentication is enabled])
+fi
+
AC_ARG_ENABLE(console-helper,
AS_HELP_STRING([--enable-console-helper],
[Enable PAM console helper @<:@default=auto@:>@]),,
diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c
index 4c40a4e..4803bc3 100644
--- a/daemon/gdm-greeter-server.c
+++ b/daemon/gdm-greeter-server.c
@@ -60,6 +60,8 @@ struct GdmGreeterServerPrivate
DBusServer *server;
char *server_address;
DBusConnection *greeter_connection;
+
+ guint using_legacy_service_name : 1;
};
enum {
@@ -246,11 +248,42 @@ send_dbus_void_signal (GdmGreeterServer *greeter_server,
dbus_message_unref (message);
}
+static const char *
+translate_outgoing_service_name (GdmGreeterServer *greeter_server,
+ const char *service_name)
+{
+#ifndef ENABLE_SPLIT_AUTHENTICATION
+ if (strcmp (service_name, "gdm") == 0 && greeter_server->priv->using_legacy_service_name) {
+ return "gdm-password";
+ }
+#endif
+
+ return service_name;
+}
+
+static const char *
+translate_incoming_service_name (GdmGreeterServer *greeter_server,
+ const char *service_name)
+{
+#ifndef ENABLE_SPLIT_AUTHENTICATION
+ if (strcmp (service_name, "gdm-password") == 0) {
+ g_debug ("GdmGreeterServer: Adjusting pam service from '%s' to 'gdm' for legacy compatibility", service_name);
+ service_name = "gdm";
+ greeter_server->priv->using_legacy_service_name = TRUE;
+ } else if (g_str_has_prefix (service_name, "gdm-") == 0 && strcmp (service_name, "gdm-autologin") != 0) {
+ g_debug ("GdmGreeterServer: Rejecting pam service '%s' for legacy compatibility", service_name);
+ return NULL;
+ }
+#endif
+ return service_name;
+}
+
gboolean
gdm_greeter_server_info_query (GdmGreeterServer *greeter_server,
const char *service_name,
const char *text)
{
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
send_dbus_string_string_signal (greeter_server, "InfoQuery", service_name, text);
return TRUE;
@@ -261,6 +294,7 @@ gdm_greeter_server_secret_info_query (GdmGreeterServer *greeter_server,
const char *service_name,
const char *text)
{
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
send_dbus_string_string_signal (greeter_server, "SecretInfoQuery", service_name, text);
return TRUE;
}
@@ -270,6 +304,7 @@ gdm_greeter_server_info (GdmGreeterServer *greeter_server,
const char *service_name,
const char *text)
{
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
send_dbus_string_string_signal (greeter_server, "Info", service_name, text);
return TRUE;
}
@@ -279,6 +314,7 @@ gdm_greeter_server_problem (GdmGreeterServer *greeter_server,
const char *service_name,
const char *text)
{
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
send_dbus_string_string_signal (greeter_server, "Problem", service_name, text);
return TRUE;
}
@@ -287,6 +323,7 @@ gboolean
gdm_greeter_server_authentication_failed (GdmGreeterServer *greeter_server,
const char *service_name)
{
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
send_dbus_string_signal (greeter_server, "AuthenticationFailed", service_name);
return TRUE;
}
@@ -295,6 +332,7 @@ gboolean
gdm_greeter_server_service_unavailable (GdmGreeterServer *greeter_server,
const char *service_name)
{
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
send_dbus_string_signal (greeter_server, "ServiceUnavailable", service_name);
return TRUE;
}
@@ -310,6 +348,7 @@ gboolean
gdm_greeter_server_ready (GdmGreeterServer *greeter_server,
const char *service_name)
{
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
send_dbus_string_signal (greeter_server, "Ready", service_name);
return TRUE;
}
@@ -318,6 +357,7 @@ gboolean
gdm_greeter_server_conversation_stopped (GdmGreeterServer *greeter_server,
const char *service_name)
{
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
send_dbus_string_signal (greeter_server, "ConversationStopped", service_name);
return TRUE;
}
@@ -355,6 +395,7 @@ void
gdm_greeter_server_session_opened (GdmGreeterServer *greeter_server,
const char *service_name)
{
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
send_dbus_string_signal (greeter_server, "SessionOpened", service_name);
}
@@ -394,6 +435,7 @@ handle_start_conversation (GdmGreeterServer *greeter_server,
DBusMessage *reply;
DBusError error;
const char *service_name;
+ const char *translated_service_name;
dbus_error_init (&error);
if (! dbus_message_get_args (message, &error,
@@ -409,7 +451,14 @@ handle_start_conversation (GdmGreeterServer *greeter_server,
dbus_connection_send (connection, reply, NULL);
dbus_message_unref (reply);
- g_signal_emit (greeter_server, signals [START_CONVERSATION], 0, service_name);
+ translated_service_name = translate_incoming_service_name (greeter_server, service_name);
+
+ if (translated_service_name == NULL) {
+ gdm_greeter_server_service_unavailable (greeter_server, service_name);
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+
+ g_signal_emit (greeter_server, signals [START_CONVERSATION], 0, translated_service_name);
return DBUS_HANDLER_RESULT_HANDLED;
}
@@ -437,6 +486,7 @@ handle_begin_verification (GdmGreeterServer *greeter_server,
dbus_connection_send (connection, reply, NULL);
dbus_message_unref (reply);
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
g_signal_emit (greeter_server, signals [BEGIN_VERIFICATION], 0, service_name);
return DBUS_HANDLER_RESULT_HANDLED;
@@ -494,6 +544,7 @@ handle_begin_verification_for_user (GdmGreeterServer *greeter_server,
dbus_connection_send (connection, reply, NULL);
dbus_message_unref (reply);
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
g_signal_emit (greeter_server, signals [BEGIN_VERIFICATION_FOR_USER], 0, service_name, text);
return DBUS_HANDLER_RESULT_HANDLED;
@@ -524,6 +575,7 @@ handle_answer_query (GdmGreeterServer *greeter_server,
dbus_connection_send (connection, reply, NULL);
dbus_message_unref (reply);
+ service_name = translate_outgoing_service_name (greeter_server, service_name);
g_signal_emit (greeter_server, signals [QUERY_ANSWER], 0, service_name, text);
return DBUS_HANDLER_RESULT_HANDLED;
@@ -711,6 +763,7 @@ handle_start_session_when_ready (GdmGreeterServer *greeter_server,
dbus_connection_send (connection, reply, NULL);
dbus_message_unref (reply);
+ service_name = (char *) translate_outgoing_service_name (greeter_server, service_name);
if (should_start_session) {
g_signal_emit (greeter_server, signals [START_SESSION_WHEN_READY], 0, service_name);
} else {
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 38e7a84..b9165fd 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -1034,10 +1034,11 @@ on_greeter_start_conversation (GdmGreeterServer *greeter_server,
const char *service_name,
GdmSimpleSlave *slave)
{
- g_debug ("GdmSimpleSlave: starting conversation with '%s' pam service'", service_name);
if (slave->priv->greeter_reset_id > 0) {
return;
}
+
+ g_debug ("GdmSimpleSlave: starting conversation with '%s' pam service'", service_name);
gdm_session_start_conversation (GDM_SESSION (slave->priv->session),
service_name);
}
--
cgit v0.9.0.2

View File

@ -1,3 +1,40 @@
-------------------------------------------------------------------
Sat Sep 24 14:56:10 UTC 2011 - vuntz@opensuse.org
- Fix syntax in X11-displaymanager-gdm: this syntax error was
causing the use of xdm instead of gdm.
-------------------------------------------------------------------
Fri Sep 23 06:44:23 UTC 2011 - dimstar@opensuse.org
- Add gdm-unified-auth.patch: Revert 'better unified authentication
compatibility' that was committed upstream as it breaks GDM. See
http://lists.opensuse.org/opensuse-gnome/2011-09/msg00043.html
-------------------------------------------------------------------
Wed Sep 21 11:38:19 UTC 2011 - vuntz@opensuse.org
- Update to version 3.1.92:
+ Leak fixes
+ Fix autologin
+ Activate keyboard layout explicitly at startup
+ Move extensions settings to common code
+ Add setting for login screen logo to common code
+ Create empty gdm.d dconf subdir tree at install time
+ Updated translations.
- Drop gdm-fix-autologin.patch: fixed upstream.
- Update gdm-plymouth.patch: take the latest version from the
Fedora package.
- Move calls to %glib2_gsettings_schema_post(un) from %post/%postun
of the simple-greeter-extensions subpackage to the scriptlets of
the main subpackage, following the move of the file.
-------------------------------------------------------------------
Tue Sep 20 15:54:37 UTC 2011 - eich@suse.com
- Install /etc/init.d/xdm integration helper in %{_libexecdir}, not
%{_libdir}.
-------------------------------------------------------------------
Fri Sep 16 13:29:15 UTC 2011 - vuntz@opensuse.org

View File

@ -22,7 +22,7 @@
Name: gdm
License: GPLv2+
Group: System/GUI/GNOME
Version: 3.1.91
Version: 3.1.92
Release: 1
Summary: The GNOME Display Manager
Url: http://projects.gnome.org/gdm/
@ -67,10 +67,10 @@ Patch34: gdm-default-wm.patch
Patch35: gdm-xauthlocalhostname.patch
# PATCH-FIX-UPSTREAM gdm-look-at-runlevel.patch bnc540482 bgo599180 vuntz@opensuse.org -- Look at the current runlevel before managing the display again, so we don't do this when shutting down or rebooting
Patch40: gdm-look-at-runlevel.patch
# PATCH-FIX-UPSTREAM gdm-fix-autologin.patch vuntz@opensuse.org -- Fix autologin, taken from git
Patch41: gdm-fix-autologin.patch
# PATCH-FIX-OPENSUSE gdm-selinux.patch -- Small changes to make it compile fine with SELinux
Patch60: gdm-selinux.patch
# PATCH-FIX-OPENSUSE gdm-unified-auth.patch dimstar@opensuse.org -- Revert "better unified authentication compatibility"
Patch61: gdm-unified-auth.patch
BuildRequires: check-devel
BuildRequires: dbus-1-glib-devel
# needed for directory ownership
@ -236,8 +236,8 @@ translation-update-upstream
%patch34 -p1
%patch35 -p0
%patch40 -p1
%patch41 -p1
%patch60
%patch61 -p1 -R
#gnome-patch-translation-update
%build
@ -296,7 +296,7 @@ mv $RPM_BUILD_ROOT%{_sysconfdir}/gdm/PostLogin/Default.sample $RPM_BUILD_ROOT%{_
mv $RPM_BUILD_ROOT%{_bindir}/gdmflexiserver $RPM_BUILD_ROOT%{_libexecdir}/gdm/gdmflexiserver
install -m 755 %{SOURCE4} $RPM_BUILD_ROOT%{_bindir}/gdmflexiserver
# Install /etc/xinit.d/xdm integration script
install -D -m 644 %{SOURCE5} %{buildroot}%{_libdir}/X11/displaymanagers/gdm
install -D -m 644 %{SOURCE5} %{buildroot}%{_libexecdir}/X11/displaymanagers/gdm
# Install other files
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/gdm
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/run/gdm
@ -336,6 +336,7 @@ if test -f /sbin/conf.d/SuSEconfig.gdm; then
fi
%post
%glib2_gsettings_schema_post
%icon_theme_cache_post
%preun -f %{name}.schemas_preun
@ -344,6 +345,7 @@ fi
%postun
%insserv_cleanup
%glib2_gsettings_schema_postun
%icon_theme_cache_postun
%post -n libgdmgreeter1 -p /sbin/ldconfig
@ -354,15 +356,6 @@ fi
%postun -n libgdmsimplegreeter1 -p /sbin/ldconfig
%if %{enable_split_authentication}
%post simple-greeter-extensions
%glib2_gsettings_schema_post
%postun simple-greeter-extensions
%glib2_gsettings_schema_postun
%endif
%files -f %{name}.schemas_list
%defattr(-,root,root)
%doc AUTHORS COPYING ChangeLog NEWS README
@ -379,6 +372,7 @@ fi
%{_bindir}/gdm
%{_bindir}/gdm-screenshot
%{_datadir}/gdm/
%{_datadir}/glib-2.0/schemas/org.gnome.login-screen.gschema.xml
%{_datadir}/gnome-session/sessions/gdm-fallback.session
%{_datadir}/gnome-session/sessions/gdm-shell.session
%{_datadir}/icons/*/*/*/*.*
@ -402,11 +396,13 @@ fi
%config /etc/pam.d/gdm-smartcart
%endif
%config %{_sysconfdir}/dbus-1/system.d/gdm.conf
%dir %config %{_sysconfdir}/dconf/db/gdm.d
%dir %config %{_sysconfdir}/dconf/db/gdm.d/locks
%{_sysconfdir}/dconf/db/gdm
%{_sysconfdir}/dconf/profile/gdm
# /etc/xinit.d/xdm integration
%dir %{_libdir}/X11/displaymanagers
%{_libdir}/X11/displaymanagers/gdm
%dir %{_libexecdir}/X11/displaymanagers
%{_libexecdir}/X11/displaymanagers/gdm
# Exclude simple-greeter extensions
%exclude %{_datadir}/gdm/simple-greeter/extensions
@ -439,11 +435,9 @@ fi
# fingerprint
%{_datadir}/gdm/simple-greeter/extensions/fingerprint/
%{_libdir}/gdm/simple-greeter/extensions/libfingerprint.so
%{_datadir}/glib-2.0/schemas/org.gnome.display-manager.extensions.fingerprint.gschema.xml
# smartcard
%{_datadir}/gdm/simple-greeter/extensions/smartcard/
%{_libdir}/gdm/simple-greeter/extensions/libsmartcard.so
%{_datadir}/glib-2.0/schemas/org.gnome.display-manager.extensions.smartcard.gschema.xml
%endif
%files devel