add setstat_mode 2

in this mode chmod/chtimes/chown can be silently ignored only for cloud
based file systems

Fixes #223
This commit is contained in:
Nicola Murino
2020-11-12 10:39:46 +01:00
parent 38e0cba675
commit 5720d40fee
13 changed files with 117 additions and 56 deletions

View File

@@ -496,6 +496,29 @@ func TestSetStat(t *testing.T) {
err = c.SetStat(user.GetHomeDir(), "/", &StatAttributes{})
assert.NoError(t, err)
err = c.SetStat(dir2, "/dir1/file", &StatAttributes{
Mode: os.ModePerm,
Flags: StatAttrPerms,
})
assert.NoError(t, err)
err = c.SetStat(dir1, "/dir2/file", &StatAttributes{
UID: os.Getuid(),
GID: os.Getgid(),
Flags: StatAttrUIDGID,
})
assert.NoError(t, err)
err = c.SetStat(dir1, "/dir3/file", &StatAttributes{
Atime: time.Now(),
Mtime: time.Now(),
Flags: StatAttrTimes,
})
assert.NoError(t, err)
Config.SetstatMode = 2
assert.False(t, c.ignoreSetStat())
c1 := NewBaseConnection("", ProtocolSFTP, user, newMockOsFs(false, fs.ConnectionID(), user.GetHomeDir()))
assert.True(t, c1.ignoreSetStat())
Config.SetstatMode = oldSetStatMode
// chmod
err = c.SetStat(dir1, "/dir1/file", &StatAttributes{
@@ -1146,6 +1169,12 @@ func TestErrorsMapping(t *testing.T) {
} else {
assert.EqualError(t, err, ErrPermissionDenied.Error())
}
err = conn.GetFsError(vfs.ErrVfsUnsupported)
if protocol == ProtocolSFTP {
assert.EqualError(t, err, sftp.ErrSSHFxOpUnsupported.Error())
} else {
assert.EqualError(t, err, ErrOpUnsupported.Error())
}
err = conn.GetFsError(nil)
assert.NoError(t, err)
err = conn.GetOpUnsupportedError()