]> granicus.if.org Git - ejabberd/commitdiff
* src/mod_pubsub/mod_pubsub.erl: Fix incorrect implementation of
authorBadlop <badlop@process-one.net>
Wed, 25 Feb 2009 21:17:14 +0000 (21:17 +0000)
committerBadlop <badlop@process-one.net>
Wed, 25 Feb 2009 21:17:14 +0000 (21:17 +0000)
Pubsub payload requirements (thanks to Andy Skelton)(EJAB-823)

SVN Revision: 1921

ChangeLog
src/mod_pubsub/mod_pubsub.erl

index 3a93abae1e4af9e27a6fa2866e02bbd4a8146d31..a1a8a9114389ad74ce1bf75da42b573f8a861a58 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-02-25  Badlop  <badlop@process-one.net>
+
+       * src/mod_pubsub/mod_pubsub.erl: Fix incorrect implementation of
+       Pubsub payload requirements (thanks to Andy Skelton)(EJAB-823)
+
 2009-02-24  Badlop  <badlop@process-one.net>
 
        * src/ejabberd_listener.erl: Fix report message of 'undef' error
index f4781b2f3aad0d4334247e3deca6646fa0eb7433..f2bf6122d0e921e5f119a4b724fd45636d952175 100644 (file)
@@ -1492,6 +1492,8 @@ publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload) ->
                    PublishFeature = lists:member("publish", Features),
                    PublishModel = get_option(Options, publish_model),
                    MaxItems = max_items(Options),
+                   DeliverPayloads = get_option(Options, deliver_payloads),
+                   PersistItems = get_option(Options, persist_items),
                    PayloadCount = payload_xmlelements(Payload),
                    PayloadSize = size(term_to_binary(Payload)),
                    PayloadMaxSize = get_option(Options, max_payload_size),
@@ -1510,11 +1512,11 @@ publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload) ->
                        Payload == "" ->
                            %% Publisher attempts to publish to payload node with no payload
                            {error, extended_error(?ERR_BAD_REQUEST, "payload-required")};
-                       (MaxItems == 0) and (PayloadSize > 0) ->
-                           % Publisher attempts to publish to transient notification node with item
+                       (DeliverPayloads == 0) and (PersistItems == 0) and (PayloadSize > 0) ->
+                           %% Publisher attempts to publish to transient notification node with item
                            {error, extended_error(?ERR_BAD_REQUEST, "item-forbidden")};
-                       (MaxItems > 0) and (PayloadSize == 0) ->
-                           % Publisher attempts to publish to persistent node with no item
+                       ((DeliverPayloads == 1) or (PersistItems == 1)) and (PayloadSize == 0) ->
+                           %% Publisher attempts to publish to persistent node with no item
                            {error, extended_error(?ERR_BAD_REQUEST, "item-required")};
                        true ->
                            node_call(Type, publish_item, [Host, Node, Publisher, PublishModel, MaxItems, ItemId, Payload])