diff --git a/internal/fusefrontend/fs.go b/internal/fusefrontend/fs.go index cc055c7..8c9e5e4 100644 --- a/internal/fusefrontend/fs.go +++ b/internal/fusefrontend/fs.go @@ -550,7 +550,7 @@ func (fs *FS) Link(oldPath string, newPath string, context *fuse.Context) (code } // Handle long file name cNewName := filepath.Base(cNewPath) - if nametransform.IsLongContent(cNewName) { + if !fs.args.PlaintextNames && nametransform.IsLongContent(cNewName) { dirfd, err := os.Open(filepath.Dir(cNewPath)) if err != nil { return fuse.ToStatus(err) diff --git a/tests/matrix/matrix_test.go b/tests/matrix/matrix_test.go index 4194861..90cf55e 100644 --- a/tests/matrix/matrix_test.go +++ b/tests/matrix/matrix_test.go @@ -812,3 +812,26 @@ func TestSymlink(t *testing.T) { t.Fatal(err) } } + +// Make sure the Link call works with paths starting with "gocryptfs.longname." +func TestLink(t *testing.T) { + target := test_helpers.DefaultPlainDir + "/linktarget" + f, err := os.Create(target) + if err != nil { + t.Fatal(err) + } + f.Close() + path := test_helpers.DefaultPlainDir + "/gocryptfs.longname.XXX" + err = syscall.Link(target, path) + if err != nil { + t.Fatal(err) + } + err = os.Remove(target) + if err != nil { + t.Fatal(err) + } + err = os.Remove(path) + if err != nil { + t.Fatal(err) + } +}