extern crate libc;
fn example(guid: u32) {
unsafe {
let ruid = libc::getuid();
libc::seteuid(guid);
let mut v = vec![0; 0];
let num_groups = libc::getgroups(0, v.as_mut_ptr());
let mut groups = Vec::with_capacity(num_groups as usize);
libc::getgroups(num_groups, groups.as_mut_ptr());
println!(
"real user id {} as user id {}, as user groups {:?}, numgroups {}",
&ruid, &guid, &groups, &num_groups
);
}
}
这是打印
real user id 1000 as user id 1000, as user groups [], numgroups 9
我的假设是它将显示9个组的向量。
发布于 2018-06-16 04:40:35
您需要通过添加虚拟元素来更改groups
的大小,而不仅仅是它的容量。如下所示:
unsafe {
let ruid = libc::getuid();
let guid = libc::getgid();
let num_groups = libc::getgroups(0, ::std::ptr::null_mut());
let mut groups = vec![0; num_groups as usize];
libc::getgroups(num_groups, groups.as_mut_ptr());
println!(
"real user id {} as user id {}, as user groups {:?}, numgroups {}",
&ruid, &guid, &groups, &num_groups
);
}
https://stackoverflow.com/questions/50882178
复制相似问题