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
|
// 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
|
// should be a handle to the parent directory, cName is the name of the new
|
||||||
// directory and mode specifies the access permissions to use.
|
// 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()
|
rn := n.rootNode()
|
||||||
// Between the creation of the directory and the creation of gocryptfs.diriv
|
// Between the creation of the directory and the creation of gocryptfs.diriv
|
||||||
// the directory is inconsistent. Take the lock to prevent other readers
|
// the directory is inconsistent. Take the lock to prevent other readers
|
||||||
// from seeing it.
|
// from seeing it.
|
||||||
rn.dirIVLock.Lock()
|
rn.dirIVLock.Lock()
|
||||||
defer rn.dirIVLock.Unlock()
|
defer rn.dirIVLock.Unlock()
|
||||||
err := syscallcompat.MkdiratUser(dirfd, cName, mode, caller)
|
err := syscallcompat.MkdiratUser(dirfd, cName, mode, context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -73,14 +73,14 @@ func (n *Node) Mkdir(ctx context.Context, name string, mode uint32, out *fuse.En
|
|||||||
defer syscall.Close(dirfd)
|
defer syscall.Close(dirfd)
|
||||||
|
|
||||||
rn := n.rootNode()
|
rn := n.rootNode()
|
||||||
var caller *fuse.Caller
|
var context *fuse.Context
|
||||||
if rn.args.PreserveOwner {
|
if rn.args.PreserveOwner {
|
||||||
caller, _ = fuse.FromContext(ctx)
|
context = toFuseCtx(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
var st syscall.Stat_t
|
var st syscall.Stat_t
|
||||||
if rn.args.PlaintextNames {
|
if rn.args.PlaintextNames {
|
||||||
err := syscallcompat.MkdiratUser(dirfd, cName, mode, caller)
|
err := syscallcompat.MkdiratUser(dirfd, cName, mode, context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fs.ToErrno(err)
|
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
|
// Create directory
|
||||||
err = rn.mkdirWithIv(dirfd, cName, mode, caller)
|
err = rn.mkdirWithIv(dirfd, cName, mode, context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
nametransform.DeleteLongNameAt(dirfd, cName)
|
nametransform.DeleteLongNameAt(dirfd, cName)
|
||||||
return nil, fs.ToErrno(err)
|
return nil, fs.ToErrno(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err := rn.mkdirWithIv(dirfd, cName, mode, caller)
|
err := rn.mkdirWithIv(dirfd, cName, mode, context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fs.ToErrno(err)
|
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.
|
// MkdiratUser runs the Mkdirat syscall in the context of a different user.
|
||||||
//
|
//
|
||||||
// See OpenatUser() for how this works.
|
// 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) {
|
f := func() (int, error) {
|
||||||
err := Mkdirat(dirfd, path, mode)
|
err := Mkdirat(dirfd, path, mode)
|
||||||
return -1, err
|
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)
|
_, err = asUser(f, context)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user