summaryrefslogtreecommitdiff
path: root/daemon/gdm-session-relay.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <mccann@jhu.edu>2007-10-03 01:39:25 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2007-10-03 01:39:25 +0000
commit33c755a0078df7031ec342487203dbe3bf6c9f3f (patch)
treed4735003191ae7c80b53f0763e605fb5b90d4a9d /daemon/gdm-session-relay.c
parent55ecbe7bd1e16643ae2f7b47306114bbabb46ec2 (diff)
downloadgdm-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.c115
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,