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