summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2014-09-08 12:50:39 +1200
committerRobert Ancell <robert.ancell@canonical.com>2014-09-08 12:50:39 +1200
commitf2f605445cdec620bd40b568bc3a8efd6b118ed6 (patch)
tree9f1b23e4156dcc7b0cdeee3cce9c0f16cdfad803
parent0b41ae16801b910ab79a7d852f638b8eeb8aa06d (diff)
downloadlightdm-git-f2f605445cdec620bd40b568bc3a8efd6b118ed6.tar.gz
Add liblightdm method to get user UID
-rw-r--r--debian/liblightdm-gobject-1-0.symbols1
-rw-r--r--liblightdm-gobject/liblightdm-gobject-1.vapi1
-rw-r--r--liblightdm-gobject/lightdm/user.h2
-rw-r--r--liblightdm-gobject/user.c30
-rw-r--r--liblightdm-qt/QLightDM/usersmodel.h3
-rw-r--r--liblightdm-qt/usersmodel.cpp11
-rw-r--r--tests/Makefile.am2
-rw-r--r--tests/scripts/user-uid.conf32
-rw-r--r--tests/src/test-gobject-greeter.c2
-rw-r--r--tests/test-user-uid2
10 files changed, 80 insertions, 6 deletions
diff --git a/debian/liblightdm-gobject-1-0.symbols b/debian/liblightdm-gobject-1-0.symbols
index e9afdffa..161d3e21 100644
--- a/debian/liblightdm-gobject-1-0.symbols
+++ b/debian/liblightdm-gobject-1-0.symbols
@@ -70,6 +70,7 @@ liblightdm-gobject-1.so.0 liblightdm-gobject-1-0 #MINVER#
lightdm_user_get_real_name@Base 0.9.2
lightdm_user_get_session@Base 0.9.2
lightdm_user_get_type@Base 0.9.2
+ lightdm_user_get_uid@Base 1.10.2
lightdm_user_list_get_instance@Base 0.9.2
lightdm_user_list_get_length@Base 0.9.2
lightdm_user_list_get_type@Base 0.9.2
diff --git a/liblightdm-gobject/liblightdm-gobject-1.vapi b/liblightdm-gobject/liblightdm-gobject-1.vapi
index ea4cecd2..2f90ce88 100644
--- a/liblightdm-gobject/liblightdm-gobject-1.vapi
+++ b/liblightdm-gobject/liblightdm-gobject-1.vapi
@@ -100,6 +100,7 @@ namespace LightDM {
public bool logged_in { get; }
public unowned string name { get; }
public unowned string real_name { get; }
+ public unowned Posix.uid_t uid { get; }
public unowned string home_directory { get; }
public unowned string session { get; }
public unowned string background { get; }
diff --git a/liblightdm-gobject/lightdm/user.h b/liblightdm-gobject/lightdm/user.h
index b43fc516..f955ab29 100644
--- a/liblightdm-gobject/lightdm/user.h
+++ b/liblightdm-gobject/lightdm/user.h
@@ -106,6 +106,8 @@ gboolean lightdm_user_get_logged_in (LightDMUser *user);
gboolean lightdm_user_get_has_messages (LightDMUser *user);
+uid_t lightdm_user_get_uid (LightDMUser *user);
+
G_END_DECLS
#endif /* LIGHTDM_USER_H_ */
diff --git a/liblightdm-gobject/user.c b/liblightdm-gobject/user.c
index 4fb5f044..7d54b6d2 100644
--- a/liblightdm-gobject/user.c
+++ b/liblightdm-gobject/user.c
@@ -38,7 +38,8 @@ enum
USER_PROP_LAYOUTS,
USER_PROP_SESSION,
USER_PROP_LOGGED_IN,
- USER_PROP_HAS_MESSAGES
+ USER_PROP_HAS_MESSAGES,
+ USER_PROP_UID,
};
enum
@@ -526,6 +527,21 @@ lightdm_user_get_has_messages (LightDMUser *user)
return common_user_get_has_messages (GET_USER_PRIVATE (user)->common_user);
}
+/**
+ * lightdm_user_get_uid:
+ * @user: A #LightDMUser
+ *
+ * Get the uid of a user.
+ *
+ * Return value: The uid of the given user
+ **/
+uid_t
+lightdm_user_get_uid (LightDMUser *user)
+{
+ g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
+ return common_user_get_uid (GET_USER_PRIVATE (user)->common_user);
+}
+
static void
lightdm_user_init (LightDMUser *user)
{
@@ -599,6 +615,9 @@ lightdm_user_get_property (GObject *object,
case USER_PROP_HAS_MESSAGES:
g_value_set_boolean (value, lightdm_user_get_has_messages (self));
break;
+ case USER_PROP_UID:
+ g_value_set_uint64 (value, lightdm_user_get_uid (self));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -620,7 +639,7 @@ static void
lightdm_user_class_init (LightDMUserClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
+
g_type_class_add_private (klass, sizeof (LightDMUserPrivate));
object_class->set_property = lightdm_user_set_property;
@@ -718,6 +737,13 @@ lightdm_user_class_init (LightDMUserClass *klass)
"TRUE if the user is has waiting messages",
FALSE,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ USER_PROP_UID,
+ g_param_spec_string ("uid",
+ "uid",
+ "User UID",
+ NULL,
+ G_PARAM_READABLE));
/**
* LightDMUser::changed:
diff --git a/liblightdm-qt/QLightDM/usersmodel.h b/liblightdm-qt/QLightDM/usersmodel.h
index d803c41c..9407e46e 100644
--- a/liblightdm-qt/QLightDM/usersmodel.h
+++ b/liblightdm-qt/QLightDM/usersmodel.h
@@ -37,7 +37,8 @@ public:
SessionRole,
HasMessagesRole,
ImagePathRole,
- BackgroundPathRole
+ BackgroundPathRole,
+ UidRole
};
int rowCount(const QModelIndex &parent) const;
diff --git a/liblightdm-qt/usersmodel.cpp b/liblightdm-qt/usersmodel.cpp
index f45a79e2..558cd329 100644
--- a/liblightdm-qt/usersmodel.cpp
+++ b/liblightdm-qt/usersmodel.cpp
@@ -29,6 +29,7 @@ public:
QString session;
bool isLoggedIn;
bool hasMessages;
+ quint64 uid;
QString displayName() const;
};
@@ -66,7 +67,7 @@ UsersModelPrivate::UsersModelPrivate(UsersModel* parent) :
{
#if !defined(GLIB_VERSION_2_36)
g_type_init();
-#endif
+#endif
}
UsersModelPrivate::~UsersModelPrivate()
@@ -99,6 +100,7 @@ void UsersModelPrivate::loadUsers()
user.session = QString::fromUtf8(lightdm_user_get_session(ldmUser));
user.isLoggedIn = lightdm_user_get_logged_in(ldmUser);
user.hasMessages = lightdm_user_get_has_messages(ldmUser);
+ user.uid = (quint64)lightdm_user_get_uid(ldmUser);
users.append(user);
}
@@ -109,8 +111,6 @@ void UsersModelPrivate::loadUsers()
g_signal_connect(lightdm_user_list_get_instance(), "user-removed", G_CALLBACK (cb_userRemoved), this);
}
-
-
void UsersModelPrivate::cb_userAdded(LightDMUserList *user_list, LightDMUser *ldmUser, gpointer data)
{
Q_UNUSED(user_list)
@@ -126,6 +126,7 @@ void UsersModelPrivate::cb_userAdded(LightDMUserList *user_list, LightDMUser *ld
user.background = QString::fromUtf8(lightdm_user_get_background(ldmUser));
user.isLoggedIn = lightdm_user_get_logged_in(ldmUser);
user.hasMessages = lightdm_user_get_has_messages(ldmUser);
+ user.uid = (quint64)lightdm_user_get_uid(ldmUser);
that->users.append(user);
that->q_func()->endInsertRows();
@@ -148,6 +149,7 @@ void UsersModelPrivate::cb_userChanged(LightDMUserList *user_list, LightDMUser *
that->users[i].background = QString::fromUtf8(lightdm_user_get_background(ldmUser));
that->users[i].isLoggedIn = lightdm_user_get_logged_in(ldmUser);
that->users[i].hasMessages = lightdm_user_get_has_messages(ldmUser);
+ that->users[i].uid = (quint64)lightdm_user_get_uid(ldmUser);
QModelIndex index = that->q_ptr->createIndex(i, 0);
that->q_ptr->dataChanged(index, index);
@@ -189,6 +191,7 @@ UsersModel::UsersModel(QObject *parent) :
roles[SessionRole] = "session";
roles[HasMessagesRole] = "hasMessages";
roles[ImagePathRole] = "imagePath";
+ roles[UidRole] = "uid";
setRoleNames(roles);
d->loadUsers();
@@ -240,6 +243,8 @@ QVariant UsersModel::data(const QModelIndex &index, int role) const
return d->users[row].hasMessages;
case UsersModel::ImagePathRole:
return d->users[row].image;
+ case UsersModel::UidRole:
+ return d->users[row].uid;
}
return QVariant();
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 70cca884..20b7c9d9 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -67,6 +67,7 @@ TESTS = \
test-user-renamed \
test-user-renamed-invalid \
test-user-name \
+ test-user-uid \
test-user-image \
test-user-background \
test-user-layout \
@@ -507,6 +508,7 @@ EXTRA_DIST = \
scripts/user-renamed.conf \
scripts/user-renamed-invalid.conf \
scripts/user-session.conf \
+ scripts/user-uid.conf \
scripts/utmp-autologin.conf \
scripts/utmp-login.conf \
scripts/utmp-wrong-password.conf \
diff --git a/tests/scripts/user-uid.conf b/tests/scripts/user-uid.conf
new file mode 100644
index 00000000..b376f979
--- /dev/null
+++ b/tests/scripts/user-uid.conf
@@ -0,0 +1,32 @@
+#
+# Check returns correct UID for a user
+#
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?GREETER-X-0 CONNECT-XSERVER
+#?GREETER-X-0 CONNECT-TO-DAEMON
+#?GREETER-X-0 CONNECTED-TO-DAEMON
+
+# Check correct UID
+#?*GREETER-X-0 LOG-USER USERNAME=have-password1 FIELDS=UID
+#?GREETER-X-0 LOG-USER USERNAME=have-password1 UID=1000
+
+# Cleanup
+#?*STOP-DAEMON
+#?GREETER-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/src/test-gobject-greeter.c b/tests/src/test-gobject-greeter.c
index 56d4da76..fc3f6086 100644
--- a/tests/src/test-gobject-greeter.c
+++ b/tests/src/test-gobject-greeter.c
@@ -263,6 +263,8 @@ request_cb (const gchar *name, GHashTable *params)
g_string_append_printf (status_text, " LOGGED-IN=%s", lightdm_user_get_logged_in (user) ? "TRUE" : "FALSE");
else if (strcmp (fields[i], "HAS-MESSAGES") == 0)
g_string_append_printf (status_text, " HAS-MESSAGES=%s", lightdm_user_get_has_messages (user) ? "TRUE" : "FALSE");
+ else if (strcmp (fields[i], "UID") == 0)
+ g_string_append_printf (status_text, " UID=%d", lightdm_user_get_uid (user));
}
g_strfreev (fields);
g_free (layouts_text);
diff --git a/tests/test-user-uid b/tests/test-user-uid
new file mode 100644
index 00000000..647420f0
--- /dev/null
+++ b/tests/test-user-uid
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner user-uid test-gobject-greeter