Add support for group-based permission checking in ext2

This commit is contained in:
anbo225
2024-12-12 16:59:16 +08:00
committed by Tate, Hongliang Tian
parent 6cea8d2a8c
commit e75b6320ad
16 changed files with 153 additions and 42 deletions

View File

@ -5,7 +5,7 @@ use crate::{
fs::{
file_table::FileDesc,
fs_resolver::{FsPath, AT_FDCWD},
utils::PATH_MAX,
utils::{Permission, PATH_MAX},
},
prelude::*,
};
@ -81,19 +81,19 @@ pub fn do_faccessat(
return Ok(SyscallReturn::Return(0));
}
let inode_mode = dentry.mode()?;
let inode = dentry.inode();
// FIXME: The current implementation is dummy
if mode.contains(AccessMode::R_OK) && !inode_mode.is_readable() {
return_errno_with_message!(Errno::EACCES, "Read permission denied");
if mode.contains(AccessMode::R_OK) {
inode.check_permission(Permission::MAY_READ)?;
}
if mode.contains(AccessMode::W_OK) && !inode_mode.is_writable() {
return_errno_with_message!(Errno::EACCES, "Write permission denied");
if mode.contains(AccessMode::W_OK) {
inode.check_permission(Permission::MAY_WRITE)?;
}
if mode.contains(AccessMode::X_OK) && !inode_mode.is_executable() {
return_errno_with_message!(Errno::EACCES, "Execute permission denied");
if mode.contains(AccessMode::X_OK) {
inode.check_permission(Permission::MAY_EXEC)?;
}
Ok(SyscallReturn::Return(0))