func (s *session) Auth(user string, auth []byte, salt []byte) bool { strs := strings.Split(user, "@") if len(strs) != 2 { log.Warnf("Invalid format for user: %s", user) return false } // Get user password. name := strs[0] host := strs[1] pwd, err := s.getPassword(name, host) if err != nil { if terror.ExecResultIsEmpty.Equal(err) { log.Errorf("User [%s] not exist %v", name, err) } else { log.Errorf("Get User [%s] password from SystemDB error %v", name, err) } return false } if len(pwd) != 0 && len(pwd) != 40 { log.Errorf("User [%s] password from SystemDB not like a sha1sum", name) return false } hpwd, err := util.DecodePassword(pwd) if err != nil { log.Errorf("Decode password string error %v", err) return false } checkAuth := util.CalcPassword(salt, hpwd) if !bytes.Equal(auth, checkAuth) { return false } variable.GetSessionVars(s).SetCurrentUser(user) return true }
func (s *session) Auth(user string, auth []byte, salt []byte) bool { strs := strings.Split(user, "@") if len(strs) != 2 { log.Warnf("Invalid format for user: %s", user) return false } // Get user password. name := strs[0] host := strs[1] authSQL := fmt.Sprintf("SELECT Password FROM %s.%s WHERE User=\"%s\" and Host=\"%s\";", mysql.SystemDB, mysql.UserTable, name, host) rs, err := s.Execute(authSQL) if err != nil { log.Warnf("Encounter error when auth user %s. Error: %v", user, err) return false } if len(rs) == 0 { return false } row, err := rs[0].Next() if err != nil { log.Warnf("Encounter error when auth user %s. Error: %v", user, err) return false } if row == nil || len(row.Data) == 0 { return false } pwd, ok := row.Data[0].(string) if !ok { return false } hpwd, err := util.DecodePassword(pwd) if err != nil { log.Errorf("Decode password string error %v", err) return false } checkAuth := util.CalcPassword(salt, hpwd) if !bytes.Equal(auth, checkAuth) { return false } variable.GetSessionVars(s).SetCurrentUser(user) return true }
func (s *session) Auth(user string, auth []byte, salt []byte) bool { strs := strings.Split(user, "@") if len(strs) != 2 { log.Warnf("Invalid format for user: %s", user) return false } // Get user password. name := strs[0] host := strs[1] pwd, err := s.getPassword(name, host) hpwd, err := util.DecodePassword(pwd) if err != nil { log.Errorf("Decode password string error %v", err) return false } checkAuth := util.CalcPassword(salt, hpwd) if !bytes.Equal(auth, checkAuth) { return false } variable.GetSessionVars(s).SetCurrentUser(user) return true }