Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <stdint.h>
- #include <inttypes.h>
- struct Task
- {
- unsigned uid;
- int gid_count;
- unsigned *gids;
- };
- int
- myaccess(const struct stat *stb, const struct Task *task, int access) {
- if (task->uid == 0) {
- return 1;
- }
- unsigned uaccess = access;
- if (task->uid == stb->st_uid) {
- return ((stb->st_mode & (uaccess << 6)) == (uaccess << 6));
- }
- for (int i = 0; i < task->gid_count; ++i) {
- if (task->gids[i] == stb->st_gid) {
- return ((stb->st_mode & (uaccess << 3)) == (uaccess << 3));
- }
- }
- return ((stb->st_mode & uaccess) == uaccess);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement