diff --git a/ChangeLog b/ChangeLog index 79df3eb5a..a62b7c11a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-02-25 Badlop + + * src/mod_pubsub/mod_pubsub.erl: Fix incorrect implementation of + Pubsub payload requirements (thanks to Andy Skelton)(EJAB-823) + 2009-02-24 Pablo Polvorin * src/ejabberd_service.erl: Exmpp related fixed to the external @@ -9,6 +14,7 @@ to be in list() format. 2009-02-23 Pablo Polvorin + * src/ejabberd_c2s.erl, src/mod_echo.erl, src/mod_roster.erl, src/mod_roster_odbc.erl: Use exmpp_jid:to_binary/1 when possible. @@ -51,7 +57,6 @@ * src/web/ejabberd_web_admin.erl: Fix add / remove users. * src/mod_configure.erl: Fix bug in form generation. - 2009-02-19 Christophe Romain diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl index 08b17df85..2bdf8e1d0 100644 --- a/src/mod_pubsub/mod_pubsub.erl +++ b/src/mod_pubsub/mod_pubsub.erl @@ -1491,6 +1491,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), @@ -1509,11 +1511,11 @@ publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload) -> Payload == "" -> %% Publisher attempts to publish to payload node with no payload {error, extended_error('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('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('bad-request', "item-required")}; true -> node_call(Type, publish_item, [Host, Node, Publisher, PublishModel, MaxItems, ItemId, Payload])