Skip to content

Commit

Permalink
Merge pull request #11811 from wswcfan/automated-cherry-pick-of-#1173…
Browse files Browse the repository at this point in the history
…5-origin-release-3.4

Automated cherry pick of #11735 on release-3.4
  • Loading branch information
gyuho committed May 20, 2020
2 parents 166b447 + f18976f commit 609e844
Showing 1 changed file with 20 additions and 10 deletions.
30 changes: 20 additions & 10 deletions auth/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -346,17 +346,27 @@ func (as *authStore) CheckPassword(username, password string) (uint64, error) {
return 0, ErrAuthNotEnabled
}

tx := as.be.BatchTx()
tx.Lock()
defer tx.Unlock()
var user *authpb.User
// CompareHashAndPassword is very expensive, so we use closures
// to avoid putting it in the critical section of the tx lock.
revision, err := func() (uint64, error) {
tx := as.be.BatchTx()
tx.Lock()
defer tx.Unlock()

user = getUser(as.lg, tx, username)
if user == nil {
return 0, ErrAuthFailed
}

user := getUser(as.lg, tx, username)
if user == nil {
return 0, ErrAuthFailed
}
if user.Options != nil && user.Options.NoPassword {
return 0, ErrAuthFailed
}

if user.Options != nil && user.Options.NoPassword {
return 0, ErrAuthFailed
return getRevision(tx), nil
}()
if err != nil {
return 0, err
}

if bcrypt.CompareHashAndPassword(user.Password, []byte(password)) != nil {
Expand All @@ -367,7 +377,7 @@ func (as *authStore) CheckPassword(username, password string) (uint64, error) {
}
return 0, ErrAuthFailed
}
return getRevision(tx), nil
return revision, nil
}

func (as *authStore) Recover(be backend.Backend) {
Expand Down

0 comments on commit 609e844

Please sign in to comment.