summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lehnardt <jan@apache.org>2017-11-01 20:28:23 +0100
committerGitHub <noreply@github.com>2017-11-01 20:28:23 +0100
commit5f88da2a5ee8ba78917fafd572c7b9fa37e76460 (patch)
tree7b44f955c7dcbea9d51cb6e291674ae6a0c123ae
parentbf6b6a1c84321baee2c4ad354059a45e0b8fdec7 (diff)
downloadcouchdb-1.x.x.tar.gz
R20 compat for 1.x.x (#952)archive/1.x.x1.7.0-RC11.7.01.x.x
* enable R20 builds * s/crypto:rand_bytes/crypto:strong_rand_bytes/ * R20 compat * add couch_rand to build chain * add R20 to travis tests * add couch_rand module, nicked from #860 * support R15 and R16 * fix attachment tests for r20, backport of #874 * drop R14 from travis * update to latest erlang versions
-rw-r--r--.travis.yml7
-rw-r--r--configure.ac20
-rw-r--r--src/couch_plugins/src/couch_plugins.erl2
-rw-r--r--src/couch_replicator/test/couch_replicator_large_atts_tests.erl2
-rw-r--r--src/couch_replicator/test/couch_replicator_many_leaves_tests.erl2
-rw-r--r--src/couch_replicator/test/couch_replicator_missing_stubs_tests.erl4
-rw-r--r--src/couchdb/Makefile.am3
-rw-r--r--src/couchdb/couch_httpd_auth.erl8
-rw-r--r--src/couchdb/couch_passwords.erl6
-rw-r--r--src/couchdb/couch_rand.erl73
-rw-r--r--src/couchdb/couch_server.erl2
-rw-r--r--src/couchdb/couch_util.erl10
-rw-r--r--src/couchdb/couch_uuids.erl6
-rw-r--r--src/erlang-oauth/oauth.erl4
-rw-r--r--src/mochiweb/mochiweb.erl2
-rw-r--r--src/mochiweb/mochiweb_multipart.erl2
-rw-r--r--src/my-first-couchdb-plugin/Makefile2
-rw-r--r--test/couchdb/couch_auth_cache_tests.erl2
-rw-r--r--test/couchdb/couch_btree_tests.erl8
-rw-r--r--test/couchdb/couch_file_tests.erl4
-rw-r--r--test/couchdb/couch_work_queue_tests.erl2
-rw-r--r--test/couchdb/couchdb_attachments_tests.erl4
-rw-r--r--test/couchdb/couchdb_views_tests.erl2
23 files changed, 125 insertions, 52 deletions
diff --git a/.travis.yml b/.travis.yml
index 18f9e00e6..87609755d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,13 +11,12 @@ script:
- make distcheck
language: erlang
otp_release:
- - 19.0
+ - 20.1
+ - 19.3
- 18.3
- - 17.0
+ - 17.5
- R16B03-1
- R15B03
- - R14B04
matrix:
allow_failures:
- - otp_release: R14B04
- otp_release: R15B03
diff --git a/configure.ac b/configure.ac
index 27ac813c2..cf165ad48 100644
--- a/configure.ac
+++ b/configure.ac
@@ -415,7 +415,7 @@ esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Erlang version compatibility" >&5
$as_echo_n "checking Erlang version compatibility... " >&6; }
-erlang_version_error="The installed Erlang version must be >= R14B (erts-5.8.1) and =< 19 (erts-8.0)"
+erlang_version_error="The installed Erlang version must be >= R14B (erts-5.8.1) and =< 20 (erts-9)"
version="`${ERL} -version 2>&1 | ${SED} 's/[[^0-9]]/ /g'` 0 0 0"
major_version=`echo $version | ${AWK} "{print \\$1}"`
@@ -423,11 +423,11 @@ minor_version=`echo $version | ${AWK} "{print \\$2}"`
patch_version=`echo $version | ${AWK} "{print \\$3}"`
echo -n "detected Erlang version: $major_version.$minor_version.$patch_version..."
-if test $major_version -lt 5 -o $major_version -gt 8; then
+if test $major_version -lt 5 -o $major_version -gt 9; then
as_fn_error $? "$erlang_version_error major_version does not match" "$LINENO" 5
fi
-if test $major_version -eq 5 -a $minor_version -lt 8; then
+if test $major_version -eq 5 -a $minor_version -lt 9; then
as_fn_error $? "$erlang_version_error minor_version does not match" "$LINENO" 5
fi
@@ -442,9 +442,9 @@ otp_release="`\
AC_SUBST(otp_release)
AM_CONDITIONAL([USE_OTP_NIFS],
- [can_use_nifs=$(echo $otp_release | grep -E "^(R14B|R15|R16|17|18|19)")])
+ [can_use_nifs=$(echo $otp_release | grep -E "^(R14B|R15|R16|17|18|19|20)")])
AM_CONDITIONAL([USE_EJSON_COMPARE_NIF],
- [can_use_ejson=$(echo $otp_release | grep -E "^(R14B03|R15|R16|17|18|19)")])
+ [can_use_ejson=$(echo $otp_release | grep -E "^(R14B03|R15|R16|17|18|19|20)")])
has_crypto=`\
${ERL} -eval "\
@@ -453,7 +453,7 @@ has_crypto=`\
if test -n "$has_crypto"; then
AC_MSG_ERROR([Could not find the Erlang crypto library.
-
+
Has Erlang been compiled with OpenSSL support?])
fi
@@ -461,7 +461,7 @@ AC_PATH_PROG([ERLC], [erlc])
if test x${ERLC} = x; then
AC_MSG_ERROR([Could not find the `erlc' executable.
-
+
Is Erlang installed?])
fi
@@ -574,7 +574,7 @@ AC_CHECK_PROG([HAS_PDFLATEX], [pdflatex], [yes])
if test x${HAS_PDFLATEX} = x; then
if test x${strictness_enabled} = xyes; then
AC_MSG_ERROR([Could not find the `pdflatex' executable.
-
+
Is LaTeX installed?])
else
AC_MSG_WARN([You will be unable to regenerate PDF documentation.])
@@ -586,7 +586,7 @@ AC_CHECK_PROG([HAS_MAKEINFO], [makeinfo], [yes])
if test x${HAS_MAKEINFO} = x; then
if test x${strictness_enabled} = xyes; then
AC_MSG_ERROR([Could not find the `makeinfo' executable.
-
+
Is GNU Texinfo installed?])
else
AC_MSG_WARN([You will be unable to regenerate info documentation.])
@@ -598,7 +598,7 @@ AC_CHECK_PROG([HAS_INSTALLINFO], [install-info], [yes])
if test x${HAS_INSTALLINFO} = x; then
if test x${strictness_enabled} = xyes; then
AC_MSG_ERROR([Could not find the `install-info' executable.
-
+
Is GNU Texinfo installed?])
else
AC_MSG_WARN([You will be unable to install info documentation.])
diff --git a/src/couch_plugins/src/couch_plugins.erl b/src/couch_plugins/src/couch_plugins.erl
index a4950be08..b0e0f6f92 100644
--- a/src/couch_plugins/src/couch_plugins.erl
+++ b/src/couch_plugins/src/couch_plugins.erl
@@ -228,7 +228,7 @@ do_verify_checksum(Filename, Checksum) ->
?LOG_DEBUG("Checking Filename: ~s", [Filename]),
case file:read_file(Filename) of
{ok, Data} ->
- ComputedChecksum = binary_to_list(base64:encode(crypto:sha(Data))),
+ ComputedChecksum = binary_to_list(base64:encode(crypto:hash(sha, Data))),
case ComputedChecksum of
Checksum -> ok;
_Else ->
diff --git a/src/couch_replicator/test/couch_replicator_large_atts_tests.erl b/src/couch_replicator/test/couch_replicator_large_atts_tests.erl
index 7c4e334be..f810370a7 100644
--- a/src/couch_replicator/test/couch_replicator_large_atts_tests.erl
+++ b/src/couch_replicator/test/couch_replicator_large_atts_tests.erl
@@ -176,7 +176,7 @@ att(Name, Size, Type) ->
name = Name,
type = Type,
att_len = Size,
- data = fun(Count) -> crypto:rand_bytes(Count) end
+ data = fun(Count) -> crypto:strong_rand_bytes(Count) end
}.
find_att([], _Name) ->
diff --git a/src/couch_replicator/test/couch_replicator_many_leaves_tests.erl b/src/couch_replicator/test/couch_replicator_many_leaves_tests.erl
index 27d51db9f..eae003e7d 100644
--- a/src/couch_replicator/test/couch_replicator_many_leaves_tests.erl
+++ b/src/couch_replicator/test/couch_replicator_many_leaves_tests.erl
@@ -193,7 +193,7 @@ add_attachments(SourceDb, NumAtts, [{DocId, NumConflicts} | Rest]) ->
NewDocs = lists:foldl(
fun(#doc{atts = Atts, revs = {Pos, [Rev | _]}} = Doc, Acc) ->
NewAtts = lists:foldl(fun(I, AttAcc) ->
- AttData = crypto:rand_bytes(100),
+ AttData = crypto:strong_rand_bytes(100),
NewAtt = #att{
name = ?io2b(["att_", ?i2l(I), "_",
couch_doc:rev_to_str({Pos, Rev})]),
diff --git a/src/couch_replicator/test/couch_replicator_missing_stubs_tests.erl b/src/couch_replicator/test/couch_replicator_missing_stubs_tests.erl
index 8c6492905..6e23ba99c 100644
--- a/src/couch_replicator/test/couch_replicator_missing_stubs_tests.erl
+++ b/src/couch_replicator/test/couch_replicator_missing_stubs_tests.erl
@@ -121,7 +121,7 @@ should_update_source_docs(Source, Times) ->
populate_db(DbName) ->
{ok, Db} = couch_db:open_int(DbName, []),
- AttData = crypto:rand_bytes(6000),
+ AttData = crypto:strong_rand_bytes(6000),
Doc = #doc{
id = <<"doc1">>,
atts = [
@@ -153,7 +153,7 @@ db_fold_fun(FullDocInfo, {DbName, Times}) ->
{ok, Db2} = couch_db:reopen(Db),
NewDocVersion = Doc#doc{
revs = {Pos, [RevId]},
- body = {[{<<"value">>, base64:encode(crypto:rand_bytes(100))}]}
+ body = {[{<<"value">>, base64:encode(crypto:strong_rand_bytes(100))}]}
},
{ok, NewRev} = couch_db:update_doc(Db2, NewDocVersion, []),
NewRev
diff --git a/src/couchdb/Makefile.am b/src/couchdb/Makefile.am
index 9fe19bcd3..f069479bb 100644
--- a/src/couchdb/Makefile.am
+++ b/src/couchdb/Makefile.am
@@ -65,6 +65,7 @@ source_files = \
couch_passwords.erl \
couch_primary_sup.erl \
couch_query_servers.erl \
+ couch_rand.erl \
couch_ref_counter.erl \
couch_secondary_sup.erl \
couch_server.erl \
@@ -122,6 +123,7 @@ compiled_files = \
couch_passwords.beam \
couch_primary_sup.beam \
couch_query_servers.beam \
+ couch_rand.beam \
couch_ref_counter.beam \
couch_secondary_sup.beam \
couch_server.beam \
@@ -195,4 +197,3 @@ endif
%.beam: %.erl couch_db.hrl couch_js_functions.hrl
$(ERLC) $(ERLC_FLAGS) ${TEST} $<;
-
diff --git a/src/couchdb/couch_httpd_auth.erl b/src/couchdb/couch_httpd_auth.erl
index df5e0f58f..f7bbb13fe 100644
--- a/src/couchdb/couch_httpd_auth.erl
+++ b/src/couchdb/couch_httpd_auth.erl
@@ -123,7 +123,7 @@ proxy_authentication_handler(Req) ->
%% @deprecated
proxy_authentification_handler(Req) ->
proxy_authentication_handler(Req).
-
+
proxy_auth_user(Req) ->
XHeaderUserName = couch_config:get("couch_httpd_auth", "x_auth_username",
"X-Auth-CouchDB-UserName"),
@@ -145,7 +145,7 @@ proxy_auth_user(Req) ->
nil ->
Req#httpd{user_ctx=#user_ctx{name=?l2b(UserName), roles=Roles}};
Secret ->
- ExpectedToken = couch_util:to_hex(crypto:sha_mac(Secret, UserName)),
+ ExpectedToken = couch_util:to_hex(crypto:hmac(sha, Secret, UserName)),
case header_value(Req, XHeaderToken) of
Token when Token == ExpectedToken ->
Req#httpd{user_ctx=#user_ctx{name=?l2b(UserName),
@@ -186,7 +186,7 @@ cookie_authentication_handler(#httpd{mochi_req=MochiReq}=Req) ->
UserProps ->
UserSalt = couch_util:get_value(<<"salt">>, UserProps, <<"">>),
FullSecret = <<Secret/binary, UserSalt/binary>>,
- ExpectedHash = crypto:sha_mac(FullSecret, User ++ ":" ++ TimeStr),
+ ExpectedHash = crypto:hmac(sha, FullSecret, User ++ ":" ++ TimeStr),
Hash = ?l2b(HashStr),
Timeout = list_to_integer(
couch_config:get("couch_httpd_auth", "timeout", "600")),
@@ -233,7 +233,7 @@ cookie_auth_header(_Req, _Headers) -> [].
cookie_auth_cookie(Req, User, Secret, TimeStamp) ->
SessionData = User ++ ":" ++ erlang:integer_to_list(TimeStamp, 16),
- Hash = crypto:sha_mac(Secret, SessionData),
+ Hash = crypto:hmac(sha, Secret, SessionData),
mochiweb_cookies:cookie("AuthSession",
couch_util:encodeBase64Url(SessionData ++ ":" ++ ?b2l(Hash)),
[{path, "/"}] ++ cookie_scheme(Req) ++ max_age()).
diff --git a/src/couchdb/couch_passwords.erl b/src/couchdb/couch_passwords.erl
index 9abf31b5c..321f89f78 100644
--- a/src/couchdb/couch_passwords.erl
+++ b/src/couchdb/couch_passwords.erl
@@ -23,7 +23,7 @@
%% legacy scheme, not used for new passwords.
-spec simple(binary(), binary()) -> binary().
simple(Password, Salt) when is_binary(Password), is_binary(Salt) ->
- ?l2b(couch_util:to_hex(crypto:sha(<<Password/binary, Salt/binary>>))).
+ ?l2b(couch_util:to_hex(crypto:hash(sha, <<Password/binary, Salt/binary>>))).
%% CouchDB utility functions
-spec hash_admin_password(binary() | list()) -> binary().
@@ -89,12 +89,12 @@ pbkdf2(_Password, _Salt, Iterations, _BlockIndex, Iteration, _Prev, Acc)
when Iteration > Iterations ->
Acc;
pbkdf2(Password, Salt, Iterations, BlockIndex, 1, _Prev, _Acc) ->
- InitialBlock = crypto:sha_mac(Password,
+ InitialBlock = crypto:hmac(sha, Password,
<<Salt/binary,BlockIndex:32/integer>>),
pbkdf2(Password, Salt, Iterations, BlockIndex, 2,
InitialBlock, InitialBlock);
pbkdf2(Password, Salt, Iterations, BlockIndex, Iteration, Prev, Acc) ->
- Next = crypto:sha_mac(Password, Prev),
+ Next = crypto:hmac(sha, Password, Prev),
pbkdf2(Password, Salt, Iterations, BlockIndex, Iteration + 1,
Next, crypto:exor(Next, Acc)).
diff --git a/src/couchdb/couch_rand.erl b/src/couchdb/couch_rand.erl
new file mode 100644
index 000000000..a57c0d6fa
--- /dev/null
+++ b/src/couchdb/couch_rand.erl
@@ -0,0 +1,73 @@
+% Licensed under the Apache License, Version 2.0 (the "License"); you may not
+% use this file except in compliance with the License. You may obtain a copy of
+% the License at
+%
+% http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+% License for the specific language governing permissions and limitations under
+% the License.
+
+-module(couch_rand).
+
+
+-export([
+ uniform/0,
+ uniform/1
+]).
+
+
+-define(MIN_OTP_VERSION_WITH_RAND_MODULE, 18).
+
+
+has_rand_module() ->
+ OtpRelease = case erlang:system_info(otp_release) of
+ % < R15 is excluded by ./configure already
+ "R15" ++ _OtpVsn -> 15;
+ "R16" ++ _OtpVsn -> 16;
+ Release -> list_to_integer(Release)
+ end,
+ OtpRelease >= ?MIN_OTP_VERSION_WITH_RAND_MODULE.
+
+
+uniform() ->
+ case has_rand_module() of
+ true -> rand_uniform();
+ _False -> norand_uniform()
+ end.
+
+uniform(N) ->
+ case has_rand_module() of
+ true -> rand_uniform(N);
+ _False -> norand_uniform(N)
+ end.
+
+
+norand_uniform() ->
+ maybe_set_random_seed(),
+ random:uniform().
+
+
+norand_uniform(N) ->
+ maybe_set_random_seed(),
+ random:uniform(N).
+
+
+maybe_set_random_seed() ->
+ case get(random_seed) of
+ undefined ->
+ {_, Sec, USec} = os:timestamp(),
+ Seed = {erlang:phash2(self()), Sec, USec},
+ random:seed(Seed);
+ _ ->
+ ok
+ end.
+
+rand_uniform() ->
+ rand:uniform().
+
+
+rand_uniform(N) ->
+ rand:uniform(N).
diff --git a/src/couchdb/couch_server.erl b/src/couchdb/couch_server.erl
index 7cee0f5d6..3da4ecf33 100644
--- a/src/couchdb/couch_server.erl
+++ b/src/couchdb/couch_server.erl
@@ -128,7 +128,7 @@ is_admin(User, ClearPwd) ->
case couch_config:get("admins", User) of
"-hashed-" ++ HashedPwdAndSalt ->
[HashedPwd, Salt] = string:tokens(HashedPwdAndSalt, ","),
- couch_util:to_hex(crypto:sha(ClearPwd ++ Salt)) == HashedPwd;
+ couch_util:to_hex(crypto:hash(sha, ClearPwd ++ Salt)) == HashedPwd;
_Else ->
false
end.
diff --git a/src/couchdb/couch_util.erl b/src/couchdb/couch_util.erl
index 00530848a..e2f103fb0 100644
--- a/src/couchdb/couch_util.erl
+++ b/src/couchdb/couch_util.erl
@@ -209,7 +209,7 @@ json_user_ctx(#db{name=DbName, user_ctx=Ctx}) ->
% returns a random integer
rand32() ->
- crypto:rand_uniform(0, 16#100000000).
+ crypto:strong_rand_bytes(4).
% given a pathname "../foo/bar/" it gives back the fully qualified
% absolute pathname.
@@ -415,20 +415,20 @@ verify(_X, _Y) -> false.
-spec md5(Data::(iolist() | binary())) -> Digest::binary().
md5(Data) ->
- try crypto:md5(Data) catch error:_ -> erlang:md5(Data) end.
+ try crypto:hash(md5, Data) catch error:_ -> erlang:md5(Data) end.
-spec md5_init() -> Context::binary().
md5_init() ->
- try crypto:md5_init() catch error:_ -> erlang:md5_init() end.
+ try crypto:hash_init(md5) catch error:_ -> erlang:md5_init() end.
-spec md5_update(Context::binary(), Data::(iolist() | binary())) ->
NewContext::binary().
md5_update(Ctx, D) ->
- try crypto:md5_update(Ctx,D) catch error:_ -> erlang:md5_update(Ctx,D) end.
+ try crypto:hash_update(Ctx,D) catch error:_ -> erlang:md5_update(Ctx,D) end.
-spec md5_final(Context::binary()) -> Digest::binary().
md5_final(Ctx) ->
- try crypto:md5_final(Ctx) catch error:_ -> erlang:md5_final(Ctx) end.
+ try crypto:hash_final(Ctx) catch error:_ -> erlang:md5_final(Ctx) end.
% linear search is faster for small lists, length() is 0.5 ms for 100k list
reorder_results(Keys, SortedResults) when length(Keys) < 100 ->
diff --git a/src/couchdb/couch_uuids.erl b/src/couchdb/couch_uuids.erl
index 6ed75a1f4..581aba97a 100644
--- a/src/couchdb/couch_uuids.erl
+++ b/src/couchdb/couch_uuids.erl
@@ -30,10 +30,10 @@ new() ->
gen_server:call(?MODULE, create).
random() ->
- list_to_binary(couch_util:to_hex(crypto:rand_bytes(16))).
+ list_to_binary(couch_util:to_hex(crypto:strong_rand_bytes(16))).
utc_random() ->
- utc_suffix(couch_util:to_hex(crypto:rand_bytes(9))).
+ utc_suffix(couch_util:to_hex(crypto:strong_rand_bytes(9))).
utc_suffix(Suffix) ->
Now = {_, _, Micro} = now(),
@@ -81,7 +81,7 @@ code_change(_OldVsn, State, _Extra) ->
{ok, State}.
new_prefix() ->
- couch_util:to_hex((crypto:rand_bytes(13))).
+ couch_util:to_hex((crypto:strong_rand_bytes(13))).
inc() ->
crypto:rand_uniform(1, 16#ffe).
diff --git a/src/erlang-oauth/oauth.erl b/src/erlang-oauth/oauth.erl
index e75d5fd78..d37f715cd 100644
--- a/src/erlang-oauth/oauth.erl
+++ b/src/erlang-oauth/oauth.erl
@@ -77,7 +77,7 @@ signature_params(Consumer, Params, Token) ->
signature_params(Consumer, Params) ->
Timestamp = unix_timestamp(),
- Nonce = base64:encode_to_string(crypto:rand_bytes(32)), % cf. ruby-oauth
+ Nonce = base64:encode_to_string(crypto:strong_rand_bytes(32)), % cf. ruby-oauth
[ {"oauth_version", "1.0"}
, {"oauth_nonce", Nonce}
, {"oauth_timestamp", integer_to_list(Timestamp)}
@@ -128,7 +128,7 @@ hmac_sha1_signature(HttpMethod, URL, Params, Consumer, TokenSecret) ->
hmac_sha1_signature(BaseString, Consumer, TokenSecret) ->
Key = uri_join([consumer_secret(Consumer), TokenSecret]),
- base64:encode_to_string(crypto:sha_mac(Key, BaseString)).
+ base64:encode_to_string(crypto:hmac(sha, Key, BaseString)).
hmac_sha1_verify(Signature, HttpMethod, URL, Params, Consumer, TokenSecret) ->
verify_in_constant_time(Signature, hmac_sha1_signature(HttpMethod, URL, Params, Consumer, TokenSecret)).
diff --git a/src/mochiweb/mochiweb.erl b/src/mochiweb/mochiweb.erl
index 250beb5ce..a157f461d 100644
--- a/src/mochiweb/mochiweb.erl
+++ b/src/mochiweb/mochiweb.erl
@@ -187,7 +187,7 @@ do_POST(Transport, Size, Times) ->
end,
TestReqs = [begin
Path = "/stuff/" ++ integer_to_list(N),
- Body = crypto:rand_bytes(Size),
+ Body = crypto:strong_rand_bytes(Size),
#treq{path=Path, body=Body, xreply=Body}
end || N <- lists:seq(1, Times)],
ClientFun = new_client_fun('POST', TestReqs),
diff --git a/src/mochiweb/mochiweb_multipart.erl b/src/mochiweb/mochiweb_multipart.erl
index a83a88c98..85dc61376 100644
--- a/src/mochiweb/mochiweb_multipart.erl
+++ b/src/mochiweb/mochiweb_multipart.erl
@@ -38,7 +38,7 @@ parts_to_body([{Start, End, Body}], ContentType, Size) ->
{HeaderList, Body};
parts_to_body(BodyList, ContentType, Size) when is_list(BodyList) ->
parts_to_multipart_body(BodyList, ContentType, Size,
- mochihex:to_hex(crypto:rand_bytes(8))).
+ mochihex:to_hex(crypto:strong_rand_bytes(8))).
%% @spec parts_to_multipart_body([bodypart()], ContentType::string(),
%% Size::integer(), Boundary::string()) ->
diff --git a/src/my-first-couchdb-plugin/Makefile b/src/my-first-couchdb-plugin/Makefile
index 7806bd7b4..6c0e1e6b4 100644
--- a/src/my-first-couchdb-plugin/Makefile
+++ b/src/my-first-couchdb-plugin/Makefile
@@ -35,4 +35,4 @@ plugin: compile
@mkdir -p $(PLUGIN_DIST)
@cp -r $(PLUGIN_DIRS) $(PLUGIN_DIST)
@tar czf $(PLUGIN_VERSION_SLUG).tar.gz $(PLUGIN_DIST)
- @$(ERL) -eval 'File = "$(PLUGIN_VERSION_SLUG).tar.gz", {ok, Data} = file:read_file(File),io:format("~s: ~s~n", [File, base64:encode(crypto:sha(Data))]),halt()' -noshell
+ @$(ERL) -eval 'File = "$(PLUGIN_VERSION_SLUG).tar.gz", {ok, Data} = file:read_file(File),io:format("~s: ~s~n", [File, base64:encode(crypto:hash(sha, Data))]),halt()' -noshell
diff --git a/test/couchdb/couch_auth_cache_tests.erl b/test/couchdb/couch_auth_cache_tests.erl
index 3b2321caa..df00bfc58 100644
--- a/test/couchdb/couch_auth_cache_tests.erl
+++ b/test/couchdb/couch_auth_cache_tests.erl
@@ -189,7 +189,7 @@ update_user_doc(DbName, UserName, Password, Rev) ->
{ok, couch_doc:rev_to_str(NewRev)}.
hash_password(Password) ->
- ?l2b(couch_util:to_hex(crypto:sha(iolist_to_binary([Password, ?SALT])))).
+ ?l2b(couch_util:to_hex(crypto:hash(sha, iolist_to_binary([Password, ?SALT])))).
shutdown_db(DbName) ->
{ok, AuthDb} = couch_db:open_int(DbName, [?ADMIN_USER]),
diff --git a/test/couchdb/couch_btree_tests.erl b/test/couchdb/couch_btree_tests.erl
index 911640f2d..6a94d41fb 100644
--- a/test/couchdb/couch_btree_tests.erl
+++ b/test/couchdb/couch_btree_tests.erl
@@ -82,7 +82,7 @@ btree_open_test_() ->
sorted_kvs_test_() ->
Funs = kvs_test_funs(),
- Sorted = [{Seq, random:uniform()} || Seq <- lists:seq(1, ?ROWS)],
+ Sorted = [{Seq, couch_rand:uniform()} || Seq <- lists:seq(1, ?ROWS)],
{
"BTree with sorted keys",
{
@@ -93,7 +93,7 @@ sorted_kvs_test_() ->
}.
rsorted_kvs_test_() ->
- Sorted = [{Seq, random:uniform()} || Seq <- lists:seq(1, ?ROWS)],
+ Sorted = [{Seq, couch_rand:uniform()} || Seq <- lists:seq(1, ?ROWS)],
Funs = kvs_test_funs(),
Reversed = Sorted,
{
@@ -107,7 +107,7 @@ rsorted_kvs_test_() ->
shuffled_kvs_test_() ->
Funs = kvs_test_funs(),
- Sorted = [{Seq, random:uniform()} || Seq <- lists:seq(1, ?ROWS)],
+ Sorted = [{Seq, couch_rand:uniform()} || Seq <- lists:seq(1, ?ROWS)],
Shuffled = shuffle(Sorted),
{
"BTree with shuffled keys",
@@ -463,7 +463,7 @@ randomize(T, List) ->
end, randomize(List), lists:seq(1, (T - 1))).
randomize(List) ->
- D = lists:map(fun(A) -> {random:uniform(), A} end, List),
+ D = lists:map(fun(A) -> {couch_rand:uniform(), A} end, List),
{_, D1} = lists:unzip(lists:keysort(1, D)),
D1.
diff --git a/test/couchdb/couch_file_tests.erl b/test/couchdb/couch_file_tests.erl
index ad1338391..5ef13c9d6 100644
--- a/test/couchdb/couch_file_tests.erl
+++ b/test/couchdb/couch_file_tests.erl
@@ -253,13 +253,13 @@ check_header_recovery(CheckFun) ->
ok.
write_random_data(Fd) ->
- write_random_data(Fd, 100 + random:uniform(1000)).
+ write_random_data(Fd, 100 + couch_rand:uniform(1000)).
write_random_data(Fd, 0) ->
{ok, Bytes} = couch_file:bytes(Fd),
{ok, (1 + Bytes div ?BLOCK_SIZE) * ?BLOCK_SIZE};
write_random_data(Fd, N) ->
Choices = [foo, bar, <<"bizzingle">>, "bank", ["rough", stuff]],
- Term = lists:nth(random:uniform(4) + 1, Choices),
+ Term = lists:nth(couch_rand:uniform(4) + 1, Choices),
{ok, _, _} = couch_file:append_term(Fd, Term),
write_random_data(Fd, N - 1).
diff --git a/test/couchdb/couch_work_queue_tests.erl b/test/couchdb/couch_work_queue_tests.erl
index 8a463b51f..427be7645 100644
--- a/test/couchdb/couch_work_queue_tests.erl
+++ b/test/couchdb/couch_work_queue_tests.erl
@@ -340,7 +340,7 @@ producer_loop(Parent, Q) ->
Parent ! {pong, Ref},
producer_loop(Parent, Q);
{produce, Ref, Size} ->
- Item = crypto:rand_bytes(Size),
+ Item = crypto:strong_rand_bytes(Size),
Parent ! {item, Ref, Item},
ok = couch_work_queue:queue(Q, Item),
producer_loop(Parent, Q)
diff --git a/test/couchdb/couchdb_attachments_tests.erl b/test/couchdb/couchdb_attachments_tests.erl
index cf597855b..24416e52a 100644
--- a/test/couchdb/couchdb_attachments_tests.erl
+++ b/test/couchdb/couchdb_attachments_tests.erl
@@ -631,8 +631,8 @@ create_already_compressed_att(Host, DbName) ->
gzip(Data) ->
Z = zlib:open(),
ok = zlib:deflateInit(Z, ?COMPRESSION_LEVEL, deflated, 16 + 15, 8, default),
- zlib:deflate(Z, Data),
+ Chunk = zlib:deflate(Z, Data),
Last = zlib:deflate(Z, [], finish),
ok = zlib:deflateEnd(Z),
ok = zlib:close(Z),
- Last.
+ [Chunk | Last].
diff --git a/test/couchdb/couchdb_views_tests.erl b/test/couchdb/couchdb_views_tests.erl
index 6904f00ba..316029b0d 100644
--- a/test/couchdb/couchdb_views_tests.erl
+++ b/test/couchdb/couchdb_views_tests.erl
@@ -429,7 +429,7 @@ populate_db(Db, BatchSize, N) when N > 0 ->
fun(_) ->
couch_doc:from_json_obj({[
{<<"_id">>, couch_uuids:new()},
- {<<"value">>, base64:encode(crypto:rand_bytes(1000))}
+ {<<"value">>, base64:encode(crypto:strong_rand_bytes(1000))}
]})
end,
lists:seq(1, BatchSize)),