rpms/gdm/devel gdm-2.26.1-multistack.patch, NONE, 1.1 gdm.spec, 1.463, 1.464 gdm-2.26.0-multistack.patch, 1.1, NONE

Ray Strode rstrode at fedoraproject.org
Tue Apr 21 20:42:42 UTC 2009


Author: rstrode

Update of /cvs/pkgs/rpms/gdm/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv26507

Modified Files:
	gdm.spec 
Added Files:
	gdm-2.26.1-multistack.patch 
Removed Files:
	gdm-2.26.0-multistack.patch 
Log Message:
- Stop inactive pam conversations when one succeeds.
  Should fix bug 496234


gdm-2.26.1-multistack.patch:

--- NEW FILE gdm-2.26.1-multistack.patch ---
>From b96b21d5497ce4ed3b362f4dc09b2f5fd654f3a3 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Fri, 20 Feb 2009 13:52:19 -0500
Subject: [PATCH 01/33] Add a comment marking protected api in chooser

The chooser widget has methods that only its
subclasses are supposed to call.  We should
mark them as such.
---
 gui/simple-greeter/gdm-chooser-widget.h |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/gui/simple-greeter/gdm-chooser-widget.h b/gui/simple-greeter/gdm-chooser-widget.h
index 578e613..7e3e59c 100644
--- a/gui/simple-greeter/gdm-chooser-widget.h
+++ b/gui/simple-greeter/gdm-chooser-widget.h
@@ -136,6 +136,8 @@ int            gdm_chooser_widget_get_number_of_items          (GdmChooserWidget
 void           gdm_chooser_widget_activate_if_one_item         (GdmChooserWidget          *widget);
 void           gdm_chooser_widget_propagate_pending_key_events (GdmChooserWidget          *widget);
 
+/* Protected
+ */
 void           gdm_chooser_widget_loaded                       (GdmChooserWidget          *widget);
 
 G_END_DECLS
-- 
1.6.2.2


>From fafe68243000a7b2f97086daa3d4ad651e7ac905 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Fri, 6 Feb 2009 17:44:37 -0500
Subject: [PATCH 02/33] Drop duplicated entry introspection output

---
 daemon/gdm-greeter-server.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c
index 2e01d33..cecce83 100644
--- a/daemon/gdm-greeter-server.c
+++ b/daemon/gdm-greeter-server.c
@@ -752,7 +752,6 @@ do_introspect (DBusConnection *connection,
                                "      <arg name=\"layout_name\" type=\"s\"/>\n"
                                "    </signal>\n"
                                "    <signal name=\"DefaultSessionNameChanged\">\n"
-                               "    <signal name=\"DefaultSessionNameChanged\">\n"
                                "      <arg name=\"session_name\" type=\"s\"/>\n"
                                "    </signal>\n"
                                "    <signal name=\"TimedLoginRequested\">\n"
-- 
1.6.2.2


>From 4dc394bb5b87d3cbead40bb6565eec75d755ddae Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Mon, 2 Mar 2009 10:07:03 -0500
Subject: [PATCH 03/33] Make lookup_item not warn when passing NULL for args

gtk_tree_model_get doesn't like NULL, and we allow
NULL for optional return values.

We now check each argument for NULL and call
gtk_tree_model_get individually N times (one for
each argument) instead of just once.
---
 gui/simple-greeter/gdm-chooser-widget.c |   31 ++++++++++++++++++++++++-------
 1 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c
index f0298c6..b1ba9b4 100644
--- a/gui/simple-greeter/gdm-chooser-widget.c
+++ b/gui/simple-greeter/gdm-chooser-widget.c
@@ -2132,13 +2132,30 @@ gdm_chooser_widget_lookup_item (GdmChooserWidget *widget,
         }
         g_free (active_item_id);
 
-        gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
-                            CHOOSER_IMAGE_COLUMN, image,
-                            CHOOSER_NAME_COLUMN, name,
-                            CHOOSER_PRIORITY_COLUMN, priority,
-                            CHOOSER_ITEM_IS_IN_USE_COLUMN, is_in_use,
-                            CHOOSER_ITEM_IS_SEPARATED_COLUMN, is_separate,
-                            -1);
+        if (image != NULL) {
+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
+                                    CHOOSER_IMAGE_COLUMN, image, -1);
+        }
+
+        if (name != NULL) {
+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
+                                    CHOOSER_NAME_COLUMN, name, -1);
+        }
+
+        if (priority != NULL) {
+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
+                                    CHOOSER_PRIORITY_COLUMN, priority, -1);
+        }
+
+        if (is_in_use != NULL) {
+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
+                                    CHOOSER_ITEM_IS_IN_USE_COLUMN, is_in_use, -1);
+        }
+
+        if (is_separate != NULL) {
+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
+                                    CHOOSER_ITEM_IS_SEPARATED_COLUMN, is_separate, -1);
+        }
 
         return TRUE;
 }
-- 
1.6.2.2


>From c68b126096e04b3b963a10658d5a835ab716599f Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Fri, 6 Feb 2009 15:35:00 -0500
Subject: [PATCH 04/33] Drop "stopped" signal from worker-job class

It was unused, dead code.
---
 daemon/gdm-session-direct.c     |   14 --------------
 daemon/gdm-session-worker-job.c |   11 -----------
 daemon/gdm-session-worker-job.h |    1 -
 3 files changed, 0 insertions(+), 26 deletions(-)

diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
index 34a126f..3942ec7 100644
--- a/daemon/gdm-session-direct.c
+++ b/daemon/gdm-session-direct.c
@@ -1548,13 +1548,6 @@ gdm_session_direct_init (GdmSessionDirect *session)
 }
 
 static void
-worker_stopped (GdmSessionWorkerJob *job,
-                GdmSessionDirect    *session)
-{
-        g_debug ("GdmSessionDirect: Worker job stopped");
-}
-
-static void
 worker_started (GdmSessionWorkerJob *job,
                 GdmSessionDirect    *session)
 {
@@ -1605,10 +1598,6 @@ start_worker (GdmSessionDirect *session)
         session->priv->job = gdm_session_worker_job_new ();
         gdm_session_worker_job_set_server_address (session->priv->job, session->priv->server_address);
         g_signal_connect (session->priv->job,
-                          "stopped",
-                          G_CALLBACK (worker_stopped),
-                          session);
-        g_signal_connect (session->priv->job,
                           "started",
                           G_CALLBACK (worker_started),
                           session);
@@ -1630,9 +1619,6 @@ static void
 stop_worker (GdmSessionDirect *session)
 {
         g_signal_handlers_disconnect_by_func (session->priv->job,
-                                              G_CALLBACK (worker_stopped),
-                                              session);
-        g_signal_handlers_disconnect_by_func (session->priv->job,
                                               G_CALLBACK (worker_started),
                                               session);
         g_signal_handlers_disconnect_by_func (session->priv->job,
diff --git a/daemon/gdm-session-worker-job.c b/daemon/gdm-session-worker-job.c
index 6723464..633d6e2 100644
--- a/daemon/gdm-session-worker-job.c
+++ b/daemon/gdm-session-worker-job.c
@@ -68,7 +68,6 @@ enum {
 
 enum {
         STARTED,
-        STOPPED,
         EXITED,
         DIED,
         LAST_SIGNAL
@@ -390,16 +389,6 @@ gdm_session_worker_job_class_init (GdmSessionWorkerJobClass *klass)
                               g_cclosure_marshal_VOID__VOID,
                               G_TYPE_NONE,
                               0);
-        signals [STOPPED] =
-                g_signal_new ("stopped",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmSessionWorkerJobClass, stopped),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_VOID__VOID,
-                              G_TYPE_NONE,
-                              0);
         signals [EXITED] =
                 g_signal_new ("exited",
                               G_OBJECT_CLASS_TYPE (object_class),
diff --git a/daemon/gdm-session-worker-job.h b/daemon/gdm-session-worker-job.h
index d42eb37..5ad1c92 100644
--- a/daemon/gdm-session-worker-job.h
+++ b/daemon/gdm-session-worker-job.h
[...17649 lines suppressed...]

>From c98a8ac6971b44071aef38a29b550378554a733b Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Mon, 13 Apr 2009 14:19:50 -0400
Subject: [PATCH 31/33] reset all conversations if password conversation fails

This is a temporary hack until we store plugin policy in
gconf.
---
 gui/simple-greeter/gdm-greeter-login-window.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c
index a16948f..3daf89d 100644
--- a/gui/simple-greeter/gdm-greeter-login-window.c
+++ b/gui/simple-greeter/gdm-greeter-login-window.c
@@ -907,6 +907,16 @@ gdm_greeter_login_window_conversation_stopped (GdmGreeterLoginWindow *login_wind
 
         g_debug ("GdmGreeterLoginWindow: conversation '%s' has stopped", service_name);
 
+        /* If the password conversation failed, then start over
+         *
+         * FIXME: we need to get this policy out of the source code
+         */
+        if (strcmp (service_name, "gdm-password") == 0) {
+                g_debug ("GdmGreeterLoginWindow: main conversation failed, starting over");
+                restart_conversations (login_window);
+                return TRUE;
+        }
+
         task = find_task_with_service_name (login_window, service_name);
 
         if (task != NULL) {
-- 
1.6.2.2


>From 339ca93db8f4896eaf02667c1268ddc9d1830345 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Tue, 21 Apr 2009 10:25:18 -0400
Subject: [PATCH 32/33] When one PAM conversation wins, stop the others

This doesn't work yet, it's still in progress code.
---
 daemon/gdm-session-direct.c |   64 ++++++++++++++++++++++++++++++-------------
 daemon/gdm-simple-slave.c   |    2 +-
 2 files changed, 46 insertions(+), 20 deletions(-)

diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
index 805adbf..cb84f01 100644
--- a/daemon/gdm-session-direct.c
+++ b/daemon/gdm-session-direct.c
@@ -2284,6 +2284,40 @@ gdm_session_direct_open_session (GdmSession *session,
 }
 
 static void
+stop_all_other_conversations (GdmSessionDirect        *session,
+                              GdmSessionConversation  *conversation_to_keep)
+{
+        GHashTableIter iter;
+        gpointer key, value;
+
+        if (session->priv->conversations == NULL) {
+                return;
+        }
+
+        if (conversation_to_keep == NULL) {
+                g_debug ("GdmSessionDirect: Stopping all conversations");
+        } else {
+                g_debug ("GdmSessionDirect: Stopping all conversations "
+                         "except for %s", conversation_to_keep->service_name);
+        }
+
+        g_hash_table_iter_init (&iter, session->priv->conversations);
+        while (g_hash_table_iter_next (&iter, &key, &value)) {
+                GdmSessionConversation *conversation;
+
+                conversation = (GdmSessionConversation *) value;
+
+                if (conversation == conversation_to_keep) {
+                        continue;
+                }
+
+                stop_conversation (conversation);
+        }
+
+        g_hash_table_remove_all (session->priv->conversations);
+}
+
+static void
 gdm_session_direct_start_session (GdmSession *session,
                                   const char *service_name)
 {
@@ -2295,12 +2329,20 @@ gdm_session_direct_start_session (GdmSession *session,
         g_return_if_fail (session != NULL);
         g_return_if_fail (impl->priv->is_running == FALSE);
 
+        conversation = find_conversation_by_name (impl, service_name);
+
+        if (conversation == NULL) {
+                g_warning ("GdmSessionDirect: Tried to start session of "
+                           "nonexistent conversation %s", service_name);
+                return;
+        }
+
+        stop_all_other_conversations (impl, conversation);
+
         command = get_session_command (impl);
         program = g_strdup_printf (GDMCONFDIR "/Xsession \"%s\"", command);
         g_free (command);
 
-        conversation = find_conversation_by_name (impl, service_name);
-
         setup_session_environment (impl);
         send_environment (impl, conversation);
 
@@ -2311,23 +2353,7 @@ gdm_session_direct_start_session (GdmSession *session,
 static void
 stop_all_conversations (GdmSessionDirect *session)
 {
-        GHashTableIter iter;
-        gpointer key, value;
-
-        if (session->priv->conversations == NULL) {
-                return;
-        }
-
-        g_hash_table_iter_init (&iter, session->priv->conversations);
-        while (g_hash_table_iter_next (&iter, &key, &value)) {
-                GdmSessionConversation *conversation;
-
-                conversation = (GdmSessionConversation *) value;
-
-                stop_conversation (conversation);
-        }
-
-        g_hash_table_remove_all (session->priv->conversations);
+        stop_all_other_conversations (session, NULL);
 }
 
 static void
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 09a7425..a70c9c9 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -569,7 +569,7 @@ on_session_conversation_stopped (GdmSession     *session,
         gboolean res;
         g_debug ("GdmSimpleSlave: conversation stopped");
 
-        if (slave->priv->greeter_server != NULL) {
+        if (slave->priv->greeter != NULL) {
                 res = gdm_greeter_server_conversation_stopped (slave->priv->greeter_server,
                                                                service_name);
                 if (! res) {
-- 
1.6.2.2


>From 80107a061b3ac2300e9cec17f18d5dc02557a8d3 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Tue, 21 Apr 2009 15:30:28 -0400
Subject: [PATCH 33/33] When one PAM conv. wins, actually stop the others

We weren't properly keeping the winning conversation
around in the previous commit
---
 daemon/gdm-session-direct.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
index cb84f01..7173080 100644
--- a/daemon/gdm-session-direct.c
+++ b/daemon/gdm-session-direct.c
@@ -2308,13 +2308,20 @@ stop_all_other_conversations (GdmSessionDirect        *session,
                 conversation = (GdmSessionConversation *) value;
 
                 if (conversation == conversation_to_keep) {
-                        continue;
+                        g_hash_table_iter_steal (&iter);
+                        g_free (key);
+                } else {
+                        stop_conversation (conversation);
                 }
-
-                stop_conversation (conversation);
         }
 
         g_hash_table_remove_all (session->priv->conversations);
+
+        if (conversation_to_keep != NULL) {
+                g_hash_table_insert (session->priv->conversations,
+                                     g_strdup (conversation_to_keep->service_name),
+                                     conversation_to_keep);
+        }
 }
 
 static void
-- 
1.6.2.2



Index: gdm.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdm/devel/gdm.spec,v
retrieving revision 1.463
retrieving revision 1.464
diff -u -r1.463 -r1.464
--- gdm.spec	14 Apr 2009 14:41:47 -0000	1.463
+++ gdm.spec	21 Apr 2009 20:42:41 -0000	1.464
@@ -16,7 +16,7 @@
 Summary: The GNOME Display Manager
 Name: gdm
 Version: 2.26.1
-Release: 1%{?dist}
+Release: 2%{?dist}
 Epoch: 1
 License: GPLv2+
 Group: User Interface/X
@@ -96,7 +96,7 @@
 # should probably be changed to get the system layout from the X server
 Patch13: gdm-system-keyboard.patch
 
-Patch19: gdm-2.26.0-multistack.patch
+Patch19: gdm-2.26.1-multistack.patch
 
 # Fedora-specific
 Patch99: gdm-2.23.1-fedora-logo.patch
@@ -380,6 +380,10 @@
 %{_libdir}/gdm/simple-greeter/plugins/fingerprint.so
 
 %changelog
+* Tue Apr 21 2009 Ray Strode <rstrode at redhat.com> - 1:2.26.1-2
+- Stop inactive pam conversations when one succeeds.
+  Should fix bug 496234
+
 * Tue Apr 14 2009 Ray Strode <rstrode at redhat.com> - 1:2.26.1-1
 - Update to 2.26.1
 


--- gdm-2.26.0-multistack.patch DELETED ---




More information about the fedora-extras-commits mailing list