mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-24 16:23:40 +01:00
Use old http_uri, crypto and pg2 only with old Erlang/OTP (#3284)
This commit is contained in:
parent
2ca5712507
commit
c0f7008e96
@ -94,7 +94,10 @@
|
|||||||
{if_var_true, sip, {d, 'SIP'}},
|
{if_var_true, sip, {d, 'SIP'}},
|
||||||
{if_var_true, stun, {d, 'STUN'}},
|
{if_var_true, stun, {d, 'STUN'}},
|
||||||
{if_version_above, "20", {d, 'DEPRECATED_GET_STACKTRACE'}},
|
{if_version_above, "20", {d, 'DEPRECATED_GET_STACKTRACE'}},
|
||||||
|
{if_version_below, "21", {d, 'USE_OLD_HTTP_URI'}},
|
||||||
{if_version_below, "22", {d, 'LAGER'}},
|
{if_version_below, "22", {d, 'LAGER'}},
|
||||||
|
{if_version_below, "23", {d, 'USE_OLD_CRYPTO_HMAC'}},
|
||||||
|
{if_version_below, "23", {d, 'USE_OLD_PG2'}},
|
||||||
{if_var_true, roster_gateway_workaround, {d, 'ROSTER_GATWAY_WORKAROUND'}},
|
{if_var_true, roster_gateway_workaround, {d, 'ROSTER_GATWAY_WORKAROUND'}},
|
||||||
{if_var_match, db_type, mssql, {d, 'mssql'}},
|
{if_var_match, db_type, mssql, {d, 'mssql'}},
|
||||||
{if_var_true, elixir, {d, 'ELIXIR_ENABLED'}},
|
{if_var_true, elixir, {d, 'ELIXIR_ENABLED'}},
|
||||||
|
@ -102,8 +102,8 @@ transform(_Host, certfiles, CertFiles1, Acc) ->
|
|||||||
transform(_Host, acme, ACME, Acc) ->
|
transform(_Host, acme, ACME, Acc) ->
|
||||||
ACME1 = lists:map(
|
ACME1 = lists:map(
|
||||||
fun({ca_url, URL} = Opt) ->
|
fun({ca_url, URL} = Opt) ->
|
||||||
case http_uri:parse(binary_to_list(URL)) of
|
case misc:uri_parse(URL) of
|
||||||
{ok, {_, _, "acme-v01.api.letsencrypt.org", _, _, _}} ->
|
{ok, _, "acme-v01.api.letsencrypt.org", _, _} ->
|
||||||
NewURL = ejabberd_acme:default_directory_url(),
|
NewURL = ejabberd_acme:default_directory_url(),
|
||||||
?WARNING_MSG("ACME directory URL ~ts defined in "
|
?WARNING_MSG("ACME directory URL ~ts defined in "
|
||||||
"option acme->ca_url is deprecated "
|
"option acme->ca_url is deprecated "
|
||||||
|
@ -33,6 +33,24 @@
|
|||||||
|
|
||||||
-include("logger.hrl").
|
-include("logger.hrl").
|
||||||
|
|
||||||
|
-ifdef(USE_OLD_PG2).
|
||||||
|
pg_create(PoolName) -> pg2:create(PoolName).
|
||||||
|
pg_join(PoolName, Pid) -> pg2:join(PoolName, Pid).
|
||||||
|
pg_get_closest_pid(Name) -> pg2:get_closest_pid(Name).
|
||||||
|
-else.
|
||||||
|
pg_create(_) -> pg:start_link().
|
||||||
|
pg_join(PoolName, Pid) -> pg:join(PoolName, Pid).
|
||||||
|
pg_get_closest_pid(Group) ->
|
||||||
|
case pg:get_local_members(Group) of
|
||||||
|
[] ->
|
||||||
|
case pg:get_members(Group) of
|
||||||
|
[] -> {error, {no_process, Group}};
|
||||||
|
[Pid | _] -> Pid
|
||||||
|
end;
|
||||||
|
[Pid | _] -> Pid
|
||||||
|
end.
|
||||||
|
-endif.
|
||||||
|
|
||||||
%%====================================================================
|
%%====================================================================
|
||||||
%% API
|
%% API
|
||||||
%%====================================================================
|
%%====================================================================
|
||||||
@ -48,14 +66,14 @@ modify_passwd(PoolName, DN, Passwd) ->
|
|||||||
start_link(Name, Hosts, Backups, Port, Rootdn, Passwd,
|
start_link(Name, Hosts, Backups, Port, Rootdn, Passwd,
|
||||||
Opts) ->
|
Opts) ->
|
||||||
PoolName = make_id(Name),
|
PoolName = make_id(Name),
|
||||||
pg2:create(PoolName),
|
pg_create(PoolName),
|
||||||
lists:foreach(fun (Host) ->
|
lists:foreach(fun (Host) ->
|
||||||
ID = list_to_binary(erlang:ref_to_list(make_ref())),
|
ID = list_to_binary(erlang:ref_to_list(make_ref())),
|
||||||
case catch eldap:start_link(ID, [Host | Backups],
|
case catch eldap:start_link(ID, [Host | Backups],
|
||||||
Port, Rootdn, Passwd,
|
Port, Rootdn, Passwd,
|
||||||
Opts)
|
Opts)
|
||||||
of
|
of
|
||||||
{ok, Pid} -> pg2:join(PoolName, Pid);
|
{ok, Pid} -> pg_join(PoolName, Pid);
|
||||||
Err ->
|
Err ->
|
||||||
?ERROR_MSG("Err = ~p", [Err]),
|
?ERROR_MSG("Err = ~p", [Err]),
|
||||||
error
|
error
|
||||||
@ -67,7 +85,7 @@ start_link(Name, Hosts, Backups, Port, Rootdn, Passwd,
|
|||||||
%% Internal functions
|
%% Internal functions
|
||||||
%%====================================================================
|
%%====================================================================
|
||||||
do_request(Name, {F, Args}) ->
|
do_request(Name, {F, Args}) ->
|
||||||
case pg2:get_closest_pid(make_id(Name)) of
|
case pg_get_closest_pid(make_id(Name)) of
|
||||||
Pid when is_pid(Pid) ->
|
Pid when is_pid(Pid) ->
|
||||||
case catch apply(eldap, F, [Pid | Args]) of
|
case catch apply(eldap, F, [Pid | Args]) of
|
||||||
{'EXIT', {timeout, _}} ->
|
{'EXIT', {timeout, _}} ->
|
||||||
|
23
src/misc.erl
23
src/misc.erl
@ -41,6 +41,7 @@
|
|||||||
intersection/2, format_val/1, cancel_timer/1, unique_timestamp/0,
|
intersection/2, format_val/1, cancel_timer/1, unique_timestamp/0,
|
||||||
is_mucsub_message/1, best_match/2, pmap/2, peach/2, format_exception/4,
|
is_mucsub_message/1, best_match/2, pmap/2, peach/2, format_exception/4,
|
||||||
get_my_ipv4_address/0, get_my_ipv6_address/0, parse_ip_mask/1,
|
get_my_ipv4_address/0, get_my_ipv6_address/0, parse_ip_mask/1,
|
||||||
|
crypto_hmac/3, crypto_hmac/4, uri_parse/1,
|
||||||
match_ip_mask/3, format_hosts_list/1, format_cycle/1, delete_dir/1]).
|
match_ip_mask/3, format_hosts_list/1, format_cycle/1, delete_dir/1]).
|
||||||
|
|
||||||
%% Deprecated functions
|
%% Deprecated functions
|
||||||
@ -54,6 +55,26 @@
|
|||||||
|
|
||||||
-type distance_cache() :: #{{string(), string()} => non_neg_integer()}.
|
-type distance_cache() :: #{{string(), string()} => non_neg_integer()}.
|
||||||
|
|
||||||
|
-ifdef(USE_OLD_HTTP_URI).
|
||||||
|
uri_parse(URL) when is_binary(URL) ->
|
||||||
|
uri_parse(binary_to_list(URL));
|
||||||
|
uri_parse(URL) ->
|
||||||
|
{ok, {Scheme, _UserInfo, Host, Port, Path, _Query}} = http_uri:parse(URL),
|
||||||
|
{ok, Scheme, Host, Port, Path}.
|
||||||
|
-else.
|
||||||
|
uri_parse(URL) ->
|
||||||
|
#{scheme:=Scheme,host:=Host,port:=Port,path:=Path} = uri_string:parse(URL),
|
||||||
|
{ok, Scheme, Host, Port, Path}.
|
||||||
|
-endif.
|
||||||
|
|
||||||
|
-ifdef(USE_OLD_CRYPTO_HMAC).
|
||||||
|
crypto_hmac(Type, Key, Data) -> crypto:hmac(Type, Key, Data).
|
||||||
|
crypto_hmac(Type, Key, Data, MacL) -> crypto:hmac(Type, Key, Data, MacL).
|
||||||
|
-else.
|
||||||
|
crypto_hmac(Type, Key, Data) -> crypto:mac(hmac, Type, Key, Data).
|
||||||
|
crypto_hmac(Type, Key, Data, MacL) -> crypto:macN(hmac, Type, Key, Data, MacL).
|
||||||
|
-endif.
|
||||||
|
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
@ -328,7 +349,7 @@ try_url(URL0) ->
|
|||||||
V when is_binary(V) -> binary_to_list(V);
|
V when is_binary(V) -> binary_to_list(V);
|
||||||
_ -> URL0
|
_ -> URL0
|
||||||
end,
|
end,
|
||||||
case http_uri:parse(URL) of
|
case uri_parse(URL) of
|
||||||
{ok, {Scheme, _, _, _, _, _}} when Scheme /= http, Scheme /= https ->
|
{ok, {Scheme, _, _, _, _, _}} when Scheme /= http, Scheme /= https ->
|
||||||
?ERROR_MSG("Unsupported URI scheme: ~ts", [URL]),
|
?ERROR_MSG("Unsupported URI scheme: ~ts", [URL]),
|
||||||
erlang:error(badarg);
|
erlang:error(badarg);
|
||||||
|
@ -711,8 +711,8 @@ get_proc_name(ServerHost, ModuleName) ->
|
|||||||
-spec get_proc_name(binary(), atom(), binary()) -> atom().
|
-spec get_proc_name(binary(), atom(), binary()) -> atom().
|
||||||
get_proc_name(ServerHost, ModuleName, PutURL) ->
|
get_proc_name(ServerHost, ModuleName, PutURL) ->
|
||||||
%% Once we depend on OTP >= 20.0, we can use binaries with http_uri.
|
%% Once we depend on OTP >= 20.0, we can use binaries with http_uri.
|
||||||
{ok, {_Scheme, _UserInfo, Host0, _Port, Path0, _Query}} =
|
{ok, _Scheme, Host0, _Port, Path0} =
|
||||||
http_uri:parse(binary_to_list(expand_host(PutURL, ServerHost))),
|
misc:uri_parse(expand_host(PutURL, ServerHost)),
|
||||||
Host = jid:nameprep(iolist_to_binary(Host0)),
|
Host = jid:nameprep(iolist_to_binary(Host0)),
|
||||||
Path = str:strip(iolist_to_binary(Path0), right, $/),
|
Path = str:strip(iolist_to_binary(Path0), right, $/),
|
||||||
ProcPrefix = <<Host/binary, Path/binary>>,
|
ProcPrefix = <<Host/binary, Path/binary>>,
|
||||||
@ -934,7 +934,7 @@ make_query_string(Slot, Size, #state{external_secret = Key}) when Key /= <<>> ->
|
|||||||
UrlPath = str:join(Slot, <<$/>>),
|
UrlPath = str:join(Slot, <<$/>>),
|
||||||
SizeStr = integer_to_binary(Size),
|
SizeStr = integer_to_binary(Size),
|
||||||
Data = <<UrlPath/binary, " ", SizeStr/binary>>,
|
Data = <<UrlPath/binary, " ", SizeStr/binary>>,
|
||||||
HMAC = str:to_hexlist(crypto:hmac(sha256, Key, Data)),
|
HMAC = str:to_hexlist(misc:crypto_hmac(sha256, Key, Data)),
|
||||||
<<"?v=", HMAC/binary>>;
|
<<"?v=", HMAC/binary>>;
|
||||||
make_query_string(_Slot, _Size, _State) ->
|
make_query_string(_Slot, _Size, _State) ->
|
||||||
<<>>.
|
<<>>.
|
||||||
|
@ -642,7 +642,7 @@ notify_participant_left(Mod, LServer, To, ID) ->
|
|||||||
-spec make_id(jid(), binary()) -> binary().
|
-spec make_id(jid(), binary()) -> binary().
|
||||||
make_id(JID, Key) ->
|
make_id(JID, Key) ->
|
||||||
Data = jid:encode(jid:tolower(jid:remove_resource(JID))),
|
Data = jid:encode(jid:tolower(jid:remove_resource(JID))),
|
||||||
xmpp_util:hex(crypto:hmac(sha256, Data, Key, 10)).
|
xmpp_util:hex(misc:crypto_hmac(sha256, Data, Key, 10)).
|
||||||
|
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% Error generators
|
%%% Error generators
|
||||||
|
@ -305,7 +305,7 @@ s2s_out_tls_verify(_, #{server_host := ServerHost, remote_server := RServer}) ->
|
|||||||
make_key(From, To, StreamID) ->
|
make_key(From, To, StreamID) ->
|
||||||
Secret = ejabberd_config:get_shared_key(),
|
Secret = ejabberd_config:get_shared_key(),
|
||||||
str:to_hexlist(
|
str:to_hexlist(
|
||||||
crypto:hmac(sha256, str:to_hexlist(crypto:hash(sha256, Secret)),
|
misc:crypto_hmac(sha256, str:to_hexlist(crypto:hash(sha256, Secret)),
|
||||||
[To, " ", From, " ", StreamID])).
|
[To, " ", From, " ", StreamID])).
|
||||||
|
|
||||||
-spec send_verify_request(ejabberd_s2s_out:state()) -> ejabberd_s2s_out:state().
|
-spec send_verify_request(ejabberd_s2s_out:state()) -> ejabberd_s2s_out:state().
|
||||||
|
@ -357,8 +357,8 @@ mod_opt_type(via) ->
|
|||||||
(econf:and_then(
|
(econf:and_then(
|
||||||
econf:url([tls, tcp, udp]),
|
econf:url([tls, tcp, udp]),
|
||||||
fun(URI) ->
|
fun(URI) ->
|
||||||
{ok, {Type, _, Host, Port, _, _}} =
|
{ok, Type, Host, Port, _} =
|
||||||
http_uri:parse(binary_to_list(URI)),
|
misc:uri_parse(URI),
|
||||||
{Type, {unicode:characters_to_binary(Host), Port}}
|
{Type, {unicode:characters_to_binary(Host), Port}}
|
||||||
end))(U)
|
end))(U)
|
||||||
end, [unique]).
|
end, [unique]).
|
||||||
|
@ -555,7 +555,7 @@ make_username(ExpireAt, Hash) ->
|
|||||||
|
|
||||||
-spec make_password(binary(), binary()) -> binary().
|
-spec make_password(binary(), binary()) -> binary().
|
||||||
make_password(Username, Secret) ->
|
make_password(Username, Secret) ->
|
||||||
base64:encode(crypto:hmac(sha, Secret, Username)).
|
base64:encode(misc:crypto_hmac(sha, Secret, Username)).
|
||||||
|
|
||||||
-spec get_password(binary(), binary()) -> binary().
|
-spec get_password(binary(), binary()) -> binary().
|
||||||
get_password(Username, HostHash) ->
|
get_password(Username, HostHash) ->
|
||||||
|
Loading…
Reference in New Issue
Block a user