fusefrontend: Introduce a openBackingPath helper and use it to simplify Mknod and Symlink
This commit is contained in:
parent
ad2720e0f9
commit
eba49402e4
@ -278,17 +278,12 @@ func (fs *FS) Mknod(path string, mode uint32, dev uint32, context *fuse.Context)
|
||||
if fs.isFiltered(path) {
|
||||
return fuse.EPERM
|
||||
}
|
||||
cPath, err := fs.getBackingPath(path)
|
||||
if err != nil {
|
||||
return fuse.ToStatus(err)
|
||||
}
|
||||
dirfd, err := os.Open(filepath.Dir(cPath))
|
||||
dirfd, cName, err := fs.openBackingPath(path)
|
||||
if err != nil {
|
||||
return fuse.ToStatus(err)
|
||||
}
|
||||
defer dirfd.Close()
|
||||
// Create ".name" file to store long file name (except in PlaintextNames mode)
|
||||
cName := filepath.Base(cPath)
|
||||
if !fs.args.PlaintextNames && nametransform.IsLongContent(cName) {
|
||||
err = fs.nameTransform.WriteLongName(dirfd, cName, path)
|
||||
if err != nil {
|
||||
@ -423,11 +418,7 @@ func (fs *FS) Symlink(target string, linkName string, context *fuse.Context) (co
|
||||
if fs.isFiltered(linkName) {
|
||||
return fuse.EPERM
|
||||
}
|
||||
cPath, err := fs.getBackingPath(linkName)
|
||||
if err != nil {
|
||||
return fuse.ToStatus(err)
|
||||
}
|
||||
dirfd, err := os.Open(filepath.Dir(cPath))
|
||||
dirfd, cName, err := fs.openBackingPath(linkName)
|
||||
if err != nil {
|
||||
return fuse.ToStatus(err)
|
||||
}
|
||||
@ -439,7 +430,6 @@ func (fs *FS) Symlink(target string, linkName string, context *fuse.Context) (co
|
||||
cTarget = fs.nameTransform.B64.EncodeToString(cBinTarget)
|
||||
}
|
||||
// Create ".name" file to store long file name (except in PlaintextNames mode)
|
||||
cName := filepath.Base(cPath)
|
||||
if !fs.args.PlaintextNames && nametransform.IsLongContent(cName) {
|
||||
err = fs.nameTransform.WriteLongName(dirfd, cName, linkName)
|
||||
if err != nil {
|
||||
|
@ -3,6 +3,7 @@ package fusefrontend
|
||||
// This file forwards file encryption operations to cryptfs
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/rfjakob/gocryptfs/internal/configfile"
|
||||
@ -39,6 +40,20 @@ func (fs *FS) getBackingPath(relPath string) (string, error) {
|
||||
return cAbsPath, nil
|
||||
}
|
||||
|
||||
// openBackingPath - get the absolute encrypted path of the backing file
|
||||
// and open the corresponding directory
|
||||
func (fs *FS) openBackingPath(relPath string) (*os.File, string, error) {
|
||||
cPath, err := fs.getBackingPath(relPath)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
dirfd, err := os.Open(filepath.Dir(cPath))
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
return dirfd, filepath.Base(cPath), nil
|
||||
}
|
||||
|
||||
// encryptPath - encrypt relative plaintext path
|
||||
func (fs *FS) encryptPath(plainPath string) (string, error) {
|
||||
if fs.args.PlaintextNames {
|
||||
|
Loading…
Reference in New Issue
Block a user