summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorJakob Unterwurzacher2016-06-08 00:17:18 +0200
committerJakob Unterwurzacher2016-06-08 00:32:44 +0200
commit5da292828c3a58254560bb47d700186ff8c3ca9c (patch)
tree9a128cbefb86fe3f80fc0bfcf4bc6d8b4163a00e /internal
parentf58a8d8740364467ee9e3cf20cec8d47c4e59ad8 (diff)
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.
Diffstat (limited to 'internal')
-rw-r--r--internal/fusefrontend/fs.go4
1 files changed, 2 insertions, 2 deletions
diff --git a/internal/fusefrontend/fs.go b/internal/fusefrontend/fs.go
index 988a41a..c216c86 100644
--- a/internal/fusefrontend/fs.go
+++ b/internal/fusefrontend/fs.go
@@ -165,11 +165,11 @@ func (fs *FS) Chown(path string, uid uint32, gid uint32, context *fuse.Context)
if fs.isFiltered(path) {
return fuse.EPERM
}
- cPath, err := fs.encryptPath(path)
+ cPath, err := fs.getBackingPath(path)
if err != nil {
return fuse.ToStatus(err)
}
- return fs.FileSystem.Chown(cPath, uid, gid, context)
+ return fuse.ToStatus(os.Lchown(cPath, int(uid), int(gid)))
}
func (fs *FS) Mknod(path string, mode uint32, dev uint32, context *fuse.Context) (code fuse.Status) {