()
| 199 | /// look at (and write to) the real user's `~/.hermes/`, not root's. |
| 200 | #[cfg(unix)] |
| 201 | fn resolve_hermes_target_user() -> Result<(PathBuf, u32, u32), Box<dyn Error>> { |
| 202 | if let Ok(user_name) = std::env::var("SUDO_USER") |
| 203 | && !user_name.trim().is_empty() |
| 204 | && user_name.trim() != "root" |
| 205 | && let Ok(Some(user)) = nix::unistd::User::from_name(user_name.trim()) |
| 206 | { |
| 207 | return Ok((user.dir, user.uid.as_raw(), user.gid.as_raw())); |
| 208 | } |
| 209 | |
| 210 | let uid = nix::unistd::getuid().as_raw(); |
| 211 | let gid = nix::unistd::getgid().as_raw(); |
| 212 | let home = std::env::var_os("HOME") |
| 213 | .map(PathBuf::from) |
| 214 | .ok_or_else(|| -> Box<dyn Error> { |
| 215 | "failed to resolve target user home directory for Hermes skill install (HOME unset)" |
| 216 | .into() |
| 217 | })?; |
| 218 | Ok((home, uid, gid)) |
| 219 | } |
| 220 | |
| 221 | #[cfg(not(unix))] |
| 222 | fn resolve_hermes_target_user() -> Result<(PathBuf, u32, u32), Box<dyn Error>> { |
no outgoing calls
no test coverage detected