aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_c2s.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 43a8a1084..361751f66 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -256,16 +256,30 @@ wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
_ ->
Header = io_lib:format(
?STREAM_HEADER,
- [StateData#state.streamid, Server, "", DefaultLang]),
- send_text(StateData, Header),
- {next_state, wait_for_auth,
- StateData#state{server = Server,
- lang = Lang}}
+ [StateData#state.streamid, Server, "",
+ DefaultLang]),
+ if
+ (not StateData#state.tls_enabled) and
+ StateData#state.tls_required ->
+ send_text(StateData,
+ Header ++
+ ?POLICY_VIOLATION_ERR(
+ Lang,
+ "Use of STARTTLS required") ++
+ ?STREAM_TRAILER),
+ {stop, normal, StateData};
+ true ->
+ send_text(StateData, Header),
+ {next_state, wait_for_auth,
+ StateData#state{server = Server,
+ lang = Lang}}
+ end
end;
_ ->
Header = io_lib:format(
?STREAM_HEADER,
- [StateData#state.streamid, ?MYNAME, "", DefaultLang]),
+ [StateData#state.streamid, ?MYNAME, "",
+ DefaultLang]),
send_text(StateData,
Header ++ ?HOST_UNKNOWN_ERR ++ ?STREAM_TRAILER),
{stop, normal, StateData}