lockbox

password manager
Log | Files | Refs | README | LICENSE

commit 863d29a72e6648802adb0910d92fa771531daf41
parent 9b797902a3b75b080e876cc6024ca7b157860ce9
Author: Sean Enck <sean@ttypty.com>
Date:   Tue, 11 Jul 2023 18:47:56 -0400

disallow globbing in moves beyond leaf level

Diffstat:
Minternal/app/move.go | 5+++++
Minternal/app/move_test.go | 4++++
Minternal/cli/doc.txt | 2+-
Mtests/expected.log | 9+++++----
4 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/internal/app/move.go b/internal/app/move.go @@ -39,8 +39,13 @@ func Move(cmd CommandOptions) error { if !backend.IsDirectory(dst) { return fmt.Errorf("%s must be a path, not an entry", dst) } + srcDir := backend.Directory(src) dir := backend.Directory(dst) for _, e := range m { + srcPath := backend.Directory(e.Path) + if srcPath != srcDir { + return fmt.Errorf("multiple moves can only be done at a leaf level") + } r := moveRequest{cmd: cmd, src: e.Path, dst: backend.NewPath(dir, backend.Base(e.Path)), overwrite: false} if err := r.do(true, true); err != nil { return err diff --git a/internal/app/move_test.go b/internal/app/move_test.go @@ -68,6 +68,10 @@ func TestMove(t *testing.T) { if err := app.Move(m); err.Error() != "test/test2/test3 must be a path, not an entry" { t.Errorf("invalid error: %v", err) } + m.args = []string{"test/*", "test/test2/"} + if err := app.Move(m); err.Error() != "multiple moves can only be done at a leaf level" { + t.Errorf("invalid error: %v", err) + } m.args = []string{"test/test3/*", "test/test2/"} if err := app.Move(m); err.Error() != "unable to overwrite entries when moving multiple items" { t.Errorf("invalid error: %v", err) diff --git a/internal/cli/doc.txt b/internal/cli/doc.txt @@ -16,7 +16,7 @@ listed) For 'mv' the destination must NOT be an entry but the final destination location for all matched entries. Overwriting is not allowed by moving -via glob. +via glob and moving via globs can ONLY be done via leaf level globs. Examples: diff --git a/tests/expected.log b/tests/expected.log @@ -62,23 +62,24 @@ delete entry? (y/N) delete entry? (y/N) unable to remove: no entities given +multiple moves can only be done at a leaf level unable to get destination object unable to overwrite entries when moving multiple items keys/k/one2 keyx/d/e +move/m/ka/abc +move/m/ka/xyz move/ma/ka2/zzz move/ma/ka3/yyy move/ma/ka3/zzz -move/mac/abc -move/mac/xyz move/mac/yyy move/mac/zzz selected entities: + move/m/ka/abc + move/m/ka/xyz move/ma/ka2/zzz move/ma/ka3/yyy move/ma/ka3/zzz - move/mac/abc - move/mac/xyz move/mac/yyy move/mac/zzz