summaryrefslogtreecommitdiff
path: root/daemon/gdm-session.c
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2009-01-16 15:18:31 -0500
committerRay Strode <rstrode@redhat.com>2011-06-13 20:33:47 -0400
commita4f5409c77a1a30c7a7f5466e86c12197aee0743 (patch)
treec897a5d1a0f50cad1c889ed54e53227b1ab05f0a /daemon/gdm-session.c
parentc48494034587fcea734a2fb69631590edd54dd15 (diff)
downloadgdm-a4f5409c77a1a30c7a7f5466e86c12197aee0743.tar.gz
daemon: Store multiple conversations in the session
We keep multiple conversations in the session now, keyed off of which PAM service is at the other end. Much of the guts still only operate on the first conversation added though.
Diffstat (limited to 'daemon/gdm-session.c')
-rw-r--r--daemon/gdm-session.c203
1 files changed, 128 insertions, 75 deletions
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 6a87dddc..4c7f6bc2 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -24,11 +24,13 @@
#include <glib/gi18n.h>
#include <glib-object.h>
+#include "gdm-marshal.h"
#include "gdm-session.h"
#include "gdm-session-private.h"
enum {
CONVERSATION_STARTED = 0,
+ CONVERSATION_STOPPED,
SETUP_COMPLETE,
SETUP_FAILED,
RESET_COMPLETE,
@@ -88,6 +90,15 @@ gdm_session_start_conversation (GdmSession *session,
}
void
+gdm_session_stop_conversation (GdmSession *session,
+ const char *service_name)
+{
+ g_return_if_fail (GDM_IS_SESSION (session));
+
+ GDM_SESSION_GET_IFACE (session)->stop_conversation (session, service_name);
+}
+
+void
gdm_session_close (GdmSession *session)
{
g_return_if_fail (GDM_IS_SESSION (session));
@@ -115,37 +126,41 @@ gdm_session_setup_for_user (GdmSession *session,
}
void
-gdm_session_authenticate (GdmSession *session)
+gdm_session_authenticate (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- GDM_SESSION_GET_IFACE (session)->authenticate (session);
+ GDM_SESSION_GET_IFACE (session)->authenticate (session, service_name);
}
void
-gdm_session_authorize (GdmSession *session)
+gdm_session_authorize (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- GDM_SESSION_GET_IFACE (session)->authorize (session);
+ GDM_SESSION_GET_IFACE (session)->authorize (session, service_name);
}
void
gdm_session_accredit (GdmSession *session,
+ const char *service_name,
int flag)
{
g_return_if_fail (GDM_IS_SESSION (session));
- GDM_SESSION_GET_IFACE (session)->accredit (session, flag);
+ GDM_SESSION_GET_IFACE (session)->accredit (session, service_name, flag);
}
void
gdm_session_answer_query (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- GDM_SESSION_GET_IFACE (session)->answer_query (session, text);
+ GDM_SESSION_GET_IFACE (session)->answer_query (session, service_name, text);
}
void
@@ -184,19 +199,21 @@ gdm_session_cancel (GdmSession *session)
}
void
-gdm_session_open_session (GdmSession *session)
+gdm_session_open_session (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- GDM_SESSION_GET_IFACE (session)->open_session (session);
+ GDM_SESSION_GET_IFACE (session)->open_session (session, service_name);
}
void
-gdm_session_start_session (GdmSession *session)
+gdm_session_start_session (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- GDM_SESSION_GET_IFACE (session)->start_session (session);
+ GDM_SESSION_GET_IFACE (session)->start_session (session, service_name);
}
static void
@@ -213,7 +230,17 @@ gdm_session_class_init (gpointer g_iface)
NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
- 0);
+ 1, G_TYPE_STRING);
+ signals [CONVERSATION_STOPPED] =
+ g_signal_new ("conversation-stopped",
+ iface_type,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GdmSessionIface, conversation_stopped),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE,
+ 1, G_TYPE_STRING);
signals [SETUP_COMPLETE] =
g_signal_new ("setup-complete",
iface_type,
@@ -221,9 +248,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, setup_complete),
NULL,
NULL,
- g_cclosure_marshal_VOID__VOID,
+ g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
- 0);
+ 1,
+ G_TYPE_STRING);
signals [SETUP_FAILED] =
g_signal_new ("setup-failed",
iface_type,
@@ -231,10 +259,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, setup_failed),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [RESET_COMPLETE] =
g_signal_new ("reset-complete",
iface_type,
@@ -263,9 +291,9 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, authenticated),
NULL,
NULL,
- g_cclosure_marshal_VOID__VOID,
+ g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
- 0);
+ 1, G_TYPE_STRING);
signals [AUTHENTICATION_FAILED] =
g_signal_new ("authentication-failed",
iface_type,
@@ -273,10 +301,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, authentication_failed),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [AUTHORIZED] =
g_signal_new ("authorized",
iface_type,
@@ -284,9 +312,9 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, authorized),
NULL,
NULL,
- g_cclosure_marshal_VOID__VOID,
+ g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
- 0);
+ 1, G_TYPE_STRING);
signals [AUTHORIZATION_FAILED] =
g_signal_new ("authorization-failed",
iface_type,
@@ -294,10 +322,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, authorization_failed),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [ACCREDITED] =
g_signal_new ("accredited",
iface_type,
@@ -305,9 +333,9 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, accredited),
NULL,
NULL,
- g_cclosure_marshal_VOID__VOID,
+ g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
- 0);
+ 1, G_TYPE_STRING);
signals [ACCREDITATION_FAILED] =
g_signal_new ("accreditation-failed",
iface_type,
@@ -315,10 +343,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, accreditation_failed),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [INFO_QUERY] =
g_signal_new ("info-query",
@@ -327,10 +355,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, info_query),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [SECRET_INFO_QUERY] =
g_signal_new ("secret-info-query",
iface_type,
@@ -338,10 +366,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, secret_info_query),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [INFO] =
g_signal_new ("info",
iface_type,
@@ -349,10 +377,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, info),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [PROBLEM] =
g_signal_new ("problem",
iface_type,
@@ -360,10 +388,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, problem),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [SESSION_OPENED] =
g_signal_new ("session-opened",
iface_type,
@@ -371,9 +399,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, session_opened),
NULL,
NULL,
- g_cclosure_marshal_VOID__VOID,
+ g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
- 0);
+ 1,
+ G_TYPE_STRING);
signals [SESSION_OPEN_FAILED] =
g_signal_new ("session-open-failed",
iface_type,
@@ -381,10 +410,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, session_open_failed),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [SESSION_STARTED] =
g_signal_new ("session-started",
iface_type,
@@ -392,10 +421,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, session_started),
NULL,
NULL,
- g_cclosure_marshal_VOID__INT,
+ gdm_marshal_VOID__STRING_INT,
G_TYPE_NONE,
- 1,
- G_TYPE_INT);
+ 2,
+ G_TYPE_STRING, G_TYPE_INT);
signals [SESSION_START_FAILED] =
g_signal_new ("session-start-failed",
iface_type,
@@ -403,10 +432,10 @@ gdm_session_class_init (gpointer g_iface)
G_STRUCT_OFFSET (GdmSessionIface, session_start_failed),
NULL,
NULL,
- g_cclosure_marshal_VOID__STRING,
+ gdm_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
+ 2,
+ G_TYPE_STRING, G_TYPE_STRING);
signals [SESSION_EXITED] =
g_signal_new ("session-exited",
iface_type,
@@ -475,19 +504,21 @@ gdm_session_class_init (gpointer g_iface)
}
void
-_gdm_session_setup_complete (GdmSession *session)
+_gdm_session_setup_complete (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [SETUP_COMPLETE], 0);
+ g_signal_emit (session, signals [SETUP_COMPLETE], 0, service_name);
}
void
_gdm_session_setup_failed (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [SETUP_FAILED], 0, text);
+ g_signal_emit (session, signals [SETUP_FAILED], 0, service_name, text);
}
void
@@ -507,114 +538,128 @@ _gdm_session_reset_failed (GdmSession *session,
}
void
-_gdm_session_authenticated (GdmSession *session)
+_gdm_session_authenticated (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [AUTHENTICATED], 0);
+ g_signal_emit (session, signals [AUTHENTICATED], 0, service_name);
}
void
_gdm_session_authentication_failed (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [AUTHENTICATION_FAILED], 0, text);
+ g_signal_emit (session, signals [AUTHENTICATION_FAILED], 0, service_name, text);
}
void
-_gdm_session_authorized (GdmSession *session)
+_gdm_session_authorized (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [AUTHORIZED], 0);
+ g_signal_emit (session, signals [AUTHORIZED], 0, service_name);
}
void
_gdm_session_authorization_failed (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [AUTHORIZATION_FAILED], 0, text);
+ g_signal_emit (session, signals [AUTHORIZATION_FAILED], 0, service_name, text);
}
void
-_gdm_session_accredited (GdmSession *session)
+_gdm_session_accredited (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [ACCREDITED], 0);
+ g_signal_emit (session, signals [ACCREDITED], 0, service_name);
}
void
_gdm_session_accreditation_failed (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [ACCREDITATION_FAILED], 0, text);
+ g_signal_emit (session, signals [ACCREDITATION_FAILED], 0, service_name, text);
}
void
_gdm_session_info_query (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [INFO_QUERY], 0, text);
+ g_signal_emit (session, signals [INFO_QUERY], 0, service_name, text);
}
void
_gdm_session_secret_info_query (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [SECRET_INFO_QUERY], 0, text);
+ g_signal_emit (session, signals [SECRET_INFO_QUERY], 0, service_name, text);
}
void
_gdm_session_info (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [INFO], 0, text);
+ g_signal_emit (session, signals [INFO], 0, service_name, text);
}
void
_gdm_session_problem (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [PROBLEM], 0, text);
+ g_signal_emit (session, signals [PROBLEM], 0, service_name, text);
}
void
-_gdm_session_session_opened (GdmSession *session)
+_gdm_session_session_opened (GdmSession *session,
+ const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [SESSION_OPENED], 0);
+ g_signal_emit (session, signals [SESSION_OPENED], 0, service_name);
}
void
_gdm_session_session_open_failed (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [SESSION_OPEN_FAILED], 0, text);
+ g_signal_emit (session, signals [SESSION_OPEN_FAILED], 0, service_name, text);
}
void
_gdm_session_session_started (GdmSession *session,
+ const char *service_name,
int pid)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [SESSION_STARTED], 0, pid);
+ g_signal_emit (session, signals [SESSION_STARTED], 0, service_name, pid);
}
void
_gdm_session_session_start_failed (GdmSession *session,
+ const char *service_name,
const char *text)
{
g_return_if_fail (GDM_IS_SESSION (session));
- g_signal_emit (session, signals [SESSION_START_FAILED], 0, text);
+ g_signal_emit (session, signals [SESSION_START_FAILED], 0, service_name, text);
}
void
@@ -642,6 +687,14 @@ _gdm_session_conversation_started (GdmSession *session,
}
void
+_gdm_session_conversation_stopped (GdmSession *session,
+ const char *service_name)
+{
+ g_return_if_fail (GDM_IS_SESSION (session));
+ g_signal_emit (session, signals [CONVERSATION_STOPPED], 0, service_name);
+}
+
+void
_gdm_session_closed (GdmSession *session)
{
g_return_if_fail (GDM_IS_SESSION (session));