Merge pull request #3063 from yichengq/fix-create-root

etcdserver/auth: fix return value when creating root user
This commit is contained in:
Yicheng Qin
2015-06-29 10:29:23 -07:00

View File

@ -160,20 +160,10 @@ func (s *Store) GetUser(name string) (User, error) {
if err != nil { if err != nil {
return u, err return u, err
} }
// Require that root always has a root role. // Attach root role to root user.
if u.User == "root" { if u.User == "root" {
inRoles := false u = attachRootRole(u)
for _, r := range u.Roles {
if r == RootRoleName {
inRoles = true
break
}
}
if !inRoles {
u.Roles = append(u.Roles, RootRoleName)
}
} }
return u, nil return u, nil
} }
@ -191,6 +181,10 @@ func (s *Store) CreateOrUpdateUser(user User) (out User, created bool, err error
} }
func (s *Store) CreateUser(user User) (User, error) { func (s *Store) CreateUser(user User) (User, error) {
// Attach root role to root user.
if user.User == "root" {
user = attachRootRole(user)
}
u, err := s.createUserInternal(user) u, err := s.createUserInternal(user)
if err == nil { if err == nil {
plog.Noticef("created user %s", user.User) plog.Noticef("created user %s", user.User)
@ -604,3 +598,17 @@ func prefixMatch(pattern string, key string) (match bool, err error) {
} }
return strings.HasPrefix(key, pattern[:len(pattern)-1]), nil return strings.HasPrefix(key, pattern[:len(pattern)-1]), nil
} }
func attachRootRole(u User) User {
inRoles := false
for _, r := range u.Roles {
if r == RootRoleName {
inRoles = true
break
}
}
if !inRoles {
u.Roles = append(u.Roles, RootRoleName)
}
return u
}