Mercurial > hg > Members > anatofuz > ie-virsh
view src/main.rs @ 3:5bdb02e05c86
show virsh list --all
author | AnaTofuZ <anatofuz@gmail.com> |
---|---|
date | Thu, 22 Oct 2020 17:40:16 +0900 |
parents | 1632a34a3f6c |
children | 668a91cd7be8 |
line wrap: on
line source
use nix; use std::process::Command; //use libc; fn main() { let uid = getuid(); let gid = getgid(); let user_name = getlogin(uid); println!("uid: {} gid: {} name: {}", uid, gid, user_name); set_root_id(); list_command(); } fn getlogin(uid: u32) -> &'static str { use std::ffi::CStr; let user_passwd = unsafe { nix::libc::getpwuid(uid)}; let c_str = unsafe { CStr::from_ptr((*user_passwd).pw_name)} ; return c_str.to_str().unwrap(); } fn getuid() -> u32 { let uid_struct = nix::unistd::getuid(); return uid_struct.into(); } fn getgid() -> u32 { let gid_struct = nix::unistd::getgid(); return gid_struct.into(); } fn list_command() { Command::new("virsh").arg("list").arg("--all").status().expect("failed to virsh"); } fn set_root_id(){ let id = 0; match nix::unistd::seteuid(nix::unistd::Uid::from_raw(id)) { Err(err) => panic!("failed seteuid {}", err), Ok(_) => {} } match nix::unistd::setegid(nix::unistd::Gid::from_raw(id)) { Err(err) => panic!("failed setedid{}", err), Ok(_) => {} } match nix::unistd::setuid(nix::unistd::Uid::from_raw(id)) { Err(err) => panic!("failed setuid {}", err), Ok(_) => {} } match nix::unistd::setgid(nix::unistd::Gid::from_raw(id)) { Err(err) => panic!("failed setdid{}", err), Ok(_) => {} } }