From 0b1096eac5a500f8c624f08f384d0194da5386f4 Mon Sep 17 00:00:00 2001 From: CbcWestwolf <1004626265@qq.com> Date: Sat, 3 Dec 2022 11:36:01 +0800 Subject: [PATCH] sysvar: fix inconsistency in setting password validation sysvars (#39584) ref pingcap/tidb#38928 --- sessionctx/variable/sysvar.go | 15 ++++++++++++--- sessionctx/variable/varsutil.go | 10 ++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index f666fe40c27b8..91f49be89fc5b 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -520,7 +520,10 @@ var defaultSysVars = []*SysVar{ return "", err } if minLength := numberCount + specialCharCount + 2*int32(mixedCaseCount); length < minLength { - PasswordValidationLength.Store(minLength) + err = updatePasswordValidationLength(vars, minLength) + if err != nil { + return "", err + } } return normalizedValue, nil }, @@ -539,7 +542,10 @@ var defaultSysVars = []*SysVar{ return "", err } if minLength := int32(numberCount) + specialCharCount + 2*mixedCaseCount; length < minLength { - PasswordValidationLength.Store(minLength) + err = updatePasswordValidationLength(vars, minLength) + if err != nil { + return "", err + } } return normalizedValue, nil }, @@ -558,7 +564,10 @@ var defaultSysVars = []*SysVar{ return "", err } if minLength := numberCount + int32(specialCharCount) + 2*mixedCaseCount; length < minLength { - PasswordValidationLength.Store(minLength) + err = updatePasswordValidationLength(vars, minLength) + if err != nil { + return "", err + } } return normalizedValue, nil }, diff --git a/sessionctx/variable/varsutil.go b/sessionctx/variable/varsutil.go index b64500b91d208..7329ac6300253 100644 --- a/sessionctx/variable/varsutil.go +++ b/sessionctx/variable/varsutil.go @@ -15,6 +15,7 @@ package variable import ( + "context" "fmt" "io" "strconv" @@ -531,6 +532,15 @@ func collectAllowFuncName4ExpressionIndex() string { return strings.Join(str, ", ") } +func updatePasswordValidationLength(s *SessionVars, length int32) error { + err := s.GlobalVarsAccessor.SetGlobalSysVarOnly(context.Background(), ValidatePasswordLength, strconv.FormatInt(int64(length), 10)) + if err != nil { + return err + } + PasswordValidationLength.Store(length) + return nil +} + // GAFunction4ExpressionIndex stores functions GA for expression index. var GAFunction4ExpressionIndex = map[string]struct{}{ ast.Lower: {},