diff --git a/src/mod_avatar.erl b/src/mod_avatar.erl index e92a87594..ca41ac4c6 100644 --- a/src/mod_avatar.erl +++ b/src/mod_avatar.erl @@ -157,7 +157,7 @@ vcard_iq_publish(Acc) -> get_sm_features({error, _Error} = Acc, _From, _To, _Node, _Lang) -> Acc; get_sm_features(Acc, _From, _To, <<"">>, _Lang) -> - {result, [?NS_DISCO_INFO, ?NS_PEP_VCARD_CONVERSION_0 | + {result, [?NS_PEP_VCARD_CONVERSION_0 | case Acc of {result, Features} -> Features; empty -> [] diff --git a/src/mod_disco.erl b/src/mod_disco.erl index bac490038..1c51e40e4 100644 --- a/src/mod_disco.erl +++ b/src/mod_disco.erl @@ -367,15 +367,21 @@ get_sm_identity(Acc, _From, -spec get_sm_features(features_acc(), jid(), jid(), binary(), binary()) -> {error, stanza_error()} | {result, [binary()]}. -get_sm_features(empty, From, To, _Node, Lang) -> +get_sm_features(empty, From, To, Node, Lang) -> #jid{luser = LFrom, lserver = LSFrom} = From, #jid{luser = LTo, lserver = LSTo} = To, case {LFrom, LSFrom} of - {LTo, LSTo} -> {error, xmpp:err_item_not_found()}; - _ -> + {LTo, LSTo} -> + case Node of + <<"">> -> {result, [?NS_DISCO_INFO, ?NS_DISCO_ITEMS]}; + _ -> {error, xmpp:err_item_not_found()} + end; + _ -> Txt = <<"Query to another users is forbidden">>, {error, xmpp:err_not_allowed(Txt, Lang)} end; +get_sm_features({result, Features}, _From, _To, <<"">>, _Lang) -> + {result, [?NS_DISCO_INFO, ?NS_DISCO_ITEMS|Features]}; get_sm_features(Acc, _From, _To, _Node, _Lang) -> Acc. -spec get_user_resources(binary(), binary()) -> [disco_item()]. diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl index 41ef92989..b23e87c84 100644 --- a/src/mod_vcard.erl +++ b/src/mod_vcard.erl @@ -186,8 +186,8 @@ get_sm_features(Acc, _From, _To, Node, _Lang) -> <<"">> -> case Acc of {result, Features} -> - {result, [?NS_DISCO_INFO, ?NS_VCARD | Features]}; - empty -> {result, [?NS_DISCO_INFO, ?NS_VCARD]} + {result, [?NS_VCARD | Features]}; + empty -> {result, [?NS_VCARD]} end; _ -> Acc end.