ukernel: add uafs_access

we don't have an access vop. add one.

Change-Id: I813fb941608b5e49a0f23730414854602630fdee
Reviewed-on: http://gerrit.openafs.org/5589
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Derrick Brashear <shadow@dementix.org>
This commit is contained in:
Derrick Brashear 2011-10-10 16:35:45 -04:00
parent 0676dc9e0c
commit 3eb60908a1
2 changed files with 40 additions and 0 deletions

View File

@ -3830,6 +3830,45 @@ uafs_statmountpoint_r(char *path)
return r;
}
/*
* uafs_getRights
* Get a list of rights for the current user on path.
*/
int
uafs_access(char *path, int flags)
{
int code;
struct vnode *vp;
int fileMode = 0;
if (flags & R_OK) {
fileMode |= VREAD;
}
if (flags & W_OK) {
fileMode |= VWRITE;
}
if (flags & X_OK) {
fileMode |= VEXEC;
}
AFS_GLOCK();
code = uafs_LookupName(path, afs_CurrentDir, &vp, 1, 0);
if (code != 0) {
errno = code;
AFS_GUNLOCK();
return -1;
}
code = afs_access(VTOAFS(vp), fileMode, get_user_struct()->u_cred);
VN_RELE(vp);
if (code != 0)
errno = code;
AFS_GUNLOCK();
return code ? -1 : 0;
}
/*
* uafs_getRights
* Get a list of rights for the current user on path.

View File

@ -153,5 +153,6 @@ extern void uafs_Shutdown(void);
extern void uafs_mount(void);
extern void uafs_setMountDir(const char *dir);
extern int uafs_fork(int wait, void* (*cbf) (void *), void *rock);
extern int uafs_access(char *path, int amode);
#endif /* __AFS_USROPS_H__ */