aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-01-23 13:51:05 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-01-23 13:51:05 +0300
commit435e5e62634b542c2a42673bea7f81e9cc2a5c04 (patch)
treeb927d972c426ca5ea4ce20343e4eb981848934e8
parentMake a message is not bounced if it's archived (diff)
Make test suite working again
-rw-r--r--src/ejabberd_auth_anonymous.erl2
-rw-r--r--src/ejabberd_c2s.erl10
-rw-r--r--src/ejabberd_local.erl12
-rw-r--r--src/ejabberd_router_mnesia.erl2
-rw-r--r--src/ejabberd_s2s.erl3
-rw-r--r--src/ejabberd_service.erl25
-rw-r--r--src/mod_blocking.erl6
-rw-r--r--src/mod_disco.erl9
-rw-r--r--src/mod_muc.erl6
-rw-r--r--src/mod_offline.erl2
-rw-r--r--src/mod_register.erl9
-rw-r--r--src/mod_roster.erl5
-rw-r--r--src/mod_s2s_dialback.erl11
-rw-r--r--src/mod_shared_roster.erl9
-rw-r--r--src/mod_shared_roster_ldap.erl9
-rw-r--r--src/xmpp_stream_in.erl4
-rw-r--r--test/ejabberd_SUITE.erl73
-rw-r--r--test/ejabberd_SUITE_data/ejabberd.yml15
-rw-r--r--test/suite.erl14
19 files changed, 142 insertions, 84 deletions
diff --git a/src/ejabberd_auth_anonymous.erl b/src/ejabberd_auth_anonymous.erl
index 59d4c99e7..51eab74b7 100644
--- a/src/ejabberd_auth_anonymous.erl
+++ b/src/ejabberd_auth_anonymous.erl
@@ -122,7 +122,7 @@ register_connection(_SID,
case proplists:get_value(auth_module, Info) of
?MODULE ->
ejabberd_hooks:run(register_user, LServer, [LUser, LServer]);
- false ->
+ _ ->
ok
end.
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 6350e41fa..fd2655632 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -368,11 +368,15 @@ bind(R, #{user := U, server := S, access := Access, lang := Lang,
allow ->
State1 = open_session(State#{resource => Resource,
sid => ejabberd_sm:make_sid()}),
- State2 = ejabberd_hooks:run_fold(
- c2s_session_opened, LServer, State1, []),
+ LBJID = jid:remove_resource(jid:tolower(JID)),
+ PresF = ?SETS:add_element(LBJID, maps:get(pres_f, State1)),
+ PresT = ?SETS:add_element(LBJID, maps:get(pres_t, State1)),
+ State2 = State1#{pres_f => PresF, pres_t => PresT},
+ State3 = ejabberd_hooks:run_fold(
+ c2s_session_opened, LServer, State2, []),
?INFO_MSG("(~s) Opened c2s session for ~s",
[SockMod:pp(Socket), jid:to_string(JID)]),
- {ok, State2};
+ {ok, State3};
deny ->
ejabberd_hooks:run(forbidden_session_hook, LServer, [JID]),
?INFO_MSG("(~s) Forbidden c2s session for ~s",
diff --git a/src/ejabberd_local.erl b/src/ejabberd_local.erl
index b5e1d8abc..f1317f187 100644
--- a/src/ejabberd_local.erl
+++ b/src/ejabberd_local.erl
@@ -33,7 +33,7 @@
-export([start/0, start_link/0]).
-export([route/3, route_iq/4, route_iq/5, process_iq/3,
- process_iq_reply/3, register_iq_handler/4,
+ process_iq_reply/3, register_iq_handler/4, get_features/1,
register_iq_handler/5, register_iq_response_handler/4,
register_iq_response_handler/5, unregister_iq_handler/2,
unregister_iq_response_handler/2, bounce_resource_packet/3]).
@@ -44,7 +44,7 @@
-include("ejabberd.hrl").
-include("logger.hrl").
-
+-include_lib("stdlib/include/ms_transform.hrl").
-include("xmpp.hrl").
-record(state, {}).
@@ -193,6 +193,14 @@ bounce_resource_packet(From, To, Packet) ->
ejabberd_router:route_error(To, From, Packet, Err),
stop.
+-spec get_features(binary()) -> [binary()].
+get_features(Host) ->
+ ets:select(
+ ?IQTABLE,
+ ets:fun2ms(fun({{XMLNS, H}, _, _, _}) when H == Host ->
+ XMLNS
+ end)).
+
%%====================================================================
%% gen_server callbacks
%%====================================================================
diff --git a/src/ejabberd_router_mnesia.erl b/src/ejabberd_router_mnesia.erl
index b3eb222ae..e147fffdf 100644
--- a/src/ejabberd_router_mnesia.erl
+++ b/src/ejabberd_router_mnesia.erl
@@ -176,6 +176,8 @@ handle_info({mnesia_table_event,
{write, #route{pid = Pid}, _ActivityId}}, State) ->
erlang:monitor(process, Pid),
{noreply, State};
+handle_info({mnesia_table_event, _}, State) ->
+ {noreply, State};
handle_info({'DOWN', _Ref, _Type, Pid, _Info}, State) ->
F = fun () ->
Es = mnesia:select(route,
diff --git a/src/ejabberd_s2s.erl b/src/ejabberd_s2s.erl
index 86cf1a1f5..946ac60c8 100644
--- a/src/ejabberd_s2s.erl
+++ b/src/ejabberd_s2s.erl
@@ -698,6 +698,7 @@ opt_type(domain_certfile) -> fun iolist_to_binary/1;
opt_type(s2s_certfile) -> fun iolist_to_binary/1;
opt_type(s2s_ciphers) -> fun iolist_to_binary/1;
opt_type(s2s_dhfile) -> fun iolist_to_binary/1;
+opt_type(s2s_cafile) -> fun iolist_to_binary/1;
opt_type(s2s_protocol_options) ->
fun (Options) -> str:join(Options, <<"|">>) end;
opt_type(s2s_tls_compression) ->
@@ -717,5 +718,5 @@ opt_type(s2s_timeout) ->
end;
opt_type(_) ->
[route_subdomains, s2s_access, s2s_certfile,
- s2s_ciphers, s2s_dhfile, s2s_protocol_options,
+ s2s_ciphers, s2s_dhfile, s2s_cafile, s2s_protocol_options,
s2s_tls_compression, s2s_use_starttls, s2s_timeout].
diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl
index dd949f2f9..d4360b34c 100644
--- a/src/ejabberd_service.erl
+++ b/src/ejabberd_service.erl
@@ -93,6 +93,7 @@ init([State, Opts]) ->
lang => ?MYLANG,
server => ?MYNAME,
host_opts => HostOpts,
+ stream_version => undefined,
check_from => CheckFrom},
ejabberd_hooks:run_fold(component_init, {ok, State1}, [Opts]).
@@ -128,10 +129,10 @@ get_password_fun(#{remote_server := RemoteServer,
{ok, Password} ->
{Password, undefined};
error ->
- ?ERROR_MSG("(~s) Domain ~s is unconfigured for "
- "external component from ~s",
- [SockMod:pp(Socket), RemoteServer,
- ejabberd_config:may_hide_data(jlib:ip_to_list(IP))]),
+ ?INFO_MSG("(~s) Domain ~s is unconfigured for "
+ "external component from ~s",
+ [SockMod:pp(Socket), RemoteServer,
+ ejabberd_config:may_hide_data(jlib:ip_to_list(IP))]),
{false, undefined}
end
end.
@@ -155,14 +156,14 @@ handle_auth_failure(_, Mech, Reason,
#{remote_server := RemoteServer,
sockmod := SockMod,
socket := Socket, ip := IP} = State) ->
- ?ERROR_MSG("(~s) Failed external component ~s authentication "
- "for ~s from ~s: ~s",
- [SockMod:pp(Socket), Mech, RemoteServer,
- ejabberd_config:may_hide_data(jlib:ip_to_list(IP)),
- Reason]),
+ ?INFO_MSG("(~s) Failed external component ~s authentication "
+ "for ~s from ~s: ~s",
+ [SockMod:pp(Socket), Mech, RemoteServer,
+ ejabberd_config:may_hide_data(jlib:ip_to_list(IP)),
+ Reason]),
State.
-handle_authenticated_packet(Pkt, #{lang := Lang} = State) ->
+handle_authenticated_packet(Pkt, #{lang := Lang} = State) when ?is_stanza(Pkt) ->
From = xmpp:get_from(Pkt),
case check_from(From, State) of
true ->
@@ -173,7 +174,9 @@ handle_authenticated_packet(Pkt, #{lang := Lang} = State) ->
Txt = <<"Improper domain part of 'from' attribute">>,
Err = xmpp:serr_invalid_from(Txt, Lang),
xmpp_stream_in:send(State, Err)
- end.
+ end;
+handle_authenticated_packet(_Pkt, State) ->
+ State.
handle_info({route, From, To, Packet}, #{access := Access} = State) ->
case acl:match_rule(global, Access, From) of
diff --git a/src/mod_blocking.erl b/src/mod_blocking.erl
index 3f9e90256..94db96131 100644
--- a/src/mod_blocking.erl
+++ b/src/mod_blocking.erl
@@ -160,7 +160,7 @@ process_block(#iq{from = #jid{luser = LUser, lserver = LServer},
broadcast_list_update(LUser, LServer, UserList, Default),
broadcast_event(LUser, LServer,
#block{items = [jid:make(J) || J <- JIDs]}),
- xmpp:make_iq_result(IQ);
+ xmpp:make_iq_result(xmpp:put_meta(IQ, privacy_list, UserList));
_Err ->
?ERROR_MSG("Error processing ~p: ~p", [{LUser, LServer, JIDs}, _Err]),
Err = xmpp:err_internal_server_error(<<"Database failure">>, Lang),
@@ -183,7 +183,7 @@ process_unblock_all(#iq{from = #jid{luser = LUser, lserver = LServer},
UserList = make_userlist(Default, List),
broadcast_list_update(LUser, LServer, UserList, Default),
broadcast_event(LUser, LServer, #unblock{}),
- xmpp:make_iq_result(IQ);
+ xmpp:make_iq_result(xmpp:put_meta(IQ, privacy_list, UserList));
_Err ->
?ERROR_MSG("Error processing ~p: ~p", [{LUser, LServer}, _Err]),
Err = xmpp:err_internal_server_error(<<"Database failure">>, Lang),
@@ -210,7 +210,7 @@ process_unblock(#iq{from = #jid{luser = LUser, lserver = LServer},
broadcast_list_update(LUser, LServer, UserList, Default),
broadcast_event(LUser, LServer,
#unblock{items = [jid:make(J) || J <- JIDs]}),
- xmpp:make_iq_result(IQ);
+ xmpp:make_iq_result(xmpp:put_meta(IQ, privacy_list, UserList));
_Err ->
?ERROR_MSG("Error processing ~p: ~p", [{LUser, LServer, JIDs}, _Err]),
Err = xmpp:err_internal_server_error(<<"Database failure">>, Lang),
diff --git a/src/mod_disco.erl b/src/mod_disco.erl
index 73f691dc6..2de8679ee 100644
--- a/src/mod_disco.erl
+++ b/src/mod_disco.erl
@@ -175,13 +175,16 @@ get_local_identity(Acc, _From, _To, _Node, _Lang) ->
get_local_features({error, _Error} = Acc, _From, _To,
_Node, _Lang) ->
Acc;
-get_local_features(Acc, _From, _To, <<"">>, _Lang) ->
+get_local_features(Acc, _From, To, <<"">>, _Lang) ->
Feats = case Acc of
{result, Features} -> Features;
empty -> []
end,
- {result, [<<"iq">>, <<"presence">>,
- ?NS_DISCO_INFO, ?NS_DISCO_ITEMS |Feats]};
+ {result, lists:usort(
+ lists:flatten(
+ [<<"iq">>, <<"presence">>,
+ ?NS_DISCO_INFO, ?NS_DISCO_ITEMS, Feats,
+ ejabberd_local:get_features(To#jid.lserver)]))};
get_local_features(Acc, _From, _To, _Node, Lang) ->
case Acc of
{result, _Features} -> Acc;
diff --git a/src/mod_muc.erl b/src/mod_muc.erl
index a91fcc810..1fe68ebd8 100644
--- a/src/mod_muc.erl
+++ b/src/mod_muc.erl
@@ -135,12 +135,12 @@ shutdown_rooms(Host) ->
MyHost = gen_mod:get_module_opt_host(Host, mod_muc,
<<"conference.@HOST@">>),
Rooms = RMod:get_online_rooms(MyHost, undefined),
- lists:filter(
+ lists:flatmap(
fun({_, _, Pid}) when node(Pid) == node() ->
Pid ! shutdown,
- true;
+ [Pid];
(_) ->
- false
+ []
end, Rooms).
%% This function is called by a room in three situations:
diff --git a/src/mod_offline.erl b/src/mod_offline.erl
index 12c828743..43f13a629 100644
--- a/src/mod_offline.erl
+++ b/src/mod_offline.erl
@@ -561,6 +561,8 @@ resend_offline_messages(User, Server) ->
_ -> ok
end.
+c2s_self_presence({_Pres, #{resend_offline := false}} = Acc) ->
+ Acc;
c2s_self_presence({#presence{type = available} = NewPres, State} = Acc) ->
NewPrio = get_priority_from_presence(NewPres),
LastPrio = try maps:get(pres_last, State) of
diff --git a/src/mod_register.erl b/src/mod_register.erl
index 7bb60753b..875640e9f 100644
--- a/src/mod_register.erl
+++ b/src/mod_register.erl
@@ -79,7 +79,7 @@ stream_feature_register(Acc, Host) ->
AF = gen_mod:get_module_opt(Host, ?MODULE, access_from,
fun(A) -> A end,
all),
- case (AF /= none) and lists:keymember(sasl_mechanisms, 1, Acc) of
+ case (AF /= none) of
true ->
[#feature_register{}|Acc];
false ->
@@ -90,10 +90,11 @@ c2s_unauthenticated_packet(#{ip := IP, server := Server} = State,
#iq{type = T, sub_els = [_]} = IQ)
when T == set; T == get ->
case xmpp:get_subtag(IQ, #register{}) of
- #register{} ->
+ #register{} = Register ->
{Address, _} = IP,
- IQ1 = xmpp:set_from_to(IQ, jid:make(<<>>), jid:make(Server)),
- ResIQ = process_iq(IQ1, Address),
+ IQ1 = xmpp:set_els(IQ, [Register]),
+ IQ2 = xmpp:set_from_to(IQ1, jid:make(<<>>), jid:make(Server)),
+ ResIQ = process_iq(IQ2, Address),
ResIQ1 = xmpp:set_from_to(ResIQ, jid:make(Server), undefined),
{stop, ejabberd_c2s:send(State, ResIQ1)};
false ->
diff --git a/src/mod_roster.erl b/src/mod_roster.erl
index 44649631a..7798850db 100644
--- a/src/mod_roster.erl
+++ b/src/mod_roster.erl
@@ -521,13 +521,12 @@ roster_change(#{user := U, server := S, resource := R,
end.
-spec c2s_session_opened(ejabberd_c2s:state()) -> ejabberd_c2s:state().
-c2s_session_opened(#{jid := #jid{luser = LUser, lserver = LServer} = JID,
+c2s_session_opened(#{jid := #jid{luser = LUser, lserver = LServer},
pres_f := PresF, pres_t := PresT} = State) ->
Mod = gen_mod:db_mod(LServer, ?MODULE),
Items = Mod:get_only_items(LUser, LServer),
{F, T} = fill_subscription_lists(Items, PresF, PresT),
- LJID = jid:tolower(jid:remove_resource(JID)),
- State#{pres_f => ?SETS:add(LJID, F), pres_t => ?SETS:add(LJID, T)}.
+ State#{pres_f => F, pres_t => T}.
fill_subscription_lists([I | Is], F, T) ->
J = element(3, I#roster.usj),
diff --git a/src/mod_s2s_dialback.erl b/src/mod_s2s_dialback.erl
index d2dd8c31e..7c7a0e8d5 100644
--- a/src/mod_s2s_dialback.erl
+++ b/src/mod_s2s_dialback.erl
@@ -175,11 +175,12 @@ s2s_in_packet(#{stream_id := StreamID} = State,
{ok, Pid} = ejabberd_s2s_out:start(
To, From, [{db_verify, {StreamID, Key, self()}}]),
ejabberd_s2s_out:connect(Pid),
- State
+ {stop, State}
catch _:{badmatch, {error, Reason}} ->
- send_db_result(State,
- #db_verify{from = From, to = To, type = error,
- sub_els = [mk_error(Reason)]})
+ {stop,
+ send_db_result(State,
+ #db_verify{from = From, to = To, type = error,
+ sub_els = [mk_error(Reason)]})}
end;
s2s_in_packet(State, #db_verify{to = To, from = From, key = Key,
id = StreamID, type = undefined}) ->
@@ -189,7 +190,7 @@ s2s_in_packet(State, #db_verify{to = To, from = From, key = Key,
_ -> invalid
end,
Response = #db_verify{from = To, to = From, id = StreamID, type = Type},
- ejabberd_s2s_in:send(State, Response);
+ {stop, ejabberd_s2s_in:send(State, Response)};
s2s_in_packet(State, Pkt) when is_record(Pkt, db_result);
is_record(Pkt, db_verify) ->
?WARNING_MSG("Got stray dialback packet:~n~s", [xmpp:pp(Pkt)]),
diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl
index 077f9bfab..8d8d1b8b6 100644
--- a/src/mod_shared_roster.erl
+++ b/src/mod_shared_roster.erl
@@ -292,7 +292,7 @@ set_item(User, Server, Resource, Item) ->
jid:make(Server),
ResIQ).
-c2s_session_opened(#{jid := #jid{luser = LUser, lserver = LServer} = JID,
+c2s_session_opened(#{jid := #jid{luser = LUser, lserver = LServer},
pres_f := PresF, pres_t := PresT} = State) ->
US = {LUser, LServer},
DisplayedGroups = get_user_displayed_groups(US),
@@ -300,11 +300,12 @@ c2s_session_opened(#{jid := #jid{luser = LUser, lserver = LServer} = JID,
get_group_users(LServer, Group)
end,
DisplayedGroups),
- BareLJID = jid:tolower(jid:remove_resource(JID)),
PresBoth = lists:foldl(
- fun({U, S}, Acc) ->
+ fun({U, S, _}, Acc) ->
+ ?SETS:add_element({U, S, <<"">>}, Acc);
+ ({U, S}, Acc) ->
?SETS:add_element({U, S, <<"">>}, Acc)
- end, ?SETS:new(), [BareLJID|SRUsers]),
+ end, ?SETS:new(), SRUsers),
State#{pres_f => ?SETS:union(PresBoth, PresF),
pres_t => ?SETS:union(PresBoth, PresT)}.
diff --git a/src/mod_shared_roster_ldap.erl b/src/mod_shared_roster_ldap.erl
index e79bcc5c0..49a61a374 100644
--- a/src/mod_shared_roster_ldap.erl
+++ b/src/mod_shared_roster_ldap.erl
@@ -161,7 +161,7 @@ process_item(RosterItem, _Host) ->
_ -> RosterItem#roster{subscription = both, ask = none}
end.
-c2s_session_opened(#{jid := #jid{luser = LUser, lserver = LServer} = JID,
+c2s_session_opened(#{jid := #jid{luser = LUser, lserver = LServer},
pres_f := PresF, pres_t := PresT} = State) ->
US = {LUser, LServer},
DisplayedGroups = get_user_displayed_groups(US),
@@ -169,11 +169,12 @@ c2s_session_opened(#{jid := #jid{luser = LUser, lserver = LServer} = JID,
get_group_users(LServer, Group)
end,
DisplayedGroups),
- BareLJID = jid:tolower(jid:remove_resource(JID)),
PresBoth = lists:foldl(
- fun({U, S}, Acc) ->
+ fun({U, S, _}, Acc) ->
+ ?SETS:add_element({U, S, <<"">>}, Acc);
+ ({U, S}, Acc) ->
?SETS:add_element({U, S, <<"">>}, Acc)
- end, ?SETS:new(), [BareLJID|SRUsers]),
+ end, ?SETS:new(), SRUsers),
State#{pres_f => ?SETS:union(PresBoth, PresF),
pres_t => ?SETS:union(PresBoth, PresT)}.
diff --git a/src/xmpp_stream_in.erl b/src/xmpp_stream_in.erl
index cb3dbcb66..b30439723 100644
--- a/src/xmpp_stream_in.erl
+++ b/src/xmpp_stream_in.erl
@@ -559,8 +559,8 @@ process_element(Pkt, #{stream_state := StateName, lang := Lang} = State) ->
process_unauthenticated_packet(Pkt, State);
_ when StateName == wait_for_starttls ->
Txt = <<"Use of STARTTLS required">>,
- Err = xmpp:err_policy_violation(Txt, Lang),
- send_error(State, Pkt, Err);
+ Err = xmpp:serr_policy_violation(Txt, Lang),
+ send_pkt(State, Err);
_ when StateName == wait_for_bind ->
process_bind(Pkt, State);
_ when StateName == established ->
diff --git a/test/ejabberd_SUITE.erl b/test/ejabberd_SUITE.erl
index 76ffa8f2b..cd68a21b8 100644
--- a/test/ejabberd_SUITE.erl
+++ b/test/ejabberd_SUITE.erl
@@ -285,6 +285,8 @@ init_per_testcase(TestCase, OrigConfig) ->
case Test of
"test_connect" ++ _ ->
Config;
+ "test_legacy_auth_feature" ->
+ connect(Config);
"test_legacy_auth" ++ _ ->
init_stream(set_opt(stream_version, undefined, Config));
"test_auth" ++ _ ->
@@ -326,7 +328,8 @@ end_per_testcase(_TestCase, _Config) ->
legacy_auth_tests() ->
{legacy_auth, [parallel],
- [test_legacy_auth,
+ [test_legacy_auth_feature,
+ test_legacy_auth,
test_legacy_auth_digest,
test_legacy_auth_no_resource,
test_legacy_auth_bad_jid,
@@ -344,7 +347,8 @@ no_db_tests() ->
test_connect_missing_to,
test_connect,
unauthenticated_iq,
- unauthenticated_stanza,
+ unauthenticated_message,
+ unauthenticated_presence,
test_starttls,
test_zlib,
test_auth,
@@ -481,7 +485,8 @@ component_tests() ->
test_auth,
test_auth_fail]},
{component_tests, [sequence],
- [test_missing_address,
+ [test_missing_from,
+ test_missing_to,
test_invalid_from,
test_component_send,
bad_nonza,
@@ -497,11 +502,11 @@ s2s_tests() ->
test_connect,
test_connect_s2s_starttls_required,
test_starttls,
- test_connect_missing_from,
test_connect_s2s_unauthenticated_iq,
test_auth_starttls]},
{s2s_tests, [sequence],
- [test_missing_address,
+ [test_missing_from,
+ test_missing_to,
test_invalid_from,
bad_nonza,
codec_failure]}].
@@ -598,20 +603,12 @@ test_connect_missing_to(Config) ->
?recv1({xmlstreamend, <<"stream:stream">>}),
close_socket(Config0).
-test_connect_missing_from(Config) ->
- Config1 = starttls(connect(Config)),
- Config2 = set_opt(stream_from, <<"">>, Config1),
- Config3 = init_stream(Config2),
- ?recv1(#stream_error{reason = 'policy-violation'}),
- ?recv1({xmlstreamend, <<"stream:stream">>}),
- close_socket(Config3).
-
test_connect(Config) ->
disconnect(connect(Config)).
test_connect_s2s_starttls_required(Config) ->
Config1 = connect(Config),
- send(Config1, #caps{}),
+ send(Config1, #presence{}),
?recv1(#stream_error{reason = 'policy-violation'}),
?recv1({xmlstreamend, <<"stream:stream">>}),
close_socket(Config1).
@@ -681,18 +678,23 @@ try_unregister(Config) ->
?recv1(#stream_error{reason = conflict}),
Config.
-unauthenticated_stanza(Config) ->
- %% Unauthenticated stanza should be silently dropped.
- send(Config, #message{to = server_jid(Config)}),
- disconnect(Config).
+unauthenticated_presence(Config) ->
+ unauthenticated_packet(Config, #presence{}).
+
+unauthenticated_message(Config) ->
+ unauthenticated_packet(Config, #message{}).
unauthenticated_iq(Config) ->
+ IQ = #iq{type = get, sub_els = [#disco_info{}]},
+ unauthenticated_packet(Config, IQ).
+
+unauthenticated_packet(Config, Pkt) ->
From = my_jid(Config),
To = server_jid(Config),
- #iq{type = error} =
- send_recv(Config, #iq{type = get, from = From, to = To,
- sub_els = [#disco_info{}]}),
- disconnect(Config).
+ send(Config, xmpp:set_from_to(Pkt, From, To)),
+ #stream_error{reason = 'not-authorized'} = recv(Config),
+ {xmlstreamend, <<"stream:stream">>} = recv(Config),
+ close_socket(Config).
bad_nonza(Config) ->
%% Unsupported and invalid nonza should be silently dropped.
@@ -706,18 +708,27 @@ invalid_from(Config) ->
?recv1({xmlstreamend, <<"stream:stream">>}),
close_socket(Config).
-test_missing_address(Config) ->
+test_missing_from(Config) ->
Server = server_jid(Config),
- #iq{type = error} = send_recv(Config, #iq{type = get, from = Server}),
- #iq{type = error} = send_recv(Config, #iq{type = get, to = Server}),
- disconnect(Config).
+ send(Config, #message{to = Server}),
+ ?recv1(#stream_error{reason = 'improper-addressing'}),
+ ?recv1({xmlstreamend, <<"stream:stream">>}),
+ close_socket(Config).
+
+test_missing_to(Config) ->
+ Server = server_jid(Config),
+ send(Config, #message{from = Server}),
+ ?recv1(#stream_error{reason = 'improper-addressing'}),
+ ?recv1({xmlstreamend, <<"stream:stream">>}),
+ close_socket(Config).
test_invalid_from(Config) ->
From = jid:make(randoms:get_string()),
To = jid:make(randoms:get_string()),
- #iq{type = error} =
- send_recv(Config, #iq{type = get, from = From, to = To}),
- disconnect(Config).
+ send(Config, #message{from = From, to = To}),
+ ?recv1(#stream_error{reason = 'invalid-from'}),
+ ?recv1({xmlstreamend, <<"stream:stream">>}),
+ close_socket(Config).
test_component_send(Config) ->
To = jid:make(?COMMON_VHOST),
@@ -779,6 +790,10 @@ auth_plain(Config) ->
{skipped, 'PLAIN_not_available'}
end.
+test_legacy_auth_feature(Config) ->
+ true = ?config(legacy_auth, Config),
+ disconnect(Config).
+
test_legacy_auth(Config) ->
disconnect(auth_legacy(Config, _Digest = false)).
diff --git a/test/ejabberd_SUITE_data/ejabberd.yml b/test/ejabberd_SUITE_data/ejabberd.yml
index 9448df080..3e6053b9a 100644
--- a/test/ejabberd_SUITE_data/ejabberd.yml
+++ b/test/ejabberd_SUITE_data/ejabberd.yml
@@ -51,6 +51,8 @@ host_config:
mod_disco: []
mod_ping: []
mod_proxy65: []
+ mod_s2s_dialback: []
+ mod_legacy_auth: []
mod_register:
welcome_message:
subject: "Welcome!"
@@ -106,6 +108,8 @@ Welcome to this XMPP server."
mod_disco: []
mod_ping: []
mod_proxy65: []
+ mod_s2s_dialback: []
+ mod_legacy_auth: []
mod_register:
welcome_message:
subject: "Welcome!"
@@ -166,6 +170,8 @@ Welcome to this XMPP server."
mod_disco: []
mod_ping: []
mod_proxy65: []
+ mod_s2s_dialback: []
+ mod_legacy_auth: []
mod_register:
welcome_message:
subject: "Welcome!"
@@ -222,6 +228,8 @@ Welcome to this XMPP server."
mod_disco: []
mod_ping: []
mod_proxy65: []
+ mod_s2s_dialback: []
+ mod_legacy_auth: []
mod_register:
welcome_message:
subject: "Welcome!"
@@ -279,6 +287,8 @@ Welcome to this XMPP server."
mod_disco: []
mod_ping: []
mod_proxy65: []
+ mod_s2s_dialback: []
+ mod_legacy_auth: []
mod_register:
welcome_message:
subject: "Welcome!"
@@ -319,6 +329,8 @@ Welcome to this XMPP server."
mod_disco: []
mod_ping: []
mod_proxy65: []
+ mod_s2s_dialback: []
+ mod_legacy_auth: []
mod_register:
welcome_message:
subject: "Welcome!"
@@ -450,6 +462,9 @@ modules:
body: "Hi.
Welcome to this XMPP server."
mod_stats: []
+ mod_s2s_dialback: []
+ mod_legacy_auth: []
+ mod_sm: []
mod_time: []
mod_version: []
registration_timeout: infinity
diff --git a/test/suite.erl b/test/suite.erl
index 554b9b553..67dcd6c4d 100644
--- a/test/suite.erl
+++ b/test/suite.erl
@@ -235,6 +235,8 @@ process_stream_features(Config) ->
set_opt(register, true, Acc);
(#starttls{}, Acc) ->
set_opt(starttls, true, Acc);
+ (#legacy_auth_feature{}, Acc) ->
+ set_opt(legacy_auth, true, Acc);
(#compression{methods = Ms}, Acc) ->
set_opt(compression, Ms, Acc);
(_, Acc) ->
@@ -246,7 +248,7 @@ disconnect(Config) ->
ct:comment("Disconnecting"),
Socket = ?config(socket, Config),
try
- ok = send_text(Config, ?STREAM_TRAILER)
+ send_text(Config, ?STREAM_TRAILER)
catch exit:normal ->
ok
end,
@@ -274,17 +276,17 @@ starttls(Config, ShouldFail) ->
#starttls_failure{} ->
ct:fail(starttls_failed);
#starttls_proceed{} ->
- TLSSocket = ejabberd_socket:starttls(
- ?config(socket, Config),
- [{certfile, ?config(certfile, Config)},
- connect]),
+ {ok, TLSSocket} = ejabberd_socket:starttls(
+ ?config(socket, Config),
+ [{certfile, ?config(certfile, Config)},
+ connect]),
set_opt(socket, TLSSocket, Config)
end.
zlib(Config) ->
send(Config, #compress{methods = [<<"zlib">>]}),
receive #compressed{} -> ok end,
- ZlibSocket = ejabberd_socket:compress(?config(socket, Config)),
+ {ok, ZlibSocket} = ejabberd_socket:compress(?config(socket, Config)),
process_stream_features(init_stream(set_opt(socket, ZlibSocket, Config))).
auth(Config) ->