기본 색인 | 섹션 9 | English | 日本語 | 옵션 |
#include <sys/param.h>
#include <sys/vnode.h>
인수는 이하와 같습니다.
vp | 조사 대상 파일의 vnode. |
mode | 요구된 액세스의 타입. |
cred | 조사 대상의 유저 증명. |
td | 조사하고 있는 thread. |
mode 하 VREAD, VWRITE 또는 VEXEC (을)를 포함한 마스크입니다.
int vop_access(struct vnode *vp, int mode, struct ucred *cred, struct thread *td) { int error;/* * 파일이 소켓, FIFO, 또는 파일 시스템에 존재한다 * 블록형 또는 캐릭터형 디바이스가 아닌 경우에는, 읽기 전용 * 파일 시스템에의 기입은 인정되지 않습니다. */ if (mode & VWRITE) { switch (vp->v_type) { case VDIR: case VLNK: case VREG: if (vp->v_mount->mnt_flag & MNT_RDONLY) return EROFS;
break; } }
/* 불변 비트가 설정되어 있으면, 아무도 기입할 수 없습니다. */ if ((mode & VWRITE) && vp has immutable bit set) return EPERM;
/* 그렇지 않으면, uid 가 0 이라면 항상 허가. */ if (cred->cr_uid == 0) return 0;
mask = 0;
/* 그렇지 않으면, 소유자를 조사합니다. */ if (cred->cr_uid == owner of vp) { if (mode & VEXEC) mask |= S_IXUSR; if (mode & VREAD) mask |= S_IRUSR; if (mode & VWRITE) mask |= S_IWUSR; return (((mode of vp) & mask) == mask ? 0 : EACCES); }
/* 그렇지 않으면, 그룹을 조사합니다. */ for (i = 0, gp = cred->cr_groups; i < cred->cr_ngroups; i++, gp++) if (group of vp == *gp) { if (mode & VEXEC) mask |= S_IXGRP; if (mode & VREAD) mask |= S_IRGRP; if (mode & VWRITE) mask |= S_IWGRP; return (((mode of vp) & mask) == mask ? 0 : EACCES); }
/* 그렇지 않으면, 그 외를 조사합니다. */ if (mode & VEXEC) mask |= S_IXOTH; if (mode & VREAD) mask |= S_IROTH; if (mode & VWRITE) mask |= S_IWOTH; return (((mode of vp) & mask) == mask ? 0 : EACCES); }
[EPERM] | |
불변 파일을 변경하려고 했습니다. | |
[EACCES] | |
퍼미션 비트의 파일 모드 또는 ACL 가 요구된 액세스를 허가하지 않았습니다. | |
VOP_ACCESS (9) | July 24, 1996 |
기본 색인 | 섹션 9 | English | 日本語 | 옵션 |
Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.
“ | When people say "Drive safe!" I'm like no, a safe is for keeping money, I drive car. | ” |
— Artur Bagyants |