()
| 49 | |
| 50 | #[cfg(windows)] |
| 51 | fn get_default_shell() -> Result<(), SshdConfigError> { |
| 52 | let registry_helper = RegistryHelper::new(REGISTRY_PATH, Some(DEFAULT_SHELL.to_string()), None)?; |
| 53 | let default_shell: Registry = registry_helper.get()?; |
| 54 | let mut shell = None; |
| 55 | // default_shell is a single string consisting of the shell exe path |
| 56 | if let Some(value) = default_shell.value_data { |
| 57 | match value { |
| 58 | RegistryValueData::String(s) => { |
| 59 | shell = Some(s); |
| 60 | } |
| 61 | _ => return Err(SshdConfigError::InvalidInput(t!("get.defaultShellMustBeString").to_string())), |
| 62 | } |
| 63 | } |
| 64 | |
| 65 | let registry_helper = RegistryHelper::new(REGISTRY_PATH, Some(DEFAULT_SHELL_CMD_OPTION.to_string()), None)?; |
| 66 | let option: Registry = registry_helper.get()?; |
| 67 | let mut cmd_option = None; |
| 68 | if let Some(value) = option.value_data { |
| 69 | match value { |
| 70 | RegistryValueData::String(s) => cmd_option = Some(s), |
| 71 | _ => return Err(SshdConfigError::InvalidInput(t!("get.defaultShellCmdOptionMustBeString").to_string())), |
| 72 | } |
| 73 | } |
| 74 | |
| 75 | let registry_helper = RegistryHelper::new(REGISTRY_PATH, Some(DEFAULT_SHELL_ESCAPE_ARGS.to_string()), None)?; |
| 76 | let escape_args: Registry = registry_helper.get()?; |
| 77 | let mut escape_arguments = None; |
| 78 | if let Some(value) = escape_args.value_data { |
| 79 | if let RegistryValueData::DWord(b) = value { |
| 80 | if b == 0 || b == 1 { |
| 81 | escape_arguments = if b == 1 { Some(true) } else { Some(false) }; |
| 82 | } else { |
| 83 | return Err(SshdConfigError::InvalidInput(t!("get.defaultShellEscapeArgsMustBe0Or1", input = b).to_string())); |
| 84 | } |
| 85 | } else { |
| 86 | return Err(SshdConfigError::InvalidInput(t!("get.defaultShellEscapeArgsMustBeDWord").to_string())); |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | let result = DefaultShell { |
| 91 | shell, |
| 92 | cmd_option, |
| 93 | escape_arguments |
| 94 | }; |
| 95 | |
| 96 | let output = serde_json::to_string(&result)?; |
| 97 | println!("{output}"); |
| 98 | Ok(()) |
| 99 | } |
| 100 | |
| 101 | #[cfg(not(windows))] |
| 102 | fn get_default_shell() -> Result<(), SshdConfigError> { |
no test coverage detected