diff options
author | Sebastian Lackner | 2017-11-25 01:56:56 +0100 |
---|---|---|
committer | rfjakob | 2017-11-25 16:19:09 +0100 |
commit | 9f56b33e0c8701085189aa77463f1b471b70a705 (patch) | |
tree | 924753e68c55dec84048c58678eb90f9361f3ea6 /tests/matrix | |
parent | d257bb34c1dd478cdb62c0d19c3e280d4f8649b4 (diff) |
fusefrontend: Fix longname handling for renames with existing target
Fixes https://github.com/rfjakob/gocryptfs/issues/170
Steps to reproduce the problem:
* Create a regular forward mount point
* Create a file with a shortname and one with a long filename
* Try to run 'mv <shortname> <longname>'
This should actually work and replace the existing file, but instead it
fails with:
mv: cannot move '<shortname>' to '<longname>': File exists
The problem is the creation of the .name file. If the target already exists
we can safely ignore the EEXIST error and just keep the existing .name file.
Diffstat (limited to 'tests/matrix')
-rw-r--r-- | tests/matrix/matrix_test.go | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/tests/matrix/matrix_test.go b/tests/matrix/matrix_test.go index 88c255e..9b9cb1b 100644 --- a/tests/matrix/matrix_test.go +++ b/tests/matrix/matrix_test.go @@ -544,7 +544,7 @@ func TestLongNames(t *testing.T) { if !test_helpers.VerifyExistence(wd + n255x) { t.Errorf("n255x is not in directory listing") } - // Rename long to long + // Rename long to long (target does not exist) n255y := string(bytes.Repeat([]byte("y"), 255)) err = os.Rename(wd+n255x, wd+n255y) if err != nil { @@ -553,7 +553,20 @@ func TestLongNames(t *testing.T) { if !test_helpers.VerifyExistence(wd + n255y) { t.Errorf("n255y is not in directory listing") } - // Rename long to short + // Rename long to long (target exists) + f, err = os.Create(wd + n255x) + if err != nil { + t.Fatalf("Could not create n255x: %v", err) + } + f.Close() + err = os.Rename(wd+n255x, wd+n255y) + if err != nil { + t.Fatalf("Could not rename n255x to n255y: %v", err) + } + if !test_helpers.VerifyExistence(wd + n255y) { + t.Errorf("n255y is not in directory listing") + } + // Rename long to short (target does not exist) err = os.Rename(wd+n255y, wd+"short") if err != nil { t.Fatalf("Could not rename n255y to short: %v", err) @@ -561,7 +574,20 @@ func TestLongNames(t *testing.T) { if !test_helpers.VerifyExistence(wd + "short") { t.Errorf("short is not in directory listing") } - // Rename short to long + // Rename long to short (target exists) + f, err = os.Create(wd + n255y) + if err != nil { + t.Fatalf("Could not create n255y: %v", err) + } + f.Close() + err = os.Rename(wd+n255y, wd+"short") + if err != nil { + t.Fatalf("Could not rename n255y to short: %v", err) + } + if !test_helpers.VerifyExistence(wd + "short") { + t.Errorf("short is not in directory listing") + } + // Rename short to long (target does not exist) err = os.Rename(wd+"short", wd+n255x) if err != nil { t.Fatalf("Could not rename short to n255x: %v", err) @@ -569,6 +595,19 @@ func TestLongNames(t *testing.T) { if !test_helpers.VerifyExistence(wd + n255x) { t.Errorf("255x is not in directory listing II") } + // Rename short to long (target exists) + f, err = os.Create(wd + "short") + if err != nil { + t.Fatalf("Could not create short: %v", err) + } + f.Close() + err = os.Rename(wd+"short", wd+n255x) + if err != nil { + t.Fatalf("Could not rename short to n255x: %v", err) + } + if !test_helpers.VerifyExistence(wd + n255x) { + t.Errorf("n255x is not in directory listing") + } // Unlink err = syscall.Unlink(wd + n255x) if err != nil { |