]> granicus.if.org Git - ejabberd/commitdiff
Don't route error/groupchat messages to bare JIDs
authorHolger Weiss <holger@zedat.fu-berlin.de>
Tue, 24 Mar 2015 23:52:49 +0000 (00:52 +0100)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Tue, 24 Mar 2015 23:52:49 +0000 (00:52 +0100)
As per RFC 6121, drop error messages that were sent to bare JIDs, and
return an error if a groupchat message was sent to a bare JID.

src/ejabberd_sm.erl

index ebcf6fa58573b303258934cf109de12953c626fc..478de69c092977453368ef95940c99d34157a0ac 100644 (file)
@@ -516,7 +516,18 @@ do_route(From, To, #xmlel{} = Packet) ->
                                     PResources);
                   true -> ok
                end;
-           <<"message">> -> route_message(From, To, Packet);
+           <<"message">> ->
+               case xml:get_attr_s(<<"type">>, Attrs) of
+                 <<"chat">> -> route_message(From, To, Packet);
+                 <<"headline">> -> route_message(From, To, Packet);
+                 <<"error">> -> ok;
+                 <<"groupchat">> ->
+                     Err = jlib:make_error_reply(Packet,
+                                                 ?ERR_SERVICE_UNAVAILABLE),
+                     ejabberd_router:route(To, From, Err);
+                 _ ->
+                     route_message(From, To, Packet)
+               end;
            <<"iq">> -> process_iq(From, To, Packet);
            _ -> ok
          end;