]> granicus.if.org Git - ejabberd/commitdiff
Do not try to retreive vCards via local SM for foreign JIDs
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Wed, 13 Nov 2013 10:40:56 +0000 (20:40 +1000)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Fri, 9 May 2014 17:26:55 +0000 (21:26 +0400)
src/mod_shared_roster.erl

index e572a3a4d11e23a5c43b6c16e4ec43885cece1bb..8a1423c765fe37918dbac1f22f3a851133d71ed3 100644 (file)
@@ -187,17 +187,24 @@ get_rosteritem_name([], _, _) -> <<"">>;
 get_rosteritem_name([ModVcard], U, S) ->
     From = jlib:make_jid(<<"">>, S, jlib:atom_to_binary(?MODULE)),
     To = jlib:make_jid(U, S, <<"">>),
-    IQ = {iq, <<"">>, get, <<"vcard-temp">>, <<"">>,
-         #xmlel{name = <<"vCard">>,
-                attrs = [{<<"xmlns">>, <<"vcard-temp">>}],
-                children = []}},
-    IQ_Vcard = ModVcard:process_sm_iq(From, To, IQ),
-    try get_rosteritem_name_vcard(IQ_Vcard#iq.sub_el) catch
-      E1:E2 ->
-         ?ERROR_MSG("Error ~p found when trying to get the "
-                    "vCard of ~s@~s in ~p:~n ~p",
-                    [E1, U, S, ModVcard, E2]),
-         <<"">>
+    case lists:member(To#jid.lserver, ?MYHOSTS) of
+        true ->
+            IQ = {iq, <<"">>, get, <<"vcard-temp">>, <<"">>,
+                  #xmlel{name = <<"vCard">>,
+                         attrs = [{<<"xmlns">>, <<"vcard-temp">>}],
+                         children = []}},
+            IQ_Vcard = ModVcard:process_sm_iq(From, To, IQ),
+            case catch get_rosteritem_name_vcard(IQ_Vcard#iq.sub_el) of
+                {'EXIT', Err} ->
+                    ?ERROR_MSG("Error found when trying to get the "
+                               "vCard of ~s@~s in ~p:~n ~p",
+                               [U, S, ModVcard, Err]),
+                    <<"">>;
+                NickName ->
+                    NickName
+            end;
+        false ->
+            <<"">>
     end.
 
 get_rosteritem_name_vcard([]) -> <<"">>;