1use crate::errors::*;
2use libc::{gid_t, uid_t};
3
4pub fn getresuid() -> Result<(uid_t, uid_t, uid_t)> {
11 let mut ruid: uid_t = 0;
12 let mut euid: uid_t = 0;
13 let mut suid: uid_t = 0;
14
15 let ret = unsafe { libc::getresuid(&mut ruid, &mut euid, &mut suid) };
16
17 if ret != 0 {
18 Err(errno())
19 } else {
20 Ok((ruid, euid, suid))
21 }
22}
23
24pub fn getresgid() -> Result<(gid_t, gid_t, gid_t)> {
31 let mut rgid: gid_t = 0;
32 let mut egid: gid_t = 0;
33 let mut sgid: gid_t = 0;
34
35 let ret = unsafe { libc::getresgid(&mut rgid, &mut egid, &mut sgid) };
36
37 if ret != 0 {
38 Err(errno())
39 } else {
40 Ok((rgid, egid, sgid))
41 }
42}
43
44pub fn setgroups(groups: &[gid_t]) -> Result<()> {
50 let ret = unsafe { libc::setgroups(groups.len(), groups.as_ptr()) };
51
52 if ret < 0 {
53 Err(errno())
54 } else {
55 Ok(())
56 }
57}