From: Derrick Brashear Date: Mon, 10 Oct 2011 20:35:45 +0000 (-0400) Subject: ukernel: add uafs_access X-Git-Tag: openafs-stable-1_8_0pre1~3180 X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=3eb60908a1f9b3f2783ec3f7755b242bff3d573d 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 Tested-by: Derrick Brashear --- diff --git a/src/afs/UKERNEL/afs_usrops.c b/src/afs/UKERNEL/afs_usrops.c index cabc41b..7972d84 100644 --- a/src/afs/UKERNEL/afs_usrops.c +++ b/src/afs/UKERNEL/afs_usrops.c @@ -3835,6 +3835,45 @@ uafs_statmountpoint_r(char *path) * 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. + */ +int uafs_getRights(char *path) { int code; diff --git a/src/afs/UKERNEL/afs_usrops.h b/src/afs/UKERNEL/afs_usrops.h index e1580d0..723917e 100644 --- a/src/afs/UKERNEL/afs_usrops.h +++ b/src/afs/UKERNEL/afs_usrops.h @@ -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__ */