diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2012-08-20 17:34:12 +1200 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2012-08-20 17:34:12 +1200 |
commit | 40e9874b5ce72d9de46f5a18251bfe283a76df13 (patch) | |
tree | ed7d17beae60d20e9a838418706da788fab83c8f /liblightdm-gobject | |
parent | 7e521a6cf33c57e762ee5a04c4a0e6756838f94c (diff) | |
download | lightdm-40e9874b5ce72d9de46f5a18251bfe283a76df13.tar.gz |
Start work on supporting remote session types
Diffstat (limited to 'liblightdm-gobject')
-rw-r--r-- | liblightdm-gobject/greeter.c | 44 | ||||
-rw-r--r-- | liblightdm-gobject/lightdm/greeter.h | 4 | ||||
-rw-r--r-- | liblightdm-gobject/lightdm/session.h | 2 | ||||
-rw-r--r-- | liblightdm-gobject/session.c | 15 |
4 files changed, 62 insertions, 3 deletions
diff --git a/liblightdm-gobject/greeter.c b/liblightdm-gobject/greeter.c index 2d31b84c..b6d1ba77 100644 --- a/liblightdm-gobject/greeter.c +++ b/liblightdm-gobject/greeter.c @@ -80,7 +80,8 @@ typedef enum GREETER_MESSAGE_CONTINUE_AUTHENTICATION, GREETER_MESSAGE_START_SESSION, GREETER_MESSAGE_CANCEL_AUTHENTICATION, - GREETER_MESSAGE_SET_LANGUAGE + GREETER_MESSAGE_SET_LANGUAGE, + GREETER_MESSAGE_AUTHENTICATE_REMOTE } GreeterMessage; /* Messages from the server to the greeter */ @@ -770,7 +771,7 @@ lightdm_greeter_cancel_autologin (LightDMGreeter *greeter) * Starts the authentication procedure for a user. **/ void -lightdm_greeter_authenticate (LightDMGreeter *greeter, const char *username) +lightdm_greeter_authenticate (LightDMGreeter *greeter, const gchar *username) { LightDMGreeterPrivate *priv; guint8 message[MAX_MESSAGE_LENGTH]; @@ -832,6 +833,45 @@ lightdm_greeter_authenticate_as_guest (LightDMGreeter *greeter) } /** + * lightdm_greeter_authenticate_remote: + * @greeter: A #LightDMGreeter + * @session: The name of a remote session + * @username: (allow-none): A username of #NULL to prompt for a username. + * + * Start authentication for a remote session type. + **/ +void +lightdm_greeter_authenticate_remote (LightDMGreeter *greeter, const gchar *session, const gchar *username) +{ + LightDMGreeterPrivate *priv; + guint8 message[MAX_MESSAGE_LENGTH]; + gsize offset = 0; + + g_return_if_fail (LIGHTDM_IS_GREETER (greeter)); + + priv = GET_PRIVATE (greeter); + + g_return_if_fail (priv->connected); + + priv->cancelling_authentication = FALSE; + priv->authenticate_sequence_number++; + priv->in_authentication = TRUE; + priv->is_authenticated = FALSE; + g_free (priv->authentication_user); + priv->authentication_user = NULL; + + if (username) + g_debug ("Starting authentication for remote session %s as user %s...", session, username); + else + g_debug ("Starting authentication for remote session %s...", session); + write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_AUTHENTICATE_REMOTE, int_length () + string_length (session) + string_length (username), &offset); + write_int (message, MAX_MESSAGE_LENGTH, priv->authenticate_sequence_number, &offset); + write_string (message, MAX_MESSAGE_LENGTH, session, &offset); + write_string (message, MAX_MESSAGE_LENGTH, username, &offset); + write_message (greeter, message, offset); +} + +/** * lightdm_greeter_respond: * @greeter: A #LightDMGreeter * @response: Response to a prompt diff --git a/liblightdm-gobject/lightdm/greeter.h b/liblightdm-gobject/lightdm/greeter.h index dc051b3e..cd26f772 100644 --- a/liblightdm-gobject/lightdm/greeter.h +++ b/liblightdm-gobject/lightdm/greeter.h @@ -98,10 +98,12 @@ gint lightdm_greeter_get_autologin_timeout_hint (LightDMGreeter *greeter); void lightdm_greeter_cancel_autologin (LightDMGreeter *greeter); -void lightdm_greeter_authenticate (LightDMGreeter *greeter, const char *username); +void lightdm_greeter_authenticate (LightDMGreeter *greeter, const gchar *username); void lightdm_greeter_authenticate_as_guest (LightDMGreeter *greeter); +void lightdm_greeter_authenticate_remote (LightDMGreeter *greeter, const gchar *session, const gchar *username); + void lightdm_greeter_respond (LightDMGreeter *greeter, const gchar *response); void lightdm_greeter_cancel_authentication (LightDMGreeter *greeter); diff --git a/liblightdm-gobject/lightdm/session.h b/liblightdm-gobject/lightdm/session.h index 3b07bdcd..910205e0 100644 --- a/liblightdm-gobject/lightdm/session.h +++ b/liblightdm-gobject/lightdm/session.h @@ -45,6 +45,8 @@ GType lightdm_session_get_type (void); GList *lightdm_get_sessions (void); +GList *lightdm_get_remote_sessions (void); + const gchar *lightdm_session_get_key (LightDMSession *session); const gchar *lightdm_session_get_name (LightDMSession *session); diff --git a/liblightdm-gobject/session.c b/liblightdm-gobject/session.c index 603ddb7f..577e3274 100644 --- a/liblightdm-gobject/session.c +++ b/liblightdm-gobject/session.c @@ -34,6 +34,7 @@ G_DEFINE_TYPE (LightDMSession, lightdm_session, G_TYPE_OBJECT); static gboolean have_sessions = FALSE; static GList *sessions = NULL; +static GList *remote_sessions = NULL; static gint compare_session (gconstpointer a, gconstpointer b) @@ -209,6 +210,20 @@ lightdm_get_sessions (void) } /** + * lightdm_get_remote_sessions: + * + * Get the available remote sessions. + * + * Return value: (element-type LightDMSession) (transfer none): A list of #LightDMSession + **/ +GList * +lightdm_get_remote_sessions (void) +{ + update_sessions (); + return remote_sessions; +} + +/** * lightdm_session_get_key: * @session: A #LightDMSession * |