summaryrefslogtreecommitdiff
path: root/src/greeter.c
diff options
context:
space:
mode:
authorMichael Terry <michael.terry@canonical.com>2014-02-18 16:44:30 -0500
committerMichael Terry <michael.terry@canonical.com>2014-02-18 16:44:30 -0500
commit065745fe5e93d975affbf31b6bd59cb613746a7a (patch)
tree907e872246a0b8b7ddc19b7612a162e1af70fb1a /src/greeter.c
parent6b90c538990ac8d8d0d3634dba9c58874f2f3491 (diff)
downloadlightdm-git-065745fe5e93d975affbf31b6bd59cb613746a7a.tar.gz
Make directory creation synchronous
Diffstat (limited to 'src/greeter.c')
-rw-r--r--src/greeter.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/greeter.c b/src/greeter.c
index 554b90f4..b000ac3e 100644
--- a/src/greeter.c
+++ b/src/greeter.c
@@ -100,7 +100,8 @@ typedef enum
SERVER_MESSAGE_CONNECTED = 0,
SERVER_MESSAGE_PROMPT_AUTHENTICATION,
SERVER_MESSAGE_END_AUTHENTICATION,
- SERVER_MESSAGE_SESSION_RESULT
+ SERVER_MESSAGE_SESSION_RESULT,
+ SERVER_MESSAGE_SHARED_DIR_RESULT,
} ServerMessage;
static gboolean read_cb (GIOChannel *source, GIOCondition condition, gpointer data);
@@ -629,6 +630,20 @@ handle_set_language (Greeter *greeter, const gchar *language)
user_set_language (user, language);
}
+static void
+handle_ensure_shared_dir (Greeter *greeter, const gchar *username)
+{
+ gboolean result;
+ guint8 message[MAX_MESSAGE_LENGTH];
+ gsize offset = 0;
+
+ result = shared_data_manager_ensure_user_dir (shared_data_manager_get_instance (), username);
+
+ write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_SHARED_DIR_RESULT, int_length (), &offset);
+ write_int (message, MAX_MESSAGE_LENGTH, result ? 0 : 1, &offset);
+ write_message (greeter, message, offset);
+}
+
static guint32
read_int (Greeter *greeter, gsize *offset)
{
@@ -815,7 +830,7 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
break;
case GREETER_MESSAGE_ENSURE_SHARED_DIR:
username = read_string (greeter, &offset);
- shared_data_manager_ensure_user_dir (shared_data_manager_get_instance (), username);
+ handle_ensure_shared_dir (greeter, username);
g_free (username);
break;
default: