From aede1b7478be1515fd3778d4a93c3198ebaea64e Mon Sep 17 00:00:00 2001 From: David Norton Date: Mon, 14 Mar 2016 17:44:48 -0400 Subject: [PATCH 1/4] make CREATE USER default to IF NOT EXISTS --- services/meta/data.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/meta/data.go b/services/meta/data.go index 5b0e100f4b..966e92966c 100644 --- a/services/meta/data.go +++ b/services/meta/data.go @@ -460,7 +460,7 @@ func (data *Data) CreateUser(name, hash string, admin bool) error { if name == "" { return ErrUsernameRequired } else if data.User(name) != nil { - return ErrUserExists + return nil } // Append new user. From a369ed8565175de477fd3eca82787be29b7b6d88 Mon Sep 17 00:00:00 2001 From: David Norton Date: Mon, 14 Mar 2016 17:48:53 -0400 Subject: [PATCH 2/4] update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b5fe3ff2a..ed8110e60e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -71,6 +71,7 @@ - [#4688](https://github.com/influxdata/influxdb/issues/4688): admin UI doesn't display results for some SHOW queries - [#6006](https://github.com/influxdata/influxdb/pull/6006): Fix deadlock while running backups - [#5965](https://github.com/influxdata/influxdb/issues/5965): InfluxDB panic crashes while parsing "-" as Float +- [#5835](https://github.com/influxdata/influxdb/issues/5835): Make CREATE USER default to IF NOT EXISTS ## v0.10.2 [2016-03-03] From a2125bee24f9c37a3c0f0ef83c7b3e4c3da1d9ed Mon Sep 17 00:00:00 2001 From: David Norton Date: Mon, 14 Mar 2016 18:40:25 -0400 Subject: [PATCH 3/4] check existing user with bcrypt --- services/meta/client.go | 8 ++++++++ services/meta/data.go | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/services/meta/client.go b/services/meta/client.go index 6dcfe88c4f..9f246bd7d0 100644 --- a/services/meta/client.go +++ b/services/meta/client.go @@ -429,6 +429,14 @@ func (c *Client) CreateUser(name, password string, admin bool) (*UserInfo, error data := c.cacheData.Clone() + // See if the user already exists. + if u := data.User(name); u != nil { + if err := bcrypt.CompareHashAndPassword([]byte(u.Hash), []byte(password)); err != nil || u.Admin != admin { + return nil, ErrUserExists + } + return u, nil + } + // Hash the password before serializing it. hash, err := bcrypt.GenerateFromPassword([]byte(password), bcryptCost) if err != nil { diff --git a/services/meta/data.go b/services/meta/data.go index 966e92966c..95102d0655 100644 --- a/services/meta/data.go +++ b/services/meta/data.go @@ -459,8 +459,8 @@ func (data *Data) CreateUser(name, hash string, admin bool) error { // Ensure the user doesn't already exist. if name == "" { return ErrUsernameRequired - } else if data.User(name) != nil { - return nil + } else if u := data.User(name); u != nil { + return ErrUserExists } // Append new user. From 96327f3863b10c39ac43456a2ea2a54095027c7f Mon Sep 17 00:00:00 2001 From: David Norton Date: Mon, 14 Mar 2016 18:43:49 -0400 Subject: [PATCH 4/4] remove unnecessary change --- services/meta/data.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/meta/data.go b/services/meta/data.go index 95102d0655..5b0e100f4b 100644 --- a/services/meta/data.go +++ b/services/meta/data.go @@ -459,7 +459,7 @@ func (data *Data) CreateUser(name, hash string, admin bool) error { // Ensure the user doesn't already exist. if name == "" { return ErrUsernameRequired - } else if u := data.User(name); u != nil { + } else if data.User(name) != nil { return ErrUserExists }