]> 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 9b985b72d5296a9fda646e68c86f2cc89e75c48f..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,
@@ -291,6 +292,21 @@ session_set_env (Session *session, const gchar *name, const gchar *value)
         session->priv->env = g_list_append (session->priv->env, entry);
 }
 
+const gchar *
+session_get_env (Session *session, const gchar *name)
+{
+    GList *link;
+    gchar *entry;
+
+    link = find_env_entry (session, name);
+    if (!link)
+        return NULL;
+  
+    entry = link->data;
+
+    return entry + strlen (name) + 1;
+}
+
 void
 session_unset_env (Session *session, const gchar *name)
 {
@@ -407,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))
@@ -747,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);