aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher2021-05-22 21:44:19 +0200
committerJakob Unterwurzacher2021-05-22 21:44:19 +0200
commite1853e10116e97d7dcce895d6603dae1379a37b7 (patch)
treeecf2388b70f322cf4c659912344ffb789a79351f
parentcb4f9f9e2934400fa0abf9bd6c65455783b2768e (diff)
syscallcompat: refactor MkdiratUser to take fuse.Context
Let's have MkdiratUser take fuse.Context like everybody else.
-rw-r--r--internal/fusefrontend/node_dir_ops.go14
-rw-r--r--internal/syscallcompat/sys_linux.go9
2 files changed, 8 insertions, 15 deletions
diff --git a/internal/fusefrontend/node_dir_ops.go b/internal/fusefrontend/node_dir_ops.go
index 715b7aa..ddffea6 100644
--- a/internal/fusefrontend/node_dir_ops.go
+++ b/internal/fusefrontend/node_dir_ops.go
@@ -35,14 +35,14 @@ func haveDsstore(entries []fuse.DirEntry) bool {
// mkdirWithIv - create a new directory and corresponding diriv file. dirfd
// should be a handle to the parent directory, cName is the name of the new
// directory and mode specifies the access permissions to use.
-func (n *Node) mkdirWithIv(dirfd int, cName string, mode uint32, caller *fuse.Caller) error {
+func (n *Node) mkdirWithIv(dirfd int, cName string, mode uint32, context *fuse.Context) error {
rn := n.rootNode()
// Between the creation of the directory and the creation of gocryptfs.diriv
// the directory is inconsistent. Take the lock to prevent other readers
// from seeing it.
rn.dirIVLock.Lock()
defer rn.dirIVLock.Unlock()
- err := syscallcompat.MkdiratUser(dirfd, cName, mode, caller)
+ err := syscallcompat.MkdiratUser(dirfd, cName, mode, context)
if err != nil {
return err
}
@@ -73,14 +73,14 @@ func (n *Node) Mkdir(ctx context.Context, name string, mode uint32, out *fuse.En
defer syscall.Close(dirfd)
rn := n.rootNode()
- var caller *fuse.Caller
+ var context *fuse.Context
if rn.args.PreserveOwner {
- caller, _ = fuse.FromContext(ctx)
+ context = toFuseCtx(ctx)
}
var st syscall.Stat_t
if rn.args.PlaintextNames {
- err := syscallcompat.MkdiratUser(dirfd, cName, mode, caller)
+ err := syscallcompat.MkdiratUser(dirfd, cName, mode, context)
if err != nil {
return nil, fs.ToErrno(err)
}
@@ -106,13 +106,13 @@ func (n *Node) Mkdir(ctx context.Context, name string, mode uint32, out *fuse.En
}
// Create directory
- err = rn.mkdirWithIv(dirfd, cName, mode, caller)
+ err = rn.mkdirWithIv(dirfd, cName, mode, context)
if err != nil {
nametransform.DeleteLongNameAt(dirfd, cName)
return nil, fs.ToErrno(err)
}
} else {
- err := rn.mkdirWithIv(dirfd, cName, mode, caller)
+ err := rn.mkdirWithIv(dirfd, cName, mode, context)
if err != nil {
return nil, fs.ToErrno(err)
}
diff --git a/internal/syscallcompat/sys_linux.go b/internal/syscallcompat/sys_linux.go
index 0db8c60..46d039c 100644
--- a/internal/syscallcompat/sys_linux.go
+++ b/internal/syscallcompat/sys_linux.go
@@ -209,18 +209,11 @@ func SymlinkatUser(oldpath string, newdirfd int, newpath string, context *fuse.C
// MkdiratUser runs the Mkdirat syscall in the context of a different user.
//
// See OpenatUser() for how this works.
-func MkdiratUser(dirfd int, path string, mode uint32, caller *fuse.Caller) (err error) {
+func MkdiratUser(dirfd int, path string, mode uint32, context *fuse.Context) (err error) {
f := func() (int, error) {
err := Mkdirat(dirfd, path, mode)
return -1, err
}
- // TODO: refactor MkdiratUser to take context instead of caller
- var context *fuse.Context
- if caller != nil {
- context = &fuse.Context{
- Caller: *caller,
- }
- }
_, err = asUser(f, context)
return err
}