From 2591900b6920a71f754779807bafeb01bfef5ab3 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Tue, 28 Nov 2017 01:22:55 +0100 Subject: [PATCH] fusefrontend: Handle PlaintextNames mode in Unlink In PlaintextNames mode the "gocryptfs.longname." prefix does not have any special meaning. We should not attempt to delete any .name files. Partially fixes https://github.com/rfjakob/gocryptfs/issues/174 --- internal/fusefrontend/fs.go | 2 +- tests/matrix/matrix_test.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/internal/fusefrontend/fs.go b/internal/fusefrontend/fs.go index a77eae0..46787e2 100644 --- a/internal/fusefrontend/fs.go +++ b/internal/fusefrontend/fs.go @@ -388,7 +388,7 @@ func (fs *FS) Unlink(path string, context *fuse.Context) (code fuse.Status) { } cName := filepath.Base(cPath) - if nametransform.IsLongContent(cName) { + if !fs.args.PlaintextNames && nametransform.IsLongContent(cName) { var dirfd *os.File dirfd, err = os.Open(filepath.Dir(cPath)) if err != nil { diff --git a/tests/matrix/matrix_test.go b/tests/matrix/matrix_test.go index 06c2e71..4194861 100644 --- a/tests/matrix/matrix_test.go +++ b/tests/matrix/matrix_test.go @@ -794,4 +794,21 @@ func TestMkfifo(t *testing.T) { if err != nil { t.Fatal(err) } + err = os.Remove(path) + if err != nil { + t.Fatal(err) + } +} + +// Make sure the Symlink call works with paths starting with "gocryptfs.longname." +func TestSymlink(t *testing.T) { + path := test_helpers.DefaultPlainDir + "/gocryptfs.longname.XXX" + err := syscall.Symlink("target", path) + if err != nil { + t.Fatal(err) + } + err = os.Remove(path) + if err != nil { + t.Fatal(err) + } }