aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2015-09-16 08:58:28 -0400
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2015-10-27 17:02:38 +0100
commita18ab60939f72eb4c4b4c057790d14bcdeb3ec56 (patch)
tree008617ef2cb63b45ba50e966fccc712a58c5ed37 /src
parenta9369a5919842e6118f90333ddc150e6230f37ec (diff)
downloadarctica-greeter-a18ab60939f72eb4c4b4c057790d14bcdeb3ec56.tar.gz
arctica-greeter-a18ab60939f72eb4c4b4c057790d14bcdeb3ec56.tar.bz2
arctica-greeter-a18ab60939f72eb4c4b4c057790d14bcdeb3ec56.zip
Add an option to only show users in a list of specified groups
Ported to ArcticaGreeter: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
Diffstat (limited to 'src')
-rw-r--r--src/settings.vala1
-rw-r--r--src/user-list.vala31
2 files changed, 32 insertions, 0 deletions
diff --git a/src/settings.vala b/src/settings.vala
index 6757b9c..9aef819 100644
--- a/src/settings.vala
+++ b/src/settings.vala
@@ -40,6 +40,7 @@ public class AGSettings
public static const string KEY_PLAY_READY_SOUND = "play-ready-sound";
public static const string KEY_INDICATORS = "indicators";
public static const string KEY_HIDDEN_USERS = "hidden-users";
+ public static const string KEY_GROUP_FILTER = "group-filter";
public static const string KEY_IDLE_TIMEOUT = "idle-timeout";
public static const string KEY_REMOTE_SERVICE_FQDN = "remote-service-fqdn";
diff --git a/src/user-list.vala b/src/user-list.vala
index 4805956..a4e4099 100644
--- a/src/user-list.vala
+++ b/src/user-list.vala
@@ -1044,6 +1044,9 @@ public class UserList : GreeterList
return;
}
+ if (!filter_group (user.name))
+ return;
+
var label = user.real_name;
if (user.real_name == "")
label = user.name;
@@ -1051,6 +1054,34 @@ public class UserList : GreeterList
add_user (user.name, label, user.background, user.logged_in, user.has_messages, user.session);
}
+ private bool filter_group (string user_name)
+ {
+ var group_filter = UGSettings.get_strv (UGSettings.KEY_GROUP_FILTER);
+
+ /* Empty list means do not filter by group */
+ if (group_filter.length == 0)
+ return true;
+
+ foreach (var group_name in group_filter)
+ if (in_group (group_name, user_name))
+ return true;
+
+ return false;
+ }
+
+ private bool in_group (string group_name, string user_name)
+ {
+ unowned Posix.Group? group = Posix.getgrnam (group_name);
+ if (group == null)
+ return false;
+
+ foreach (var name in group.gr_mem)
+ if (name == user_name)
+ return true;
+
+ return false;
+ }
+
private void user_removed_cb (LightDM.User user)
{
debug ("Removing user %s", user.name);