aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-28 20:15:05 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-28 20:15:05 +0300
commitc3ef56702a30d7315437f80c58a13316292f4b5a (patch)
tree67dc3b8ad065c88f3eb538504307cb3f44c96b95
parentMake sure all hooks are called with proper host in ejabberd_c2s (diff)
Add s2s work-around for gmail.com
-rw-r--r--src/xmpp_stream_in.erl13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/xmpp_stream_in.erl b/src/xmpp_stream_in.erl
index 84576bd2f..7264b6d5a 100644
--- a/src/xmpp_stream_in.erl
+++ b/src/xmpp_stream_in.erl
@@ -457,9 +457,16 @@ process_stream(#stream_start{lang = Lang},
%% Do not store long language tag to avoid possible DoS/flood attacks
Txt = <<"Too long value of 'xml:lang' attribute">>,
send_pkt(State, xmpp:serr_policy_violation(Txt, DefaultLang));
-process_stream(#stream_start{to = undefined}, #{lang := Lang} = State) ->
- Txt = <<"Missing 'to' attribute">>,
- send_pkt(State, xmpp:serr_improper_addressing(Txt, Lang));
+process_stream(#stream_start{to = undefined, version = Version} = StreamStart,
+ #{lang := Lang, server := Server} = State) ->
+ if Version < {1,0} ->
+ %% Work-around for gmail servers
+ To = jid:make(Server),
+ process_stream(StreamStart#stream_start{to = To}, State);
+ true ->
+ Txt = <<"Missing 'to' attribute">>,
+ send_pkt(State, xmpp:serr_improper_addressing(Txt, Lang))
+ end;
process_stream(#stream_start{to = #jid{luser = U, lresource = R}},
#{lang := Lang} = State) when U /= <<"">>; R /= <<"">> ->
Txt = <<"Improper 'to' attribute">>,