1*03746da3SJomo #[derive(Debug, Default, Clone)] 2*03746da3SJomo /// useradd的信息 3*03746da3SJomo pub struct UAddInfo { 4*03746da3SJomo /// 用户名 5*03746da3SJomo pub username: String, 6*03746da3SJomo pub uid: String, 7*03746da3SJomo pub gid: String, 8*03746da3SJomo /// 所在组的组名 9*03746da3SJomo pub group: String, 10*03746da3SJomo /// 用户描述信息 11*03746da3SJomo pub comment: String, 12*03746da3SJomo /// 主目录 13*03746da3SJomo pub home_dir: String, 14*03746da3SJomo /// 终端程序名 15*03746da3SJomo pub shell: String, 16*03746da3SJomo } 17*03746da3SJomo 18*03746da3SJomo impl From<UAddInfo> for String { from(info: UAddInfo) -> Self19*03746da3SJomo fn from(info: UAddInfo) -> Self { 20*03746da3SJomo format!( 21*03746da3SJomo "{}::{}:{}:{}:{}:{}\n", 22*03746da3SJomo info.username, info.uid, info.gid, info.comment, info.home_dir, info.shell 23*03746da3SJomo ) 24*03746da3SJomo } 25*03746da3SJomo } 26*03746da3SJomo 27*03746da3SJomo #[derive(Debug, Default, Clone)] 28*03746da3SJomo /// userdel的信息 29*03746da3SJomo pub struct UDelInfo { 30*03746da3SJomo pub username: String, 31*03746da3SJomo pub home: Option<String>, 32*03746da3SJomo } 33*03746da3SJomo 34*03746da3SJomo #[derive(Debug, Default, Clone)] 35*03746da3SJomo /// usermod的信息 36*03746da3SJomo pub struct UModInfo { 37*03746da3SJomo pub username: String, 38*03746da3SJomo pub groups: Option<Vec<String>>, 39*03746da3SJomo pub new_comment: Option<String>, 40*03746da3SJomo pub new_home: Option<String>, 41*03746da3SJomo pub new_gid: Option<String>, 42*03746da3SJomo pub new_group: Option<String>, 43*03746da3SJomo pub new_name: Option<String>, 44*03746da3SJomo pub new_shell: Option<String>, 45*03746da3SJomo pub new_uid: Option<String>, 46*03746da3SJomo } 47*03746da3SJomo 48*03746da3SJomo #[derive(Debug, Default, Clone)] 49*03746da3SJomo /// passwd的信息 50*03746da3SJomo pub struct PasswdInfo { 51*03746da3SJomo pub username: String, 52*03746da3SJomo pub new_password: String, 53*03746da3SJomo } 54*03746da3SJomo 55*03746da3SJomo #[derive(Debug, Default, Clone)] 56*03746da3SJomo /// groupadd的信息 57*03746da3SJomo pub struct GAddInfo { 58*03746da3SJomo pub groupname: String, 59*03746da3SJomo pub gid: String, 60*03746da3SJomo pub passwd: Option<String>, 61*03746da3SJomo } 62*03746da3SJomo 63*03746da3SJomo impl GAddInfo { to_string_group(&self) -> String64*03746da3SJomo pub fn to_string_group(&self) -> String { 65*03746da3SJomo let mut passwd = String::from(""); 66*03746da3SJomo if self.passwd.is_some() { 67*03746da3SJomo passwd = "x".to_string(); 68*03746da3SJomo } 69*03746da3SJomo format!("{}:{}:{}:\n", self.groupname, passwd, self.gid) 70*03746da3SJomo } 71*03746da3SJomo to_string_gshadow(&self) -> String72*03746da3SJomo pub fn to_string_gshadow(&self) -> String { 73*03746da3SJomo let mut passwd = String::from("!"); 74*03746da3SJomo if let Some(gpasswd) = &self.passwd { 75*03746da3SJomo passwd = gpasswd.clone(); 76*03746da3SJomo } 77*03746da3SJomo 78*03746da3SJomo format!("{}:{}::\n", self.groupname, passwd) 79*03746da3SJomo } 80*03746da3SJomo } 81*03746da3SJomo 82*03746da3SJomo #[derive(Debug, Default, Clone)] 83*03746da3SJomo /// groupdel的信息 84*03746da3SJomo pub struct GDelInfo { 85*03746da3SJomo pub groupname: String, 86*03746da3SJomo } 87*03746da3SJomo 88*03746da3SJomo #[derive(Debug, Default, Clone)] 89*03746da3SJomo /// groupmod的信息 90*03746da3SJomo pub struct GModInfo { 91*03746da3SJomo pub groupname: String, 92*03746da3SJomo pub gid: String, 93*03746da3SJomo pub new_groupname: Option<String>, 94*03746da3SJomo pub new_gid: Option<String>, 95*03746da3SJomo } 96