Improve checking for the create_dirs permission

Do not allow implicit directory creation on file uploads if create_dirs
permission is not granted

Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
Nicola Murino
2023-04-06 12:42:22 +02:00
parent fcd97ee20d
commit 2ccb6c2672
18 changed files with 119 additions and 72 deletions

View File

@@ -242,7 +242,13 @@ func (fs *S3Fs) Open(name string, offset int64) (File, *pipeat.PipeReaderAt, fun
}
// Create creates or opens the named file for writing
func (fs *S3Fs) Create(name string, flag int) (File, *PipeWriter, func(), error) {
func (fs *S3Fs) Create(name string, flag, checks int) (File, *PipeWriter, func(), error) {
if checks&CheckParentDir != 0 {
_, err := fs.Stat(path.Dir(name))
if err != nil {
return nil, nil, nil, err
}
}
r, w, err := pipeat.PipeInDir(fs.localTempDir)
if err != nil {
return nil, nil, nil, err
@@ -294,6 +300,10 @@ func (fs *S3Fs) Rename(source, target string) error {
if source == target {
return nil
}
_, err := fs.Stat(path.Dir(target))
if err != nil {
return err
}
fi, err := fs.Stat(source)
if err != nil {
return err
@@ -775,7 +785,7 @@ func (fs *S3Fs) mkdirInternal(name string) error {
if !strings.HasSuffix(name, "/") {
name += "/"
}
_, w, _, err := fs.Create(name, -1)
_, w, _, err := fs.Create(name, -1, 0)
if err != nil {
return err
}