Mercurial > hg > Members > anatofuz > ie-virsh
changeset 4:668a91cd7be8
impl virsh list --all filter
author | AnaTofuZ <anatofuz@gmail.com> |
---|---|
date | Fri, 23 Oct 2020 17:42:57 +0900 |
parents | 5bdb02e05c86 |
children | ef1358b993e1 |
files | src/main.rs |
diffstat | 1 files changed, 24 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main.rs Thu Oct 22 17:40:16 2020 +0900 +++ b/src/main.rs Fri Oct 23 17:42:57 2020 +0900 @@ -1,22 +1,19 @@ use nix; use std::process::Command; -//use libc; fn main() { - let uid = getuid(); - let gid = getgid(); + let uid = getuid(); + let gid = getgid(); let user_name = getlogin(uid); println!("uid: {} gid: {} name: {}", uid, gid, user_name); set_root_id(); - - list_command(); + list_command(user_name); } - 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)} ; + 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(); } @@ -30,12 +27,26 @@ return gid_struct.into(); } -fn list_command() { - Command::new("virsh").arg("list").arg("--all").status().expect("failed to virsh"); +fn list_command(user_id: &'static str) { + let output = Command::new("virsh") + .arg("list") + .arg("--all") + .output() + .expect("failed to virsh"); + let virsh_list = String::from_utf8_lossy(&output.stdout); + let mut virsh_list = virsh_list.split("\n"); + let info_msg = virsh_list.next().unwrap(); + let border_line = virsh_list.next().unwrap(); + + let vm_list = virsh_list.filter(|&x| x.contains(user_id)); + + println!("{}\n{}", info_msg, border_line); + for vm in vm_list { + println!("{}", vm); + } } - -fn set_root_id(){ +fn set_root_id() { let id = 0; match nix::unistd::seteuid(nix::unistd::Uid::from_raw(id)) { Err(err) => panic!("failed seteuid {}", err), @@ -55,4 +66,4 @@ Err(err) => panic!("failed setdid{}", err), Ok(_) => {} } -} \ No newline at end of file +}