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 typedef struct
20 {
21 /* Internal user object */
22 CommonUser *common_user;
23 } UserPrivate;
24
G_DEFINE_TYPE_WITH_PRIVATE(User,user,G_TYPE_OBJECT)25 G_DEFINE_TYPE_WITH_PRIVATE (User, user, G_TYPE_OBJECT)
26
27 User *
28 accounts_get_user_by_name (const gchar *username)
29 {
30 g_return_val_if_fail (username != NULL, NULL);
31
32 CommonUser *common_user = common_user_list_get_user_by_name (common_user_list_get_instance (), username);
33 if (common_user == NULL)
34 return NULL;
35
36 User *user = g_object_new (USER_TYPE, NULL);
37 UserPrivate *priv = user_get_instance_private (user);
38 priv->common_user = common_user;
39 return user;
40 }
41
42 User *
accounts_get_current_user()43 accounts_get_current_user ()
44 {
45 struct passwd *entry = getpwuid (getuid ());
46 if (entry != NULL)
47 return accounts_get_user_by_name (entry->pw_name);
48 else
49 return NULL;
50 }
51
52 const gchar *
user_get_name(User * user)53 user_get_name (User *user)
54 {
55 UserPrivate *priv = user_get_instance_private (user);
56 g_return_val_if_fail (user != NULL, NULL);
57 return common_user_get_name (priv->common_user);
58 }
59
60 uid_t
user_get_uid(User * user)61 user_get_uid (User *user)
62 {
63 UserPrivate *priv = user_get_instance_private (user);
64 g_return_val_if_fail (user != NULL, 0);
65 return common_user_get_uid (priv->common_user);
66 }
67
68 gid_t
user_get_gid(User * user)69 user_get_gid (User *user)
70 {
71 UserPrivate *priv = user_get_instance_private (user);
72 g_return_val_if_fail (user != NULL, 0);
73 return common_user_get_gid (priv->common_user);
74 }
75
76 const gchar *
user_get_home_directory(User * user)77 user_get_home_directory (User *user)
78 {
79 UserPrivate *priv = user_get_instance_private (user);
80 g_return_val_if_fail (user != NULL, NULL);
81 return common_user_get_home_directory (priv->common_user);
82 }
83
84 const gchar *
user_get_shell(User * user)85 user_get_shell (User *user)
86 {
87 UserPrivate *priv = user_get_instance_private (user);
88 g_return_val_if_fail (user != NULL, NULL);
89 return common_user_get_shell (priv->common_user);
90 }
91
92 void
user_set_language(User * user,const gchar * language)93 user_set_language (User *user, const gchar *language)
94 {
95 UserPrivate *priv = user_get_instance_private (user);
96 g_return_if_fail (user != NULL);
97 common_user_set_language (priv->common_user, language);
98 }
99
100 const gchar *
user_get_language(User * user)101 user_get_language (User *user)
102 {
103 UserPrivate *priv = user_get_instance_private (user);
104 g_return_val_if_fail (user != NULL, NULL);
105 return common_user_get_language (priv->common_user);
106 }
107
108 void
user_set_xsession(User * user,const gchar * xsession)109 user_set_xsession (User *user, const gchar *xsession)
110 {
111 UserPrivate *priv = user_get_instance_private (user);
112 g_return_if_fail (user != NULL);
113 common_user_set_session (priv->common_user, xsession);
114 }
115
116 const gchar *
user_get_xsession(User * user)117 user_get_xsession (User *user)
118 {
119 UserPrivate *priv = user_get_instance_private (user);
120 g_return_val_if_fail (user != NULL, NULL);
121 return common_user_get_session (priv->common_user);
122 }
123
124 static void
user_init(User * user)125 user_init (User *user)
126 {
127 }
128
129 static void
user_finalize(GObject * object)130 user_finalize (GObject *object)
131 {
132 User *self = USER (object);
133 UserPrivate *priv = user_get_instance_private (self);
134
135 g_clear_object (&priv->common_user);
136
137 G_OBJECT_CLASS (user_parent_class)->finalize (object);
138 }
139
140 static void
user_class_init(UserClass * klass)141 user_class_init (UserClass *klass)
142 {
143 GObjectClass *object_class = G_OBJECT_CLASS (klass);
144
145 object_class->finalize = user_finalize;
146 }
147