Basic Solution File System - BSFS
Loading...
Searching...
No Matches
permissions_bsfs.c File Reference

Implementation of POSIX-like permission checks for BSFS. More...

Functions

uint16_t bsfs_effective_mode (const inode_t *ino, uint16_t uid, uint16_t gid)
 Compute the effective rwx mode (3 bits) for a caller on an inode.
int bsfs_can_read_file (const inode_t *file, uint16_t uid, uint16_t gid)
 Check if caller can read a regular file.
int bsfs_can_write_file (const inode_t *file, uint16_t uid, uint16_t gid)
 Check if caller can write to a regular file.
int bsfs_can_exec_file (const inode_t *file, uint16_t uid, uint16_t gid)
 Check if caller can execute a regular file.
int bsfs_can_traverse_dir (const inode_t *dir, uint16_t uid, uint16_t gid)
 Check if caller can traverse (search) a directory.
int bsfs_can_list_dir (const inode_t *dir, uint16_t uid, uint16_t gid)
 Check if caller can list entries in a directory.
int bsfs_can_modify_dir (const inode_t *dir, uint16_t uid, uint16_t gid)
 Check if caller can modify entries within a directory (w+x).
int bsfs_can_unlink_in_sticky (const inode_t *dir, const inode_t *entry, uint16_t uid, uint16_t gid)
 Check unlink/rename permission in a sticky directory.

Detailed Description

Implementation of POSIX-like permission checks for BSFS.

Function Documentation

◆ bsfs_can_exec_file()

int bsfs_can_exec_file ( const inode_t * file,
uint16_t uid,
uint16_t gid )

Check if caller can execute a regular file.

Parameters
fileTarget inode.
uidCaller user id.
gidCaller group id.
Returns
1 if allowed; 0 otherwise.

◆ bsfs_can_list_dir()

int bsfs_can_list_dir ( const inode_t * dir,
uint16_t uid,
uint16_t gid )

Check if caller can list entries in a directory.

Parameters
dirDirectory inode.
uidCaller user id.
gidCaller group id.
Returns
1 if allowed; 0 otherwise.

◆ bsfs_can_modify_dir()

int bsfs_can_modify_dir ( const inode_t * dir,
uint16_t uid,
uint16_t gid )

Check if caller can modify entries within a directory (w+x).

Parameters
dirDirectory inode.
uidCaller user id.
gidCaller group id.
Returns
1 if allowed; 0 otherwise.

◆ bsfs_can_read_file()

int bsfs_can_read_file ( const inode_t * file,
uint16_t uid,
uint16_t gid )

Check if caller can read a regular file.

Parameters
fileTarget inode.
uidCaller user id.
gidCaller group id.
Returns
1 if allowed; 0 otherwise.

◆ bsfs_can_traverse_dir()

int bsfs_can_traverse_dir ( const inode_t * dir,
uint16_t uid,
uint16_t gid )

Check if caller can traverse (search) a directory.

Parameters
dirDirectory inode.
uidCaller user id.
gidCaller group id.
Returns
1 if allowed; 0 otherwise.

◆ bsfs_can_unlink_in_sticky()

int bsfs_can_unlink_in_sticky ( const inode_t * dir,
const inode_t * entry,
uint16_t uid,
uint16_t gid )

Check unlink/rename permission in a sticky directory.

If the directory has sticky bit set (S_ISVTX), only root, the directory owner, or the entry owner may remove/rename entries inside it.

Parameters
dirParent directory inode.
entryEntry inode (file or subdirectory) to remove/rename.
uidCaller user id.
gidCaller group id (unused here).
Returns
1 if allowed, 0 otherwise.

◆ bsfs_can_write_file()

int bsfs_can_write_file ( const inode_t * file,
uint16_t uid,
uint16_t gid )

Check if caller can write to a regular file.

Parameters
fileTarget inode.
uidCaller user id.
gidCaller group id.
Returns
1 if allowed; 0 otherwise.

◆ bsfs_effective_mode()

uint16_t bsfs_effective_mode ( const inode_t * ino,
uint16_t uid,
uint16_t gid )

Compute the effective rwx mode (3 bits) for a caller on an inode.

Parameters
inoTarget inode.
uidCaller user id.
gidCaller group id.
Returns
3-bit mask (r=4, w=2, x=1) for the caller class; root returns 7.