Update to 2.91.4

This commit is contained in:
Ray Strode 2010-12-17 18:58:05 -05:00
parent 001fdf44b0
commit 3edb45eede
6 changed files with 314 additions and 792 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
gdm-2.30.2.tar.bz2
/gdm-2.31.90.tar.bz2
/gdm-2.32.0.tar.bz2
/gdm-2.91.4.tar.bz2

View File

@ -1,432 +0,0 @@
diff -up gdm-2.29.1/configure.ac.force-active-vt gdm-2.29.1/configure.ac
--- gdm-2.29.1/configure.ac.force-active-vt 2009-11-30 17:23:11.000000000 -0500
+++ gdm-2.29.1/configure.ac 2009-12-02 23:31:13.064009409 -0500
@@ -1254,6 +1254,23 @@ AC_SUBST(GDM_SCREENSHOT_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 -up gdm-2.29.1/daemon/gdm-display.c.force-active-vt gdm-2.29.1/daemon/gdm-display.c
--- gdm-2.29.1/daemon/gdm-display.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500
+++ gdm-2.29.1/daemon/gdm-display.c 2009-12-02 23:31:13.065009323 -0500
@@ -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 *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_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
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));
g_object_class_install_property (object_class,
PROP_SLAVE_COMMAND,
diff -up gdm-2.29.1/daemon/gdm-server.c.force-active-vt gdm-2.29.1/daemon/gdm-server.c
--- gdm-2.29.1/daemon/gdm-server.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500
+++ gdm-2.29.1/daemon/gdm-server.c 2009-12-02 23:31:13.066009518 -0500
@@ -34,6 +34,8 @@
#include <signal.h>
#include <sys/resource.h>
+#include <linux/vt.h>
+
#include <glib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
@@ -663,6 +665,44 @@ gdm_server_spawn (GdmServer *server,
return ret;
}
+static int
+get_active_vt (void)
+{
+ int console_fd;
+ struct vt_stat console_state = { 0 };
+
+ console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY);
+
+ if (console_fd < 0) {
+ goto out;
+ }
+
+ if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) {
+ goto out;
+ }
+
+out:
+ if (console_fd >= 0) {
+ close (console_fd);
+ }
+
+ return console_state.v_active;
+}
+
+static char *
+get_active_vt_as_string (void)
+{
+ int vt;
+
+ vt = get_active_vt ();
+
+ if (vt <= 0) {
+ return NULL;
+ }
+
+ return g_strdup_printf ("vt%d", vt);
+}
+
/**
* gdm_server_start:
* @disp: Pointer to a GdmDisplay structure
@@ -681,6 +721,21 @@ gdm_server_start (GdmServer *server)
return res;
}
+gboolean
+gdm_server_start_on_active_vt (GdmServer *server)
+{
+ gboolean res;
+ char *vt;
+
+ g_free (server->priv->command);
+ server->priv->command = g_strdup (X_SERVER " -nr -verbose");
+ vt = get_active_vt_as_string ();
+ res = gdm_server_spawn (server, vt);
+ g_free (vt);
+
+ return res;
+}
+
static void
server_died (GdmServer *server)
{
diff -up gdm-2.29.1/daemon/gdm-server.h.force-active-vt gdm-2.29.1/daemon/gdm-server.h
--- gdm-2.29.1/daemon/gdm-server.h.force-active-vt 2009-11-16 17:37:43.000000000 -0500
+++ gdm-2.29.1/daemon/gdm-server.h 2009-12-02 23:31:13.066009518 -0500
@@ -56,6 +56,7 @@ GType gdm_server_get_type
GdmServer * gdm_server_new (const char *display_id,
const char *auth_file);
gboolean gdm_server_start (GdmServer *server);
+gboolean gdm_server_start_on_active_vt (GdmServer *server);
gboolean gdm_server_stop (GdmServer *server);
char * gdm_server_get_display_device (GdmServer *server);
diff -up gdm-2.29.1/daemon/gdm-simple-slave.c.force-active-vt gdm-2.29.1/daemon/gdm-simple-slave.c
--- gdm-2.29.1/daemon/gdm-simple-slave.c.force-active-vt 2009-11-24 02:26:07.000000000 -0500
+++ gdm-2.29.1/daemon/gdm-simple-slave.c 2009-12-02 23:31:13.067013552 -0500
@@ -88,6 +88,7 @@ struct GdmSimpleSlavePrivate
enum {
PROP_0,
+ FORCE_ACTIVE_VT
};
static void gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass);
@@ -1075,11 +1076,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
@@ -1111,7 +1114,10 @@ gdm_simple_slave_run (GdmSimpleSlave *sl
G_CALLBACK (on_server_ready),
slave);
- res = gdm_server_start (slave->priv->server);
+ 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) "
@@ -1259,12 +1265,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);
diff -up gdm-2.29.1/daemon/gdm-simple-slave.h.force-active-vt gdm-2.29.1/daemon/gdm-simple-slave.h
--- gdm-2.29.1/daemon/gdm-simple-slave.h.force-active-vt 2009-11-16 17:37:43.000000000 -0500
+++ gdm-2.29.1/daemon/gdm-simple-slave.h 2009-12-02 23:31:13.067013552 -0500
@@ -48,7 +48,8 @@ typedef struct
} GdmSimpleSlaveClass;
GType gdm_simple_slave_get_type (void);
-GdmSlave * gdm_simple_slave_new (const char *id);
+GdmSlave * gdm_simple_slave_new (const char *id,
+ gboolean force_active_vt);
G_END_DECLS
diff -up gdm-2.29.1/daemon/gdm-slave.c.force-active-vt gdm-2.29.1/daemon/gdm-slave.c
--- gdm-2.29.1/daemon/gdm-slave.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500
+++ gdm-2.29.1/daemon/gdm-slave.c 2009-12-02 23:31:13.068018007 -0500
@@ -83,6 +83,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;
@@ -101,6 +102,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
};
@@ -1332,6 +1334,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,
@@ -1363,6 +1372,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;
@@ -1401,6 +1413,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;
@@ -1526,6 +1541,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),
diff -up gdm-2.29.1/daemon/gdm-static-display.c.force-active-vt gdm-2.29.1/daemon/gdm-static-display.c
--- gdm-2.29.1/daemon/gdm-static-display.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500
+++ gdm-2.29.1/daemon/gdm-static-display.c 2009-12-02 23:31:13.068018007 -0500
@@ -86,10 +86,27 @@ gdm_static_display_remove_user_authoriza
}
static gboolean
+triggered_to_force_display_on_active_vt (void)
+{
+ gboolean should_force_display_on_active_vt;
+
+ should_force_display_on_active_vt = g_file_test (GDM_SPOOL_DIR "/force-display-on-active-vt",
+ G_FILE_TEST_EXISTS);
+ g_unlink (GDM_SPOOL_DIR "/force-display-on-active-vt");
+
+ return should_force_display_on_active_vt;
+}
+
+static gboolean
gdm_static_display_manage (GdmDisplay *display)
{
g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
+ if (triggered_to_force_display_on_active_vt ()) {
+ g_object_set (display, "force-active-vt", TRUE, NULL);
+ } else {
+ g_object_set (display, "force-active-vt", FALSE, NULL);
+ }
GDM_DISPLAY_CLASS (gdm_static_display_parent_class)->manage (display);
return TRUE;
diff -up gdm-2.29.1/daemon/Makefile.am.force-active-vt gdm-2.29.1/daemon/Makefile.am
--- gdm-2.29.1/daemon/Makefile.am.force-active-vt 2009-11-16 17:37:43.000000000 -0500
+++ gdm-2.29.1/daemon/Makefile.am 2009-12-02 23:31:13.069017990 -0500
@@ -14,6 +14,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 -up gdm-2.29.1/daemon/simple-slave-main.c.force-active-vt gdm-2.29.1/daemon/simple-slave-main.c
--- gdm-2.29.1/daemon/simple-slave-main.c.force-active-vt 2009-11-16 17:37:43.000000000 -0500
+++ gdm-2.29.1/daemon/simple-slave-main.c 2009-12-02 23:31:54.674210044 -0500
@@ -178,9 +178,11 @@ main (int argc,
DBusGConnection *connection;
GdmSlave *slave;
static char *display_id = NULL;
+ static gboolean force_active_vt = FALSE;
GdmSignalHandler *signal_handler;
static GOptionEntry entries [] = {
{ "display-id", 0, 0, G_OPTION_ARG_STRING, &display_id, N_("Display ID"), N_("ID") },
+ { "force-active-vt", 0, 0, G_OPTION_ARG_NONE, &force_active_vt, N_("Force X to start on active vt"), NULL },
{ NULL }
};
@@ -248,7 +250,7 @@ main (int argc,
gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL);
gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL);
- slave = gdm_simple_slave_new (display_id);
+ slave = gdm_simple_slave_new (display_id, force_active_vt);
if (slave == NULL) {
goto out;
}
diff -up gdm-2.29.1/data/Makefile.am.force-active-vt gdm-2.29.1/data/Makefile.am
--- gdm-2.29.1/data/Makefile.am.force-active-vt 2009-11-16 19:45:22.000000000 -0500
+++ gdm-2.29.1/data/Makefile.am 2009-12-02 23:31:13.070023842 -0500
@@ -13,6 +13,7 @@ predir = $(gdmconfdir)/PreSession
postlogindir = $(gdmconfdir)/PostLogin
workingdir = $(GDM_WORKING_DIR)
xauthdir = $(GDM_XAUTH_DIR)
+spooldir = $(GDM_SPOOL_DIR)
screenshotdir = $(GDM_SCREENSHOT_DIR)
cachedir = $(localstatedir)/cache/gdm
@@ -125,6 +126,7 @@ uninstall-hook:
$(DESTDIR)$(workingdir)/.gconf.mandatory \
$(DESTDIR)$(screenshotdir) \
$(DESTDIR)$(xauthdir)
+ $(DESTDIR)$(spooldir)
install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession gconf.path
if test '!' -d $(DESTDIR)$(gdmconfdir); then \
@@ -224,6 +226,12 @@ install-data-hook: gdm.conf-custom Xsess
chown root:gdm $(DESTDIR)$(cachedir) || : ; \
fi
+ if test '!' -d $(DESTDIR)$(spooldir); then \
+ $(mkinstalldirs) $(DESTDIR)$(spooldir); \
+ chmod 775 $(DESTDIR)$(spooldir); \
+ chown root:gdm $(DESTDIR)$(spooldir) || : ; \
+ fi
+
$(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

View File

@ -1,82 +0,0 @@
3 patches from upstream to fix issue with GDM user list sometimes not loading properly
From 45e1f603f7b77644c7d4fed2bd0fae5e9b586f55 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 08 Oct 2010 01:47:51 +0000
Subject: user-manager: fixes for when consolekit is unavailable
Part of the user manager load sequence involves communicating
with ConsoleKit. If ConsoleKit is unavailable, we need to
properly finish the sequence so that the user manager
becomes accessible in a "degraded" mode.
---
diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index 7e7719a..112116c 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -609,6 +609,7 @@ on_get_seat_id_finished (DBusGProxy *proxy,
"current session");
}
unload_seat (manager);
+ maybe_set_is_loaded (manager);
return;
}
@@ -918,6 +919,7 @@ on_get_current_session_finished (DBusGProxy *proxy,
g_debug ("Failed to identify the current session");
}
unload_seat (manager);
+ maybe_set_is_loaded (manager);
return;
}
--
cgit v0.8.3.1
From 68fbf55992773124b4f79118d4a1564c737a3195 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Sun, 10 Oct 2010 19:47:47 +0000
Subject: user-manager: add forward declaration
This fixes a compiler warning.
---
diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index 112116c..6705acc 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -229,6 +229,7 @@ static void fetch_user_locally (GdmUserManager *manager,
const char *username);
static void fetch_user_incrementally (GdmUserManagerFetchUserRequest *request);
+static void maybe_set_is_loaded (GdmUserManager *manager);
static gpointer user_manager_object = NULL;
G_DEFINE_TYPE (GdmUserManager, gdm_user_manager, G_TYPE_OBJECT)
--
cgit v0.8.3.1
From efda830b8b978b96cd6a5923b3c1066250a31ac3 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 06 Dec 2010 15:46:28 +0000
Subject: user-manager: maybe set is loaded ListCachedUsers
This is another asynchronous fix, needed to make sure
the race of competing conditions properly end up with
a loaded user.
---
diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index 6705acc..c631989 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -1198,6 +1198,8 @@ on_list_cached_users_finished (DBusGProxy *proxy,
return;
}
+ maybe_set_is_loaded (manager);
+
g_ptr_array_foreach (paths, (GFunc)add_new_user_for_object_path, manager);
g_ptr_array_foreach (paths, (GFunc)g_free, NULL);
--
cgit v0.8.3.1

File diff suppressed because it is too large Load Diff

View File

@ -14,8 +14,8 @@
Summary: The GNOME Display Manager
Name: gdm
Version: 2.32.0
Release: 4%{?dist}
Version: 2.91.4
Release: 1%{?dist}
Epoch: 1
License: GPLv2+
Group: User Interface/X
@ -88,7 +88,6 @@ Provides: service(graphical-login) = %{name}
Requires: audit-libs >= %{libauditver}
Patch2: plymouth.patch
Patch10: gdm-2.32.0-maybe-set-is-loaded.patch
Patch96: gdm-multistack.patch
# Fedora-specific
@ -132,7 +131,6 @@ The GDM fingerprint plugin provides functionality necessary to use a fingerprint
%prep
%setup -q
%patch2 -p1 -b .plymouth
%patch10 -p1 -b .maybe-set-is-loaded
%patch96 -p1 -b .multistack
%patch97 -p1 -b .bubble-location
%patch98 -p1 -b .tray-padding
@ -350,6 +348,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/ull || :
%attr(1770, root, gdm) %dir %{_localstatedir}/gdm
%attr(1777, root, gdm) %dir %{_localstatedir}/run/gdm
%attr(1755, root, gdm) %dir %{_localstatedir}/cache/gdm
%{_sysconfdir}/dconf/profile/gdm
%{_sysconfdir}/dconf/db/gdm
%files user-switch-applet
%defattr(-, root, root)
@ -371,6 +372,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/ull || :
%{_libdir}/gdm/simple-greeter/plugins/fingerprint.so
%changelog
* Fri Dec 17 2010 Ray Strode <rstrode@redhat.com> 2.91.4-1
- Update to 2.91.4
* Wed Dec 15 2010 Christopher Aillon <caillon@redhat.com> 2.32.0-4
- Add maybe-set-is-loaded.patch to ensure we end up with a loaded user

View File

@ -1 +1 @@
3c28e13a3d5e5f35d29669460acb57bb gdm-2.32.0.tar.bz2
3f78383f89141eef2cc87e58ecd3d351 gdm-2.91.4.tar.bz2