From 5da292828c3a58254560bb47d700186ff8c3ca9c Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Wed, 8 Jun 2016 00:17:18 +0200 Subject: fusefrontend: fix chown on dangling symlinks We (actually, go-fuse) used to call Chown() instead of Lchown() which meant that the operation would fail on dangling symlinks. Fix this by calling os.Lchown() ourself. Also add a test case for this. --- tests/integration_tests/main_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'tests/integration_tests') diff --git a/tests/integration_tests/main_test.go b/tests/integration_tests/main_test.go index b6cb8ca..17f9d9d 100644 --- a/tests/integration_tests/main_test.go +++ b/tests/integration_tests/main_test.go @@ -437,3 +437,19 @@ func TestLongNames(t *testing.T) { t.Errorf("Leftover files, cnt1=%d cnt2=%d", cnt1, cnt2) } } + +func TestLchown(t *testing.T) { + name := test_helpers.DefaultPlainDir + "symlink" + err := os.Symlink("/target/does/not/exist", name) + if err != nil { + t.Fatal(err) + } + err = os.Chown(name, os.Getuid(), os.Getgid()) + if err == nil { + t.Error("Chown on dangling symlink should fail") + } + err = os.Lchown(name, os.Getuid(), os.Getgid()) + if err != nil { + t.Error(err) + } +} -- cgit v1.2.3