diff --git a/changelog/unreleased/pull-3776 b/changelog/unreleased/pull-3776 new file mode 100644 index 000000000..2fd203203 --- /dev/null +++ b/changelog/unreleased/pull-3776 @@ -0,0 +1,10 @@ +Bugfix: Limit number of key files tested while opening a repository + +Previously, restic tested the password against every key in the repository, when +there are more and more keys in the repository, opening the repository becomes +slower and slower. + +Now restic tests password against up to 20 key file in the repository. Alternatively, +you can use `--key-hint=` to specify the key file to be used. + +https://github.com/restic/restic/pull/3776 diff --git a/cmd/restic/integration_test.go b/cmd/restic/integration_test.go index 792b825c2..cefea852a 100644 --- a/cmd/restic/integration_test.go +++ b/cmd/restic/integration_test.go @@ -1040,7 +1040,7 @@ func testRunKeyAddNewKeyUserHost(t testing.TB, gopts GlobalOptions) { repo, err := OpenRepository(gopts) rtest.OK(t, err) - key, err := repository.SearchKey(gopts.ctx, repo, testKeyNewPassword, 1, "") + key, err := repository.SearchKey(gopts.ctx, repo, testKeyNewPassword, 2, "") rtest.OK(t, err) rtest.Equals(t, "john", key.Username) diff --git a/internal/repository/key.go b/internal/repository/key.go index 8c62d7e36..67f27f204 100644 --- a/internal/repository/key.go +++ b/internal/repository/key.go @@ -137,6 +137,7 @@ func SearchKey(ctx context.Context, s *Repository, password string, maxKeys int, // try at most maxKeys keys in repo err = s.Backend().List(listCtx, restic.KeyFile, func(fi restic.FileInfo) error { + checked++ if maxKeys > 0 && checked > maxKeys { return ErrMaxKeysReached }