fusefrontend: convert last callers from openBackingDir to prepareAtSyscall

This commit is contained in:
Jakob Unterwurzacher 2021-06-26 18:44:52 +02:00
parent 1f29542b39
commit 5306fc345b
2 changed files with 9 additions and 10 deletions

View File

@ -4,7 +4,6 @@ import (
"context"
"fmt"
"io"
"path/filepath"
"runtime"
"syscall"
@ -239,15 +238,14 @@ func (n *Node) Readdir(ctx context.Context) (fs.DirStream, syscall.Errno) {
// Symlink-safe through Unlinkat() + AT_REMOVEDIR.
func (n *Node) Rmdir(ctx context.Context, name string) (code syscall.Errno) {
rn := n.rootNode()
p := filepath.Join(n.Path(), name)
parentDirFd, cName, err := rn.openBackingDir(p)
if err != nil {
return fs.ToErrno(err)
parentDirFd, cName, errno := n.prepareAtSyscall(name)
if errno != 0 {
return errno
}
defer syscall.Close(parentDirFd)
if rn.args.PlaintextNames {
// Unlinkat with AT_REMOVEDIR is equivalent to Rmdir
err = unix.Unlinkat(parentDirFd, cName, unix.AT_REMOVEDIR)
err := unix.Unlinkat(parentDirFd, cName, unix.AT_REMOVEDIR)
return fs.ToErrno(err)
}
// Unless we are running as root, we need read, write and execute permissions
@ -256,7 +254,7 @@ func (n *Node) Rmdir(ctx context.Context, name string) (code syscall.Errno) {
var origMode uint32
if !rn.args.PreserveOwner {
var st unix.Stat_t
err = syscallcompat.Fstatat(parentDirFd, cName, &st, unix.AT_SYMLINK_NOFOLLOW)
err := syscallcompat.Fstatat(parentDirFd, cName, &st, unix.AT_SYMLINK_NOFOLLOW)
if err != nil {
return fs.ToErrno(err)
}

View File

@ -98,11 +98,12 @@ func (n *Node) prepareAtSyscallMyself() (dirfd int, cName string, errno syscall.
if n.IsRoot() {
var err error
rn := n.rootNode()
dirfd, cName, err = rn.openBackingDir("")
// Open cipherdir (following symlinks)
dirfd, err = syscallcompat.Open(rn.args.Cipherdir, syscall.O_DIRECTORY|syscallcompat.O_PATH, 0)
if err != nil {
errno = fs.ToErrno(err)
return -1, "", fs.ToErrno(err)
}
return
return dirfd, ".", 0
}
// Otherwise convert to prepareAtSyscall of parent node