]> granicus.if.org Git - ejabberd/commitdiff
Fix piefxis import of privacy lists (thanks to crosser)(#2412)
authorBadlop <badlop@process-one.net>
Wed, 11 Jul 2018 10:02:09 +0000 (12:02 +0200)
committerBadlop <badlop@process-one.net>
Wed, 11 Jul 2018 10:56:57 +0000 (12:56 +0200)
src/ejabberd_piefxis.erl

index 591b8dde0ed807585ed271ca01e37143fe4f9bd3..541fcad8b51012acc74c65c3a066757119d89ad9 100644 (file)
@@ -475,25 +475,42 @@ process_roster(RosterQuery, State = #state{user = U, server = S}) ->
 -spec process_privacy(privacy_query(), state()) -> {ok, state()} | {error, _}.
 process_privacy(#privacy_query{lists = Lists,
                               default = Default,
-                              active = Active} = PrivacyQuery,
+                              active = Active},
                State = #state{user = U, server = S}) ->
     JID = jid:make(U, S),
-    IQ = #iq{type = set, id = p1_rand:get_string(),
-            from = JID, to = JID, sub_els = [PrivacyQuery]},
-    case mod_privacy:process_iq(IQ) of
-       #iq{type = error} = ResIQ ->
-           #stanza_error{reason = Reason} = xmpp:get_error(ResIQ),
-           if Reason == 'item-not-found', Lists == [],
-              Active == undefined, Default /= undefined ->
+    if Lists /= undefined ->
+           process_privacy2(JID, #privacy_query{lists = Lists});
+       true ->
+           ok
+    end,
+    if Active /= undefined ->
+           process_privacy2(JID, #privacy_query{active = Active});
+       true ->
+           ok
+    end,
+    if Default /= undefined ->
+           process_privacy2(JID, #privacy_query{default = Default});
+       true ->
+           ok
+    end,
+    {ok, State}.
+
+process_privacy2(JID, PQ) ->
+        case mod_privacy:process_iq(#iq{type = set, id = p1_rand:get_string(),
+                                from = JID, to = JID,
+                                sub_els = [PQ]}) of
+           #iq{type = error} = ResIQ ->
+               #stanza_error{reason = Reason} = xmpp:get_error(ResIQ),
+               if Reason /= 'item-not-found' ->
                    %% Failed to set default list because there is no
                    %% list with such name. We shouldn't stop here.
-                   {ok, State};
-              true ->
-                   stop("Failed to write privacy: ~p", [Reason])
-            end;
-        _ ->
-            {ok, State}
-    end.
+                   stop("Failed to write default privacy: ~p", [Reason]);
+                true ->
+                   ok
+                end;
+            _ ->
+                ok
+        end.
 
 -spec process_private(private(), state()) -> {ok, state()} | {error, _}.
 process_private(Private, State = #state{user = U, server = S}) ->