good morning!!!!

Skip to content
Snippets Groups Projects
Commit 6498df7b authored by Felix Lange's avatar Felix Lange
Browse files

accounts: ensure TimedUnlock does not override indefinite unlock timeout

parent 46df50be
No related branches found
No related tags found
No related merge requests found
...@@ -164,14 +164,15 @@ func (am *Manager) Lock(addr common.Address) error { ...@@ -164,14 +164,15 @@ func (am *Manager) Lock(addr common.Address) error {
return nil return nil
} }
// TimedUnlock unlocks the given account with. The account // TimedUnlock unlocks the given account with the passphrase. The account
// stays unlocked for the duration of timeout. A timeout of 0 unlocks the account // stays unlocked for the duration of timeout. A timeout of 0 unlocks the account
// until the program exits. The account must match a unique key. // until the program exits. The account must match a unique key file.
// //
// If the accout is already unlocked, TimedUnlock extends or shortens // If the account address is already unlocked for a duration, TimedUnlock extends or
// the active unlock timeout. // shortens the active unlock timeout. If the address was previously unlocked
func (am *Manager) TimedUnlock(a Account, keyAuth string, timeout time.Duration) error { // indefinitely the timeout is not altered.
_, key, err := am.getDecryptedKey(a, keyAuth) func (am *Manager) TimedUnlock(a Account, passphrase string, timeout time.Duration) error {
a, key, err := am.getDecryptedKey(a, passphrase)
if err != nil { if err != nil {
return err return err
} }
...@@ -180,8 +181,13 @@ func (am *Manager) TimedUnlock(a Account, keyAuth string, timeout time.Duration) ...@@ -180,8 +181,13 @@ func (am *Manager) TimedUnlock(a Account, keyAuth string, timeout time.Duration)
defer am.mu.Unlock() defer am.mu.Unlock()
u, found := am.unlocked[a.Address] u, found := am.unlocked[a.Address]
if found { if found {
// terminate dropLater for this key to avoid unexpected drops. if u.abort == nil {
if u.abort != nil { // The address was unlocked indefinitely, so unlocking
// it with a timeout would be confusing.
zeroKey(key.PrivateKey)
return nil
} else {
// Terminate the expire goroutine and replace it below.
close(u.abort) close(u.abort)
} }
} }
......
...@@ -120,8 +120,8 @@ func TestOverrideUnlock(t *testing.T) { ...@@ -120,8 +120,8 @@ func TestOverrideUnlock(t *testing.T) {
pass := "foo" pass := "foo"
a1, err := am.NewAccount(pass) a1, err := am.NewAccount(pass)
// Unlock indefinitely // Unlock indefinitely.
if err = am.Unlock(a1, pass); err != nil { if err = am.TimedUnlock(a1, pass, 5*time.Minute); err != nil {
t.Fatal(err) t.Fatal(err)
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment