cmd.rs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. use std::collections::HashMap;
  2. /// 命令类型
  3. pub enum CmdType {
  4. User,
  5. Passwd,
  6. Group,
  7. }
  8. #[derive(Debug, PartialEq, Eq, Hash, Clone)]
  9. pub enum CmdOption {
  10. /// 用户描述
  11. Comment,
  12. /// 用户主目录
  13. Dir,
  14. /// 组名
  15. Group,
  16. /// 组id
  17. Gid,
  18. /// 终端程序
  19. Shell,
  20. /// 用户id
  21. Uid,
  22. /// 删除用户的home目录
  23. Remove,
  24. /// 添加到其它用户组中
  25. Append,
  26. /// 修改用户名
  27. Login,
  28. /// 设置组密码
  29. Passwd,
  30. /// 修改组名
  31. NewGroupName,
  32. /// 无效选项
  33. Invalid,
  34. }
  35. impl From<String> for CmdOption {
  36. fn from(s: String) -> Self {
  37. match s.as_str() {
  38. "-c" => CmdOption::Comment,
  39. "-d" => CmdOption::Dir,
  40. "-G" => CmdOption::Group,
  41. "-g" => CmdOption::Gid,
  42. "-s" => CmdOption::Shell,
  43. "-u" => CmdOption::Uid,
  44. "-r" => CmdOption::Remove,
  45. "-a" => CmdOption::Append,
  46. "-l" => CmdOption::Login,
  47. "-p" => CmdOption::Passwd,
  48. "-n" => CmdOption::NewGroupName,
  49. _ => CmdOption::Invalid,
  50. }
  51. }
  52. }
  53. impl From<CmdOption> for &str {
  54. fn from(option: CmdOption) -> Self {
  55. match option {
  56. CmdOption::Comment => "-c",
  57. CmdOption::Dir => "-d",
  58. CmdOption::Group => "-G",
  59. CmdOption::Shell => "-s",
  60. CmdOption::Uid => "-u",
  61. CmdOption::Login => "-l",
  62. CmdOption::Append => "-a",
  63. CmdOption::Gid => "-g",
  64. CmdOption::NewGroupName => "-n",
  65. CmdOption::Passwd => "-p",
  66. CmdOption::Remove => "-r",
  67. CmdOption::Invalid => "Invalid option",
  68. }
  69. }
  70. }
  71. /// useradd/userdel/usermod命令
  72. #[derive(Debug)]
  73. pub struct UserCommand {
  74. /// 用户名
  75. pub username: String,
  76. /// 选项
  77. pub options: HashMap<CmdOption, String>,
  78. }
  79. /// passwd命令
  80. #[derive(Debug)]
  81. pub struct PasswdCommand {
  82. pub username: Option<String>,
  83. }
  84. /// groupadd/groupdel/groupmod命令
  85. #[derive(Debug)]
  86. pub struct GroupCommand {
  87. pub groupname: String,
  88. pub options: HashMap<CmdOption, String>,
  89. }