~lightdm-team/lightdm/1.4

« back to all changes in this revision

Viewing changes to src/greeter.c

  • Committer: Robert Ancell
  • Date: 2011-05-05 06:11:16 UTC
  • Revision ID: robert.ancell@canonical.com-20110505061116-4nhrdw6k0huve3ek
Move user manager into liblightdm

Show diffs side-by-side

added added

removed removed

Lines of Context:
10
10
 */
11
11
 
12
12
#include <string.h>
 
13
#include <pwd.h>
 
14
#include <errno.h>
13
15
 
14
16
#include "greeter.h"
15
17
#include "ldm-marshal.h"
332
334
    g_signal_emit (greeter, signals[LOGIN], 0, username, session, language);
333
335
}
334
336
 
 
337
static void
 
338
handle_get_user_defaults (Greeter *greeter, gchar *username)
 
339
{
 
340
    struct passwd *user_info;
 
341
    GKeyFile *dmrc_file;
 
342
    gboolean have_dmrc = FALSE;
 
343
    gchar *language, *layout, *session;
 
344
 
 
345
    user_info = getpwnam (username);
 
346
    if (!user_info)
 
347
    {
 
348
        if (errno == 0)
 
349
            g_warning ("Unable to get information on user %s: User does not exist", username);
 
350
        else
 
351
            g_warning ("Unable to get information on user %s: %s", username, strerror (errno));
 
352
    }
 
353
      
 
354
    dmrc_file = g_key_file_new ();
 
355
 
 
356
    /* Load the users login settings (~/.dmrc) */  
 
357
    if (user_info)
 
358
    {
 
359
        gchar *path;
 
360
        path = g_build_filename (user_info->pw_dir, ".dmrc", NULL);
 
361
        have_dmrc = g_key_file_load_from_file (dmrc_file, path, G_KEY_FILE_NONE, NULL);
 
362
        g_free (path);
 
363
    }
 
364
 
 
365
    /* If no .dmrc, then load from the cache */
 
366
    if (!have_dmrc)
 
367
    {
 
368
        gchar *path, *filename;
 
369
 
 
370
        filename = g_strdup_printf ("%s.dmrc", username);
 
371
        path = g_build_filename (CACHE_DIR, "dmrc", filename, NULL);
 
372
        g_free (filename);
 
373
        have_dmrc = g_key_file_load_from_file (dmrc_file, path, G_KEY_FILE_NONE, NULL);
 
374
        g_free (path);
 
375
    }
 
376
 
 
377
    language = g_key_file_get_string (dmrc_file, "Desktop", "Language", NULL);
 
378
    if (!language)
 
379
        language = g_strdup ("");
 
380
    layout = g_key_file_get_string (dmrc_file, "Desktop", "Layout", NULL);
 
381
    if (!layout)
 
382
        layout = g_strdup ("");
 
383
    session = g_key_file_get_string (dmrc_file, "Desktop", "Session", NULL);
 
384
    if (!session)
 
385
        session = g_strdup ("");
 
386
 
 
387
    write_header (greeter, GREETER_MESSAGE_USER_DEFAULTS, string_length (language) + string_length (layout) + string_length (session));
 
388
    write_string (greeter, language);
 
389
    write_string (greeter, layout);
 
390
    write_string (greeter, session);
 
391
    flush (greeter);
 
392
  
 
393
    g_free (language);
 
394
    g_free (layout);
 
395
    g_free (session);
 
396
 
 
397
    g_key_file_free (dmrc_file);
 
398
}
 
399
 
335
400
#define HEADER_SIZE (sizeof (guint32) * 2)
336
401
 
337
402
static guint32
451
516
        g_free (session_name);
452
517
        g_free (language);
453
518
        break;
 
519
    case GREETER_MESSAGE_GET_USER_DEFAULTS:
 
520
        username = read_string (greeter, &offset);
 
521
        handle_get_user_defaults (greeter, username);
 
522
        g_free (username);
 
523
        break;
454
524
    default:
455
525
        g_warning ("Unknown message from greeter: %d", id);
456
526
        break;