map path resolution errors to Permission errors

this way the affected paths will be ignored in WebDAV

Fixes #432
This commit is contained in:
Nicola Murino
2021-05-21 13:04:22 +02:00
parent 9fc4be6d40
commit 0cb5c49cf3
2 changed files with 15 additions and 5 deletions

View File

@@ -22,6 +22,14 @@ const (
osFsName = "osfs"
)
type pathResolutionError struct {
err string
}
func (e *pathResolutionError) Error() string {
return fmt.Sprintf("Path resolution error: %s", e.err)
}
// OsFs is a Fs implementation that uses functions provided by the os package.
type OsFs struct {
name string
@@ -180,6 +188,10 @@ func (*OsFs) IsNotExist(err error) bool {
// IsPermission returns a boolean indicating whether the error is known to
// report that permission is denied.
func (*OsFs) IsPermission(err error) bool {
if _, ok := err.(*pathResolutionError); ok {
return true
}
return os.IsPermission(err)
}
@@ -367,7 +379,7 @@ func (fs *OsFs) isSubDir(sub string) error {
}
if len(sub) < len(parent) {
err = fmt.Errorf("path %#v is not inside %#v", sub, parent)
return err
return &pathResolutionError{err: err.Error()}
}
separator := string(os.PathSeparator)
if parent == filepath.Dir(parent) {
@@ -377,7 +389,7 @@ func (fs *OsFs) isSubDir(sub string) error {
}
if !strings.HasPrefix(sub, parent+separator) {
err = fmt.Errorf("path %#v is not inside %#v", sub, parent)
return err
return &pathResolutionError{err: err.Error()}
}
return nil
}