ukernel: add uafs_access
authorDerrick Brashear <shadow@dementix.org>
Mon, 10 Oct 2011 20:35:45 +0000 (16:35 -0400)
committerDerrick Brashear <shadow@dementix.org>
Tue, 11 Oct 2011 00:09:16 +0000 (17:09 -0700)
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>

src/afs/UKERNEL/afs_usrops.c
src/afs/UKERNEL/afs_usrops.h

index cabc41b..7972d84 100644 (file)
@@ -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;
index e1580d0..723917e 100644 (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__ */