Browse Source

Fix: http rename move dir to subdir (#4432)

Co-authored-by: wang wusong <wangwusong@virtaitech.com>
pull/4439/head
wusong 2 years ago
committed by GitHub
parent
commit
4867aa03ab
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      weed/filer/filer_rename.go
  2. 4
      weed/server/filer_grpc_server_rename.go

11
weed/filer/filer_rename.go

@ -2,16 +2,23 @@ package filer
import ( import (
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/util"
"strings" "strings"
"github.com/seaweedfs/seaweedfs/weed/util"
) )
func (f *Filer) CanRename(source, target util.FullPath) error {
func (f *Filer) CanRename(source, target util.FullPath, oldName string) error {
sourcePath := source.Child(oldName)
if strings.HasPrefix(string(target), string(sourcePath)) {
return fmt.Errorf("mv: can not move directory to a subdirectory of itself")
}
sourceBucket := f.DetectBucket(source) sourceBucket := f.DetectBucket(source)
targetBucket := f.DetectBucket(target) targetBucket := f.DetectBucket(target)
if sourceBucket != targetBucket { if sourceBucket != targetBucket {
return fmt.Errorf("can not move across collection %s => %s", sourceBucket, targetBucket) return fmt.Errorf("can not move across collection %s => %s", sourceBucket, targetBucket)
} }
return nil return nil
} }

4
weed/server/filer_grpc_server_rename.go

@ -19,7 +19,7 @@ func (fs *FilerServer) AtomicRenameEntry(ctx context.Context, req *filer_pb.Atom
oldParent := util.FullPath(filepath.ToSlash(req.OldDirectory)) oldParent := util.FullPath(filepath.ToSlash(req.OldDirectory))
newParent := util.FullPath(filepath.ToSlash(req.NewDirectory)) newParent := util.FullPath(filepath.ToSlash(req.NewDirectory))
if err := fs.filer.CanRename(oldParent, newParent); err != nil {
if err := fs.filer.CanRename(oldParent, newParent, req.OldName); err != nil {
return nil, err return nil, err
} }
@ -55,7 +55,7 @@ func (fs *FilerServer) StreamRenameEntry(req *filer_pb.StreamRenameEntryRequest,
oldParent := util.FullPath(filepath.ToSlash(req.OldDirectory)) oldParent := util.FullPath(filepath.ToSlash(req.OldDirectory))
newParent := util.FullPath(filepath.ToSlash(req.NewDirectory)) newParent := util.FullPath(filepath.ToSlash(req.NewDirectory))
if err := fs.filer.CanRename(oldParent, newParent); err != nil {
if err := fs.filer.CanRename(oldParent, newParent, req.OldName); err != nil {
return err return err
} }

Loading…
Cancel
Save