226
if (c >= '0' && c <= '9')
228
if (c >= 'a' && c <= 'f')
230
if (c >= 'A' && c <= 'F')
236
string_to_xdm_auth_key (const gchar *key, guchar *data)
240
memset (data, 0, sizeof (data));
241
if (strncmp (key, "0x", 2) == 0 || strncmp (key, "0X", 2) == 0)
243
for (i = 0; i < 8; i++)
245
if (key[i*2] == '\0')
247
data[i] |= atox (key[i*2]) << 8;
248
if (key[i*2+1] == '\0')
250
data[i] |= atox (key[i*2+1]);
255
for (i = 1; i < 8 && key[i-1]; i++)
261
make_xserver (DisplayManager *manager, gchar *config_section)
265
XAuthorization *authorization = NULL;
266
gchar *xdmcp_manager, *filename, *path, *xserver_command;
268
if (config_section && g_key_file_has_key (manager->priv->config, config_section, "display-number", NULL))
269
display_number = g_key_file_get_integer (manager->priv->config, config_section, "display-number", NULL);
271
display_number = get_free_display_number (manager);
273
xdmcp_manager = config_section ? g_key_file_get_string (manager->priv->config, config_section, "xdmcp-manager", NULL) : NULL;
279
xserver = xserver_new (XSERVER_TYPE_LOCAL_TERMINAL, xdmcp_manager, display_number);
281
port = g_key_file_get_integer (manager->priv->config, config_section, "xdmcp-port", NULL);
283
xserver_set_port (xserver, port);
284
key = g_key_file_get_string (manager->priv->config, config_section, "key", NULL);
289
string_to_xdm_auth_key (key, data);
290
xserver_set_authentication (xserver, "XDM-AUTHENTICATION-1", data, 8);
291
authorization = xauth_new ("XDM-AUTHORIZATION-1", data, 8);
296
xserver = xserver_new (XSERVER_TYPE_LOCAL, NULL, display_number);
297
authorization = xauth_new_cookie ();
299
g_free (xdmcp_manager);
301
path = get_authorization_path (manager);
302
xserver_set_authorization (xserver, authorization, path);
303
g_object_unref (authorization);
306
filename = g_strdup_printf ("%s.log", xserver_get_address (xserver));
307
path = g_build_filename (manager->priv->log_dir, filename, NULL);
308
g_debug ("Logging to %s", path);
309
xserver_set_log_file (xserver, path);
313
/* Allow X server to be Xephyr */
314
if (getenv ("DISPLAY"))
315
xserver_set_env (xserver, "DISPLAY", getenv ("DISPLAY"));
316
if (getenv ("XAUTHORITY"))
317
xserver_set_env (xserver, "XAUTHORITY", getenv ("XAUTHORITY"));
318
xserver_command = g_key_file_get_string (manager->priv->config, "LightDM", "xserver", NULL);
320
xserver_set_command (xserver, xserver_command);
321
g_free (xserver_command);
323
if (manager->priv->test_mode)
324
xserver_set_command (xserver, "Xephyr");
224
330
add_display (DisplayManager *manager)
258
364
display_manager_switch_to_user (DisplayManager *manager, char *username, GError *error)
370
for (link = manager->priv->displays; link; link = link->next)
372
display = link->data;
373
const gchar *session_user;
375
session_user = display_get_session_user (display);
376
if (session_user && strcmp (session_user, username) == 0)
378
g_debug ("Switching to user %s session on display %s", username, xserver_get_address (display_get_xserver (display)));
379
//display_focus (display);
384
g_debug ("Starting new display for user %s", username);
385
display = add_display (manager);
386
xserver = make_xserver (manager, NULL);
387
display_start (display, xserver, NULL, 0);
388
g_object_unref (xserver);
304
if (c >= '0' && c <= '9')
306
if (c >= 'a' && c <= 'f')
308
if (c >= 'A' && c <= 'F')
314
string_to_xdm_auth_key (const gchar *key, guchar *data)
318
memset (data, 0, sizeof (data));
319
if (strncmp (key, "0x", 2) == 0 || strncmp (key, "0X", 2) == 0)
321
for (i = 0; i < 8; i++)
323
if (key[i*2] == '\0')
325
data[i] |= atox (key[i*2]) << 8;
326
if (key[i*2+1] == '\0')
328
data[i] |= atox (key[i*2+1]);
333
for (i = 1; i < 8 && key[i-1]; i++)
339
432
setup_auth_dir (DisplayManager *manager)
419
511
g_debug ("Starting session for user %s in %d seconds", default_user, user_timeout);
422
if (g_key_file_has_key (manager->priv->config, display_name, "display-number", NULL))
423
display_number = g_key_file_get_integer (manager->priv->config, display_name, "display-number", NULL);
425
display_number = get_free_display_number (manager);
427
xdmcp_manager = g_key_file_get_string (manager->priv->config, display_name, "xdmcp-manager", NULL);
431
gchar *filename, *path, *key;
433
xserver = xserver_new (XSERVER_TYPE_LOCAL_TERMINAL, xdmcp_manager, display_number);
435
filename = g_strdup_printf ("%s.log", xserver_get_address (xserver));
436
path = g_build_filename (manager->priv->log_dir, filename, NULL);
437
g_debug ("Logging to %s", path);
438
xserver_set_log_file (xserver, path);
442
port = g_key_file_get_integer (manager->priv->config, display_name, "xdmcp-port", NULL);
444
xserver_set_port (xserver, port);
445
key = g_key_file_get_string (manager->priv->config, display_name, "key", NULL);
450
XAuthorization *authorization;
452
string_to_xdm_auth_key (key, data);
453
xserver_set_authentication (xserver, "XDM-AUTHENTICATION-1", data, 8);
455
authorization = xauth_new ("XDM-AUTHORIZATION-1", data, 8);
456
path = get_authorization_path (manager);
457
xserver_set_authorization (xserver, authorization, path);
459
g_object_unref (authorization);
465
gchar *filename, *path;
466
XAuthorization *authorization;
468
xserver = xserver_new (XSERVER_TYPE_LOCAL, NULL, display_number);
470
filename = g_strdup_printf ("%s.log", xserver_get_address (xserver));
471
path = g_build_filename (manager->priv->log_dir, filename, NULL);
472
g_debug ("Logging to %s", path);
473
xserver_set_log_file (xserver, path);
477
authorization = xauth_new_cookie ();
478
path = get_authorization_path (manager);
480
xserver_set_authorization (xserver, authorization, path);
482
g_object_unref (authorization);
485
g_free (xdmcp_manager);
487
/* Allow X server to be Xephyr */
488
if (getenv ("DISPLAY"))
489
xserver_set_env (xserver, "DISPLAY", getenv ("DISPLAY"));
490
if (getenv ("XAUTHORITY"))
491
xserver_set_env (xserver, "XAUTHORITY", getenv ("XAUTHORITY"));
493
xserver_command = g_key_file_get_string (manager->priv->config, "LightDM", "xserver", NULL);
495
xserver_set_command (xserver, xserver_command);
496
g_free (xserver_command);
498
if (manager->priv->test_mode)
499
xserver_set_command (xserver, "Xephyr");
514
xserver = make_xserver (manager, display_name);
501
516
display_start (display, xserver, default_user, user_timeout);
502
517
g_object_unref (xserver);