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) {
|
if fs.isFiltered(path) {
|
||||||
return fuse.EPERM
|
return fuse.EPERM
|
||||||
}
|
}
|
||||||
cPath, err := fs.getBackingPath(path)
|
dirfd, cName, err := fs.openBackingPath(path)
|
||||||
if err != nil {
|
|
||||||
return fuse.ToStatus(err)
|
|
||||||
}
|
|
||||||
dirfd, err := os.Open(filepath.Dir(cPath))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fuse.ToStatus(err)
|
return fuse.ToStatus(err)
|
||||||
}
|
}
|
||||||
defer dirfd.Close()
|
defer dirfd.Close()
|
||||||
// Create ".name" file to store long file name (except in PlaintextNames mode)
|
// Create ".name" file to store long file name (except in PlaintextNames mode)
|
||||||
cName := filepath.Base(cPath)
|
|
||||||
if !fs.args.PlaintextNames && nametransform.IsLongContent(cName) {
|
if !fs.args.PlaintextNames && nametransform.IsLongContent(cName) {
|
||||||
err = fs.nameTransform.WriteLongName(dirfd, cName, path)
|
err = fs.nameTransform.WriteLongName(dirfd, cName, path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -423,11 +418,7 @@ func (fs *FS) Symlink(target string, linkName string, context *fuse.Context) (co
|
|||||||
if fs.isFiltered(linkName) {
|
if fs.isFiltered(linkName) {
|
||||||
return fuse.EPERM
|
return fuse.EPERM
|
||||||
}
|
}
|
||||||
cPath, err := fs.getBackingPath(linkName)
|
dirfd, cName, err := fs.openBackingPath(linkName)
|
||||||
if err != nil {
|
|
||||||
return fuse.ToStatus(err)
|
|
||||||
}
|
|
||||||
dirfd, err := os.Open(filepath.Dir(cPath))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fuse.ToStatus(err)
|
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)
|
cTarget = fs.nameTransform.B64.EncodeToString(cBinTarget)
|
||||||
}
|
}
|
||||||
// Create ".name" file to store long file name (except in PlaintextNames mode)
|
// Create ".name" file to store long file name (except in PlaintextNames mode)
|
||||||
cName := filepath.Base(cPath)
|
|
||||||
if !fs.args.PlaintextNames && nametransform.IsLongContent(cName) {
|
if !fs.args.PlaintextNames && nametransform.IsLongContent(cName) {
|
||||||
err = fs.nameTransform.WriteLongName(dirfd, cName, linkName)
|
err = fs.nameTransform.WriteLongName(dirfd, cName, linkName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -3,6 +3,7 @@ package fusefrontend
|
|||||||
// This file forwards file encryption operations to cryptfs
|
// This file forwards file encryption operations to cryptfs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/rfjakob/gocryptfs/internal/configfile"
|
"github.com/rfjakob/gocryptfs/internal/configfile"
|
||||||
@ -39,6 +40,20 @@ func (fs *FS) getBackingPath(relPath string) (string, error) {
|
|||||||
return cAbsPath, nil
|
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
|
// encryptPath - encrypt relative plaintext path
|
||||||
func (fs *FS) encryptPath(plainPath string) (string, error) {
|
func (fs *FS) encryptPath(plainPath string) (string, error) {
|
||||||
if fs.args.PlaintextNames {
|
if fs.args.PlaintextNames {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user