]> granicus.if.org Git - ejabberd/commitdiff
* src/stringprep/stringprep_drv.c: Removed needless iconv.h
authorAlexey Shchepin <alexey@process-one.net>
Fri, 10 Oct 2003 19:01:11 +0000 (19:01 +0000)
committerAlexey Shchepin <alexey@process-one.net>
Fri, 10 Oct 2003 19:01:11 +0000 (19:01 +0000)
include

* src/ejabberd_c2s.erl: Added filtering of presence packets with
privacy rules

* src/mod_roster.erl (get_jid_info): Bugfix

* src/ejabberd_app.erl: Removed periodical dumping of opened ports

SVN Revision: 147

ChangeLog
src/ejabberd_app.erl
src/ejabberd_c2s.erl
src/mod_privacy.erl
src/mod_roster.erl
src/stringprep/stringprep_drv.c

index f462de5ab08331266d8b151d31b5dc5eb1515ea4..e166fcd31ff4b9e4d48ecf345b4e34b8b278cd58 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2003-10-10  Alexey Shchepin  <alexey@sevcom.net>
+
+       * src/stringprep/stringprep_drv.c: Removed needless iconv.h
+       include
+
+       * src/ejabberd_c2s.erl: Added filtering of presence packets with
+       privacy rules
+
+       * src/mod_roster.erl (get_jid_info): Bugfix
+
+       * src/ejabberd_app.erl: Removed periodical dumping of opened ports
+
 2003-10-09  Alexey Shchepin  <alexey@sevcom.net>
 
        * src/ejabberd_c2s.erl: Added authentification logging
index c9ae60e49dc35d47aa95f21d836009ec664f9e34..535c9d7e09dbf498858e15759afc74dc7b235d9a 100644 (file)
@@ -50,7 +50,7 @@ init() ->
     register(ejabberd, self()),
     %erlang:system_flag(fullsweep_after, 0),
     error_logger:logfile({open, ?LOG_PATH}),
-    timer:apply_interval(3600000, ?MODULE, dump_ports, []),
+    %timer:apply_interval(3600000, ?MODULE, dump_ports, []),
     ok = erl_ddll:load_driver(".", expat_erl),
     Port = open_port({spawn, expat_erl}, [binary]),
     loop(Port).
index b18b02d6ae0c34952ee03b732cf0e68c450e5191..66e0eb146faf24689aff6fb06b4d62984424a553 100644 (file)
@@ -499,9 +499,14 @@ session_established({xmlstreamelement, El}, StateData) ->
     NewState =
        case ToJID of
            error ->
-               Err = jlib:make_error_reply(El, ?ERR_JID_MALFORMED),
-               send_element(StateData, Err),
-               StateData;
+               case xml:get_attr_s("type", Attrs) of
+                   "error" -> StateData;
+                   "result" -> StateData;
+                   _ ->
+                       Err = jlib:make_error_reply(El, ?ERR_JID_MALFORMED),
+                       send_element(StateData, Err),
+                       StateData
+               end;
            _ ->
                case Name of
                    "presence" ->
@@ -627,7 +632,22 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
                    "unsubscribed" ->
                        {true, Attrs, StateData};
                    _ ->
-                       {true, Attrs, StateData}
+%-ifdef(PRIVACY_SUPPORT).
+                       case catch mod_privacy:check_packet(
+                                    StateData#state.user,
+                                    StateData#state.privacy_list,
+                                    {From, To, Packet},
+                                    in) of
+                           {'EXIT', _Reason} ->
+                               {true, Attrs, StateData};
+                           allow ->
+                               {true, Attrs, StateData};
+                           deny ->
+                               {false, Attrs, StateData}
+                       end
+%-elseif.
+%                      {true, Attrs, StateData}
+%-endif.
                end;
            "broadcast" ->
                ?DEBUG("broadcast~n~p~n", [Els]),
@@ -732,8 +752,8 @@ terminate(Reason, StateName, StateData) ->
             Packet = {xmlelement, "presence", [{"type", "unavailable"}], []},
             ejabberd_sm:unset_presence(StateData#state.user,
                                       StateData#state.resource),
-            presence_broadcast(From, StateData#state.pres_a, Packet),
-            presence_broadcast(From, StateData#state.pres_i, Packet)
+            presence_broadcast(StateData, From, StateData#state.pres_a, Packet),
+            presence_broadcast(StateData, From, StateData#state.pres_i, Packet)
     end,
     (StateData#state.sockmod):close(StateData#state.socket),
     ok.
@@ -842,8 +862,21 @@ process_presence_probe(From, To, StateData) ->
                and ?SETS:is_element(LFrom, StateData#state.pres_a),
            if
                Cond1 ->
-                   ejabberd_router:route(To, From,
-                                         StateData#state.pres_last);
+                   Packet = StateData#state.pres_last,
+%-ifdef(PRIVACY_SUPPORT).
+                   case catch mod_privacy:check_packet(
+                                StateData#state.user,
+                                StateData#state.privacy_list,
+                                {To, From, Packet},
+                                out) of
+                       deny ->
+                           ok;
+                       _ ->
+%-endif.
+                           ejabberd_router:route(To, From, Packet)
+%-ifdef(PRIVACY_SUPPORT).
+                   end;
+%-endif.
                Cond2 ->
                    ejabberd_router:route(To, From,
                                          {xmlelement, "presence",
@@ -860,8 +893,8 @@ presence_update(From, Packet, StateData) ->
        "unavailable" ->
            ejabberd_sm:unset_presence(StateData#state.user,
                                       StateData#state.resource),
-           presence_broadcast(From, StateData#state.pres_a, Packet),
-           presence_broadcast(From, StateData#state.pres_i, Packet),
+           presence_broadcast(StateData, From, StateData#state.pres_a, Packet),
+           presence_broadcast(StateData, From, StateData#state.pres_i, Packet),
            StateData#state{pres_last = undefined,
                            pres_a = ?SETS:new(),
                            pres_i = ?SETS:new(),
@@ -870,9 +903,11 @@ presence_update(From, Packet, StateData) ->
            NewState =
                if
                    not StateData#state.pres_invis ->
-                       presence_broadcast(From, StateData#state.pres_a,
+                       presence_broadcast(StateData, From,
+                                          StateData#state.pres_a,
                                           Packet),
-                       presence_broadcast(From, StateData#state.pres_i,
+                       presence_broadcast(StateData, From,
+                                          StateData#state.pres_i,
                                           Packet),
                        S1 = StateData#state{pres_last = undefined,
                                             pres_a = ?SETS:new(),
@@ -910,7 +945,8 @@ presence_update(From, Packet, StateData) ->
                                                pres_invis = false
                                               }, Packet);
                    true ->
-                       presence_broadcast_to_trusted(From,
+                       presence_broadcast_to_trusted(StateData,
+                                                     From,
                                                      StateData#state.pres_f,
                                                      StateData#state.pres_a,
                                                      Packet),
@@ -958,29 +994,69 @@ presence_track(From, To, Packet, StateData) ->
            ejabberd_router:route(From, To, Packet),
            StateData;
        _ ->
-           ejabberd_router:route(From, To, Packet),
+%-ifdef(PRIVACY_SUPPORT).
+           case catch mod_privacy:check_packet(
+                        StateData#state.user,
+                        StateData#state.privacy_list,
+                        {From, To, Packet},
+                        out) of
+               deny ->
+                   ok;
+               _ ->
+%-endif.
+                   ejabberd_router:route(From, To, Packet)
+%-ifdef(PRIVACY_SUPPORT).
+           end,
+%-endif.
            I = remove_element(LTo, StateData#state.pres_i),
            A = ?SETS:add_element(LTo, StateData#state.pres_a),
            StateData#state{pres_i = I,
                            pres_a = A}
     end.
 
-presence_broadcast(From, JIDSet, Packet) ->
+presence_broadcast(StateData, From, JIDSet, Packet) ->
     lists:foreach(fun(JID) ->
-                         ejabberd_router:route(
-                           From, jlib:make_jid(JID), Packet)
-                 end, ?SETS:to_list(JIDSet)).
-
-presence_broadcast_to_trusted(From, T, A, Packet) ->
-    lists:foreach(fun(JID) ->
-                         case ?SETS:is_element(JID, T) of
-                             true ->
-                                 ejabberd_router:route(
-                                   From, jlib:make_jid(JID), Packet);
+                         FJID = jlib:make_jid(JID),
+%-ifdef(PRIVACY_SUPPORT).
+                         case catch mod_privacy:check_packet(
+                                      StateData#state.user,
+                                      StateData#state.privacy_list,
+                                      {From, FJID, Packet},
+                                      out) of
+                             deny ->
+                                 ok;
                              _ ->
-                                 ok
+%-endif.
+                                 ejabberd_router:route(From, FJID, Packet)
+%-ifdef(PRIVACY_SUPPORT).
                          end
-                 end, ?SETS:to_list(A)).
+%-endif.
+                 end, ?SETS:to_list(JIDSet)).
+
+presence_broadcast_to_trusted(StateData, From, T, A, Packet) ->
+    lists:foreach(
+      fun(JID) ->
+             case ?SETS:is_element(JID, T) of
+                 true ->
+                     FJID = jlib:make_jid(JID),
+%-ifdef(PRIVACY_SUPPORT).
+                     case catch mod_privacy:check_packet(
+                                  StateData#state.user,
+                                  StateData#state.privacy_list,
+                                  {From, FJID, Packet},
+                                  out) of
+                         deny ->
+                             ok;
+                         _ ->
+%-endif.
+                             ejabberd_router:route(From, FJID, Packet)
+%-ifdef(PRIVACY_SUPPORT).
+                     end;
+%-endif.
+                 _ ->
+                     ok
+             end
+      end, ?SETS:to_list(A)).
 
 
 presence_broadcast_first(From, StateData, Packet) ->
@@ -999,14 +1075,27 @@ presence_broadcast_first(From, StateData, Packet) ->
        StateData#state.pres_invis ->
            StateData;
        true ->
-           As = ?SETS:fold(fun(JID, A) ->
-                                   ejabberd_router:route(From,
-                                                         jlib:make_jid(JID),
-                                                         Packet),
-                                   ?SETS:add_element(JID, A)
+           As = ?SETS:fold(
+                   fun(JID, A) ->
+                           FJID = jlib:make_jid(JID),
+%-ifdef(PRIVACY_SUPPORT).
+                           case catch mod_privacy:check_packet(
+                                        StateData#state.user,
+                                        StateData#state.privacy_list,
+                                        {From, FJID, Packet},
+                                        out) of
+                               deny ->
+                                   ok;
+                               _ ->
+%-endif.
+                                   ejabberd_router:route(From, FJID, Packet)
+%-ifdef(PRIVACY_SUPPORT).
                            end,
-                           StateData#state.pres_a,
-                           StateData#state.pres_f),
+%-endif.
+                           ?SETS:add_element(JID, A)
+                   end,
+                   StateData#state.pres_a,
+                   StateData#state.pres_f),
            StateData#state{pres_a = As}
     end.
 
index c0cec14c578cd5dc3da781dd3780cd8ec7245f93..31e9f99fd490fcafd7a1c4aeec23c795ab0dd18b 100644 (file)
@@ -445,8 +445,9 @@ parse_items([{xmlelement, "item", Attrs, SubEls} | Els], Res) ->
                                     error ->
                                         false;
                                     JID ->
-                                        I1#listitem{type = jid,
-                                                    value = JID}
+                                        I1#listitem{
+                                          type = jid,
+                                          value = jlib:jid_tolower(JID)}
                                 end;
                             "group" ->
                                 I1#listitem{type = group,
index 73e77b24b9ecd600796f1840672dab18ad18bec5..47609feaa22f59ee1bd64775ed2081c87bc4bc08 100644 (file)
@@ -568,7 +568,19 @@ get_jid_info(User, JID) ->
        [#roster{subscription = Subscription, groups = Groups}] ->
            {Subscription, Groups};
        _ ->
-           {none, []}
+           LRJID = jlib:jid_tolower(jlib:jid_remove_resource(JID)),
+           if
+               LRJID == LJID ->
+                   {none, []};
+               true ->
+                   case catch mnesia:dirty_read(roster, {LUser, LRJID}) of
+                       [#roster{subscription = Subscription,
+                                groups = Groups}] ->
+                           {Subscription, Groups};
+                       _ ->
+                           {none, []}
+                   end
+           end
     end.
 
 
index 43dd2b87aeab256a742dba5d1fb195341ae96e7a..13aba69bcb6741e729718c47a054dded75d408ea 100644 (file)
@@ -3,7 +3,6 @@
 #include <stdio.h>
 #include <erl_driver.h>
 #include <ei.h>
-#include <iconv.h>
 
 #include "uni_data.c"
 #include "uni_norm.c"