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 fedora-extras-commits mailing list