rpms/gdm/devel gdm-2.25.2-multistack-but-boring.patch, NONE, 1.1 gdm-2.25.2-start-faster.patch, NONE, 1.1 gdm.spec, 1.442, 1.443
Ray Strode
rstrode at fedoraproject.org
Tue Mar 3 22:47:22 UTC 2009
Author: rstrode
Update of /cvs/pkgs/rpms/gdm/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv21077
Modified Files:
gdm.spec
Added Files:
gdm-2.25.2-multistack-but-boring.patch
gdm-2.25.2-start-faster.patch
Log Message:
- Add limited 'one-stack-only' version of multistack patch
(See https://fedoraproject.org/wiki/Features/MultiplePAMStacksInGDM)
- Drop 10 second delay in start up because of broken autostart
file
gdm-2.25.2-multistack-but-boring.patch:
--- NEW FILE gdm-2.25.2-multistack-but-boring.patch ---
>From 0b295480d3f0955d7133c39c0c4b2ec3bd2f3084 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Fri, 16 Jan 2009 11:00:08 -0500
Subject: [PATCH 01/65] Drop session "Open" in favor of "StartConversation"
We want to eventually support having multiple
simultaneous PAM conversations in one login
screen (so, e.g., username/password, smart card, and
fingerprint all work at the same time).
This commit refactors the session code to be in terms
of a conversation object. With this change, it should
be easier later to have multiple conversation objects.
The conversation is named by the pam service the login
screen is talking to.
---
daemon/gdm-factory-slave.c | 13 +-
daemon/gdm-product-slave.c | 47 ++++++---
daemon/gdm-session-direct.c | 250 ++++++++++++++++++++++++++----------------
daemon/gdm-session-private.h | 3 +-
daemon/gdm-session-relay.c | 29 +++--
daemon/gdm-session.c | 20 ++--
daemon/gdm-session.h | 9 +-
daemon/gdm-simple-slave.c | 3 -
daemon/test-session.c | 13 +-
9 files changed, 240 insertions(+), 147 deletions(-)
diff --git a/daemon/gdm-factory-slave.c b/daemon/gdm-factory-slave.c
index d09c913..6497293 100644
--- a/daemon/gdm-factory-slave.c
+++ b/daemon/gdm-factory-slave.c
@@ -180,10 +180,11 @@ on_session_secret_info_query (GdmSession *session,
}
static void
-on_session_opened (GdmSession *session,
- GdmFactorySlave *slave)
+on_session_conversation_started (GdmSession *session,
+ GdmFactorySlave *slave,
+ const char *service_name)
{
- g_debug ("GdmFactorySlave: session opened");
+ g_debug ("GdmFactorySlave: session conversation started");
gdm_greeter_server_ready (slave->priv->greeter_server);
}
@@ -367,7 +368,7 @@ on_session_relay_connected (GdmSessionRelay *session,
{
g_debug ("GdmFactorySlave: Relay Connected");
- gdm_session_open (GDM_SESSION (slave->priv->session));
+ gdm_session_start_conversation (GDM_SESSION (slave->priv->session), "gdm");
}
static void
@@ -694,8 +695,8 @@ gdm_factory_slave_start (GdmSlave *slave)
GDM_FACTORY_SLAVE (slave)->priv->session = gdm_session_relay_new ();
g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
- "opened",
- G_CALLBACK (on_session_opened),
+ "conversation-started",
+ G_CALLBACK (on_session_conversation_started),
slave);
g_signal_connect (GDM_FACTORY_SLAVE (slave)->priv->session,
"setup-complete",
diff --git a/daemon/gdm-product-slave.c b/daemon/gdm-product-slave.c
index 9adcb09..15a2820 100644
--- a/daemon/gdm-product-slave.c
+++ b/daemon/gdm-product-slave.c
@@ -246,19 +246,21 @@ relay_session_started (GdmProductSlave *slave,
}
static void
-relay_session_opened (GdmProductSlave *slave)
+relay_session_conversation_started (GdmProductSlave *slave,
+ const char *service_name)
{
- send_dbus_void_method (slave->priv->session_relay_connection,
- "Opened");
+ send_dbus_string_method (slave->priv->session_relay_connection,
+ "ConversationStarted", service_name);
}
static void
-on_session_opened (GdmSession *session,
- GdmProductSlave *slave)
+on_session_conversation_started (GdmSession *session,
+ const char *service_name,
+ GdmProductSlave *slave)
{
- g_debug ("GdmProductSlave: session opened");
+ g_debug ("GdmProductSlave: session conversation started");
- relay_session_opened (slave);
+ relay_session_conversation_started (slave, service_name);
}
static void
@@ -784,10 +786,27 @@ on_relay_user_selected (GdmProductSlave *slave,
}
static void
-on_relay_open (GdmProductSlave *slave,
- DBusMessage *message)
+on_relay_start_conversation (GdmProductSlave *slave,
+ DBusMessage *message)
{
- gdm_session_open (GDM_SESSION (slave->priv->session));
+ 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
@@ -832,8 +851,8 @@ create_new_session (GdmProductSlave *slave)
g_free (display_device);
g_signal_connect (slave->priv->session,
- "opened",
- G_CALLBACK (on_session_opened),
+ "conversation-started",
+ G_CALLBACK (on_session_conversation_started),
slave);
g_signal_connect (slave->priv->session,
"setup-complete",
@@ -991,8 +1010,8 @@ relay_dbus_handle_message (DBusConnection *connection,
on_relay_user_selected (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, "Open")) {
- on_relay_open (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 {
diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
index 34a126f..a76051b 100644
--- a/daemon/gdm-session-direct.c
+++ b/daemon/gdm-session-direct.c
@@ -61,6 +61,15 @@
#define GDM_SESSION_DEFAULT_PATH "/usr/local/bin:/usr/bin:/bin"
#endif
+typedef struct
+{
+ GdmSessionDirect *session;
+ GdmSessionWorkerJob *job;
+ GPid worker_pid;
+ char *service_name;
+ DBusConnection *worker_connection;
+} GdmSessionConversation;
+
struct _GdmSessionDirectPrivate
{
/* per open scope */
@@ -74,10 +83,9 @@ struct _GdmSessionDirectPrivate
char *user_x11_authority_file;
DBusMessage *message_pending_reply;
- DBusConnection *worker_connection;
- GdmSessionWorkerJob *job;
- GPid session_pid;
+ GdmSessionConversation *conversation;
+
guint32 is_authenticated : 1;
guint32 is_running : 1;
@@ -147,6 +155,7 @@ send_dbus_string_signal (GdmSessionDirect *session,
{
DBusMessage *message;
DBusMessageIter iter;
+ GdmSessionConversation *conversation;
g_return_if_fail (session != NULL);
@@ -157,7 +166,8 @@ send_dbus_string_signal (GdmSessionDirect *session,
dbus_message_iter_init_append (message, &iter);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &text);
- if (! send_dbus_message (session->priv->worker_connection, message)) {
[...18467 lines suppressed...]
+ $(top_builddir)/common/libgdmcommon.la \
$(NULL)
libgdmsimplegreeter_la_LDFLAGS = \
diff --git a/gui/simple-greeter/libgdmsimplegreeter/gdm-conversation.c b/gui/simple-greeter/libgdmsimplegreeter/gdm-conversation.c
index cef435c..ee763ef 100644
--- a/gui/simple-greeter/libgdmsimplegreeter/gdm-conversation.c
+++ b/gui/simple-greeter/libgdmsimplegreeter/gdm-conversation.c
@@ -25,9 +25,9 @@
#include <gtk/gtk.h>
#include "gdm-conversation.h"
+#include "gdm-marshal.h"
#include "gdm-task.h"
-
enum {
ANSWER,
USER_CHOSEN,
@@ -76,12 +76,12 @@ gdm_conversation_class_init (gpointer g_iface)
signals [USER_CHOSEN] =
g_signal_new ("user-chosen",
iface_type,
- G_SIGNAL_RUN_FIRST,
+ G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GdmConversationIface, user_chosen),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE,
+ gdm_marshal_BOOLEAN__STRING,
+ G_TYPE_BOOLEAN,
1, G_TYPE_STRING);
signals [CANCEL] =
g_signal_new ("cancel",
@@ -171,9 +171,16 @@ gdm_conversation_cancel (GdmConversation *conversation)
{
g_signal_emit (conversation, signals [CANCEL], 0);
}
-void
+
+gboolean
gdm_conversation_choose_user (GdmConversation *conversation,
const char *username)
{
- g_signal_emit (conversation, signals [USER_CHOSEN], 0, username);
+ gboolean was_chosen;
+
+ was_chosen = FALSE;
+
+ g_signal_emit (conversation, signals [USER_CHOSEN], 0, username, &was_chosen);
+
+ return was_chosen;
}
diff --git a/gui/simple-greeter/libgdmsimplegreeter/gdm-conversation.h b/gui/simple-greeter/libgdmsimplegreeter/gdm-conversation.h
index fb4bf49..b37b21e 100644
--- a/gui/simple-greeter/libgdmsimplegreeter/gdm-conversation.h
+++ b/gui/simple-greeter/libgdmsimplegreeter/gdm-conversation.h
@@ -61,7 +61,7 @@ struct _GdmConversationIface
/* signals */
char * (* answer) (GdmConversation *conversation);
void (* cancel) (GdmConversation *conversation);
- void (* user_chosen) (GdmConversation *conversation);
+ gboolean (* user_chosen) (GdmConversation *conversation);
};
GType gdm_conversation_get_type (void) G_GNUC_CONST;
@@ -85,8 +85,8 @@ gboolean gdm_conversation_focus (GdmConversation *conversation);
void gdm_conversation_answer (GdmConversation *conversation,
const char *answer);
void gdm_conversation_cancel (GdmConversation *conversation);
-void gdm_conversation_choose_user (GdmConversation *conversation,
- const char *username);
+gboolean gdm_conversation_choose_user (GdmConversation *conversation,
+ const char *username);
G_END_DECLS
diff --git a/gui/simple-greeter/plugins/smartcard/gdm-smartcard-extension.c b/gui/simple-greeter/plugins/smartcard/gdm-smartcard-extension.c
index 8e87db6..5a2c380 100644
--- a/gui/simple-greeter/plugins/smartcard/gdm-smartcard-extension.c
+++ b/gui/simple-greeter/plugins/smartcard/gdm-smartcard-extension.c
@@ -53,6 +53,7 @@ struct _GdmSmartcardExtensionPrivate
int number_of_tokens;
guint answer_pending : 1;
+ guint select_when_ready : 1;
};
static void gdm_smartcard_extension_finalize (GObject *object);
@@ -102,8 +103,14 @@ on_smartcard_event (GIOChannel *io_channel,
}
if (extension->priv->number_of_tokens == 1) {
- gdm_conversation_choose_user (GDM_CONVERSATION (extension),
- PAMSERVICENAME);
+ if (!gdm_conversation_choose_user (GDM_CONVERSATION (extension),
+ PAMSERVICENAME)) {
+ g_debug ("could not choose smart card user, cancelling...");
+ gdm_conversation_cancel (GDM_CONVERSATION (extension));
+ extension->priv->select_when_ready = TRUE;
+ } else {
+ g_debug ("chose smart card user!");
+ }
} else if (extension->priv->number_of_tokens == 0) {
gdm_conversation_cancel (GDM_CONVERSATION (extension));
}
@@ -210,10 +217,16 @@ gdm_smartcard_extension_set_ready (GdmConversation *conversation)
GdmSmartcardExtension *extension = GDM_SMARTCARD_EXTENSION (conversation);
gdm_task_set_enabled (GDM_TASK (conversation), TRUE);
- if (extension->priv->worker_pid <= 0)
- {
+ if (extension->priv->worker_pid <= 0) {
watch_for_smartcards (extension);
- }
+ }
+
+ if (extension->priv->select_when_ready) {
+ if (gdm_conversation_choose_user (GDM_CONVERSATION (extension),
+ PAMSERVICENAME)) {
+ extension->priv->select_when_ready = FALSE;
+ }
+ }
}
char *
--
1.6.1
>From cdb57fbb1366ca4fe7314850d223cd0a79240fd9 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Tue, 3 Mar 2009 13:33:09 -0500
Subject: [PATCH 64/65] Don't build fingerprint and smartcard plugins
I'm staging a degenerate single stack case
for rawhide.
---
gui/simple-greeter/plugins/Makefile.am | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/gui/simple-greeter/plugins/Makefile.am b/gui/simple-greeter/plugins/Makefile.am
index 3dd336f..c0390db 100644
--- a/gui/simple-greeter/plugins/Makefile.am
+++ b/gui/simple-greeter/plugins/Makefile.am
@@ -1 +1 @@
-SUBDIRS = password fingerprint smartcard
+SUBDIRS = password
--
1.6.1
>From 48c2237ff7efe68e116363ce51e0a4cdc42a5c78 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Tue, 3 Mar 2009 17:15:10 -0500
Subject: [PATCH 65/65] Use "gdm" instead of "gdm-password"
This is so we hook into system configured auth policy
---
gui/simple-greeter/plugins/password/Makefile.am | 9 ++-------
1 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/gui/simple-greeter/plugins/password/Makefile.am b/gui/simple-greeter/plugins/password/Makefile.am
index e832c4d..097b18e 100644
--- a/gui/simple-greeter/plugins/password/Makefile.am
+++ b/gui/simple-greeter/plugins/password/Makefile.am
@@ -3,8 +3,6 @@ NULL =
extensiondir = $(extensionsdatadir)/password
extension_DATA = page.ui
-pamservicename = gdm-password
-
AM_CPPFLAGS = \
-I$(top_srcdir)/common \
-I$(top_srcdir)/gui/simple-greeter/libnotificationarea \
@@ -12,7 +10,7 @@ AM_CPPFLAGS = \
-DDMCONFDIR=\""$(dmconfdir)"\" \
-DGDMCONFDIR=\"$(gdmconfdir)\" \
-DPLUGINDATADIR=\""$(extensiondir)"\" \
- -DPAMSERVICENAME=\""$(pamservicename)"\" \
+ -DPAMSERVICENAME=\""gdm"\" \
-DSYSCONFDIR=\""$(sysconfdir)"\" \
-DLIBLOCALEDIR=\""$(prefix)/lib/locale"\" \
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
@@ -39,10 +37,7 @@ password_la_SOURCES = \
gdm-password-extension.c \
plugin.c
-pamdir = $(PAM_PREFIX)/pam.d
-pam_DATA = $(pamservicename)
-
-EXTRA_DIST = $(extension_DATA) $(pam_DATA)
+EXTRA_DIST = $(extension_DATA)
MAINTAINERCLEANFILES = \
*~ \
--
1.6.1
gdm-2.25.2-start-faster.patch:
--- NEW FILE gdm-2.25.2-start-faster.patch ---
diff -up gdm-2.25.2/data/greeter-autostart/gnome-power-manager.desktop.in.in.start-faster gdm-2.25.2/data/greeter-autostart/gnome-power-manager.desktop.in
--- gdm-2.25.2/data/greeter-autostart/gnome-power-manager.desktop.in.in.start-faster 2009-03-03 17:16:56.209495297 -0500
+++ gdm-2.25.2/data/greeter-autostart/gnome-power-manager.desktop.in.in 2009-03-03 17:17:07.493469010 -0500
@@ -8,7 +8,6 @@ Terminal=false
Type=Application
Categories=
OnlyShowIn=GNOME;XFCE;
-X-GNOME-Autostart-Phase=Initialization
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-power-manager
X-GNOME-Bugzilla-Component=gnome-power-manager
Index: gdm.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdm/devel/gdm.spec,v
retrieving revision 1.442
retrieving revision 1.443
diff -u -r1.442 -r1.443
--- gdm.spec 27 Feb 2009 14:53:57 -0000 1.442
+++ gdm.spec 3 Mar 2009 22:46:51 -0000 1.443
@@ -15,7 +15,7 @@
Summary: The GNOME Display Manager
Name: gdm
Version: 2.25.2
-Release: 8%{?dist}
+Release: 9%{?dist}
Epoch: 1
License: GPLv2+
Group: User Interface/X
@@ -88,6 +88,9 @@
# should probably be changed to get the system layout from the X server
Patch13: gdm-system-keyboard.patch
+Patch14: gdm-2.25.2-multistack-but-boring.patch
+Patch15: gdm-2.25.2-start-faster.patch
+
# Fedora-specific
Patch99: gdm-2.23.1-fedora-logo.patch
@@ -113,6 +116,9 @@
%patch4 -p1 -b .append-logs
%patch13 -p1 -b .system-keyboard
+%patch14 -p1 -b .multistack-but-boring
+%patch15 -p1 -b .start-faster
+
%patch99 -p1 -b .fedora-logo
autoreconf -i -f
@@ -172,6 +178,10 @@
find $RPM_BUILD_ROOT -name '*.a' -delete
find $RPM_BUILD_ROOT -name '*.la' -delete
+rm -f $RPM_BUILD_ROOT%{_includedir}/gdm/simple-greeter/gdm-greeter-extension.h
+rm -f $RPM_BUILD_ROOT%{_libdir}/pkgconfig/gdmsimplegreeter.pc
+rm -f $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/gdm-password
+
%find_lang gdm --with-gnome
%clean
@@ -307,6 +317,9 @@
%{_sysconfdir}/gconf/schemas/*.schemas
%{_datadir}/gdm/gdb-cmd
%{_libexecdir}/gdm-crash-logger
+%{_libdir}/libgdm*.so*
+%{_libdir}/gdm/simple-greeter/plugins/password.so
+%{_datadir}/gdm/simple-greeter/extensions/password/page.ui
%dir %{_datadir}/gdm
%dir %{_datadir}/gdm/autostart
%dir %{_datadir}/gdm/autostart/LoginWindow
@@ -320,6 +333,7 @@
%attr(1770, root, gdm) %dir %{_localstatedir}/gdm
%attr(1777, root, gdm) %dir %{_localstatedir}/run/gdm
+
%files user-switch-applet
%defattr(-, root, root)
%{_libexecdir}/gdm-user-switch-applet
@@ -327,6 +341,12 @@
%{_datadir}/gnome-2.0/ui/GNOME_FastUserSwitchApplet.xml
%changelog
+* Tue Mar 3 2009 Ray Strode <rstrode at redhat.com> - 1:2.25.2-9
+- Add limited 'one-stack-only' version of multistack patch
+ (See https://fedoraproject.org/wiki/Features/MultiplePAMStacksInGDM)
+- Drop 10 second delay in start up because of broken autostart
+ file
+
* Fri Feb 27 2009 Matthias Clasen <mclasen at redhat.com>
- Require PolicyKit-authentication-agent
More information about the scm-commits
mailing list