syscallcompat: refactor MkdiratUser to take fuse.Context
Let's have MkdiratUser take fuse.Context like everybody else.
This commit is contained in:
parent
cb4f9f9e29
commit
e1853e1011
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user