]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blob - src/accounts.c
Don't quit on SIGUSR1, SIGUSR2 or SIGHUP
[sojka/lightdm.git] / src / accounts.c
1 /* -*- Mode: C; indent-tabs-mode: nil; tab-width: 4 -*-
2  *
3  * Copyright (C) 2010-2011 Robert Ancell.
4  * Author: Robert Ancell <robert.ancell@canonical.com>
5  *
6  * This program is free software: you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License as published by the Free Software
8  * Foundation, either version 3 of the License, or (at your option) any later
9  * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
10  * license.
11  */
12
13 #include <pwd.h>
14 #include <stdlib.h>
15
16 #include "accounts.h"
17 #include "user-list.h"
18
19 struct UserPrivate
20 {
21     /* Internal user object */
22     CommonUser *common_user;
23 };
24
25 G_DEFINE_TYPE (User, user, G_TYPE_OBJECT);
26
27 User *
28 accounts_get_user_by_name (const gchar *username)
29 {
30     User *user = NULL;
31     CommonUser *common_user;
32
33     g_return_val_if_fail (username != NULL, NULL);
34
35     common_user = common_user_list_get_user_by_name (common_user_list_get_instance (), username);
36     if (common_user != NULL)
37     {
38         user = g_object_new (USER_TYPE, NULL);
39         user->priv->common_user = common_user;
40     }
41
42     return user;
43 }
44
45 User *
46 accounts_get_current_user ()
47 {
48     struct passwd *entry = getpwuid (getuid ());
49     if (entry != NULL)
50         return accounts_get_user_by_name (entry->pw_name);
51     else
52         return NULL;
53 }
54
55 const gchar *
56 user_get_name (User *user)
57 {
58     g_return_val_if_fail (user != NULL, NULL);
59     return common_user_get_name (user->priv->common_user);
60 }
61
62 uid_t
63 user_get_uid (User *user)
64 {
65     g_return_val_if_fail (user != NULL, 0);
66     return common_user_get_uid (user->priv->common_user);
67 }
68
69 gid_t
70 user_get_gid (User *user)
71 {
72     g_return_val_if_fail (user != NULL, 0);
73     return common_user_get_gid (user->priv->common_user);
74 }
75
76 const gchar *
77 user_get_home_directory (User *user)
78 {
79     g_return_val_if_fail (user != NULL, NULL);
80     return common_user_get_home_directory (user->priv->common_user);
81 }
82
83 const gchar *
84 user_get_shell (User *user)
85 {
86     g_return_val_if_fail (user != NULL, NULL);
87     return common_user_get_shell (user->priv->common_user);
88 }
89
90 void
91 user_set_language (User *user, const gchar *language)
92 {
93     g_return_if_fail (user != NULL);
94     common_user_set_language (user->priv->common_user, language);
95 }
96
97 const gchar *
98 user_get_language (User *user)
99 {
100     g_return_val_if_fail (user != NULL, NULL);
101     return common_user_get_language (user->priv->common_user);
102 }
103
104 void
105 user_set_xsession (User *user, const gchar *xsession)
106 {
107     g_return_if_fail (user != NULL);
108     common_user_set_session (user->priv->common_user, xsession);
109 }
110
111 const gchar *
112 user_get_xsession (User *user)
113 {
114     g_return_val_if_fail (user != NULL, NULL);
115     return common_user_get_session (user->priv->common_user);
116 }
117
118 static void
119 user_init (User *user)
120 {
121     user->priv = G_TYPE_INSTANCE_GET_PRIVATE (user, USER_TYPE, UserPrivate);
122 }
123
124 static void
125 user_finalize (GObject *object)
126 {
127     User *self = USER (object);
128
129     g_clear_object (&self->priv->common_user);
130
131     G_OBJECT_CLASS (user_parent_class)->finalize (object);
132 }
133
134 static void
135 user_class_init (UserClass *klass)
136 {
137     GObjectClass *object_class = G_OBJECT_CLASS (klass);
138
139     object_class->finalize = user_finalize;
140
141     g_type_class_add_private (klass, sizeof (UserPrivate));
142 }