diff options
author | Jan Lehnardt <jan@apache.org> | 2014-11-13 18:19:10 +0100 |
---|---|---|
committer | Jan Lehnardt <jan@apache.org> | 2014-11-13 18:19:10 +0100 |
commit | 3304add80963e265b80a342f650d4bb526a6c755 (patch) | |
tree | ccaeeafe4e38f6f45745e1e893c8fd4c50e369ab | |
parent | 0a676fcdfeee06a03a0bfed7383b5e38384f59cc (diff) | |
download | couchdb-3304add80963e265b80a342f650d4bb526a6c755.tar.gz |
hash admin passwords, more resilient port parsing
-rw-r--r-- | src/setup.erl | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/setup.erl b/src/setup.erl index 85ebf793d..637468510 100644 --- a/src/setup.erl +++ b/src/setup.erl @@ -78,8 +78,7 @@ enable_cluster_int(Options, no) -> {undefined, undefined} -> ok; {Username, Password} -> - % TODO check if this gets hashed - config:set("admins", binary_to_list(Username), binary_to_list(Password)) + maybe_set_admin(Username, Password) end, case NewBindAddress of @@ -99,6 +98,16 @@ enable_cluster_int(Options, no) -> io:format("~nEnable Cluster: ~p~n", [Options]). %cluster_state:set(enabled). +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. + + finish_cluster() -> finish_cluster_int(has_cluster_system_dbs()). finish_cluster_int(ok) -> @@ -136,7 +145,8 @@ add_node_int(Options, ok) -> ], Host = proplists:get_value(host, Options), - Port = integer_to_binary(proplists:get_value(port, Options, 5984)), + Port = get_port(proplists:get_value(port, Options, 5984)), + Url = binary_to_list(<<"http://", Host/binary, ":", Port/binary, "/_cluster_setup">>), case ibrowse:send_req(Url, Headers, post, Body, RequestOptions) of @@ -148,6 +158,16 @@ add_node_int(Options, ok) -> Else end. +get_port(Port) when is_integer(Port) -> + integer_to_binary(Port); +get_port(Port) when is_list(Port) -> + list_to_binary(Port); +get_port(Port) when is_binary(Port) -> + Port; +get_port(Port) -> + {error, <<"invalid type for port">>}. + + create_node_doc(Host, Port) -> {ok, Db} = couch_db:open_int(<<"nodes">>, []), Name = get_name(Port), |