mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-11 13:40:07 +00:00
Merge pull request #167 from percona/PT-74
PT-74 Fixed getSecuritySettings func
This commit is contained in:
@@ -467,19 +467,36 @@ func GetSecuritySettings(session pmgo.SessionManager, ver string) (*security, er
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Users, _ = session.DB("admin").C("system.users").Count()
|
// On some servers, like a mongos with config servers, this fails if session mode is Monotonic
|
||||||
if err != nil {
|
// On some other servers like a secondary in a replica set, this fails if the session mode is Strong.
|
||||||
return nil, errors.Wrap(err, "cannot get users count")
|
// Lets try both
|
||||||
}
|
newSession := session.Clone()
|
||||||
|
defer newSession.Close()
|
||||||
|
newSession.SetMode(mgo.Strong, true)
|
||||||
|
|
||||||
s.Roles, err = session.DB("admin").C("system.roles").Count()
|
if s.Users, s.Roles, err = getUserRolesCount(newSession); err != nil {
|
||||||
if err != nil {
|
newSession.SetMode(mgo.Monotonic, true)
|
||||||
return nil, errors.Wrap(err, "cannot get roles count")
|
if s.Users, s.Roles, err = getUserRolesCount(newSession); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "cannot get security settings.")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &s, nil
|
return &s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getUserRolesCount(session pmgo.SessionManager) (int, int, error) {
|
||||||
|
users, err := session.DB("admin").C("system.users").Count()
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, errors.Wrap(err, "cannot get users count")
|
||||||
|
}
|
||||||
|
|
||||||
|
roles, err := session.DB("admin").C("system.roles").Count()
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, errors.Wrap(err, "cannot get roles count")
|
||||||
|
}
|
||||||
|
return users, roles, nil
|
||||||
|
}
|
||||||
|
|
||||||
func getNodeType(session pmgo.SessionManager) (string, error) {
|
func getNodeType(session pmgo.SessionManager) (string, error) {
|
||||||
md := proto.MasterDoc{}
|
md := proto.MasterDoc{}
|
||||||
err := session.Run("isMaster", &md)
|
err := session.Run("isMaster", &md)
|
||||||
|
Reference in New Issue
Block a user