From a1dcbbc1ea60c32adb7bd97e77d2397d0195d437 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Wed, 12 Feb 2020 12:02:39 -0500 Subject: [PATCH] 12308: Clarify chmod behavior. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- lib/mount/fs.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/mount/fs.go b/lib/mount/fs.go index c18c83d86b..c008b96af6 100644 --- a/lib/mount/fs.go +++ b/lib/mount/fs.go @@ -252,11 +252,18 @@ func (fs *keepFS) Chmod(path string, mode uint32) (errc int) { } if fi, err := fs.root.Stat(path); err != nil { return fs.errCode(err) - } else if mode & ^uint32(fuse.S_IFREG|fuse.S_IFDIR|0777) != 0 || (fi.Mode()&os.ModeDir != 0) != (mode&fuse.S_IFDIR != 0) { + } else if mode & ^uint32(fuse.S_IFREG|fuse.S_IFDIR|0777) != 0 { + // Refuse to set mode bits other than + // regfile/dir/perms + return -fuse.ENOSYS + } else if (fi.Mode()&os.ModeDir != 0) != (mode&fuse.S_IFDIR != 0) { + // Refuse to transform a regular file to a dir, or + // vice versa return -fuse.ENOSYS - } else { - return 0 } + // As long as the change isn't nonsense, chmod is a no-op, + // because we don't save permission bits. + return 0 } func (fs *keepFS) fillStat(stat *fuse.Stat_t, fi os.FileInfo) { -- 2.30.2