summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Siegl <stesie@brokenpipe.de>2005-03-21 19:20:48 +0000
committerStefan Siegl <stesie@brokenpipe.de>2005-03-21 19:20:48 +0000
commit9b810e328c1a6436415a7753ed36d89ad947934b (patch)
tree3dfa5eac21c8edcf33712b84cea8a9e7c4748567
parent0ef9997484bb4a78478d2d14afdc4e66d20211cf (diff)
implemented netfs_check_open_permissions.
-rw-r--r--netfs.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/netfs.c b/netfs.c
index 71376a0b6..d8d6f6d68 100644
--- a/netfs.c
+++ b/netfs.c
@@ -253,19 +253,27 @@ netfs_check_open_permissions (struct iouser *user, struct node *node,
FUNC_PROLOGUE_NODE("netfs_check_open_permissions", node);
error_t err = 0;
- /* it's a directory, we need to check permissions on our own ... */
- if (flags & O_READ)
- err = fshelp_access (&node->nn_stat, S_IREAD, user);
-
- if (!err && (flags & O_WRITE))
- err = fshelp_access (&node->nn_stat, S_IWRITE, user);
-
- if (!err && (flags & O_EXEC))
- err = fshelp_access (&node->nn_stat, S_IEXEC, user);
+ if(fuse_ops->open)
+ {
+ err = -fuse_ops->open(node->nn->path, flags);
- /* FIXME
- * call fuse_ops->open() to check for permission
- */
+ if(! err && fuse_ops->release)
+ (void)fuse_ops->release(node->nn->path, flags);
+ }
+ else
+ {
+ /* the fuse translator doesn't bring an open routine with it.
+ * try to figure out whether writing should be okay
+ */
+ if (flags & O_READ)
+ err = fshelp_access (&node->nn_stat, S_IREAD, user);
+
+ if (!err && (flags & O_WRITE))
+ err = fshelp_access (&node->nn_stat, S_IWRITE, user);
+
+ if (!err && (flags & O_EXEC))
+ err = fshelp_access (&node->nn_stat, S_IEXEC, user);
+ }
FUNC_EPILOGUE(err);
}