diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2014-09-08 12:50:39 +1200 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2014-09-08 12:50:39 +1200 |
commit | f2f605445cdec620bd40b568bc3a8efd6b118ed6 (patch) | |
tree | 9f1b23e4156dcc7b0cdeee3cce9c0f16cdfad803 | |
parent | 0b41ae16801b910ab79a7d852f638b8eeb8aa06d (diff) | |
download | lightdm-git-f2f605445cdec620bd40b568bc3a8efd6b118ed6.tar.gz |
Add liblightdm method to get user UID
-rw-r--r-- | debian/liblightdm-gobject-1-0.symbols | 1 | ||||
-rw-r--r-- | liblightdm-gobject/liblightdm-gobject-1.vapi | 1 | ||||
-rw-r--r-- | liblightdm-gobject/lightdm/user.h | 2 | ||||
-rw-r--r-- | liblightdm-gobject/user.c | 30 | ||||
-rw-r--r-- | liblightdm-qt/QLightDM/usersmodel.h | 3 | ||||
-rw-r--r-- | liblightdm-qt/usersmodel.cpp | 11 | ||||
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/scripts/user-uid.conf | 32 | ||||
-rw-r--r-- | tests/src/test-gobject-greeter.c | 2 | ||||
-rw-r--r-- | tests/test-user-uid | 2 |
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 |