diff options
author | Ray Strode <rstrode@redhat.com> | 2009-01-16 15:18:31 -0500 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2011-06-13 20:33:47 -0400 |
commit | a4f5409c77a1a30c7a7f5466e86c12197aee0743 (patch) | |
tree | c897a5d1a0f50cad1c889ed54e53227b1ab05f0a /gui | |
parent | c48494034587fcea734a2fb69631590edd54dd15 (diff) | |
download | gdm-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 'gui')
-rw-r--r-- | gui/simple-greeter/gdm-greeter-client.c | 175 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-client.h | 16 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-session.c | 11 |
3 files changed, 159 insertions, 43 deletions
diff --git a/gui/simple-greeter/gdm-greeter-client.c b/gui/simple-greeter/gdm-greeter-client.c index 5fed6f9b..e9916266 100644 --- a/gui/simple-greeter/gdm-greeter-client.c +++ b/gui/simple-greeter/gdm-greeter-client.c @@ -134,6 +134,37 @@ emit_string_and_int_signal_for_message (GdmGreeterClient *client, } static void +emit_string_and_string_signal_for_message (GdmGreeterClient *client, + const char *name, + DBusMessage *message, + int signal) +{ + DBusError error; + char *text1; + char *text2; + dbus_bool_t res; + + dbus_error_init (&error); + res = dbus_message_get_args (message, + &error, + DBUS_TYPE_STRING, &text1, + DBUS_TYPE_STRING, &text2, + DBUS_TYPE_INVALID); + if (res) { + + g_debug ("GdmGreeterClient: Received %s (%s, %s)", name, text1, text2); + + g_signal_emit (client, + gdm_greeter_client_signals[signal], + 0, text1, text2); + } else { + g_warning ("Unable to get arguments: %s", error.message); + dbus_error_free (&error); + } + dbus_error_free (&error); +} + +static void emit_string_signal_for_message (GdmGreeterClient *client, const char *name, DBusMessage *message, @@ -193,37 +224,35 @@ static void on_session_opened (GdmGreeterClient *client, DBusMessage *message) { - g_signal_emit (client, - gdm_greeter_client_signals[SESSION_OPENED], - 0); + emit_string_signal_for_message (client, "SessionOpened", message, SESSION_OPENED); } static void on_info_query (GdmGreeterClient *client, DBusMessage *message) { - emit_string_signal_for_message (client, "InfoQuery", message, INFO_QUERY); + emit_string_and_string_signal_for_message (client, "InfoQuery", message, INFO_QUERY); } static void on_secret_info_query (GdmGreeterClient *client, DBusMessage *message) { - emit_string_signal_for_message (client, "SecretInfoQuery", message, SECRET_INFO_QUERY); + emit_string_and_string_signal_for_message (client, "SecretInfoQuery", message, SECRET_INFO_QUERY); } static void on_info (GdmGreeterClient *client, DBusMessage *message) { - emit_string_signal_for_message (client, "Info", message, INFO); + emit_string_and_string_signal_for_message (client, "Info", message, INFO); } static void on_problem (GdmGreeterClient *client, DBusMessage *message) { - emit_string_signal_for_message (client, "Problem", message, PROBLEM); + emit_string_and_string_signal_for_message (client, "Problem", message, PROBLEM); } static void @@ -311,14 +340,61 @@ send_dbus_string_method (DBusConnection *connection, } static gboolean -send_dbus_bool_method (DBusConnection *connection, - const char *method, - gboolean payload) +send_dbus_string_and_bool_method (DBusConnection *connection, + const char *method, + const char *string_payload, + gboolean bool_payload) +{ + DBusMessage *message; + DBusMessageIter iter; + const char *str; + + if (string_payload != NULL) { + str = string_payload; + } else { + str = ""; + } + + g_debug ("GdmGreeterClient: Calling %s", method); + message = dbus_message_new_method_call (NULL, + GREETER_SERVER_DBUS_PATH, + GREETER_SERVER_DBUS_INTERFACE, + method); + if (message == NULL) { + g_warning ("Couldn't allocate the D-Bus message"); + return FALSE; + } + + dbus_message_iter_init_append (message, &iter); + dbus_message_iter_append_basic (&iter, + DBUS_TYPE_STRING, + &str); + + dbus_message_iter_append_basic (&iter, + DBUS_TYPE_BOOLEAN, + &bool_payload); + dbus_message_set_no_reply (message, TRUE); + + dbus_connection_send (connection, message, NULL); + + dbus_message_unref (message); + + dbus_connection_flush (connection); + + return TRUE; +} + +static gboolean +send_dbus_string_and_string_method (DBusConnection *connection, + const char *method, + const char *payload1, + const char *payload2) { DBusError error; DBusMessage *message; DBusMessage *reply; DBusMessageIter iter; + const char *str; g_debug ("GdmGreeterClient: Calling %s", method); message = dbus_message_new_method_call (NULL, @@ -331,9 +407,24 @@ send_dbus_bool_method (DBusConnection *connection, } dbus_message_iter_init_append (message, &iter); + + if (payload1 != NULL) { + str = payload1; + } else { + str = ""; + } dbus_message_iter_append_basic (&iter, - DBUS_TYPE_BOOLEAN, - &payload); + DBUS_TYPE_STRING, + &str); + + if (payload2 != NULL) { + str = payload2; + } else { + str = ""; + } + dbus_message_iter_append_basic (&iter, + DBUS_TYPE_STRING, + &str); dbus_error_init (&error); reply = dbus_connection_send_with_reply_and_block (connection, @@ -416,37 +507,44 @@ gdm_greeter_client_call_begin_auto_login (GdmGreeterClient *client, } void -gdm_greeter_client_call_begin_verification (GdmGreeterClient *client) +gdm_greeter_client_call_begin_verification (GdmGreeterClient *client, + const char *service_name) { - send_dbus_void_method (client->priv->connection, - "BeginVerification"); + send_dbus_string_method (client->priv->connection, + "BeginVerification", service_name); } void gdm_greeter_client_call_begin_verification_for_user (GdmGreeterClient *client, + const char *service_name, const char *username) { - send_dbus_string_method (client->priv->connection, - "BeginVerificationForUser", - username); + send_dbus_string_and_string_method (client->priv->connection, + "BeginVerificationForUser", + service_name, + username); } void gdm_greeter_client_call_answer_query (GdmGreeterClient *client, + const char *service_name, const char *text) { - send_dbus_string_method (client->priv->connection, - "AnswerQuery", - text); + send_dbus_string_and_string_method (client->priv->connection, + "AnswerQuery", + service_name, + text); } void gdm_greeter_client_call_start_session_when_ready (GdmGreeterClient *client, + const char *service_name, gboolean should_start_session) { - send_dbus_bool_method (client->priv->connection, - "StartSessionWhenReady", - should_start_session); + send_dbus_string_and_bool_method (client->priv->connection, + "StartSessionWhenReady", + service_name, + should_start_session); } void @@ -822,10 +920,10 @@ gdm_greeter_client_class_init (GdmGreeterClientClass *klass) G_STRUCT_OFFSET (GdmGreeterClientClass, 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); gdm_greeter_client_signals[SECRET_INFO_QUERY] = g_signal_new ("secret-info-query", @@ -834,10 +932,10 @@ gdm_greeter_client_class_init (GdmGreeterClientClass *klass) G_STRUCT_OFFSET (GdmGreeterClientClass, 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); gdm_greeter_client_signals[INFO] = g_signal_new ("info", @@ -846,10 +944,10 @@ gdm_greeter_client_class_init (GdmGreeterClientClass *klass) G_STRUCT_OFFSET (GdmGreeterClientClass, 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); gdm_greeter_client_signals[PROBLEM] = g_signal_new ("problem", @@ -858,10 +956,10 @@ gdm_greeter_client_class_init (GdmGreeterClientClass *klass) G_STRUCT_OFFSET (GdmGreeterClientClass, 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); gdm_greeter_client_signals[READY] = g_signal_new ("ready", @@ -943,8 +1041,9 @@ gdm_greeter_client_class_init (GdmGreeterClientClass *klass) G_STRUCT_OFFSET (GdmGreeterClientClass, session_opened), NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, + 1, G_TYPE_STRING); } static void diff --git a/gui/simple-greeter/gdm-greeter-client.h b/gui/simple-greeter/gdm-greeter-client.h index 8982214a..658da484 100644 --- a/gui/simple-greeter/gdm-greeter-client.h +++ b/gui/simple-greeter/gdm-greeter-client.h @@ -45,17 +45,22 @@ typedef struct GObjectClass parent_class; void (* info_query) (GdmGreeterClient *client, + const char *service_name, const char *query_text); void (* secret_info_query) (GdmGreeterClient *client, + const char *service_name, const char *query_text); void (* info) (GdmGreeterClient *client, + const char *service_name, const char *info); void (* problem) (GdmGreeterClient *client, + const char *service_name, const char *problem); - void (* ready) (GdmGreeterClient *client); + void (* ready) (GdmGreeterClient *client, + const char *service_name); void (* reset) (GdmGreeterClient *client); void (* authentication_failed) (GdmGreeterClient *client); void (* selected_user_changed) (GdmGreeterClient *client, @@ -68,7 +73,8 @@ typedef struct void (* timed_login_requested) (GdmGreeterClient *client, const char *username, int delay); - void (* session_opened) (GdmGreeterClient *client); + void (* session_opened) (GdmGreeterClient *client, + const char *service_name); } GdmGreeterClientClass; #define GDM_GREETER_CLIENT_ERROR (gdm_greeter_client_error_quark ()) @@ -94,8 +100,10 @@ void gdm_greeter_client_call_start_conversation (GdmGreeter const char *service_name); void gdm_greeter_client_call_begin_auto_login (GdmGreeterClient *client, const char *username); -void gdm_greeter_client_call_begin_verification (GdmGreeterClient *client); +void gdm_greeter_client_call_begin_verification (GdmGreeterClient *client, + const char *service_name); void gdm_greeter_client_call_begin_verification_for_user (GdmGreeterClient *client, + const char *service_name, const char *username); void gdm_greeter_client_call_cancel (GdmGreeterClient *client); void gdm_greeter_client_call_disconnect (GdmGreeterClient *client); @@ -108,9 +116,11 @@ void gdm_greeter_client_call_select_language (GdmGreeter void gdm_greeter_client_call_select_session (GdmGreeterClient *client, const char *text); void gdm_greeter_client_call_answer_query (GdmGreeterClient *client, + const char *service_name, const char *text); void gdm_greeter_client_call_start_session_when_ready (GdmGreeterClient *client, + const char *service_name, gboolean should_start_session); diff --git a/gui/simple-greeter/gdm-greeter-session.c b/gui/simple-greeter/gdm-greeter-session.c index 94473446..d939f472 100644 --- a/gui/simple-greeter/gdm-greeter-session.c +++ b/gui/simple-greeter/gdm-greeter-session.c @@ -69,6 +69,7 @@ static gpointer session_object = NULL; static void on_info (GdmGreeterClient *client, + const char *service_name, const char *text, GdmGreeterSession *session) { @@ -79,6 +80,7 @@ on_info (GdmGreeterClient *client, static void on_problem (GdmGreeterClient *client, + const char *service_name, const char *text, GdmGreeterSession *session) { @@ -187,6 +189,7 @@ on_session_opened (GdmGreeterClient *client, static void on_info_query (GdmGreeterClient *client, + const char *service_name, const char *text, GdmGreeterSession *session) { @@ -197,6 +200,7 @@ on_info_query (GdmGreeterClient *client, static void on_secret_info_query (GdmGreeterClient *client, + const char *service_name, const char *text, GdmGreeterSession *session) { @@ -218,7 +222,8 @@ static void on_begin_verification (GdmGreeterLoginWindow *login_window, GdmGreeterSession *session) { - gdm_greeter_client_call_begin_verification (session->priv->client); + gdm_greeter_client_call_begin_verification (session->priv->client, + "gdm"); } static void @@ -227,6 +232,7 @@ on_begin_verification_for_user (GdmGreeterLoginWindow *login_window, GdmGreeterSession *session) { gdm_greeter_client_call_begin_verification_for_user (session->priv->client, + "gdm", username); } @@ -236,6 +242,7 @@ on_query_answer (GdmGreeterLoginWindow *login_window, GdmGreeterSession *session) { gdm_greeter_client_call_answer_query (session->priv->client, + "gdm", text); } @@ -276,7 +283,7 @@ static void on_start_session (GdmGreeterLoginWindow *login_window, GdmGreeterSession *session) { - gdm_greeter_client_call_start_session_when_ready (session->priv->client, TRUE); + gdm_greeter_client_call_start_session_when_ready (session->priv->client, "gdm", TRUE); } static int |