diff options
author | William Jon McCann <mccann@jhu.edu> | 2007-10-03 01:39:25 +0000 |
---|---|---|
committer | William Jon McCann <mccann@src.gnome.org> | 2007-10-03 01:39:25 +0000 |
commit | 33c755a0078df7031ec342487203dbe3bf6c9f3f (patch) | |
tree | d4735003191ae7c80b53f0763e605fb5b90d4a9d /daemon/gdm-session-relay.c | |
parent | 55ecbe7bd1e16643ae2f7b47306114bbabb46ec2 (diff) | |
download | gdm-33c755a0078df7031ec342487203dbe3bf6c9f3f.tar.gz |
Require the greeter to call BeginVerification. But only after the greeter
2007-10-02 William Jon McCann <mccann@jhu.edu>
* daemon/gdm-factory-slave.c: (on_session_relay_info),
(on_session_relay_problem), (on_session_relay_info_query),
(on_session_relay_secret_info_query), (on_session_relay_opened),
(on_session_relay_user_verified), (greeter_reset_timeout),
(queue_greeter_reset), (on_session_relay_user_verification_error),
(on_session_relay_disconnected),
(on_session_relay_session_started),
(on_greeter_begin_verification), (run_greeter),
(gdm_factory_slave_start), (gdm_factory_slave_finalize):
* daemon/gdm-greeter-server.c: (gdm_greeter_server_ready),
(handle_begin_verification), (greeter_handle_child_message),
(do_introspect), (gdm_greeter_server_class_init):
* daemon/gdm-greeter-server.h:
* daemon/gdm-local-display-factory.c: (create_display_for_device):
* daemon/gdm-product-slave.c: (relay_session_opened),
(on_session_opened), (on_session_user_verified),
(on_session_user_verification_error), (on_session_info),
(on_session_problem), (on_session_info_query),
(on_session_secret_info_query), (on_relay_begin_verification),
(create_new_session), (on_relay_cancelled),
(connect_to_session_relay), (gdm_product_slave_start):
* daemon/gdm-session-relay.c:
(gdm_session_relay_begin_verification), (handle_user_verified),
(handle_user_verification_error), (handle_opened),
(session_handle_child_message), (do_introspect),
(handle_connection), (gdm_session_relay_class_init):
* daemon/gdm-session-relay.h:
* daemon/gdm-session.c:
* daemon/gdm-simple-slave.c: (on_session_user_verified),
(on_session_user_verification_error), (on_session_info),
(on_session_problem), (on_session_info_query),
(on_session_secret_info_query), (on_session_opened),
(create_new_session), (on_greeter_begin_verification),
(on_greeter_user_selected), (run_greeter),
(gdm_simple_slave_finalize):
* gui/simple-greeter/Makefile.am:
* gui/simple-greeter/gdm-simple-greeter.c: (switch_page),
(do_cancel), (reset_dialog), (gdm_simple_greeter_ready),
(gdm_simple_greeter_reset), (on_user_activated), (create_greeter),
(gdm_simple_greeter_class_init):
* gui/simple-greeter/gdm-simple-greeter.glade:
* gui/simple-greeter/gdm-user-chooser-widget.c: (populate_model):
* gui/simple-greeter/greeter-main.c: (on_ready),
(on_begin_verification), (main):
* libgreeter/gdm-greeter.c: (gdm_greeter_real_ready),
(gdm_greeter_ready), (gdm_greeter_emit_begin_verification),
(gdm_greeter_emit_answer_query), (gdm_greeter_class_init):
* libgreeter/gdm-greeter.h:
Require the greeter to call BeginVerification. But only
after the greeter is sent a Ready.
Make the factory-slave report verification status.
Audit the communication paths and apply some fixes.
Hook up the user chooser in the greeter. Only has dummy users.
svn path=/branches/mccann-gobject/; revision=5330
Diffstat (limited to 'daemon/gdm-session-relay.c')
-rw-r--r-- | daemon/gdm-session-relay.c | 115 |
1 files changed, 100 insertions, 15 deletions
diff --git a/daemon/gdm-session-relay.c b/daemon/gdm-session-relay.c index afbb14cb..21c4cf2a 100644 --- a/daemon/gdm-session-relay.c +++ b/daemon/gdm-session-relay.c @@ -62,13 +62,16 @@ enum { }; enum { - INFO_QUERY, - SECRET_INFO_QUERY, + USER_VERIFIED = 0, + USER_VERIFICATION_ERROR, INFO, PROBLEM, + INFO_QUERY, + SECRET_INFO_QUERY, SESSION_STARTED, SESSION_STOPPED, - READY, + OPENED, + CLOSED, CONNECTED, DISCONNECTED, LAST_SIGNAL @@ -157,6 +160,14 @@ gdm_session_relay_open (GdmSessionRelay *session_relay) } void +gdm_session_relay_begin_verification (GdmSessionRelay *session_relay, + const char *username) +{ + g_debug ("Sending signal BeginVerification"); + send_dbus_string_signal (session_relay, "BeginVerification", username); +} + +void gdm_session_relay_answer_query (GdmSessionRelay *session_relay, const char *text) { @@ -328,6 +339,48 @@ handle_problem (GdmSessionRelay *session_relay, } static DBusHandlerResult +handle_user_verified (GdmSessionRelay *session_relay, + DBusConnection *connection, + DBusMessage *message) +{ + DBusMessage *reply; + DBusError error; + + dbus_error_init (&error); + + g_debug ("UserVerified"); + + reply = dbus_message_new_method_return (message); + dbus_connection_send (connection, reply, NULL); + dbus_message_unref (reply); + + g_signal_emit (session_relay, signals [USER_VERIFIED], 0); + + return DBUS_HANDLER_RESULT_HANDLED; +} + +static DBusHandlerResult +handle_user_verification_error (GdmSessionRelay *session_relay, + DBusConnection *connection, + DBusMessage *message) +{ + DBusMessage *reply; + DBusError error; + + dbus_error_init (&error); + + g_debug ("UserVerificationError"); + + reply = dbus_message_new_method_return (message); + dbus_connection_send (connection, reply, NULL); + dbus_message_unref (reply); + + g_signal_emit (session_relay, signals [USER_VERIFICATION_ERROR], 0); + + return DBUS_HANDLER_RESULT_HANDLED; +} + +static DBusHandlerResult handle_session_started (GdmSessionRelay *session_relay, DBusConnection *connection, DBusMessage *message) @@ -370,22 +423,22 @@ handle_session_stopped (GdmSessionRelay *session_relay, } static DBusHandlerResult -handle_ready (GdmSessionRelay *session_relay, - DBusConnection *connection, - DBusMessage *message) +handle_opened (GdmSessionRelay *session_relay, + DBusConnection *connection, + DBusMessage *message) { DBusMessage *reply; DBusError error; dbus_error_init (&error); - g_debug ("Ready"); + g_debug ("Opened"); reply = dbus_message_new_method_return (message); dbus_connection_send (connection, reply, NULL); dbus_message_unref (reply); - g_signal_emit (session_relay, signals [READY], 0); + g_signal_emit (session_relay, signals [OPENED], 0); return DBUS_HANDLER_RESULT_HANDLED; } @@ -427,12 +480,16 @@ session_handle_child_message (DBusConnection *connection, return handle_info (session_relay, connection, message); } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "Problem")) { return handle_problem (session_relay, connection, message); + } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "UserVerified")) { + return handle_user_verified (session_relay, connection, message); + } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "UserVerificationError")) { + return handle_user_verification_error (session_relay, connection, message); } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "SessionStarted")) { return handle_session_started (session_relay, connection, message); } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "SessionStopped")) { return handle_session_started (session_relay, connection, message); - } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "Ready")) { - return handle_ready (session_relay, connection, message); + } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "Opened")) { + return handle_opened (session_relay, connection, message); } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "Reset")) { return handle_reset (session_relay, connection, message); } @@ -465,6 +522,9 @@ do_introspect (DBusConnection *connection, " <interface name=\"org.gnome.DisplayManager.SessionRelay\">\n" " <method name=\"UserVerified\">\n" " </method>\n" + " <method name=\"UserVerificationError\">\n" + " <arg name=\"text\" type=\"s\"/>\n" + " </method>\n" " <method name=\"InfoQuery\">\n" " <arg name=\"text\" type=\"s\"/>\n" " </method>\n" @@ -481,12 +541,15 @@ do_introspect (DBusConnection *connection, " </method>\n" " <method name=\"SessionStopped\">\n" " </method>\n" - " <method name=\"Ready\">\n" + " <method name=\"Opened\">\n" " </method>\n" " <method name=\"Reset\">\n" " </method>\n" " <signal name=\"Open\">\n" " </signal>\n" + " <signal name=\"BeginVerification\">\n" + " <arg name=\"username\" type=\"s\"/>\n" + " </signal>\n" " <signal name=\"AnswerQuery\">\n" " <arg name=\"text\" type=\"s\"/>\n" " </signal>\n" @@ -668,6 +731,7 @@ handle_connection (DBusServer *server, g_signal_emit (session_relay, signals[CONNECTED], 0); + gdm_session_relay_open (session_relay); } } @@ -794,7 +858,28 @@ gdm_session_relay_class_init (GdmSessionRelayClass *klass) g_type_class_add_private (klass, sizeof (GdmSessionRelayPrivate)); - signals [INFO_QUERY] = + signals [USER_VERIFIED] = + g_signal_new ("user-verified", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GdmSessionRelayClass, user_verified), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + signals [USER_VERIFICATION_ERROR] = + g_signal_new ("user-verification-error", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GdmSessionRelayClass, user_verification_error), + NULL, + NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, + 1, + G_TYPE_POINTER); + signals [INFO_QUERY] = g_signal_new ("info-query", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, @@ -848,11 +933,11 @@ gdm_session_relay_class_init (GdmSessionRelayClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - signals [READY] = - g_signal_new ("ready", + signals [OPENED] = + g_signal_new ("opened", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdmSessionRelayClass, ready), + G_STRUCT_OFFSET (GdmSessionRelayClass, opened), NULL, NULL, g_cclosure_marshal_VOID__VOID, |