diff options
author | Stefan Siegl <stesie@brokenpipe.de> | 2005-03-21 19:20:48 +0000 |
---|---|---|
committer | Stefan Siegl <stesie@brokenpipe.de> | 2005-03-21 19:20:48 +0000 |
commit | 9b810e328c1a6436415a7753ed36d89ad947934b (patch) | |
tree | 3dfa5eac21c8edcf33712b84cea8a9e7c4748567 | |
parent | 0ef9997484bb4a78478d2d14afdc4e66d20211cf (diff) |
implemented netfs_check_open_permissions.
-rw-r--r-- | netfs.c | 32 |
1 files changed, 20 insertions, 12 deletions
@@ -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); } |