]> granicus.if.org Git - ejabberd/commitdiff
First check occupant existence, later check the message
authorBadlop <badlop@process-one.net>
Sun, 4 Sep 2011 11:28:32 +0000 (13:28 +0200)
committerBadlop <badlop@process-one.net>
Sun, 4 Sep 2011 11:28:32 +0000 (13:28 +0200)
src/mod_muc/mod_muc_room.erl

index e31f565aaf50b52dc175b8a5103a4b94f6f84ab3..6ee609f153d62b47ced52b388f3ce5ee6d8dd8ca 100644 (file)
@@ -426,39 +426,38 @@ normal_state({route, From, ToNick,
                                ToNick),
                              From, Err);
                        _ ->
-                           ToJIDs = find_jids_by_nick(ToNick, StateData),
-                           SrcIsVisitor = is_visitor(From, StateData),
-                           DstIsModerator = is_moderator(hd(ToJIDs), StateData),
-                           PmFromVisitors = (StateData#state.config)#config.allow_private_messages_from_visitors,
-                           if SrcIsVisitor == false;
-                              PmFromVisitors == anyone;
-                              (PmFromVisitors == moderators) and (DstIsModerator) ->
-                                   case ToJIDs of
-                                       false ->
-                                           ErrText = "Recipient is not in the conference room",
-                                           Err = jlib:make_error_reply(
-                                                   Packet, ?ERRT_ITEM_NOT_FOUND(Lang, ErrText)),
-                                           ejabberd_router:route(
-                                             jlib:jid_replace_resource(
-                                               StateData#state.jid,
-                                               ToNick),
-                                             From, Err);
-                                       _ ->
-                                           {ok, #user{nick = FromNick}} =
-                                               ?DICT:find(jlib:jid_tolower(From),
-                                                          StateData#state.users),
-                                           FromNickJID = jlib:jid_replace_resource(StateData#state.jid, FromNick),
-                                           [ejabberd_router:route(FromNickJID, ToJID, Packet) || ToJID <- ToJIDs]
-                                   end;
-                              true ->
-                                   ErrText = "It is not allowed to send private messages",
+                           case find_jids_by_nick(ToNick, StateData) of
+                               false ->
+                                   ErrText = "Recipient is not in the conference room",
                                    Err = jlib:make_error_reply(
-                                           Packet, ?ERRT_FORBIDDEN(Lang, ErrText)),
+                                           Packet, ?ERRT_ITEM_NOT_FOUND(Lang, ErrText)),
                                    ejabberd_router:route(
                                      jlib:jid_replace_resource(
                                        StateData#state.jid,
                                        ToNick),
-                                     From, Err)
+                                     From, Err);
+                               ToJIDs ->
+                                   SrcIsVisitor = is_visitor(From, StateData),
+                                   DstIsModerator = is_moderator(hd(ToJIDs), StateData),
+                                   PmFromVisitors = (StateData#state.config)#config.allow_private_messages_from_visitors,
+                                   if SrcIsVisitor == false;
+                                      PmFromVisitors == anyone;
+                                      (PmFromVisitors == moderators) and (DstIsModerator) ->
+                                           {ok, #user{nick = FromNick}} =
+                                               ?DICT:find(jlib:jid_tolower(From),
+                                                          StateData#state.users),
+                                           FromNickJID = jlib:jid_replace_resource(StateData#state.jid, FromNick),
+                                           [ejabberd_router:route(FromNickJID, ToJID, Packet) || ToJID <- ToJIDs];
+                                      true ->
+                                           ErrText = "It is not allowed to send private messages",
+                                           Err = jlib:make_error_reply(
+                                                   Packet, ?ERRT_FORBIDDEN(Lang, ErrText)),
+                                           ejabberd_router:route(
+                                             jlib:jid_replace_resource(
+                                               StateData#state.jid,
+                                               ToNick),
+                                             From, Err)
+                                   end
                            end
                    end;
                {true, false} ->