fix: normalize WebDAV destination permissions
This commit is contained in:
@@ -1073,8 +1073,15 @@ type webdavAuthFS struct {
|
||||
account *auth.Account
|
||||
}
|
||||
|
||||
func webdavAuthPath(p string) string {
|
||||
p = strings.Trim(strings.ReplaceAll(p, "\\", "/"), "/")
|
||||
p = strings.TrimPrefix(p, "webdav/")
|
||||
p = strings.TrimPrefix(p, "webdav")
|
||||
return strings.Trim(p, "/")
|
||||
}
|
||||
|
||||
func (f *webdavAuthFS) allow(path string, p auth.PermMask) error {
|
||||
path = strings.Trim(path, "/")
|
||||
path = webdavAuthPath(path)
|
||||
if f.account == nil || f.account.MaskFor(path)&p != p {
|
||||
return webdav.NewHTTPError(http.StatusForbidden, fmt.Errorf("forbidden"))
|
||||
}
|
||||
@@ -1145,7 +1152,7 @@ func (f *webdavAuthFS) Copy(ctx context.Context, name, dest string, opts *webdav
|
||||
if err := f.checkTree(ctx, name, auth.Read); err != nil {
|
||||
return false, err
|
||||
}
|
||||
parent := path.Dir(strings.Trim(dest, "/"))
|
||||
parent := path.Dir(webdavAuthPath(dest))
|
||||
if parent == "." {
|
||||
parent = ""
|
||||
}
|
||||
@@ -1161,7 +1168,7 @@ func (f *webdavAuthFS) Move(ctx context.Context, name, dest string, opts *webdav
|
||||
if err := f.checkTree(ctx, name, auth.Delete); err != nil {
|
||||
return false, err
|
||||
}
|
||||
parent := path.Dir(strings.Trim(dest, "/"))
|
||||
parent := path.Dir(webdavAuthPath(dest))
|
||||
if parent == "." {
|
||||
parent = ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user