From e085713b3561b7e1d26a76c1a632d0f5f98a25d0 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sun, 11 Mar 2018 13:22:13 +0100 Subject: [PATCH] Return the first password/key which works Closes #1663 --- internal/repository/key.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/repository/key.go b/internal/repository/key.go index 44e3d24e0..c69305207 100644 --- a/internal/repository/key.go +++ b/internal/repository/key.go @@ -115,8 +115,11 @@ func OpenKey(ctx context.Context, s *Repository, name string, password string) ( func SearchKey(ctx context.Context, s *Repository, password string, maxKeys int) (k *Key, err error) { checked := 0 - // try at most maxKeysForSearch keys in repo - err = s.Backend().List(ctx, restic.KeyFile, func(fi restic.FileInfo) error { + listCtx, cancel := context.WithCancel(ctx) + defer cancel() + + // try at most maxKeys keys in repo + err = s.Backend().List(listCtx, restic.KeyFile, func(fi restic.FileInfo) error { if maxKeys > 0 && checked > maxKeys { return ErrMaxKeysReached } @@ -142,9 +145,14 @@ func SearchKey(ctx context.Context, s *Repository, password string, maxKeys int) debug.Log("successfully opened key %v", fi.Name) k = key + cancel() return nil }) + if err == context.Canceled { + err = nil + } + if err != nil { return nil, err }