]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
More guest account work, change liblightdm API
authorRobert Ancell <robert.ancell@canonical.com>
Fri, 3 Jun 2011 10:46:21 +0000 (20:46 +1000)
committerRobert Ancell <robert.ancell@canonical.com>
Fri, 3 Jun 2011 10:46:21 +0000 (20:46 +1000)
18 files changed:
NEWS
doc/lightdm-gobject-0-sections.txt
doc/tmpl/greeter.sgml
doc/tmpl/user.sgml
greeters/gtk/lightdm-example-gtk-greeter.c
greeters/qt/loginprompt.cpp
greeters/vala-gtk/lightdm-example-vala-gtk-greeter.vala
liblightdm-gobject/greeter-protocol.h
liblightdm-gobject/greeter.c
liblightdm-gobject/liblightdm-gobject-0.vapi
liblightdm-gobject/lightdm/greeter.h
liblightdm-qt/QLightDM/greeter.cpp
liblightdm-qt/QLightDM/greeter.h
src/display.c
src/greeter-protocol.h
src/greeter.c
src/greeter.h
src/ldm-marshal.list

diff --git a/NEWS b/NEWS
index 909e1f7a8255917cb4744ca73476656d8ac56344..e2ea7d20c19cc40808db75aef5cca7e9aac48d2f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+Overview of changes in lightdm 0.3.8
+
+    * liblightdm API change:
+      - ldm_greeter_start_authentication becomes ldm_greeter_login
+      - The existing ldm_greeter_login is now ldm_greeter_start_session
+        and the username parameter is not required.
+    * Add guest account logins
+
 Overview of changes in lightdm 0.3.7
 
     * Fix autologin broken in 0.3.3
index 92d95907bd6c0c57404846233e42cea66fedc3c9..59c2cb65c6e93e9a7989d31ef4687cca5e5faea9 100644 (file)
@@ -50,6 +50,7 @@ LdmUser
 ldm_user_get_name
 ldm_user_get_real_name
 ldm_user_get_display_name
+ldm_user_get_home_directory
 ldm_user_get_image
 ldm_user_get_language
 ldm_user_get_layout
@@ -67,9 +68,12 @@ LDM_USER_GET_CLASS
 LdmUserClass
 LdmUserPrivate
 ldm_user_new
+ldm_user_set_name
+ldm_user_set_real_name
+ldm_user_set_home_directory
 ldm_user_set_image
 ldm_user_set_logged_in
-ldm_user_set_real_name
+ldm_user_update
 </SECTION>
 
 <SECTION>
@@ -115,17 +119,19 @@ ldm_greeter_get_layout
 ldm_greeter_set_layout
 ldm_greeter_get_sessions
 ldm_greeter_get_default_session
+ldm_greeter_get_has_guest_session
 ldm_greeter_get_timed_login_user
 ldm_greeter_get_timed_login_delay
 ldm_greeter_cancel_timed_login
-ldm_greeter_start_authentication
+ldm_greeter_login
+ldm_greeter_login_as_guest
 ldm_greeter_provide_secret
 ldm_greeter_cancel_authentication
 ldm_greeter_get_in_authentication
 ldm_greeter_get_is_authenticated
 ldm_greeter_get_authentication_user
-ldm_greeter_login
-ldm_greeter_login_with_defaults
+ldm_greeter_start_session
+ldm_greeter_start_session_with_defaults
 ldm_greeter_get_can_suspend
 ldm_greeter_suspend
 ldm_greeter_get_can_hibernate
index e48354befa22de693c4e1640487a3c0b0e933566..94f879e4fa456fac1d35b97aa78b121a89560321 100644 (file)
@@ -388,6 +388,15 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
 @Returns: 
 
 
+<!-- ##### FUNCTION ldm_greeter_get_has_guest_session ##### -->
+<para>
+
+</para>
+
+@greeter: 
+@Returns: 
+
+
 <!-- ##### FUNCTION ldm_greeter_get_timed_login_user ##### -->
 <para>
 
@@ -414,7 +423,7 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
 @greeter: 
 
 
-<!-- ##### FUNCTION ldm_greeter_start_authentication ##### -->
+<!-- ##### FUNCTION ldm_greeter_login ##### -->
 <para>
 
 </para>
@@ -423,6 +432,14 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
 @username: 
 
 
+<!-- ##### FUNCTION ldm_greeter_login_as_guest ##### -->
+<para>
+
+</para>
+
+@greeter: 
+
+
 <!-- ##### FUNCTION ldm_greeter_provide_secret ##### -->
 <para>
 
@@ -467,24 +484,22 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
 @Returns: 
 
 
-<!-- ##### FUNCTION ldm_greeter_login ##### -->
+<!-- ##### FUNCTION ldm_greeter_start_session ##### -->
 <para>
 
 </para>
 
 @greeter: 
-@username: 
 @session: 
 @language: 
 
 
-<!-- ##### FUNCTION ldm_greeter_login_with_defaults ##### -->
+<!-- ##### FUNCTION ldm_greeter_start_session_with_defaults ##### -->
 <para>
 
 </para>
 
 @greeter: 
-@username: 
 
 
 <!-- ##### FUNCTION ldm_greeter_get_can_suspend ##### -->
index 2ca73579a7b4d3340220d84cfc0fdeddf32b5085..8119af656a18a07bb5d3e2e0e57e42df876ac2a2 100644 (file)
@@ -119,6 +119,15 @@ A user has the following properties:
 @Returns: 
 
 
+<!-- ##### FUNCTION ldm_user_get_home_directory ##### -->
+<para>
+
+</para>
+
+@user: 
+@Returns: 
+
+
 <!-- ##### FUNCTION ldm_user_get_image ##### -->
 <para>
 
index 77cbe15ae92d7560c4ce684767cbaee1b69d40db..4e2f8a464d0e0adce664e187f95cc3512cc4c9df 100644 (file)
@@ -89,7 +89,7 @@ start_authentication (const gchar *username)
         g_free (session);
     }
 
-    ldm_greeter_start_authentication (greeter, username);
+    ldm_greeter_login (greeter, username);
 }
 
 void user_treeview_row_activated_cb (GtkWidget *widget, GtkTreePath *path, GtkTreeViewColumn *column);
@@ -186,7 +186,7 @@ authentication_complete_cb (LdmGreeter *greeter)
     if (ldm_greeter_get_is_authenticated (greeter))
     {
         gchar *session = get_session ();
-        ldm_greeter_login (greeter, ldm_greeter_get_authentication_user (greeter), session, NULL);
+        ldm_greeter_start_session (greeter, session, NULL);
         g_free (session);
     }
     else
@@ -199,7 +199,7 @@ authentication_complete_cb (LdmGreeter *greeter)
 static void
 timed_login_cb (LdmGreeter *greeter, const gchar *username)
 {
-    ldm_greeter_login (greeter, ldm_greeter_get_timed_login_user (greeter), NULL, NULL);
+    ldm_greeter_start_session (greeter, NULL, NULL); // FIXME: timed user is not authenticated...
 }
 
 void suspend_cb (GtkWidget *widget, LdmGreeter *greeter);
index 3a17ee77d3719ac9a5fc2c9f26ece6781e58aa4c..64bcd7594e412596fc4d4667e173b1796fea5781 100644 (file)
@@ -38,14 +38,14 @@ void LoginPrompt::onLoginButtonClicked()
     ui->feedbackLabel->setText(QString());
     QModelIndex currentIndex = ui->userListView->currentIndex();
     if (currentIndex.isValid()) {
-        m_greeter->startAuthentication(currentIndex.data(QLightDM::UsersModel::NameRole).toString());
+        m_greeter->login(currentIndex.data(QLightDM::UsersModel::NameRole).toString());
     }
 }
 
 void LoginPrompt::onAuthenticationComplete(bool success)
 {
     if (success) {
-        m_greeter->loginWithDefaults(m_greeter->authenticationUser());
+        m_greeter->startSessionWithDefaults();
     } else {
         ui->feedbackLabel->setText("Sorry, you suck. Try again.");
     }
index 9620a03d96a4d54585b0237d73db73ec81aa9f29..2bf051a0b593b16e1334be39628599f65dd1b6f9 100644 (file)
@@ -25,7 +25,7 @@ class Greeter
     private void username_activate_cb (Gtk.Entry entry)
     {
         username_entry.sensitive = false;
-        greeter.start_authentication (username_entry.text);
+        greeter.login (username_entry.text);
     }
 
     private void password_activate_cb (Gtk.Entry entry)
@@ -97,7 +97,7 @@ class Greeter
         username_entry.sensitive = true;
         username_entry.grab_focus ();
         if (greeter.is_authenticated)
-            greeter.login (greeter.get_authentication_user (), null, null);
+            greeter.start_session_with_defaults ();
         else
         {
             message_label.label = "Failed to authenticate";
@@ -107,7 +107,7 @@ class Greeter
 
     private void timed_login_cb (LightDM.Greeter greeter, string username)
     {
-        greeter.login (greeter.get_timed_login_user (), null, null);
+        greeter.start_session_with_defaults (); // FIXME: timed user is not authenticated...
     }
 
     private void quit_cb (LightDM.Greeter greeter)
index e4e9bd24c8ac93e812c84a8fb9683d44c056b4d5..cd15cf3b990d384298fd15a085b9f95d529f4b31 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Robert Ancell.
+ * Copyright (C) 2010-2011 Robert Ancell.
  * Author: Robert Ancell <robert.ancell@canonical.com>
  * 
  * This program is free software: you can redistribute it and/or modify it under
@@ -16,19 +16,19 @@ typedef enum
 {
     /* Messages from the greeter to the server */
     GREETER_MESSAGE_CONNECT                 = 1,
-    GREETER_MESSAGE_START_AUTHENTICATION    = 2,
-    GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 3,
-    GREETER_MESSAGE_LOGIN                   = 4,
-    GREETER_MESSAGE_CANCEL_AUTHENTICATION   = 5,
-    GREETER_MESSAGE_GET_USER_DEFAULTS       = 6,
-    GREETER_MESSAGE_LOGIN_AS_GUEST          = 7,
+    GREETER_MESSAGE_LOGIN                   = 2,
+    GREETER_MESSAGE_LOGIN_AS_GUEST          = 3,
+    GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 4,
+    GREETER_MESSAGE_START_SESSION           = 5,
+    GREETER_MESSAGE_CANCEL_AUTHENTICATION   = 6,
+    GREETER_MESSAGE_GET_USER_DEFAULTS       = 7,
 
     /* Messages from the server to the greeter */
     GREETER_MESSAGE_CONNECTED               = 101,
     GREETER_MESSAGE_QUIT                    = 102,
     GREETER_MESSAGE_PROMPT_AUTHENTICATION   = 103,
     GREETER_MESSAGE_END_AUTHENTICATION      = 104,
-    GREETER_MESSAGE_USER_DEFAULTS           = 106  
+    GREETER_MESSAGE_USER_DEFAULTS           = 106
 } GreeterMessage;
 
 #endif /* _GREETER_PROTOCOL_H_ */
index 6c2469e739f4de1d3a64471a9c56e96613feb713..1286963d51d3fbdbc8e9d2a370cd562f4419b0bb 100644 (file)
@@ -1246,14 +1246,14 @@ ldm_greeter_cancel_timed_login (LdmGreeter *greeter)
 }
 
 /**
- * ldm_greeter_start_authentication:
+ * ldm_greeter_login:
  * @greeter: A #LdmGreeter
  * @username: A username
  *
  * Starts the authentication procedure for a user.
  **/
 void
-ldm_greeter_start_authentication (LdmGreeter *greeter, const char *username)
+ldm_greeter_login (LdmGreeter *greeter, const char *username)
 {
     g_return_if_fail (LDM_IS_GREETER (greeter));
     g_return_if_fail (username != NULL);
@@ -1263,11 +1263,31 @@ ldm_greeter_start_authentication (LdmGreeter *greeter, const char *username)
     g_free (greeter->priv->authentication_user);
     greeter->priv->authentication_user = g_strdup (username);
     g_debug ("Starting authentication for user %s...", username);
-    write_header (greeter, GREETER_MESSAGE_START_AUTHENTICATION, string_length (username));
+    write_header (greeter, GREETER_MESSAGE_LOGIN, string_length (username));
     write_string (greeter, username);
     flush (greeter);
 }
 
+/**
+ * ldm_greeter_login_as_guest:
+ * @greeter: A #LdmGreeter
+ *
+ * Starts the authentication procedure for the guest user.
+ **/
+void
+ldm_greeter_login_as_guest (LdmGreeter *greeter)
+{
+    g_return_if_fail (LDM_IS_GREETER (greeter));
+
+    greeter->priv->in_authentication = TRUE;
+    greeter->priv->is_authenticated = FALSE;
+    g_free (greeter->priv->authentication_user);
+    greeter->priv->authentication_user = NULL;
+    g_debug ("Starting authentication for guest account...");
+    write_header (greeter, GREETER_MESSAGE_LOGIN_AS_GUEST, 0);
+    flush (greeter);
+}
+
 /**
  * ldm_greeter_provide_secret:
  * @greeter: A #LdmGreeter
@@ -1349,81 +1369,40 @@ ldm_greeter_get_authentication_user (LdmGreeter *greeter)
 }
 
 /**
- * ldm_greeter_login:
+ * ldm_greeter_start_session:
  * @greeter: A #LdmGreeter
- * @username: The user to log in as
  * @session: (allow-none): The session to log into or NULL to use the default
  * @language: (allow-none): The language to use or NULL to use the default
  *
- * Login a user to a session.
+ * Start a session for the logged in user.
  **/
 void
-ldm_greeter_login (LdmGreeter *greeter, const gchar *username, const gchar *session, const gchar *language)
+ldm_greeter_start_session (LdmGreeter *greeter, const gchar *session, const gchar *language)
 {
     g_return_if_fail (LDM_IS_GREETER (greeter));
-    g_return_if_fail (username != NULL);
   
     if (!session)
         session = "";
     if (!language)
         language = "";
 
-    g_debug ("Logging in as %s", username);
-    write_header (greeter, GREETER_MESSAGE_LOGIN, string_length (username) + string_length (session) + string_length (language));
-    write_string (greeter, username);
+    g_debug ("Starting session %s with language %s", session, language);
+    write_header (greeter, GREETER_MESSAGE_START_SESSION, string_length (session) + string_length (language));
     write_string (greeter, session);
     write_string (greeter, language);
     flush (greeter);
 }
 
 /**
- * ldm_greeter_login_with_defaults:
+ * ldm_greeter_start_session_with_defaults:
  * @greeter: A #LdmGreeter
- * @username: The user to log in as
  *
  * Login a user to a session using default settings for that user.
  **/
 void
-ldm_greeter_login_with_defaults (LdmGreeter *greeter, const gchar *username)
-{
-    ldm_greeter_login (greeter, username, NULL, NULL);
-}
-
-/**
- * ldm_greeter_login_as_guest:
- * @greeter: A #LdmGreeter
- * @session: (allow-none): The session to log into or NULL to use the default
- * @language: (allow-none): The language to use or NULL to use the default
- *
- * Login a user into a guest session.
- **/
-void
-ldm_greeter_login_as_guest (LdmGreeter *greeter, const gchar *session, const gchar *language)
-{
-    g_return_if_fail (LDM_IS_GREETER (greeter));
-
-    if (!session)
-        session = "";
-    if (!language)
-        language = "";
-
-    g_debug ("Logging into guest account");
-    write_header (greeter, GREETER_MESSAGE_LOGIN_AS_GUEST, string_length (session) + string_length (language));
-    write_string (greeter, session);
-    write_string (greeter, language);
-    flush (greeter);
-}
-
-/**
- * ldm_greeter_login_as_guest_with_defaults:
- * @greeter: A #LdmGreeter
- *
- * Login a user into a guest session using default settings for that user.
- **/
-void
-ldm_greeter_login_as_guest_with_defaults (LdmGreeter *greeter)
+ldm_greeter_start_session_with_defaults (LdmGreeter *greeter)
 {
-    ldm_greeter_login_as_guest (greeter, NULL, NULL);  
+    ldm_greeter_start_session (greeter, NULL, NULL);
 }
 
 static gboolean
index b0c375e14aa1633e6834eaf3b833e68247abc4b6..6aa5d4dbae0c74147a2d9b1b3f0aff5b65493748 100644 (file)
@@ -31,13 +31,14 @@ namespace LightDM {
                public bool get_user_defaults (string username, out string language, out string layout, out string session);
                public unowned GLib.List<weak LightDM.User> get_users ();
                public void hibernate ();
-               public void login (string username, string? session, string? language);
-               public void login_with_defaults (string username);
+               public void start_session (string? session, string? language);
+               public void start_session_with_defaults ();
                public void provide_secret (string secret);
                public void restart ();
                public void set_layout (string layout);
                public void shutdown ();
-               public void start_authentication (string username);
+               public void login (string username);
+               public void login_as_guest ();
                public void suspend ();
                public string authentication_user { get; }
                public bool can_hibernate { get; }
index 164385e577df22c4942856937a61258be823bcb0..0369785843bf2618674834ab0fb446c867872d41 100644 (file)
@@ -101,7 +101,9 @@ gint ldm_greeter_get_timed_login_delay (LdmGreeter *greeter);
 
 void ldm_greeter_cancel_timed_login (LdmGreeter *greeter);
 
-void ldm_greeter_start_authentication (LdmGreeter *greeter, const char *username);
+void ldm_greeter_login (LdmGreeter *greeter, const char *username);
+
+void ldm_greeter_login_as_guest (LdmGreeter *greeter);
 
 void ldm_greeter_provide_secret (LdmGreeter *greeter, const gchar *secret);
 
@@ -113,13 +115,9 @@ gboolean ldm_greeter_get_is_authenticated (LdmGreeter *greeter);
 
 const gchar *ldm_greeter_get_authentication_user (LdmGreeter *greeter);
 
-void ldm_greeter_login (LdmGreeter *greeter, const gchar *username, const gchar *session, const gchar *language);
-
-void ldm_greeter_login_with_defaults (LdmGreeter *greeter, const gchar *username);
-
-void ldm_greeter_login_as_guest (LdmGreeter *greeter, const gchar *session, const gchar *language);
+void ldm_greeter_start_session (LdmGreeter *greeter, const gchar *session, const gchar *language);
 
-void ldm_greeter_login_as_guest_with_defaults (LdmGreeter *greeter);
+void ldm_greeter_start_session_with_defaults (LdmGreeter *greeter);
 
 gboolean ldm_greeter_get_can_suspend (LdmGreeter *greeter);
 
index 7b2b953b63c9c6e64e5dff74cea9f9096c25b77a..9b5d7bca8c5e73d2743f63c59515cdf93de8903f 100644 (file)
@@ -20,12 +20,12 @@ typedef enum
 {
     /* Messages from the greeter to the server */
     GREETER_MESSAGE_CONNECT                 = 1,
-    GREETER_MESSAGE_START_AUTHENTICATION    = 2,
-    GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 3,
-    GREETER_MESSAGE_LOGIN                   = 4,
-    GREETER_MESSAGE_CANCEL_AUTHENTICATION   = 5,
-    GREETER_MESSAGE_GET_USER_DEFAULTS       = 6,
-    GREETER_MESSAGE_LOGIN_AS_GUEST          = 7,
+    GREETER_MESSAGE_LOGIN                   = 2,
+    GREETER_MESSAGE_LOGIN_AS_GUEST          = 3,
+    GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 4,
+    GREETER_MESSAGE_START_SESSION           = 5,
+    GREETER_MESSAGE_CANCEL_AUTHENTICATION   = 6,
+    GREETER_MESSAGE_GET_USER_DEFAULTS       = 7,
 
     /* Messages from the server to the greeter */
     GREETER_MESSAGE_CONNECTED               = 101,
@@ -201,14 +201,24 @@ void Greeter::connectToServer()
     flush();
 }
 
-void Greeter::startAuthentication(const QString &username)
+void Greeter::login(const QString &username)
 {
     d->inAuthentication = true;
     d->isAuthenticated = false;
     d->authenticationUser = username;
     qDebug() << "Starting authentication for user " << username << "...";
-    writeHeader(GREETER_MESSAGE_START_AUTHENTICATION, stringLength(username));
+    writeHeader(GREETER_MESSAGE_LOGIN, stringLength(username));
     writeString(username);
+    flush();
+}
+
+void Greeter::loginAsGuest()
+{
+    d->inAuthentication = true;
+    d->isAuthenticated = false;
+    d->authenticationUser = "";
+    qDebug() << "Starting authentication for guest account";
+    writeHeader(GREETER_MESSAGE_LOGIN_AS_GUEST, 0);
     flush();     
 }
 
@@ -244,33 +254,18 @@ QString Greeter::authenticationUser() const
     return d->authenticationUser;
 }
 
-void Greeter::login(const QString &username, const QString &session, const QString &language)
+void Greeter::startSession(const QString &session, const QString &language)
 {
-    qDebug() << "Logging in as " << username << " for session " << session << " with language " << language;
-    writeHeader(GREETER_MESSAGE_LOGIN, stringLength(username) + stringLength(session) + stringLength(language));
-    writeString(username);
+    qDebug() << "Starting session " << session << " with language " << language;
+    writeHeader(GREETER_MESSAGE_START_SESSION, stringLength(session) + stringLength(language));
     writeString(session);
     writeString(language);
     flush();
 }
 
-void Greeter::loginWithDefaults(const QString &username)
-{
-    login(username, NULL, NULL);
-}
-
-void Greeter::loginAsGuest(const QString &session, const QString &language)
-{
-    qDebug() << "Logging into guest account for session " << session << " with language " << language;
-    writeHeader(GREETER_MESSAGE_LOGIN_AS_GUEST, stringLength(session) + stringLength(language));
-    writeString(session);
-    writeString(language);
-    flush(); 
-}
-
-void Greeter::loginAsGuestWithDefaults()
+void Greeter::startSessionWithDefaults()
 {
-    loginAsGuest(NULL, NULL);
+    startSession(NULL, NULL);
 }
 
 void Greeter::onRead(int fd)
index 98ff2da13356382194f77d165d1a336ba268dc3b..36d53de40dc951396c4850e4543a1759cd73fe55 100644 (file)
@@ -55,13 +55,12 @@ namespace QLightDM
 
        void connectToServer();
        void cancelTimedLogin();  
-       void startAuthentication(const QString &username);
+       void login(const QString &username);
+       void loginAsGuest();
        void provideSecret(const QString &secret);
        void cancelAuthentication();
-       void login(const QString &username, const QString &session, const QString &language);
-       void loginWithDefaults(const QString &username);
-       void loginAsGuest(const QString &session, const QString &language);
-       void loginAsGuestWithDefaults();
+       void startSession(const QString &session, const QString &language);
+       void startSessionWithDefaults();
 
        bool canSuspend() const;
        bool canHibernate() const;
index 452e210f985d23703277f3938aa2b383b4cf83d4..9f5c0995931d82e16b1f076802c557a57d209b6d 100644 (file)
@@ -606,13 +606,14 @@ static void
 start_default_session (Display *display, const gchar *session, const gchar *language)
 {
     /* Don't need to check authentication, just authorize */
+    // FIXME: Not correct, should use lightdm-autologin pam session
     if (display->priv->user_pam_session)
         pam_session_end (display->priv->user_pam_session);    
     display->priv->user_pam_session = pam_session_new (display->priv->pam_service, display->priv->default_user);
     pam_session_authorize (display->priv->user_pam_session);
 
     display->priv->user_ck_cookie = start_ck_session (display, "", pam_session_get_username (display->priv->user_pam_session));
-    start_user_session (display, session, language);
+    start_user_session (display, session, language);  
 }
 
 static gboolean
@@ -628,7 +629,7 @@ session_timeout_cb (Display *display)
 }
 
 static void
-greeter_login_cb (Greeter *greeter, const gchar *username, const gchar *session, const gchar *language, Display *display)
+greeter_start_session_cb (Greeter *greeter, const gchar *session, const gchar *language, Display *display)
 {
     /* Default session requested */
     if (strcmp (session, "") == 0)
@@ -641,18 +642,15 @@ greeter_login_cb (Greeter *greeter, const gchar *username, const gchar *session,
     display->priv->user_pam_session = greeter_get_pam_session (greeter);
     display->priv->user_ck_cookie = start_ck_session (display, "", pam_session_get_username (display->priv->user_pam_session));
 
-    if (display->priv->default_user && strcmp (username, display->priv->default_user) == 0)
-        start_default_session (display, session, language);
-    else if (display->priv->user_pam_session &&
-             pam_session_get_in_session (display->priv->user_pam_session) &&
-             strcmp (username, pam_session_get_username (display->priv->user_pam_session)) == 0)
-        start_user_session (display, session, language);
-    else
+    if (!display->priv->user_pam_session ||
+        !pam_session_get_in_session (display->priv->user_pam_session))
     {
         g_warning ("Ignoring request for login with unauthenticated user");
         return;
     }
 
+    start_user_session (display, session, language);
+
     /* Stop session, waiting for user session to indicate it is ready (if supported) */
     // FIXME: Hard-coded timeout
     // FIXME: Greeter quit timeout
@@ -662,16 +660,6 @@ greeter_login_cb (Greeter *greeter, const gchar *username, const gchar *session,
         greeter_quit (display->priv->greeter_session);
 }
 
-static void
-greeter_login_as_guest_cb (Greeter *greeter, const gchar *session, const gchar *language, Display *display)
-{
-    //gchar *username;
-
-    // FIXME: Create a guest session
-
-    //greeter_login_cb (greeter, username, session, language, display);
-}
-
 static void
 greeter_quit_cb (Greeter *greeter, Display *display)
 {
@@ -745,8 +733,7 @@ start_greeter (Display *display)
         greeter_set_default_user (display->priv->greeter_session, display->priv->default_user, display->priv->timeout);
         greeter_set_layout (display->priv->greeter_session, display->priv->default_layout);
         greeter_set_session (display->priv->greeter_session, display->priv->default_session);
-        g_signal_connect (G_OBJECT (display->priv->greeter_session), "login", G_CALLBACK (greeter_login_cb), display);
-        g_signal_connect (G_OBJECT (display->priv->greeter_session), "login-as-guest", G_CALLBACK (greeter_login_as_guest_cb), display);
+        g_signal_connect (G_OBJECT (display->priv->greeter_session), "start-session", G_CALLBACK (greeter_start_session_cb), display);
         g_signal_connect (G_OBJECT (display->priv->greeter_session), "quit", G_CALLBACK (greeter_quit_cb), display);
         session_set_username (SESSION (display->priv->greeter_session), username);
         session_set_command (SESSION (display->priv->greeter_session), command);
index 0ca57abc8b44bd62db819c6d5a220b26a810d7c9..cd15cf3b990d384298fd15a085b9f95d529f4b31 100644 (file)
@@ -16,12 +16,12 @@ typedef enum
 {
     /* Messages from the greeter to the server */
     GREETER_MESSAGE_CONNECT                 = 1,
-    GREETER_MESSAGE_START_AUTHENTICATION    = 2,
-    GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 3,
-    GREETER_MESSAGE_LOGIN                   = 4,
-    GREETER_MESSAGE_CANCEL_AUTHENTICATION   = 5,
-    GREETER_MESSAGE_GET_USER_DEFAULTS       = 6,
-    GREETER_MESSAGE_LOGIN_AS_GUEST          = 7,
+    GREETER_MESSAGE_LOGIN                   = 2,
+    GREETER_MESSAGE_LOGIN_AS_GUEST          = 3,
+    GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 4,
+    GREETER_MESSAGE_START_SESSION           = 5,
+    GREETER_MESSAGE_CANCEL_AUTHENTICATION   = 6,
+    GREETER_MESSAGE_GET_USER_DEFAULTS       = 7,
 
     /* Messages from the server to the greeter */
     GREETER_MESSAGE_CONNECTED               = 101,
index 9405649b8afe00212866f124ffe5e9d49ed068ce..6106147efbef32ee570d5df81ccd5899134e955c 100644 (file)
@@ -22,8 +22,7 @@
 #define GREETER_QUIT_TIMEOUT 1000
 
 enum {
-    LOGIN,
-    LOGIN_AS_GUEST,
+    START_SESSION,
     QUIT,
     LAST_SIGNAL
 };
@@ -211,7 +210,7 @@ authenticate_result_cb (PAMSession *session, int result, Greeter *greeter)
 }
 
 static void
-handle_start_authentication (Greeter *greeter, const gchar *username)
+handle_login (Greeter *greeter, const gchar *username)
 {
     GError *error = NULL;
 
@@ -237,6 +236,37 @@ handle_start_authentication (Greeter *greeter, const gchar *username)
         g_warning ("Failed to start authentication: %s", error->message);
 }
 
+static void
+handle_login_as_guest (Greeter *greeter)
+{
+#if 0
+    GError *error = NULL;
+
+    // FIXME
+    //if (greeter->priv->user_session)
+    //    return;
+
+    /* Abort existing authentication */
+    if (greeter->priv->pam_session)
+    {
+        g_signal_handlers_disconnect_matched (greeter->priv->pam_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter);
+        pam_session_end (greeter->priv->pam_session);
+        g_object_unref (greeter->priv->pam_session);
+    }
+  
+    // FIXME: Create guest account
+
+    g_debug ("Greeter start authentication for guest account");
+
+    greeter->priv->pam_session = pam_session_new ("lightdm"/*FIXMEgreeter->priv->pam_service*/, username);
+    g_signal_connect (G_OBJECT (greeter->priv->pam_session), "got-messages", G_CALLBACK (pam_messages_cb), greeter);
+    g_signal_connect (G_OBJECT (greeter->priv->pam_session), "authentication-result", G_CALLBACK (authenticate_result_cb), greeter);
+
+    if (!pam_session_start (greeter->priv->pam_session, &error))
+        g_warning ("Failed to start authentication: %s", error->message);
+#endif
+}
+
 static void
 handle_continue_authentication (Greeter *greeter, gchar **secrets)
 {
@@ -324,7 +354,7 @@ greeter_quit (Greeter *greeter)
 }
 
 static void
-handle_login (Greeter *greeter, gchar *username, gchar *session, gchar *language)
+handle_start_session (Greeter *greeter, gchar *session, gchar *language)
 {
     /*if (greeter->priv->user_session != NULL)
     {
@@ -332,23 +362,9 @@ handle_login (Greeter *greeter, gchar *username, gchar *session, gchar *language
         return;
     }*/
 
-    g_debug ("Greeter login for user %s on session %s", username, session);
+    g_debug ("Greeter start session %s with language", session, language);
 
-    g_signal_emit (greeter, signals[LOGIN], 0, username, session, language);
-}
-
-static void
-handle_guest_login (Greeter *greeter, gchar *session, gchar *language)
-{
-    /*if (greeter->priv->user_session != NULL)
-    {
-        g_warning ("Ignoring request to log in when already logged in");
-        return;
-    }*/
-
-    g_debug ("Greeter login to guest account on session %s", session);
-
-    g_signal_emit (greeter, signals[LOGIN_AS_GUEST], 0, session, language);
+    g_signal_emit (greeter, signals[START_SESSION], 0, session, language);
 }
 
 static void
@@ -507,11 +523,14 @@ got_data_cb (Greeter *greeter)
     case GREETER_MESSAGE_CONNECT:
         handle_connect (greeter);
         break;
-    case GREETER_MESSAGE_START_AUTHENTICATION:
+    case GREETER_MESSAGE_LOGIN:
         username = read_string (greeter, &offset);
-        handle_start_authentication (greeter, username);
+        handle_login (greeter, username);
         g_free (username);
         break;
+    case GREETER_MESSAGE_LOGIN_AS_GUEST:
+        handle_login_as_guest (greeter);
+        break;
     case GREETER_MESSAGE_CONTINUE_AUTHENTICATION:
         n_secrets = read_int (greeter, &offset);
         secrets = g_malloc (sizeof (gchar *) * (n_secrets + 1));
@@ -524,21 +543,13 @@ got_data_cb (Greeter *greeter)
     case GREETER_MESSAGE_CANCEL_AUTHENTICATION:
         handle_cancel_authentication (greeter);
         break;
-    case GREETER_MESSAGE_LOGIN:
-        username = read_string (greeter, &offset);
+    case GREETER_MESSAGE_START_SESSION:
         session_name = read_string (greeter, &offset);
         language = read_string (greeter, &offset);
-        handle_login (greeter, username, session_name, language);
-        g_free (username);
+        handle_start_session (greeter, session_name, language);
         g_free (session_name);
         g_free (language);
         break;
-    case GREETER_MESSAGE_LOGIN_AS_GUEST:
-        session_name = read_string (greeter, &offset);
-        language = read_string (greeter, &offset);
-        handle_guest_login (greeter, session_name, language);
-        g_free (session_name);
-        g_free (language);
     case GREETER_MESSAGE_GET_USER_DEFAULTS:
         username = read_string (greeter, &offset);
         handle_get_user_defaults (greeter, username);
@@ -620,19 +631,11 @@ greeter_class_init (GreeterClass *klass)
 
     object_class->finalize = greeter_finalize;
 
-    signals[LOGIN] =
-        g_signal_new ("login",
-                      G_TYPE_FROM_CLASS (klass),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GreeterClass, login),
-                      NULL, NULL,
-                      ldm_marshal_VOID__STRING_STRING_STRING,
-                      G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
-    signals[LOGIN_AS_GUEST] =
-        g_signal_new ("login-as-guest",
+    signals[START_SESSION] =
+        g_signal_new ("start-session",
                       G_TYPE_FROM_CLASS (klass),
                       G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GreeterClass, login_as_guest),
+                      G_STRUCT_OFFSET (GreeterClass, start_session),
                       NULL, NULL,
                       ldm_marshal_VOID__STRING_STRING,
                       G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
index 5ab9f3ab43b8c8b835e6797333e4b552be51fda2..adc3e9e84ade86c0357bcc5c96007ce609e69cb1 100644 (file)
@@ -31,8 +31,7 @@ typedef struct
 typedef struct
 {
     SessionClass parent_class;
-    void (*login)(Greeter *greeter, const gchar *username, const gchar *session, const gchar *language);
-    void (*login_as_guest)(Greeter *greeter, const gchar *session, const gchar *language);
+    void (*start_session)(Greeter *greeter, const gchar *session, const gchar *language);
     void (*quit)(Greeter *greeter);
 } GreeterClass;
 
index 51b3eae12f0ce89ab279f177b135af155f62f68f..98e9da78af7127463687da55af3aef130a6344ad 100644 (file)
@@ -2,4 +2,3 @@ BOOLEAN:OBJECT
 VOID:INT,POINTER
 VOID:OBJECT,BOOLEAN
 VOID:STRING,STRING
-VOID:STRING,STRING,STRING