diff options
author | Jakob Unterwurzacher | 2018-03-25 21:02:33 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2018-03-25 21:06:10 +0200 |
commit | db778aae7db844e77b602816a4fd0aeab5d6857e (patch) | |
tree | 1544087ce9fb32926a276781507c2604b366e113 /internal | |
parent | 1ed3d51df1750d5472b1349222c352171f1e8d64 (diff) |
fusefrontend: handle empty xattrs efficiently
We handle empty files by storing an actual empty file
on disk. Handle xattrs similarily and encrypt the
empty value to the empty value.
Diffstat (limited to 'internal')
-rw-r--r-- | internal/fusefrontend/fs.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/internal/fusefrontend/fs.go b/internal/fusefrontend/fs.go index 738f113..e246264 100644 --- a/internal/fusefrontend/fs.go +++ b/internal/fusefrontend/fs.go @@ -348,7 +348,11 @@ func (fs *FS) StatFs(path string) *fuse.StatfsOut { // decryptSymlinkTarget: "cData64" is base64-decoded and decrypted // like file contents (GCM). +// The empty string decrypts to the empty string. func (fs *FS) decryptSymlinkTarget(cData64 string) (string, error) { + if cData64 == "" { + return "", nil + } cData, err := fs.nameTransform.B64.DecodeString(cData64) if err != nil { return "", err @@ -409,7 +413,11 @@ func (fs *FS) Unlink(path string, context *fuse.Context) (code fuse.Status) { // encryptSymlinkTarget: "data" is encrypted like file contents (GCM) // and base64-encoded. +// The empty string encrypts to the empty string. func (fs *FS) encryptSymlinkTarget(data string) (cData64 string) { + if data == "" { + return "" + } cData := fs.contentEnc.EncryptBlock([]byte(data), 0, nil) cData64 = fs.nameTransform.B64.EncodeToString(cData) return cData64 |