]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - src/session.c
explicitly provide shared dir path to sessions
[sojka/lightdm.git] / src / session.c
index a3c3578d0a42ade501fa25d7f3dd7d18047bc4b3..f888ec7f662c4dfa6cc593cc2adc9ca48e4232ef 100644 (file)
@@ -26,6 +26,7 @@
 #include "console-kit.h"
 #include "login1.h"
 #include "guest-account.h"
+#include "shared-data-manager.h"
 
 enum {
     GOT_MESSAGES,
@@ -84,9 +85,6 @@ struct SessionPrivate
     /* File to log to */
     gchar *log_filename;
 
-    /* Seat class */
-    gchar *class;
-
     /* tty this session is running on */
     gchar *tty;
 
@@ -199,14 +197,6 @@ session_set_log_file (Session *session, const gchar *filename)
     session->priv->log_filename = g_strdup (filename);
 }
 
-void
-session_set_class (Session *session, const gchar *class)
-{
-    g_return_if_fail (session != NULL);
-    g_free (session->priv->class);
-    session->priv->class = g_strdup (class);
-}
-
 void
 session_set_display_server (Session *session, DisplayServer *display_server)
 {
@@ -433,6 +423,8 @@ session_watch_cb (GPid pid, gint status, gpointer data)
 {
     Session *session = data;
 
+    session->priv->child_watch = 0;
+
     if (WIFEXITED (status))
         l_debug (session, "Exited with return value %d", WEXITSTATUS (status));
     else if (WIFSIGNALED (status))
@@ -630,7 +622,7 @@ session_real_start (Session *session)
     write_string (session, session->priv->username);
     write_data (session, &session->priv->do_authenticate, sizeof (session->priv->do_authenticate));
     write_data (session, &session->priv->is_interactive, sizeof (session->priv->is_interactive));
-    write_string (session, session->priv->class);
+    write_string (session, NULL); /* Used to be class, now we just use the environment variable */
     write_string (session, session->priv->tty);
     write_string (session, session->priv->remote_host_name);
     write_string (session, session->priv->xdisplay);
@@ -773,6 +765,18 @@ session_real_run (Session *session)
     else
         x_authority_filename = g_build_filename (user_get_home_directory (session_get_user (session)), ".Xauthority", NULL);
 
+    /* Make sure shared user directory for this user exists */
+    if (!session->priv->remote_host_name)
+    {
+        gchar *data_dir = shared_data_manager_ensure_user_dir (shared_data_manager_get_instance (), session->priv->username);
+        l_debug(session, "MIKE set XDG_GREETER_DATA_DIR=%s from user %s", data_dir, session->priv->username);
+        if (data_dir)
+        {
+            session_set_env (session, "XDG_GREETER_DATA_DIR", data_dir);
+            g_free (data_dir);
+        }
+    }
+
     if (session->priv->log_filename)
         l_debug (session, "Logging to %s", session->priv->log_filename);
     write_string (session, session->priv->log_filename);
@@ -889,7 +893,6 @@ session_finalize (GObject *object)
     g_free (self->priv->messages);
     g_free (self->priv->authentication_result_string);
     g_free (self->priv->log_filename);
-    g_free (self->priv->class);
     g_free (self->priv->tty);
     g_free (self->priv->xdisplay);
     if (self->priv->x_authority)