(
mode: u32,
file_owner: Uid,
file_group: Gid,
)
| 410 | } |
| 411 | |
| 412 | fn get_right_permission( |
| 413 | mode: u32, |
| 414 | file_owner: Uid, |
| 415 | file_group: Gid, |
| 416 | ) -> nix::Result<Permissions> { |
| 417 | let owner_mode = (mode & 0o700) >> 6; |
| 418 | let owner_permissions = get_permissions(owner_mode); |
| 419 | |
| 420 | let group_mode = (mode & 0o070) >> 3; |
| 421 | let group_permissions = get_permissions(group_mode); |
| 422 | |
| 423 | let others_mode = mode & 0o007; |
| 424 | let others_permissions = get_permissions(others_mode); |
| 425 | |
| 426 | let user_id = nix::unistd::getuid(); |
| 427 | let groups_ids = getgroups_impl()?; |
| 428 | |
| 429 | if file_owner == user_id { |
| 430 | Ok(owner_permissions) |
| 431 | } else if groups_ids.contains(&file_group) { |
| 432 | Ok(group_permissions) |
| 433 | } else { |
| 434 | Ok(others_permissions) |
| 435 | } |
| 436 | } |
| 437 | |
| 438 | #[cfg(any(target_os = "macos", target_os = "ios"))] |
| 439 | fn getgroups_impl() -> nix::Result<Vec<Gid>> { |
no test coverage detected