summaryrefslogtreecommitdiff
path: root/user-info/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'user-info/src/lib.rs')
-rw-r--r--user-info/src/lib.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/user-info/src/lib.rs b/user-info/src/lib.rs
index bd5ff42..7a42db9 100644
--- a/user-info/src/lib.rs
+++ b/user-info/src/lib.rs
@@ -1,10 +1,18 @@
-use nix::unistd::{getuid, User};
+use nix::unistd::{getgroups, getuid, Group, User};
pub fn get_username() -> Option<String> {
let uid = getuid();
User::from_uid(uid).ok().flatten().map(|user| user.name)
}
+pub fn get_user_groups() -> Vec<String> {
+ let gids = getgroups().unwrap_or(Vec::default());
+ gids.into_iter()
+ .filter_map(|gid| Group::from_gid(gid).ok().flatten())
+ .map(|group| group.name)
+ .collect()
+}
+
#[cfg(test)]
mod test {
use super::*;
@@ -17,4 +25,13 @@ mod test {
let username_len = username.unwrap().trim().len();
assert!(username_len > 0);
}
+
+ #[test]
+ fn it_returns_some_groups() {
+ let groups = get_user_groups();
+ assert!(groups.len() > 0);
+ for group in groups {
+ assert!(group.trim().len() > 0);
+ }
+ }
}