From 84344834c4fb49c2eb484bcc43d24a2522b1b5c1 Mon Sep 17 00:00:00 2001
From: Jakob Unterwurzacher
Date: Sat, 11 Jul 2020 19:44:45 +0200
Subject: v2api: remove OpenatUserCtx, MknodatUserCtx helpers

Instead, use the new toFuseCtx() function introduced
in an earlier commit.
---
 internal/fusefrontend/node.go         | 10 ++++++----
 internal/fusefrontend/node_helpers.go | 20 ++++++++++++++++++++
 2 files changed, 26 insertions(+), 4 deletions(-)
 create mode 100644 internal/fusefrontend/node_helpers.go

(limited to 'internal/fusefrontend')

diff --git a/internal/fusefrontend/node.go b/internal/fusefrontend/node.go
index aa9bd51..5b42ddc 100644
--- a/internal/fusefrontend/node.go
+++ b/internal/fusefrontend/node.go
@@ -138,6 +138,7 @@ func (n *Node) Create(ctx context.Context, name string, flags uint32, mode uint3
 	}
 	newFlags := rn.mangleOpenFlags(flags)
 	// Handle long file name
+	ctx2 := toFuseCtx(ctx)
 	if !rn.args.PlaintextNames && nametransform.IsLongContent(cName) {
 		// Create ".name"
 		err = rn.nameTransform.WriteLongNameAt(dirfd, cName, name)
@@ -145,13 +146,13 @@ func (n *Node) Create(ctx context.Context, name string, flags uint32, mode uint3
 			return nil, nil, 0, fs.ToErrno(err)
 		}
 		// Create content
-		fd, err = syscallcompat.OpenatUserCtx(dirfd, cName, newFlags|syscall.O_CREAT|syscall.O_EXCL, mode, ctx)
+		fd, err = syscallcompat.OpenatUser(dirfd, cName, newFlags|syscall.O_CREAT|syscall.O_EXCL, mode, ctx2)
 		if err != nil {
 			nametransform.DeleteLongNameAt(dirfd, cName)
 		}
 	} else {
 		// Create content, normal (short) file name
-		fd, err = syscallcompat.OpenatUserCtx(dirfd, cName, newFlags|syscall.O_CREAT|syscall.O_EXCL, mode, ctx)
+		fd, err = syscallcompat.OpenatUser(dirfd, cName, newFlags|syscall.O_CREAT|syscall.O_EXCL, mode, ctx2)
 	}
 	if err != nil {
 		// xfstests generic/488 triggers this
@@ -322,6 +323,7 @@ func (n *Node) Mknod(ctx context.Context, name string, mode, rdev uint32, out *f
 
 	// Create ".name" file to store long file name (except in PlaintextNames mode)
 	var err error
+	ctx2 := toFuseCtx(ctx)
 	if !rn.args.PlaintextNames && nametransform.IsLongContent(cName) {
 		err := rn.nameTransform.WriteLongNameAt(dirfd, cName, name)
 		if err != nil {
@@ -329,13 +331,13 @@ func (n *Node) Mknod(ctx context.Context, name string, mode, rdev uint32, out *f
 			return
 		}
 		// Create "gocryptfs.longfile." device node
-		err = syscallcompat.MknodatUserCtx(dirfd, cName, mode, int(rdev), ctx)
+		err = syscallcompat.MknodatUser(dirfd, cName, mode, int(rdev), ctx2)
 		if err != nil {
 			nametransform.DeleteLongNameAt(dirfd, cName)
 		}
 	} else {
 		// Create regular device node
-		err = syscallcompat.MknodatUserCtx(dirfd, cName, mode, int(rdev), ctx)
+		err = syscallcompat.MknodatUser(dirfd, cName, mode, int(rdev), ctx2)
 	}
 	if err != nil {
 		errno = fs.ToErrno(err)
diff --git a/internal/fusefrontend/node_helpers.go b/internal/fusefrontend/node_helpers.go
new file mode 100644
index 0000000..1eb6d4a
--- /dev/null
+++ b/internal/fusefrontend/node_helpers.go
@@ -0,0 +1,20 @@
+package fusefrontend
+
+import (
+	"context"
+
+	"github.com/hanwen/go-fuse/v2/fuse"
+)
+
+// toFuseCtx tries to extract a fuse.Context from a generic context.Context.
+func toFuseCtx(ctx context.Context) (ctx2 *fuse.Context) {
+	if ctx == nil {
+		return nil
+	}
+	if caller, ok := fuse.FromContext(ctx); ok {
+		ctx2 = &fuse.Context{
+			Caller: *caller,
+		}
+	}
+	return ctx2
+}
-- 
cgit v1.2.3