]> granicus.if.org Git - ejabberd/commitdiff
Check privacy of incoming IQ stanzas (EJAB-1320)
authorBadlop <badlop@process-one.net>
Sat, 16 Oct 2010 18:31:44 +0000 (20:31 +0200)
committerBadlop <badlop@process-one.net>
Sat, 16 Oct 2010 20:53:08 +0000 (22:53 +0200)
src/ejabberd_c2s.erl
src/jlib.erl

index d4b68096eccf98a30296e86d419ac5f616501a57..ba4882c88ee4b7195c7f4eeccd6221ec5e2ea18a 100644 (file)
@@ -1254,7 +1254,7 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
                                ejabberd_router:route(To, From, Err)
                        end,
                        {false, Attrs, StateData};
-                   #iq{} ->
+                   IQ when (is_record(IQ, iq)) or (IQ == reply) ->
                        case ejabberd_hooks:run_fold(
                               privacy_check_packet, StateData#state.server,
                               allow,
@@ -1265,14 +1265,16 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
                                in]) of
                            allow ->
                                {true, Attrs, StateData};
-                           deny ->
+                           deny when is_record(IQ, iq) ->
                                Err = jlib:make_error_reply(
-                                       Packet, ?ERR_FEATURE_NOT_IMPLEMENTED),
+                                       Packet, ?ERR_SERVICE_UNAVAILABLE),
                                ejabberd_router:route(To, From, Err),
+                               {false, Attrs, StateData};
+                           deny when IQ == reply ->
                                {false, Attrs, StateData}
                        end;
-                   _ ->
-                       {true, Attrs, StateData}
+                   IQ when (IQ == invalid) or (IQ == not_iq) ->
+                       {false, Attrs, StateData}
                end;
            "message" ->
                case ejabberd_hooks:run_fold(
index ce2427fa16ae9ae65537e518d99c39b048e9ebc2..e674c750ad45003d22cd12868d0464512e8994ae 100644 (file)
@@ -364,6 +364,8 @@ get_iq_namespace({xmlelement, Name, _Attrs, Els}) when Name == "iq" ->
 get_iq_namespace(_) ->
     "".
 
+%% @spec (xmlelement()) -> iq() | reply | invalid | not_iq
+
 iq_query_info(El) ->
     iq_info_internal(El, request).