# HG changeset patch # User AnaTofuZ # Date 1603955752 -32400 # Node ID 0df4d067badb687358c90015fcc8855aa96e785b # Parent 9fac2c57822838c6026630836fd9a18e73e55f82 move each crates diff -r 9fac2c578228 -r 0df4d067badb src/command.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/command.rs Thu Oct 29 16:15:52 2020 +0900 @@ -0,0 +1,10 @@ +use super::virsh; + +pub fn list_command(user_name: &'static str) { + let (ldump_msg, vm_list_strs) = virsh::get_vm_list(user_name); + println!("{}", ldump_msg.info_msg); + println!("{}", ldump_msg.border_line); + for vm_info in vm_list_strs { + println!("{}", vm_info); + } +} diff -r 9fac2c578228 -r 0df4d067badb src/lib.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib.rs Thu Oct 29 16:15:52 2020 +0900 @@ -0,0 +1,3 @@ +pub mod command; +pub mod user; +pub mod virsh; diff -r 9fac2c578228 -r 0df4d067badb src/main.rs --- a/src/main.rs Thu Oct 29 09:44:38 2020 +0900 +++ b/src/main.rs Thu Oct 29 16:15:52 2020 +0900 @@ -1,6 +1,5 @@ use clap::Clap; -use nix; -use std::process::Command; +use ie_virsh::{command, user}; #[derive(Clap)] #[clap(version = "1.0", author = "AnaTofuZ ")] @@ -19,8 +18,7 @@ Console(Console), Start(Start), Ttyconsole(TTyConsole), - VNCDisplay(VNCDisplay) - //todo define-gdb dumpxml + VNCDisplay(VNCDisplay), //todo define-gdb dumpxml } /// define (but don't start) a domain from an template XML file @@ -75,11 +73,6 @@ name_or_id: String, } -struct ListDumpMsg { - info_msg: String, - border_line: String, -} - struct VM { id: u32, name: String, @@ -89,19 +82,15 @@ fn main() { let opts: Opts = Opts::parse(); - let uid = getuid(); - let gid = getgid(); - let user_name = getlogin(uid); + let uid = user::getuid(); + let gid = user::getgid(); + let user_name = user::getlogin(uid); println!("uid: {} gid: {} name: {}", uid, gid, user_name); match opts.subcmd { SubCommand::List(_) => { - set_root_id(); - let (ldump_msg, vm_list_strs) = list_command(user_name); - println!("{}\n{}", ldump_msg.info_msg, ldump_msg.border_line); - for vm_info in vm_list_strs { - println!("{}", vm_info); - } + user::set_root_id(); + command::list_command(user_name); } SubCommand::Define(name) => {} SubCommand::Shutdown(name) => {} @@ -115,68 +104,4 @@ //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) }; - 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(user_name: &'static str) -> (ListDumpMsg, Vec) { - 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 ldump_msg = ListDumpMsg { - info_msg: String::from(info_msg), - border_line: String::from(border_line), - }; - - return ( - ldump_msg, - virsh_list - .filter(|&x| x.contains(user_name)) - .map(|x| x.to_string()) - .collect(), - ); -} - -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(_) => {} - } -} - fn create_new_vm(user_name: &'static str, vm_name: &'static str, debug_kernel: bool) {} diff -r 9fac2c578228 -r 0df4d067badb src/user.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/user.rs Thu Oct 29 16:15:52 2020 +0900 @@ -0,0 +1,40 @@ +use nix; + +pub 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(); +} + +pub fn getuid() -> u32 { + let uid_struct = nix::unistd::getuid(); + return uid_struct.into(); +} + +pub fn getgid() -> u32 { + let gid_struct = nix::unistd::getgid(); + return gid_struct.into(); +} + +pub 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(_) => {} + } +} diff -r 9fac2c578228 -r 0df4d067badb src/virsh.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/virsh.rs Thu Oct 29 16:15:52 2020 +0900 @@ -0,0 +1,31 @@ +use std::process::Command; + +pub struct ListDumpMsg { + pub info_msg: String, + pub border_line: String, +} + +pub fn get_vm_list(user_name: &'static str) -> (ListDumpMsg, Vec) { + 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 ldump_msg = ListDumpMsg { + info_msg: String::from(info_msg), + border_line: String::from(border_line), + }; + + return ( + ldump_msg, + virsh_list + .filter(|&x| x.contains(user_name)) + .map(|x| x.to_string()) + .collect(), + ); +}