Merge remote-tracking branch 'asf/salt-distribution'

* asf/salt-distribution:
  fix cluster setup: use same admin pq salt on all nodes
diff --git a/src/setup.erl b/src/setup.erl
index acbeb2d..5a71004 100644
--- a/src/setup.erl
+++ b/src/setup.erl
@@ -90,11 +90,13 @@
 enable_cluster_http(Options) ->
     % POST to nodeB/_setup
     RequestOptions = get_remote_request_options(Options),
+    AdminUsername = couch_util:get_value(username, Options),
+    AdminPasswordHash = config:get("admins", binary_to_list(AdminUsername)),
 
     Body = ?JSON_ENCODE({[
         {<<"action">>, <<"enable_cluster">>},
-        {<<"username">>, couch_util:get_value(username, Options)},
-        {<<"password">>, couch_util:get_value(password, Options)},
+        {<<"username">>, AdminUsername},
+        {<<"password_hash">>, ?l2b(AdminPasswordHash)},
         {<<"bind_address">>, couch_util:get_value(bind_address, Options)},
         {<<"port">>, couch_util:get_value(port, Options)},
         {<<"node_count">>, couch_util:get_value(node_count, Options)}
@@ -125,7 +127,10 @@
     CurrentAdmins = config:get("admins"),
     NewCredentials = {
         proplists:get_value(username, Options),
-        proplists:get_value(password, Options)
+        case proplists:get_value(password_hash, Options) of
+          undefined -> proplists:get_value(password, Options);
+          Pw -> Pw
+        end
     },
 
     % if bind_address == 127.0.0.1 and no bind_address in req -> error
@@ -138,7 +143,7 @@
         {undefined, undefined} ->
             ok;
         {Username, Password} ->
-            maybe_set_admin(Username, Password)
+            set_admin(Username, Password)
     end,
 
     case NewBindAddress of
@@ -163,14 +168,8 @@
     end,
     couch_log:notice("Enable Cluster: ~p~n", [Options]).
 
-maybe_set_admin(Username, Password) ->
-    case couch_auth_cache:get_admin(Username) of
-        nil ->
-            HashedPassword = couch_passwords:hash_admin_password(Password),
-            config:set("admins", binary_to_list(Username), binary_to_list(HashedPassword));
-        _Else ->
-            ok
-    end.
+set_admin(Username, Password) ->
+  config:set("admins", binary_to_list(Username), binary_to_list(Password)).
 
 
 finish_cluster() ->
diff --git a/src/setup_httpd.erl b/src/setup_httpd.erl
index 73ce147..a23a3e2 100644
--- a/src/setup_httpd.erl
+++ b/src/setup_httpd.erl
@@ -57,6 +57,7 @@
     Options = get_options([
         {username, <<"username">>},
         {password, <<"password">>},
+        {password_hash, <<"password_hash">>},
         {bind_address, <<"bind_address">>},
         {port, <<"port">>},
         {remote_node, <<"remote_node">>},