try to auto create virtual folders if missing

This commit is contained in:
Nicola Murino 2021-03-10 22:30:56 +01:00
parent 7b0ea8f731
commit df2e490680
No known key found for this signature in database
GPG key ID: 2F1FB59433D5A8CB
3 changed files with 11 additions and 4 deletions

View file

@ -16,8 +16,6 @@ For example if the configure folder has configured `/tmp/mapped` or `C:\mapped`
The same virtual folder can be shared among users, different folder quota limits for each user are supported.
Folder quota limits can also be included inside the user quota but in this case the folder is considered "private" and sharing it with other users will break user quota calculation.
The filesystem paths that you want to expose as virtual folders must exist.
Using the REST API you can:
- monitor folders quota usage

View file

@ -3117,13 +3117,14 @@ func TestVirtualFolders(t *testing.T) {
u.Permissions[path.Join(testDir1, "subdir")] = []string{dataprovider.PermCreateSymlinks, dataprovider.PermUpload,
dataprovider.PermDelete}
err := os.MkdirAll(mappedPath, os.ModePerm)
assert.NoError(t, err)
user, _, err := httpdtest.AddUser(u, http.StatusCreated)
assert.NoError(t, err)
client, err := getSftpClient(user, usePubKey)
if assert.NoError(t, err) {
defer client.Close()
// check virtual folder auto creation
_, err = os.Stat(mappedPath)
assert.NoError(t, err)
testFileSize := int64(131072)
testFilePath := filepath.Join(homeBasePath, testFileName)
err = createTestFile(testFilePath, testFileSize)

View file

@ -212,6 +212,14 @@ func (fs *OsFs) CheckRootPath(username string, uid int, gid int) bool {
if err != nil {
return false
}
if _, err = fs.Stat(v.MappedPath); fs.IsNotExist(err) {
err = os.MkdirAll(v.MappedPath, os.ModePerm)
fsLog(fs, logger.LevelDebug, "virtual directory %#v for user %#v does not exist, try to create, mkdir error: %v",
v.MappedPath, username, err)
if err == nil {
SetPathPermissions(fs, fs.rootDir, uid, gid)
}
}
}
return (err == nil)
}