etcdserver/auth: fix return value when creating root user

Before:

```
$ curl http://127.0.0.1:4001/v2/auth/users/root -XPUT -d '{"user": "root",
"password": "root"}'
{"user":"root","roles":null}
```

After:

```
{"user":"root","roles":["root"]}
```
This commit is contained in:
Yicheng Qin 2015-06-25 18:01:29 -07:00
parent 3e455ed104
commit 2e41b4f9e1

View File

@ -160,20 +160,10 @@ func (s *Store) GetUser(name string) (User, error) {
if err != nil {
return u, err
}
// Require that root always has a root role.
// Attach root role to root user.
if u.User == "root" {
inRoles := false
for _, r := range u.Roles {
if r == RootRoleName {
inRoles = true
break
}
}
if !inRoles {
u.Roles = append(u.Roles, RootRoleName)
}
u = attachRootRole(u)
}
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) {
// Attach root role to root user.
if user.User == "root" {
user = attachRootRole(user)
}
u, err := s.createUserInternal(user)
if err == nil {
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
}
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
}