1 /* -*- Mode: C; indent-tabs-mode: nil; tab-width: 4 -*- */
11 static gchar *greeter_id;
12 static GMainLoop *loop;
13 static LightDMGreeter *greeter;
14 static xcb_connection_t *connection = NULL;
15 static GKeyFile *config;
18 show_message_cb (LightDMGreeter *greeter, const gchar *text, LightDMMessageType type)
20 status_notify ("%s SHOW-MESSAGE TEXT=\"%s\"", greeter_id, text);
24 show_prompt_cb (LightDMGreeter *greeter, const gchar *text, LightDMPromptType type)
26 status_notify ("%s SHOW-PROMPT TEXT=\"%s\"", greeter_id, text);
30 authentication_complete_cb (LightDMGreeter *greeter)
32 if (lightdm_greeter_get_authentication_user (greeter))
33 status_notify ("%s AUTHENTICATION-COMPLETE USERNAME=%s AUTHENTICATED=%s",
35 lightdm_greeter_get_authentication_user (greeter),
36 lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
38 status_notify ("%s AUTHENTICATION-COMPLETE AUTHENTICATED=%s",
40 lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
44 autologin_timer_expired_cb (LightDMGreeter *greeter)
46 status_notify ("%s AUTOLOGIN-TIMER-EXPIRED", greeter_id);
50 signal_cb (int signum)
52 status_notify ("%s TERMINATE SIGNAL=%d", greeter_id, signum);
57 request_cb (const gchar *request)
63 g_main_loop_quit (loop);
67 r = g_strdup_printf ("%s AUTHENTICATE", greeter_id);
68 if (strcmp (request, r) == 0)
69 lightdm_greeter_authenticate (greeter, NULL);
72 r = g_strdup_printf ("%s AUTHENTICATE USERNAME=", greeter_id);
73 if (g_str_has_prefix (request, r))
74 lightdm_greeter_authenticate (greeter, request + strlen (r));
77 r = g_strdup_printf ("%s AUTHENTICATE-GUEST", greeter_id);
78 if (strcmp (request, r) == 0)
79 lightdm_greeter_authenticate_as_guest (greeter);
82 r = g_strdup_printf ("%s AUTHENTICATE-AUTOLOGIN", greeter_id);
83 if (strcmp (request, r) == 0)
84 lightdm_greeter_authenticate_autologin (greeter);
87 r = g_strdup_printf ("%s AUTHENTICATE-REMOTE SESSION=", greeter_id);
88 if (g_str_has_prefix (request, r))
89 lightdm_greeter_authenticate_remote (greeter, request + strlen (r), NULL);
92 r = g_strdup_printf ("%s RESPOND TEXT=\"", greeter_id);
93 if (g_str_has_prefix (request, r))
95 gchar *text = g_strdup (request + strlen (r));
96 text[strlen (text) - 1] = '\0';
97 lightdm_greeter_respond (greeter, text);
102 r = g_strdup_printf ("%s CANCEL-AUTHENTICATION", greeter_id);
103 if (strcmp (request, r) == 0)
104 lightdm_greeter_cancel_authentication (greeter);
107 r = g_strdup_printf ("%s START-SESSION", greeter_id);
108 if (strcmp (request, r) == 0)
110 if (!lightdm_greeter_start_session_sync (greeter, NULL, NULL))
111 status_notify ("%s SESSION-FAILED", greeter_id);
115 r = g_strdup_printf ("%s START-SESSION SESSION=", greeter_id);
116 if (g_str_has_prefix (request, r))
118 if (!lightdm_greeter_start_session_sync (greeter, request + strlen (r), NULL))
119 status_notify ("%s SESSION-FAILED", greeter_id);
123 r = g_strdup_printf ("%s LOG-USER-LIST-LENGTH", greeter_id);
124 if (strcmp (request, r) == 0)
125 status_notify ("%s LOG-USER-LIST-LENGTH N=%d", greeter_id, lightdm_user_list_get_length (lightdm_user_list_get_instance ()));
128 r = g_strdup_printf ("%s LOG-USER USERNAME=", greeter_id);
129 if (g_str_has_prefix (request, r))
132 const gchar *username;
134 username = request + strlen (r);
135 user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
136 status_notify ("%s LOG-USER USERNAME=%s", greeter_id, lightdm_user_get_name (user));
140 r = g_strdup_printf ("%s LOG-USER-LIST", greeter_id);
141 if (strcmp (request, r) == 0)
145 users = lightdm_user_list_get_users (lightdm_user_list_get_instance ());
146 for (link = users; link; link = link->next)
148 LightDMUser *user = link->data;
149 status_notify ("%s LOG-USER USERNAME=%s", greeter_id, lightdm_user_get_name (user));
154 r = g_strdup_printf ("%s LOG-LAYOUT USERNAME=", greeter_id);
155 if (g_str_has_prefix (request, r))
158 const gchar *username, *layout;
160 username = request + strlen (r);
161 user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
162 layout = lightdm_user_get_layout (user);
164 status_notify ("%s LOG-LAYOUT USERNAME=%s LAYOUT='%s'", greeter_id, username, layout ? layout : "");
168 r = g_strdup_printf ("%s LOG-LAYOUTS USERNAME=", greeter_id);
169 if (g_str_has_prefix (request, r))
172 const gchar *username;
173 const gchar * const *layouts;
176 username = request + strlen (r);
177 user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
178 layouts = lightdm_user_get_layouts (user);
180 for (i = 0; layouts[i]; i++)
181 status_notify ("%s LOG-LAYOUTS USERNAME=%s LAYOUT='%s'", greeter_id, username, layouts[i]);
185 r = g_strdup_printf ("%s LOG-LANGUAGE USERNAME=", greeter_id);
186 if (g_str_has_prefix (request, r))
189 const gchar *username, *language;
191 username = request + strlen (r);
192 user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
193 language = lightdm_user_get_language (user);
195 status_notify ("%s LOG-LANGUAGE USERNAME=%s LANGUAGE=%s", greeter_id, username, language ? language : "");
199 r = g_strdup_printf ("%s GET-CAN-SUSPEND", greeter_id);
200 if (strcmp (request, r) == 0)
202 gboolean can_suspend = lightdm_get_can_suspend ();
203 status_notify ("%s CAN-SUSPEND ALLOWED=%s", greeter_id, can_suspend ? "TRUE" : "FALSE");
207 r = g_strdup_printf ("%s SUSPEND", greeter_id);
208 if (strcmp (request, r) == 0)
210 GError *error = NULL;
211 if (!lightdm_suspend (&error))
212 status_notify ("%s FAIL-SUSPEND", greeter_id);
213 g_clear_error (&error);
217 r = g_strdup_printf ("%s GET-CAN-HIBERNATE", greeter_id);
218 if (strcmp (request, r) == 0)
220 gboolean can_hibernate = lightdm_get_can_hibernate ();
221 status_notify ("%s CAN-HIBERNATE ALLOWED=%s", greeter_id, can_hibernate ? "TRUE" : "FALSE");
225 r = g_strdup_printf ("%s HIBERNATE", greeter_id);
226 if (strcmp (request, r) == 0)
228 GError *error = NULL;
229 if (!lightdm_hibernate (&error))
230 status_notify ("%s FAIL-HIBERNATE", greeter_id);
231 g_clear_error (&error);
235 r = g_strdup_printf ("%s GET-CAN-RESTART", greeter_id);
236 if (strcmp (request, r) == 0)
238 gboolean can_restart = lightdm_get_can_restart ();
239 status_notify ("%s CAN-RESTART ALLOWED=%s", greeter_id, can_restart ? "TRUE" : "FALSE");
243 r = g_strdup_printf ("%s RESTART", greeter_id);
244 if (strcmp (request, r) == 0)
246 GError *error = NULL;
247 if (!lightdm_restart (&error))
248 status_notify ("%s FAIL-RESTART", greeter_id);
249 g_clear_error (&error);
253 r = g_strdup_printf ("%s GET-CAN-SHUTDOWN", greeter_id);
254 if (strcmp (request, r) == 0)
256 gboolean can_shutdown = lightdm_get_can_shutdown ();
257 status_notify ("%s CAN-SHUTDOWN ALLOWED=%s", greeter_id, can_shutdown ? "TRUE" : "FALSE");
261 r = g_strdup_printf ("%s SHUTDOWN", greeter_id);
262 if (strcmp (request, r) == 0)
264 GError *error = NULL;
265 if (!lightdm_shutdown (&error))
266 status_notify ("%s FAIL-SHUTDOWN", greeter_id);
267 g_clear_error (&error);
273 user_added_cb (LightDMUserList *user_list, LightDMUser *user)
275 status_notify ("%s USER-ADDED USERNAME=%s", greeter_id, lightdm_user_get_name (user));
279 user_removed_cb (LightDMUserList *user_list, LightDMUser *user)
281 status_notify ("%s USER-REMOVED USERNAME=%s", greeter_id, lightdm_user_get_name (user));
285 main (int argc, char **argv)
289 signal (SIGINT, signal_cb);
290 signal (SIGTERM, signal_cb);
292 #if !defined(GLIB_VERSION_2_36)
296 display = getenv ("DISPLAY");
298 greeter_id = g_strdup ("GREETER-?");
299 else if (display[0] == ':')
300 greeter_id = g_strdup_printf ("GREETER-X-%s", display + 1);
302 greeter_id = g_strdup_printf ("GREETER-X-%s", display);
304 loop = g_main_loop_new (NULL, FALSE);
306 status_connect (request_cb);
308 status_notify ("%s START", greeter_id);
310 config = g_key_file_new ();
311 g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL);
313 if (g_key_file_has_key (config, "test-greeter-config", "return-value", NULL))
315 int return_value = g_key_file_get_integer (config, "test-greeter-config", "return-value", NULL);
316 status_notify ("%s EXIT CODE=%d", greeter_id, return_value);
320 connection = xcb_connect (NULL, NULL);
322 if (xcb_connection_has_error (connection))
324 status_notify ("%s FAIL-CONNECT-XSERVER", greeter_id);
328 status_notify ("%s CONNECT-XSERVER", greeter_id);
330 greeter = lightdm_greeter_new ();
331 g_signal_connect (greeter, "show-message", G_CALLBACK (show_message_cb), NULL);
332 g_signal_connect (greeter, "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
333 g_signal_connect (greeter, "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
334 g_signal_connect (greeter, "autologin-timer-expired", G_CALLBACK (autologin_timer_expired_cb), NULL);
336 if (g_key_file_get_boolean (config, "test-greeter-config", "log-user-changes", NULL))
338 g_signal_connect (lightdm_user_list_get_instance (), "user-added", G_CALLBACK (user_added_cb), NULL);
339 g_signal_connect (lightdm_user_list_get_instance (), "user-removed", G_CALLBACK (user_removed_cb), NULL);
342 status_notify ("%s CONNECT-TO-DAEMON", greeter_id);
343 if (!lightdm_greeter_connect_sync (greeter, NULL))
345 status_notify ("%s FAIL-CONNECT-DAEMON", greeter_id);
349 status_notify ("%s CONNECTED-TO-DAEMON", greeter_id);
351 if (lightdm_greeter_get_select_user_hint (greeter))
352 status_notify ("%s SELECT-USER-HINT USERNAME=%s", greeter_id, lightdm_greeter_get_select_user_hint (greeter));
353 if (lightdm_greeter_get_select_guest_hint (greeter))
354 status_notify ("%s SELECT-GUEST-HINT", greeter_id);
355 if (lightdm_greeter_get_lock_hint (greeter))
356 status_notify ("%s LOCK-HINT", greeter_id);
358 g_main_loop_run (loop);